summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/classes-global/base.bbclass18
-rw-r--r--meta/classes-global/logging.bbclass10
-rw-r--r--meta/classes-global/sanity.bbclass25
-rw-r--r--meta/classes-global/staging.bbclass4
-rw-r--r--meta/classes-global/utils.bbclass10
-rw-r--r--meta/classes-recipe/grub-efi-cfg.bbclass8
-rw-r--r--meta/classes-recipe/image.bbclass1
-rw-r--r--meta/classes-recipe/kernel-fitimage.bbclass53
-rw-r--r--meta/classes-recipe/kernel-yocto.bbclass18
-rw-r--r--meta/classes-recipe/populate_sdk_base.bbclass9
-rw-r--r--meta/classes-recipe/populate_sdk_ext.bbclass2
-rw-r--r--meta/classes-recipe/rust-common.bbclass2
-rw-r--r--meta/classes-recipe/systemd.bbclass118
-rw-r--r--meta/classes-recipe/uboot-extlinux-config.bbclass2
-rw-r--r--meta/classes-recipe/uboot-sign.bbclass26
-rw-r--r--meta/classes/create-spdx-2.2.bbclass10
-rw-r--r--meta/classes/cve-check.bbclass13
-rw-r--r--meta/classes/go-vendor.bbclass8
-rw-r--r--meta/classes/multilib_global.bbclass4
-rw-r--r--meta/conf/bitbake.conf7
-rw-r--r--meta/conf/distro/include/default-providers.inc2
-rw-r--r--meta/conf/distro/include/tcmode-default.inc15
-rw-r--r--meta/conf/distro/include/time64.inc2
-rw-r--r--meta/conf/image-fitimage.conf53
-rw-r--r--meta/conf/machine/include/riscv/qemuriscv.inc1
-rw-r--r--meta/conf/toolchain/build-gcc.inc15
-rw-r--r--meta/conf/toolchain/clang.inc26
-rw-r--r--meta/conf/toolchain/gcc.inc24
-rw-r--r--meta/files/overlayfs-create-dirs.service.in3
-rw-r--r--meta/lib/oe/classextend.py2
-rw-r--r--meta/lib/oe/sbom30.py2
-rw-r--r--meta/lib/oe/spdx30.py146
-rw-r--r--meta/lib/oe/spdx30_tasks.py61
-rw-r--r--meta/lib/oe/spdx_common.py2
-rw-r--r--meta/lib/oeqa/sdk/context.py12
-rw-r--r--meta/lib/oeqa/selftest/cases/buildoptions.py5
-rw-r--r--meta/lib/oeqa/selftest/cases/recipetool.py212
-rw-r--r--meta/lib/oeqa/selftest/cases/runtime_test.py2
-rw-r--r--meta/lib/oeqa/utils/sshcontrol.py6
-rw-r--r--meta/recipes-bsp/efivar/efivar_39.bb2
-rw-r--r--meta/recipes-bsp/grub/grub-bootconf_1.00.bb2
-rw-r--r--meta/recipes-connectivity/ofono/ofono/CVE-2024-7539.patch88
-rw-r--r--meta/recipes-connectivity/ofono/ofono/CVE-2024-7540_CVE-2024-7541_CVE-2024-7542.patch52
-rw-r--r--meta/recipes-connectivity/ofono/ofono_2.14.bb2
-rw-r--r--meta/recipes-connectivity/openssl/openssl_3.4.0.bb3
-rw-r--r--meta/recipes-core/base-files/base-files_3.0.14.bb23
-rw-r--r--meta/recipes-core/busybox/busybox.inc2
-rw-r--r--meta/recipes-core/images/build-appliance-image_15.0.0.bb2
-rw-r--r--meta/recipes-core/meta/cve-update-db-native.bb405
-rw-r--r--meta/recipes-core/ncurses/ncurses.inc1
-rwxr-xr-xmeta/recipes-core/systemd/systemd-systemctl/systemctl42
-rw-r--r--meta/recipes-core/systemd/systemd/0001-Do-not-create-var-log-README.patch30
-rw-r--r--meta/recipes-core/systemd/systemd_257.1.bb5
-rw-r--r--meta/recipes-core/udev/eudev/0001-random-util.c-sync-dev_urandom-implementation-to-sys.patch138
-rw-r--r--meta/recipes-core/udev/eudev_3.2.14.bb1
-rw-r--r--meta/recipes-core/util-linux/util-linux.inc2
-rw-r--r--meta/recipes-devtools/binutils/binutils-cross-canadian.inc2
-rw-r--r--meta/recipes-devtools/cmake/cmake-native_3.31.4.bb (renamed from meta/recipes-devtools/cmake/cmake-native_3.31.3.bb)0
-rw-r--r--meta/recipes-devtools/cmake/cmake.inc2
-rw-r--r--meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch2
-rw-r--r--meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch2
-rw-r--r--meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch2
-rw-r--r--meta/recipes-devtools/cmake/cmake_3.31.4.bb (renamed from meta/recipes-devtools/cmake/cmake_3.31.3.bb)0
-rw-r--r--meta/recipes-devtools/fmt/files/fix-gcc9.patch26
-rw-r--r--meta/recipes-devtools/fmt/fmt_11.1.1.bb3
-rw-r--r--meta/recipes-devtools/gcc/gcc-cross-canadian.inc2
-rw-r--r--meta/recipes-devtools/gcc/gcc-crosssdk.inc4
-rw-r--r--meta/recipes-devtools/gcc/gcc-runtime.inc2
-rw-r--r--meta/recipes-devtools/gcc/gcc-sanitizers.inc4
-rw-r--r--meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch37
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross-canadian.inc2
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross-canadian_16.1.bb (renamed from meta/recipes-devtools/gdb/gdb-cross-canadian_15.2.bb)0
-rw-r--r--meta/recipes-devtools/gdb/gdb-cross_16.1.bb (renamed from meta/recipes-devtools/gdb/gdb-cross_15.2.bb)0
-rw-r--r--meta/recipes-devtools/gdb/gdb.inc3
-rw-r--r--meta/recipes-devtools/gdb/gdb/0001-Fix-Wenum-constexpr-conversion-in-enum-flags.h.patch313
-rw-r--r--meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch4
-rw-r--r--meta/recipes-devtools/gdb/gdb_16.1.bb (renamed from meta/recipes-devtools/gdb/gdb_15.2.bb)0
-rw-r--r--meta/recipes-devtools/go/go-1.22.11.inc (renamed from meta/recipes-devtools/go/go-1.22.8.inc)2
-rw-r--r--meta/recipes-devtools/go/go-binary-native_1.22.11.bb (renamed from meta/recipes-devtools/go/go-binary-native_1.22.8.bb)6
-rw-r--r--meta/recipes-devtools/go/go-cross-canadian.inc2
-rw-r--r--meta/recipes-devtools/go/go-cross-canadian_1.22.11.bb (renamed from meta/recipes-devtools/go/go-cross-canadian_1.22.8.bb)0
-rw-r--r--meta/recipes-devtools/go/go-cross_1.22.11.bb (renamed from meta/recipes-devtools/go/go-cross_1.22.8.bb)0
-rw-r--r--meta/recipes-devtools/go/go-crosssdk.inc2
-rw-r--r--meta/recipes-devtools/go/go-crosssdk_1.22.11.bb (renamed from meta/recipes-devtools/go/go-crosssdk_1.22.8.bb)0
-rw-r--r--meta/recipes-devtools/go/go-runtime_1.22.11.bb (renamed from meta/recipes-devtools/go/go-runtime_1.22.8.bb)0
-rw-r--r--meta/recipes-devtools/go/go_1.22.11.bb (renamed from meta/recipes-devtools/go/go_1.22.8.bb)0
-rw-r--r--meta/recipes-devtools/llvm/llvm_19.1.6.bb2
-rw-r--r--meta/recipes-devtools/meson/meson_1.7.0.bb (renamed from meta/recipes-devtools/meson/meson_1.6.1.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-cffi_1.17.1.bb2
-rw-r--r--meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch2
-rw-r--r--meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch2
-rw-r--r--meta/recipes-devtools/python/python3-numpy_2.2.2.bb (renamed from meta/recipes-devtools/python/python3-numpy_2.2.1.bb)2
-rw-r--r--meta/recipes-devtools/python/python3/python3-manifest.json2
-rw-r--r--meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch69
-rw-r--r--meta/recipes-devtools/rsync/files/determism.patch20
-rw-r--r--meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch10
-rw-r--r--meta/recipes-devtools/rsync/rsync_3.4.1.bb (renamed from meta/recipes-devtools/rsync/rsync_3.3.0.bb)2
-rw-r--r--meta/recipes-devtools/rust/cargo_1.81.0.bb15
-rw-r--r--meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch2
-rw-r--r--meta/recipes-devtools/rust/rust-cross-canadian.inc29
-rw-r--r--meta/recipes-devtools/rust/rust_1.81.0.bb13
-rw-r--r--meta/recipes-devtools/tcltk/tcl_9.0.1.bb2
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch33
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb1
-rw-r--r--meta/recipes-extended/man-db/files/flex.patch36
-rw-r--r--meta/recipes-extended/man-db/man-db_2.13.0.bb1
-rw-r--r--meta/recipes-extended/man-pages/man-pages_6.9.1.bb2
-rw-r--r--meta/recipes-extended/timezone/timezone.inc6
-rw-r--r--meta/recipes-extended/timezone/tzcode-native.bb2
-rw-r--r--meta/recipes-gnome/libsecret/libsecret/0001-meson-add-option-to-disable-pam-tests.patch2
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-CMakeLists.txt-do-not-obtain-wayland-scanner-path-fr.patch2
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch2
-rw-r--r--meta/recipes-graphics/piglit/piglit/0001-tests-egl-spec-make-egl_ext_surface_compression-cond.patch2
-rw-r--r--meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch2
-rw-r--r--meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch2
-rw-r--r--meta/recipes-graphics/piglit/piglit_git.bb2
-rw-r--r--meta/recipes-graphics/xorg-font/font-util_1.4.1.bb2
-rw-r--r--meta/recipes-graphics/xorg-lib/libxfont2_2.0.7.bb2
-rw-r--r--meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb4
-rw-r--r--meta/recipes-kernel/linux-firmware/linux-firmware_20250109.bb (renamed from meta/recipes-kernel/linux-firmware/linux-firmware_20241210.bb)417
-rw-r--r--meta/recipes-kernel/lttng/lttng-tools_2.13.14.bb2
-rw-r--r--meta/recipes-rt/rt-tests/files/0001-sched_attr-Do-not-define-for-glibc-2.41.patch44
-rw-r--r--meta/recipes-rt/rt-tests/rt-tests_git.bb1
-rw-r--r--meta/recipes-support/gnupg/gnupg/0001-fix-compile-failure-with-musl.patch33
-rw-r--r--meta/recipes-support/gnupg/gnupg_2.5.2.bb1
-rw-r--r--meta/recipes-support/libbsd/libbsd_0.12.2.bb7
126 files changed, 1488 insertions, 1457 deletions
diff --git a/meta/classes-global/base.bbclass b/meta/classes-global/base.bbclass
index 3d623c80a9..dbbf6cef8c 100644
--- a/meta/classes-global/base.bbclass
+++ b/meta/classes-global/base.bbclass
@@ -542,24 +542,6 @@ python () {
542 d.setVarFlag('do_devshell', 'fakeroot', '1') 542 d.setVarFlag('do_devshell', 'fakeroot', '1')
543 d.appendVarFlag('do_devshell', 'depends', ' virtual/fakeroot-native:do_populate_sysroot') 543 d.appendVarFlag('do_devshell', 'depends', ' virtual/fakeroot-native:do_populate_sysroot')
544 544
545 # Horrible duplication with allarch as we need to set this before expanding DEPENDS below.
546 if d.getVar("PACKAGE_ARCH") == "all":
547 d.setVar("INHIBIT_DEFAULT_DEPS", "1")
548
549 # Handle recipe level PREFERRED_PROVIDERs
550 depends = (d.getVar("DEPENDS") or "").split()
551 virtprovs = (d.getVar("RECIPE_VIRTUAL_PROVIDERS") or "").split()
552 newdeps = []
553 for dep in depends:
554 if dep in virtprovs:
555 newdep = d.getVar("PREFERRED_PROVIDER_" + dep)
556 if not newdep:
557 bb.fatal("Error, recipe virtual provider PREFERRED_PROVIDER_%s not set" % dep)
558 newdeps.append(newdep)
559 else:
560 newdeps.append(dep)
561 d.setVar("DEPENDS", " ".join(newdeps))
562
563 need_machine = d.getVar('COMPATIBLE_MACHINE') 545 need_machine = d.getVar('COMPATIBLE_MACHINE')
564 if need_machine and not bb.utils.to_boolean(d.getVar('PARSE_ALL_RECIPES', False)): 546 if need_machine and not bb.utils.to_boolean(d.getVar('PARSE_ALL_RECIPES', False)):
565 import re 547 import re
diff --git a/meta/classes-global/logging.bbclass b/meta/classes-global/logging.bbclass
index ce03abfe42..136f1e1733 100644
--- a/meta/classes-global/logging.bbclass
+++ b/meta/classes-global/logging.bbclass
@@ -32,6 +32,16 @@ bbnote() {
32 fi 32 fi
33} 33}
34 34
35# Notify the user of a noteworthy condition.
36# Output: logs console
37bbverbnote() {
38 if [ -p ${LOGFIFO} ]; then
39 printf "%b\0" "bbverbnote $*" > ${LOGFIFO}
40 else
41 echo "NOTE: $*"
42 fi
43}
44
35# Print a warning to the log. Warnings are non-fatal, and do not 45# Print a warning to the log. Warnings are non-fatal, and do not
36# indicate a build failure. 46# indicate a build failure.
37# Output: logs console 47# Output: logs console
diff --git a/meta/classes-global/sanity.bbclass b/meta/classes-global/sanity.bbclass
index 7b8a497d5a..66693fc9b9 100644
--- a/meta/classes-global/sanity.bbclass
+++ b/meta/classes-global/sanity.bbclass
@@ -602,6 +602,28 @@ def drop_v14_cross_builds(d):
602 bb.utils.remove(stamp + "*") 602 bb.utils.remove(stamp + "*")
603 bb.utils.remove(workdir, recurse = True) 603 bb.utils.remove(workdir, recurse = True)
604 604
605def check_cpp_toolchain(d):
606 """
607 it checks if the c++ compiling and linking to libstdc++ works properly in the native system
608 """
609 import shlex
610 import subprocess
611
612 cpp_code = """
613 #include <iostream>
614 int main() {
615 std::cout << "Hello, World!" << std::endl;
616 return 0;
617 }
618 """
619
620 cmd = shlex.split(d.getVar("BUILD_CXX")) + ["-x", "c++","-", "-o", "/dev/null", "-lstdc++"]
621 try:
622 subprocess.run(cmd, input=cpp_code, capture_output=True, text=True, check=True)
623 return None
624 except subprocess.CalledProcessError as e:
625 return f"An unexpected issue occurred during the C++ toolchain check: {str(e)}"
626
605def sanity_handle_abichanges(status, d): 627def sanity_handle_abichanges(status, d):
606 # 628 #
607 # Check the 'ABI' of TMPDIR 629 # Check the 'ABI' of TMPDIR
@@ -770,6 +792,9 @@ def check_sanity_version_change(status, d):
770 # macOS with default HFS+ file system) 792 # macOS with default HFS+ file system)
771 status.addresult(check_case_sensitive(tmpdir, "TMPDIR")) 793 status.addresult(check_case_sensitive(tmpdir, "TMPDIR"))
772 794
795 # Check if linking with lstdc++ is failing
796 status.addresult(check_cpp_toolchain(d))
797
773def sanity_check_locale(d): 798def sanity_check_locale(d):
774 """ 799 """
775 Currently bitbake switches locale to en_US.UTF-8 so check that this locale actually exists. 800 Currently bitbake switches locale to en_US.UTF-8 so check that this locale actually exists.
diff --git a/meta/classes-global/staging.bbclass b/meta/classes-global/staging.bbclass
index 55581e129b..ce1b9f829e 100644
--- a/meta/classes-global/staging.bbclass
+++ b/meta/classes-global/staging.bbclass
@@ -128,8 +128,8 @@ do_populate_sysroot[vardeps] += "${SYSROOT_PREPROCESS_FUNCS}"
128do_populate_sysroot[vardepsexclude] += "BB_MULTI_PROVIDER_ALLOWED" 128do_populate_sysroot[vardepsexclude] += "BB_MULTI_PROVIDER_ALLOWED"
129 129
130POPULATESYSROOTDEPS = "" 130POPULATESYSROOTDEPS = ""
131POPULATESYSROOTDEPS:class-target = "${PREFERRED_PROVIDER_virtual/cross-binutils}:do_populate_sysroot" 131POPULATESYSROOTDEPS:class-target = "virtual/cross-binutils:do_populate_sysroot"
132POPULATESYSROOTDEPS:class-nativesdk = "${PREFERRED_PROVIDER_virtual/cross-binutils}:do_populate_sysroot" 132POPULATESYSROOTDEPS:class-nativesdk = "virtual/nativesdk-cross-binutils:do_populate_sysroot"
133do_populate_sysroot[depends] += "${POPULATESYSROOTDEPS}" 133do_populate_sysroot[depends] += "${POPULATESYSROOTDEPS}"
134 134
135SSTATETASKS += "do_populate_sysroot" 135SSTATETASKS += "do_populate_sysroot"
diff --git a/meta/classes-global/utils.bbclass b/meta/classes-global/utils.bbclass
index c9cae8930f..530a490ea8 100644
--- a/meta/classes-global/utils.bbclass
+++ b/meta/classes-global/utils.bbclass
@@ -367,3 +367,13 @@ check_git_config() {
367 git config --local user.name "${PATCH_GIT_USER_NAME}" 367 git config --local user.name "${PATCH_GIT_USER_NAME}"
368 fi 368 fi
369} 369}
370
371# Sets fixed git committer and author for reproducible commits
372reproducible_git_committer_author() {
373 export GIT_COMMITTER_NAME="${PATCH_GIT_USER_NAME}"
374 export GIT_COMMITTER_EMAIL="${PATCH_GIT_USER_EMAIL}"
375 export GIT_COMMITTER_DATE="$(date -d @${SOURCE_DATE_EPOCH})"
376 export GIT_AUTHOR_NAME="${PATCH_GIT_USER_NAME}"
377 export GIT_AUTHOR_EMAIL="${PATCH_GIT_USER_EMAIL}"
378 export GIT_AUTHOR_DATE="$(date -d @${SOURCE_DATE_EPOCH})"
379}
diff --git a/meta/classes-recipe/grub-efi-cfg.bbclass b/meta/classes-recipe/grub-efi-cfg.bbclass
index 52e85a3bb0..9a5cb99c52 100644
--- a/meta/classes-recipe/grub-efi-cfg.bbclass
+++ b/meta/classes-recipe/grub-efi-cfg.bbclass
@@ -23,6 +23,7 @@ GRUB_TIMEOUT ?= "10"
23GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1" 23GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
24 24
25GRUB_ROOT ?= "${ROOT}" 25GRUB_ROOT ?= "${ROOT}"
26GRUB_TITLE ?= ""
26APPEND ?= "" 27APPEND ?= ""
27 28
28# Uses MACHINE specific KERNEL_IMAGETYPE 29# Uses MACHINE specific KERNEL_IMAGETYPE
@@ -91,10 +92,15 @@ python build_efi_cfg() {
91 if not overrides: 92 if not overrides:
92 bb.fatal('OVERRIDES not defined') 93 bb.fatal('OVERRIDES not defined')
93 94
95 localdata.need_overrides()
94 localdata.setVar('OVERRIDES', 'grub_' + label + ':' + overrides) 96 localdata.setVar('OVERRIDES', 'grub_' + label + ':' + overrides)
95 97
96 for btype in btypes: 98 for btype in btypes:
97 cfgfile.write('\nmenuentry \'%s%s\'{\n' % (label, btype[0])) 99 title = localdata.getVar('GRUB_TITLE')
100 if not title or len(title) == 0:
101 title = label
102
103 cfgfile.write('\nmenuentry \'%s%s\'{\n' % (title, btype[0]))
98 lb = label 104 lb = label
99 if label == "install": 105 if label == "install":
100 lb = "install-efi" 106 lb = "install-efi"
diff --git a/meta/classes-recipe/image.bbclass b/meta/classes-recipe/image.bbclass
index 84a2017eb5..f08818db03 100644
--- a/meta/classes-recipe/image.bbclass
+++ b/meta/classes-recipe/image.bbclass
@@ -702,6 +702,7 @@ reproducible_final_image_task () {
702systemd_preset_all () { 702systemd_preset_all () {
703 if [ -e ${IMAGE_ROOTFS}${root_prefix}/lib/systemd/systemd ]; then 703 if [ -e ${IMAGE_ROOTFS}${root_prefix}/lib/systemd/systemd ]; then
704 systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only preset-all 704 systemctl --root="${IMAGE_ROOTFS}" --preset-mode=enable-only preset-all
705 systemctl --root="${IMAGE_ROOTFS}" --global --preset-mode=enable-only preset-all
705 fi 706 fi
706} 707}
707 708
diff --git a/meta/classes-recipe/kernel-fitimage.bbclass b/meta/classes-recipe/kernel-fitimage.bbclass
index 67c98adb23..fe076badfa 100644
--- a/meta/classes-recipe/kernel-fitimage.bbclass
+++ b/meta/classes-recipe/kernel-fitimage.bbclass
@@ -5,6 +5,7 @@
5# 5#
6 6
7inherit kernel-uboot kernel-artifact-names uboot-config 7inherit kernel-uboot kernel-artifact-names uboot-config
8require conf/image-fitimage.conf
8 9
9def get_fit_replacement_type(d): 10def get_fit_replacement_type(d):
10 kerneltypes = d.getVar('KERNEL_IMAGETYPES') or "" 11 kerneltypes = d.getVar('KERNEL_IMAGETYPES') or ""
@@ -52,58 +53,6 @@ python __anonymous () {
52 d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree") 53 d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree")
53} 54}
54 55
55
56# Description string
57FIT_DESC ?= "Kernel fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}"
58
59# Kernel fitImage Hash Algo
60FIT_HASH_ALG ?= "sha256"
61
62# Kernel fitImage Signature Algo
63FIT_SIGN_ALG ?= "rsa2048"
64
65# Kernel / U-Boot fitImage Padding Algo
66FIT_PAD_ALG ?= "pkcs-1.5"
67
68# Generate keys for signing Kernel fitImage
69FIT_GENERATE_KEYS ?= "0"
70
71# Size of private keys in number of bits
72FIT_SIGN_NUMBITS ?= "2048"
73
74# args to openssl genrsa (Default is just the public exponent)
75FIT_KEY_GENRSA_ARGS ?= "-F4"
76
77# args to openssl req (Default is -batch for non interactive mode and
78# -new for new certificate)
79FIT_KEY_REQ_ARGS ?= "-batch -new"
80
81# Standard format for public key certificate
82FIT_KEY_SIGN_PKCS ?= "-x509"
83
84# Sign individual images as well
85FIT_SIGN_INDIVIDUAL ?= "0"
86
87FIT_CONF_PREFIX ?= "conf-"
88FIT_CONF_PREFIX[doc] = "Prefix to use for FIT configuration node name"
89
90FIT_SUPPORTED_INITRAMFS_FSTYPES ?= "cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst cpio.gz ext2.gz cpio"
91
92# Allow user to select the default DTB for FIT image when multiple dtb's exists.
93FIT_CONF_DEFAULT_DTB ?= ""
94
95# length of address in number of <u32> cells
96# ex: 1 32bits address, 2 64bits address
97FIT_ADDRESS_CELLS ?= "1"
98
99# Keys used to sign individually image nodes.
100# The keys to sign image nodes must be different from those used to sign
101# configuration nodes, otherwise the "required" property, from
102# UBOOT_DTB_BINARY, will be set to "conf", because "conf" prevails on "image".
103# Then the images signature checking will not be mandatory and no error will be
104# raised in case of failure.
105# UBOOT_SIGN_IMG_KEYNAME = "dev2" # keys name in keydir (eg. "dev2.crt", "dev2.key")
106
107# 56#
108# Emit the fitImage ITS header 57# Emit the fitImage ITS header
109# 58#
diff --git a/meta/classes-recipe/kernel-yocto.bbclass b/meta/classes-recipe/kernel-yocto.bbclass
index b8ace98787..cef6b9ec3f 100644
--- a/meta/classes-recipe/kernel-yocto.bbclass
+++ b/meta/classes-recipe/kernel-yocto.bbclass
@@ -150,10 +150,6 @@ do_kernel_metadata() {
150 # from the source tree, into a common location and normalized "defconfig" name, 150 # from the source tree, into a common location and normalized "defconfig" name,
151 # where the rest of the process will include and incoroporate it into the build 151 # where the rest of the process will include and incoroporate it into the build
152 # 152 #
153 # If the fetcher has already placed a defconfig in UNPACKDIR (from the SRC_URI),
154 # we don't overwrite it, but instead warn the user that SRC_URI defconfigs take
155 # precendence.
156 #
157 if [ -n "${KBUILD_DEFCONFIG}" ]; then 153 if [ -n "${KBUILD_DEFCONFIG}" ]; then
158 if [ -f "${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG}" ]; then 154 if [ -f "${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG}" ]; then
159 if [ -f "${UNPACKDIR}/defconfig" ]; then 155 if [ -f "${UNPACKDIR}/defconfig" ]; then
@@ -163,10 +159,8 @@ do_kernel_metadata() {
163 if [ $? -ne 0 ]; then 159 if [ $? -ne 0 ]; then
164 bbdebug 1 "detected SRC_URI or patched defconfig in UNPACKDIR. ${KBUILD_DEFCONFIG} copied over it" 160 bbdebug 1 "detected SRC_URI or patched defconfig in UNPACKDIR. ${KBUILD_DEFCONFIG} copied over it"
165 fi 161 fi
166 cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${UNPACKDIR}/defconfig
167 else
168 cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${UNPACKDIR}/defconfig
169 fi 162 fi
163 cp -f ${S}/arch/${ARCH}/configs/${KBUILD_DEFCONFIG} ${UNPACKDIR}/defconfig
170 in_tree_defconfig="${UNPACKDIR}/defconfig" 164 in_tree_defconfig="${UNPACKDIR}/defconfig"
171 else 165 else
172 bbfatal "A KBUILD_DEFCONFIG '${KBUILD_DEFCONFIG}' was specified, but not present in the source tree (${S}/arch/${ARCH}/configs/)" 166 bbfatal "A KBUILD_DEFCONFIG '${KBUILD_DEFCONFIG}' was specified, but not present in the source tree (${S}/arch/${ARCH}/configs/)"
@@ -352,6 +346,9 @@ do_patch() {
352 cd ${S} 346 cd ${S}
353 347
354 check_git_config 348 check_git_config
349 if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
350 reproducible_git_committer_author
351 fi
355 meta_dir=$(kgit --meta) 352 meta_dir=$(kgit --meta)
356 (cd ${meta_dir}; ln -sf patch.queue series) 353 (cd ${meta_dir}; ln -sf patch.queue series)
357 if [ -f "${meta_dir}/series" ]; then 354 if [ -f "${meta_dir}/series" ]; then
@@ -434,6 +431,9 @@ do_kernel_checkout() {
434 rm -f .gitignore 431 rm -f .gitignore
435 git init 432 git init
436 check_git_config 433 check_git_config
434 if [ "${KERNEL_DEBUG_TIMESTAMPS}" != "1" ]; then
435 reproducible_git_committer_author
436 fi
437 git add . 437 git add .
438 git commit -q -n -m "baseline commit: creating repo for ${PN}-${PV}" 438 git commit -q -n -m "baseline commit: creating repo for ${PN}-${PV}"
439 git clean -d -f 439 git clean -d -f
@@ -454,8 +454,8 @@ do_qa_unpack() {
454 return 454 return
455} 455}
456 456
457do_kernel_configme[depends] += "${PREFERRED_PROVIDER_virtual/cross-binutils}:do_populate_sysroot" 457do_kernel_configme[depends] += "virtual/cross-binutils:do_populate_sysroot"
458do_kernel_configme[depends] += "${PREFERRED_PROVIDER_virtual/cross-cc}:do_populate_sysroot" 458do_kernel_configme[depends] += "virtual/cross-cc:do_populate_sysroot"
459do_kernel_configme[depends] += "bc-native:do_populate_sysroot bison-native:do_populate_sysroot" 459do_kernel_configme[depends] += "bc-native:do_populate_sysroot bison-native:do_populate_sysroot"
460do_kernel_configme[depends] += "kern-tools-native:do_populate_sysroot" 460do_kernel_configme[depends] += "kern-tools-native:do_populate_sysroot"
461do_kernel_configme[dirs] += "${S} ${B}" 461do_kernel_configme[dirs] += "${S} ${B}"
diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass
index 98ac723552..edd9da9171 100644
--- a/meta/classes-recipe/populate_sdk_base.bbclass
+++ b/meta/classes-recipe/populate_sdk_base.bbclass
@@ -200,7 +200,14 @@ create_merged_usr_symlinks_sdk() {
200 create_merged_usr_symlinks ${SDK_OUTPUT}${SDKTARGETSYSROOT} 200 create_merged_usr_symlinks ${SDK_OUTPUT}${SDKTARGETSYSROOT}
201} 201}
202 202
203POPULATE_SDK_PRE_TARGET_COMMAND += "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_sdk', '',d)}" 203create_merged_usr_symlinks_nativesdk() {
204 create_merged_usr_symlinks ${SDK_OUTPUT}${SDKPATHNATIVE}
205}
206
207POPULATE_SDK_PRE_TARGET_COMMAND += " \
208 ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'create_merged_usr_symlinks_sdk', '',d)} \
209 ${@bb.utils.contains('DISTRO_FEATURES_NATIVESDK', 'usrmerge', 'create_merged_usr_symlinks_nativesdk', '',d)} \
210"
204 211
205SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}" 212SDK_PACKAGING_COMMAND = "${@'${SDK_PACKAGING_FUNC}' if '${SDK_PACKAGING_FUNC}' else ''}"
206SDK_POSTPROCESS_COMMAND = "create_sdk_files check_sdk_sysroots archive_sdk ${SDK_PACKAGING_COMMAND}" 213SDK_POSTPROCESS_COMMAND = "create_sdk_files check_sdk_sysroots archive_sdk ${SDK_PACKAGING_COMMAND}"
diff --git a/meta/classes-recipe/populate_sdk_ext.bbclass b/meta/classes-recipe/populate_sdk_ext.bbclass
index 3019dad0f3..de4799f013 100644
--- a/meta/classes-recipe/populate_sdk_ext.bbclass
+++ b/meta/classes-recipe/populate_sdk_ext.bbclass
@@ -768,7 +768,7 @@ fakeroot python do_populate_sdk_ext() {
768 768
769 # FIXME hopefully we can remove this restriction at some point, but the eSDK 769 # FIXME hopefully we can remove this restriction at some point, but the eSDK
770 # can only be built for the primary (default) multiconfig 770 # can only be built for the primary (default) multiconfig
771 if d.getVar('BB_CURRENT_MC') != 'default': 771 if d.getVar('BB_CURRENT_MC') != '':
772 bb.fatal('The extensible SDK can currently only be built for the default multiconfig. Currently trying to build for %s.' % d.getVar('BB_CURRENT_MC')) 772 bb.fatal('The extensible SDK can currently only be built for the default multiconfig. Currently trying to build for %s.' % d.getVar('BB_CURRENT_MC'))
773 773
774 # eSDK dependencies don't use the traditional variables and things don't work properly if they are set 774 # eSDK dependencies don't use the traditional variables and things don't work properly if they are set
diff --git a/meta/classes-recipe/rust-common.bbclass b/meta/classes-recipe/rust-common.bbclass
index 6940093e59..baa3869c47 100644
--- a/meta/classes-recipe/rust-common.bbclass
+++ b/meta/classes-recipe/rust-common.bbclass
@@ -173,7 +173,7 @@ do_rust_create_wrappers () {
173 mkdir -p "${WRAPPER_DIR}" 173 mkdir -p "${WRAPPER_DIR}"
174 174
175 # Yocto Build / Rust Host C compiler 175 # Yocto Build / Rust Host C compiler
176 create_wrapper_rust "${RUST_BUILD_CC}" "" "${CRATE_CC_FLAGS}" "${BUILD_CC}" 176 create_wrapper_rust "${RUST_BUILD_CC}" "" "${CRATE_CC_FLAGS}" "${BUILD_CC}" "${BUILD_LDFLAGS}"
177 # Yocto Build / Rust Host C++ compiler 177 # Yocto Build / Rust Host C++ compiler
178 create_wrapper_rust "${RUST_BUILD_CXX}" "" "${CRATE_CC_FLAGS}" "${BUILD_CXX}" 178 create_wrapper_rust "${RUST_BUILD_CXX}" "" "${CRATE_CC_FLAGS}" "${BUILD_CXX}"
179 # Yocto Build / Rust Host linker 179 # Yocto Build / Rust Host linker
diff --git a/meta/classes-recipe/systemd.bbclass b/meta/classes-recipe/systemd.bbclass
index 4b4470b7b3..4c9f51d33d 100644
--- a/meta/classes-recipe/systemd.bbclass
+++ b/meta/classes-recipe/systemd.bbclass
@@ -37,17 +37,29 @@ if systemctl >/dev/null 2>/dev/null; then
37 fi 37 fi
38 38
39 if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then 39 if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then
40 for service in ${SYSTEMD_SERVICE_ESCAPED}; do 40 for service in ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}; do
41 systemctl ${OPTS} enable "$service" 41 systemctl ${OPTS} enable "$service"
42 done 42 done
43
44 for service in ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", True, d)}; do
45 systemctl --global ${OPTS} enable "$service"
46 done
43 fi 47 fi
44 48
45 if [ -z "$D" ]; then 49 if [ -z "$D" ]; then
50 # Reload only system service manager
51 # --global for daemon-reload is not supported: https://github.com/systemd/systemd/issues/19284
46 systemctl daemon-reload 52 systemctl daemon-reload
47 systemctl preset ${SYSTEMD_SERVICE_ESCAPED} 53 [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}" ] && \
54 systemctl preset ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}
55
56 [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", True, d)}" ] && \
57 systemctl --global preset ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", True, d)}
48 58
49 if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then 59 if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then
50 systemctl --no-block restart ${SYSTEMD_SERVICE_ESCAPED} 60 # --global flag for restart is not supported by systemd (see above)
61 [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}" ] && \
62 systemctl --no-block restart ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}
51 fi 63 fi
52 fi 64 fi
53fi 65fi
@@ -56,9 +68,14 @@ fi
56systemd_prerm() { 68systemd_prerm() {
57if systemctl >/dev/null 2>/dev/null; then 69if systemctl >/dev/null 2>/dev/null; then
58 if [ -z "$D" ]; then 70 if [ -z "$D" ]; then
59 systemctl stop ${SYSTEMD_SERVICE_ESCAPED} 71 if [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}" ]; then
72 systemctl stop ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}
73 systemctl disable ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", False, d)}
74 fi
60 75
61 systemctl disable ${SYSTEMD_SERVICE_ESCAPED} 76 # same as above, --global flag is not supported for stop so do disable only
77 [ -n "${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", True, d)}" ] && \
78 systemctl --global disable ${@systemd_filter_services("${SYSTEMD_SERVICE_ESCAPED}", True, d)}
62 fi 79 fi
63fi 80fi
64} 81}
@@ -68,6 +85,49 @@ systemd_populate_packages[vardeps] += "systemd_prerm systemd_postinst"
68systemd_populate_packages[vardepsexclude] += "OVERRIDES" 85systemd_populate_packages[vardepsexclude] += "OVERRIDES"
69 86
70 87
88def systemd_service_path(service, searchpaths, d):
89 path_found = ''
90
91 # Deal with adding, for example, 'ifplugd@eth0.service' from
92 # 'ifplugd@.service'
93 base = None
94 at = service.find('@')
95 if at != -1:
96 ext = service.rfind('.')
97 base = service[:at] + '@' + service[ext:]
98
99 for path in searchpaths:
100 if os.path.lexists(oe.path.join(d.getVar("D"), path, service)):
101 path_found = path
102 break
103 elif base is not None:
104 if os.path.exists(oe.path.join(d.getVar("D"), path, base)):
105 path_found = path
106 break
107
108 return path_found, base
109
110def systemd_service_searchpaths(user, d):
111 if user:
112 return [
113 oe.path.join(d.getVar("sysconfdir"), "systemd", "user"),
114 d.getVar("systemd_user_unitdir"),
115 ]
116 else:
117 return [
118 oe.path.join(d.getVar("sysconfdir"), "systemd", "system"),
119 d.getVar("systemd_system_unitdir"),
120 ]
121
122def systemd_service_exists(service, user, d):
123 searchpaths = systemd_service_searchpaths(user, d)
124 path, _ = systemd_service_path(service, searchpaths, d)
125
126 return path != ''
127
128def systemd_filter_services(services, user, d):
129 return ' '.join(service for service in services.split() if systemd_service_exists(service, user, d))
130
71python systemd_populate_packages() { 131python systemd_populate_packages() {
72 import re 132 import re
73 import shlex 133 import shlex
@@ -147,32 +207,15 @@ python systemd_populate_packages() {
147 207
148 # Check service-files and call systemd_add_files_and_parse for each entry 208 # Check service-files and call systemd_add_files_and_parse for each entry
149 def systemd_check_services(): 209 def systemd_check_services():
150 searchpaths = [oe.path.join(d.getVar("sysconfdir"), "systemd", "system"),] 210 searchpaths = systemd_service_searchpaths(False, d)
151 searchpaths.append(d.getVar("systemd_system_unitdir")) 211 searchpaths.extend(systemd_service_searchpaths(True, d))
152 searchpaths.append(d.getVar("systemd_user_unitdir")) 212
153 systemd_packages = d.getVar('SYSTEMD_PACKAGES') 213 systemd_packages = d.getVar('SYSTEMD_PACKAGES')
154 214
155 # scan for all in SYSTEMD_SERVICE[] 215 # scan for all in SYSTEMD_SERVICE[]
156 for pkg_systemd in systemd_packages.split(): 216 for pkg_systemd in systemd_packages.split():
157 for service in get_package_var(d, 'SYSTEMD_SERVICE', pkg_systemd).split(): 217 for service in get_package_var(d, 'SYSTEMD_SERVICE', pkg_systemd).split():
158 path_found = '' 218 path_found, base = systemd_service_path(service, searchpaths, d)
159
160 # Deal with adding, for example, 'ifplugd@eth0.service' from
161 # 'ifplugd@.service'
162 base = None
163 at = service.find('@')
164 if at != -1:
165 ext = service.rfind('.')
166 base = service[:at] + '@' + service[ext:]
167
168 for path in searchpaths:
169 if os.path.lexists(oe.path.join(d.getVar("D"), path, service)):
170 path_found = path
171 break
172 elif base is not None:
173 if os.path.exists(oe.path.join(d.getVar("D"), path, base)):
174 path_found = path
175 break
176 219
177 if path_found != '': 220 if path_found != '':
178 systemd_add_files_and_parse(pkg_systemd, path_found, service) 221 systemd_add_files_and_parse(pkg_systemd, path_found, service)
@@ -180,13 +223,27 @@ python systemd_populate_packages() {
180 bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE:{1}. {2}".format( 223 bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE:{1}. {2}".format(
181 service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else "")) 224 service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else ""))
182 225
183 def systemd_create_presets(pkg, action): 226 def systemd_create_presets(pkg, action, user):
184 presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg) 227 # Check there is at least one service of given type (system/user), don't
228 # create empty files.
229 needs_preset = False
230 for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split():
231 if systemd_service_exists(service, user, d):
232 needs_preset = True
233 break
234
235 if not needs_preset:
236 return
237
238 prefix = "user" if user else "system"
239 presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "%s-preset/98-%s.preset" % (prefix, pkg))
185 bb.utils.mkdirhier(os.path.dirname(presetf)) 240 bb.utils.mkdirhier(os.path.dirname(presetf))
186 with open(presetf, 'a') as fd: 241 with open(presetf, 'a') as fd:
187 for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split(): 242 for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split():
243 if not systemd_service_exists(service, user, d):
244 continue
188 fd.write("%s %s\n" % (action,service)) 245 fd.write("%s %s\n" % (action,service))
189 d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)) 246 d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "%s-preset/98-%s.preset" % (prefix, pkg)))
190 247
191 # Run all modifications once when creating package 248 # Run all modifications once when creating package
192 if os.path.exists(d.getVar("D")): 249 if os.path.exists(d.getVar("D")):
@@ -196,7 +253,8 @@ python systemd_populate_packages() {
196 systemd_generate_package_scripts(pkg) 253 systemd_generate_package_scripts(pkg)
197 action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg) 254 action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg)
198 if action in ("enable", "disable"): 255 if action in ("enable", "disable"):
199 systemd_create_presets(pkg, action) 256 systemd_create_presets(pkg, action, False)
257 systemd_create_presets(pkg, action, True)
200 elif action not in ("mask", "preset"): 258 elif action not in ("mask", "preset"):
201 bb.fatal("SYSTEMD_AUTO_ENABLE:%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action)) 259 bb.fatal("SYSTEMD_AUTO_ENABLE:%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action))
202 systemd_check_services() 260 systemd_check_services()
diff --git a/meta/classes-recipe/uboot-extlinux-config.bbclass b/meta/classes-recipe/uboot-extlinux-config.bbclass
index 2fa83b2c8b..099476f5d6 100644
--- a/meta/classes-recipe/uboot-extlinux-config.bbclass
+++ b/meta/classes-recipe/uboot-extlinux-config.bbclass
@@ -162,7 +162,7 @@ python do_create_extlinux_config() {
162 except OSError: 162 except OSError:
163 bb.fatal('Unable to open %s' % (cfile)) 163 bb.fatal('Unable to open %s' % (cfile))
164} 164}
165UBOOT_EXTLINUX_VARS = "CONSOLE MENU_DESCRIPTION ROOT KERNEL_IMAGE FDTDIR FDT KERNEL_ARGS INITRD" 165UBOOT_EXTLINUX_VARS = "CONSOLE MENU_DESCRIPTION ROOT KERNEL_IMAGE FDTDIR FDT FDTOVERLAYS KERNEL_ARGS INITRD"
166do_create_extlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s:%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_LABELS').split()])}" 166do_create_extlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s:%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_LABELS').split()])}"
167do_create_extlinux_config[vardepsexclude] += "OVERRIDES" 167do_create_extlinux_config[vardepsexclude] += "OVERRIDES"
168 168
diff --git a/meta/classes-recipe/uboot-sign.bbclass b/meta/classes-recipe/uboot-sign.bbclass
index a17be745ce..96c47ab016 100644
--- a/meta/classes-recipe/uboot-sign.bbclass
+++ b/meta/classes-recipe/uboot-sign.bbclass
@@ -26,6 +26,7 @@
26 26
27# We need some variables from u-boot-config 27# We need some variables from u-boot-config
28inherit uboot-config 28inherit uboot-config
29require conf/image-fitimage.conf
29 30
30# Enable use of a U-Boot fitImage 31# Enable use of a U-Boot fitImage
31UBOOT_FITIMAGE_ENABLE ?= "0" 32UBOOT_FITIMAGE_ENABLE ?= "0"
@@ -85,9 +86,6 @@ UBOOT_FIT_KEY_SIGN_PKCS ?= "-x509"
85# ex: 1 32bits address, 2 64bits address 86# ex: 1 32bits address, 2 64bits address
86UBOOT_FIT_ADDRESS_CELLS ?= "1" 87UBOOT_FIT_ADDRESS_CELLS ?= "1"
87 88
88# This is only necessary for determining the signing configuration
89KERNEL_PN = "${PREFERRED_PROVIDER_virtual/kernel}"
90
91UBOOT_FIT_UBOOT_LOADADDRESS ?= "${UBOOT_LOADADDRESS}" 89UBOOT_FIT_UBOOT_LOADADDRESS ?= "${UBOOT_LOADADDRESS}"
92UBOOT_FIT_UBOOT_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}" 90UBOOT_FIT_UBOOT_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}"
93 91
@@ -96,8 +94,6 @@ python() {
96 sign = d.getVar('UBOOT_SIGN_ENABLE') == '1' 94 sign = d.getVar('UBOOT_SIGN_ENABLE') == '1'
97 if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' or sign: 95 if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' or sign:
98 d.appendVar('DEPENDS', " u-boot-tools-native dtc-native") 96 d.appendVar('DEPENDS', " u-boot-tools-native dtc-native")
99 if sign:
100 d.appendVar('DEPENDS', " " + d.getVar('KERNEL_PN'))
101} 97}
102 98
103concat_dtb() { 99concat_dtb() {
@@ -106,16 +102,26 @@ concat_dtb() {
106 102
107 if [ -e "${UBOOT_DTB_BINARY}" ]; then 103 if [ -e "${UBOOT_DTB_BINARY}" ]; then
108 # Re-sign the kernel in order to add the keys to our dtb 104 # Re-sign the kernel in order to add the keys to our dtb
105 UBOOT_MKIMAGE_MODE="auto-conf"
106 # Signing individual images is not recommended as that
107 # makes fitImage susceptible to mix-and-match attack.
108 if [ "${FIT_SIGN_INDIVIDUAL}" = "1" ] ; then
109 UBOOT_MKIMAGE_MODE="auto"
110 fi
109 ${UBOOT_MKIMAGE_SIGN} \ 111 ${UBOOT_MKIMAGE_SIGN} \
110 ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \ 112 ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
111 -F -k "${UBOOT_SIGN_KEYDIR}" \ 113 -f $UBOOT_MKIMAGE_MODE \
114 -k "${UBOOT_SIGN_KEYDIR}" \
115 -o "${FIT_HASH_ALG},${FIT_SIGN_ALG}" \
116 -g "${UBOOT_SIGN_IMG_KEYNAME}" \
112 -K "${UBOOT_DTB_BINARY}" \ 117 -K "${UBOOT_DTB_BINARY}" \
113 -r ${B}/fitImage-linux \ 118 -d /dev/null \
119 -r ${B}/unused.itb \
114 ${UBOOT_MKIMAGE_SIGN_ARGS} 120 ${UBOOT_MKIMAGE_SIGN_ARGS}
115 # Verify the kernel image and u-boot dtb 121 # Verify the kernel image and u-boot dtb
116 ${UBOOT_FIT_CHECK_SIGN} \ 122 ${UBOOT_FIT_CHECK_SIGN} \
117 -k "${UBOOT_DTB_BINARY}" \ 123 -k "${UBOOT_DTB_BINARY}" \
118 -f ${B}/fitImage-linux 124 -f ${B}/unused.itb
119 cp ${UBOOT_DTB_BINARY} ${UBOOT_DTB_SIGNED} 125 cp ${UBOOT_DTB_BINARY} ${UBOOT_DTB_SIGNED}
120 fi 126 fi
121 127
@@ -351,10 +357,6 @@ uboot_assemble_fitimage_helper() {
351} 357}
352 358
353do_uboot_assemble_fitimage() { 359do_uboot_assemble_fitimage() {
354 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] ; then
355 cp "${STAGING_DIR_HOST}/sysroot-only/fitImage" "${B}/fitImage-linux"
356 fi
357
358 if [ -n "${UBOOT_CONFIG}" ]; then 360 if [ -n "${UBOOT_CONFIG}" ]; then
359 unset i 361 unset i
360 for config in ${UBOOT_MACHINE}; do 362 for config in ${UBOOT_MACHINE}; do
diff --git a/meta/classes/create-spdx-2.2.bbclass b/meta/classes/create-spdx-2.2.bbclass
index 27242ecf70..494bde117f 100644
--- a/meta/classes/create-spdx-2.2.bbclass
+++ b/meta/classes/create-spdx-2.2.bbclass
@@ -75,11 +75,17 @@ def convert_license_to_spdx(lic, license_data, document, d, existing={}):
75 pass 75 pass
76 if extracted_info.extractedText is None: 76 if extracted_info.extractedText is None:
77 # If it's not SPDX or PD, then NO_GENERIC_LICENSE must be set 77 # If it's not SPDX or PD, then NO_GENERIC_LICENSE must be set
78 filename = d.getVarFlag('NO_GENERIC_LICENSE', name) 78 entry = d.getVarFlag('NO_GENERIC_LICENSE', name).split(';')
79 filename = entry[0]
80 params = {i.split('=')[0]: i.split('=')[1] for i in entry[1:] if '=' in i}
81 beginline = int(params.get('beginline', 1))
82 endline = params.get('endline', None)
83 if endline:
84 endline = int(endline)
79 if filename: 85 if filename:
80 filename = d.expand("${S}/" + filename) 86 filename = d.expand("${S}/" + filename)
81 with open(filename, errors="replace") as f: 87 with open(filename, errors="replace") as f:
82 extracted_info.extractedText = f.read() 88 extracted_info.extractedText = "".join(line for idx, line in enumerate(f, 1) if beginline <= idx and idx <= (endline or idx))
83 else: 89 else:
84 bb.fatal("Cannot find any text for license %s" % name) 90 bb.fatal("Cannot find any text for license %s" % name)
85 91
diff --git a/meta/classes/cve-check.bbclass b/meta/classes/cve-check.bbclass
index 4bd9af4abf..6e10dd915a 100644
--- a/meta/classes/cve-check.bbclass
+++ b/meta/classes/cve-check.bbclass
@@ -31,11 +31,7 @@
31CVE_PRODUCT ??= "${BPN}" 31CVE_PRODUCT ??= "${BPN}"
32CVE_VERSION ??= "${PV}" 32CVE_VERSION ??= "${PV}"
33 33
34# Possible database sources: NVD1, NVD2, FKIE 34CVE_CHECK_DB_FILENAME ?= "nvdcve_2-2.db"
35NVD_DB_VERSION ?= "NVD2"
36
37CVE_CHECK_DB_FILENAME ?= "${@'nvdcve_2-2.db' if d.getVar('NVD_DB_VERSION') == 'NVD2' else 'nvdcve_1-3.db'}"
38CVE_CHECK_DB_FETCHER ?= "${@'cve-update-nvd2-native' if d.getVar('NVD_DB_VERSION') == 'NVD2' else 'cve-update-db-native'}"
39CVE_CHECK_DB_DIR ?= "${STAGING_DIR}/CVE_CHECK" 35CVE_CHECK_DB_DIR ?= "${STAGING_DIR}/CVE_CHECK"
40CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/${CVE_CHECK_DB_FILENAME}" 36CVE_CHECK_DB_FILE ?= "${CVE_CHECK_DB_DIR}/${CVE_CHECK_DB_FILENAME}"
41CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock" 37CVE_CHECK_DB_FILE_LOCK ?= "${CVE_CHECK_DB_FILE}.lock"
@@ -118,11 +114,6 @@ python () {
118 d.setVarFlag("CVE_STATUS", cve, d.getVarFlag(cve_status_group, "status")) 114 d.setVarFlag("CVE_STATUS", cve, d.getVarFlag(cve_status_group, "status"))
119 else: 115 else:
120 bb.warn("CVE_STATUS_GROUPS contains undefined variable %s" % cve_status_group) 116 bb.warn("CVE_STATUS_GROUPS contains undefined variable %s" % cve_status_group)
121
122 nvd_database_type = d.getVar("NVD_DB_VERSION")
123 if nvd_database_type not in ("NVD", "NVD2", "FKIE"):
124 d.setVar("NVD_DB_VERSION", "NVD2")
125 bb.warn("Malformed NVD_DB_VERSION, resetting to NVD2")
126} 117}
127 118
128def generate_json_report(d, out_path, link_path): 119def generate_json_report(d, out_path, link_path):
@@ -191,7 +182,7 @@ python do_cve_check () {
191} 182}
192 183
193addtask cve_check before do_build 184addtask cve_check before do_build
194do_cve_check[depends] = "${CVE_CHECK_DB_FETCHER}:do_unpack" 185do_cve_check[depends] = "cve-update-nvd2-native:do_unpack"
195do_cve_check[nostamp] = "1" 186do_cve_check[nostamp] = "1"
196 187
197python cve_check_cleanup () { 188python cve_check_cleanup () {
diff --git a/meta/classes/go-vendor.bbclass b/meta/classes/go-vendor.bbclass
index f3268c1125..6ec6178add 100644
--- a/meta/classes/go-vendor.bbclass
+++ b/meta/classes/go-vendor.bbclass
@@ -201,11 +201,15 @@ python do_go_vendor() {
201 for vendored_name, replaced_path in replaced_paths.items(): 201 for vendored_name, replaced_path in replaced_paths.items():
202 symlink_target = os.path.join(source_dir, *['src', go_import, replaced_path]) 202 symlink_target = os.path.join(source_dir, *['src', go_import, replaced_path])
203 symlink_name = os.path.join(vendor_dir, vendored_name) 203 symlink_name = os.path.join(vendor_dir, vendored_name)
204 relative_symlink_target = os.path.relpath(symlink_target, os.path.dirname(symlink_name))
204 bb.debug(1, "vendored name %s, symlink name %s" % (vendored_name, symlink_name)) 205 bb.debug(1, "vendored name %s, symlink name %s" % (vendored_name, symlink_name))
205 oe.path.relsymlink(symlink_target, symlink_name) 206
207 os.makedirs(os.path.dirname(symlink_name), exist_ok=True)
208 os.symlink(relative_symlink_target, symlink_name)
206 209
207 # Create a symlink to the actual directory 210 # Create a symlink to the actual directory
208 oe.path.relsymlink(vendor_dir, linkname) 211 relative_vendor_dir = os.path.relpath(vendor_dir, os.path.dirname(linkname))
212 os.symlink(relative_vendor_dir, linkname)
209} 213}
210 214
211addtask go_vendor before do_patch after do_unpack 215addtask go_vendor before do_patch after do_unpack
diff --git a/meta/classes/multilib_global.bbclass b/meta/classes/multilib_global.bbclass
index fcdda265ac..c1d6de100c 100644
--- a/meta/classes/multilib_global.bbclass
+++ b/meta/classes/multilib_global.bbclass
@@ -155,11 +155,11 @@ def preferred_ml_updates(d):
155 extramp.append(translate_provide(pref, p)) 155 extramp.append(translate_provide(pref, p))
156 d.setVar("BB_MULTI_PROVIDER_ALLOWED", " ".join(mp + extramp)) 156 d.setVar("BB_MULTI_PROVIDER_ALLOWED", " ".join(mp + extramp))
157 157
158 virtprovs = d.getVar("RECIPE_VIRTUAL_PROVIDERS").split() 158 virtprovs = d.getVar("BB_RECIPE_VIRTUAL_PROVIDERS").split()
159 for p in virtprovs.copy(): 159 for p in virtprovs.copy():
160 for pref in prefixes: 160 for pref in prefixes:
161 virtprovs.append(translate_provide(pref, p)) 161 virtprovs.append(translate_provide(pref, p))
162 d.setVar("RECIPE_VIRTUAL_PROVIDERS", " ".join(virtprovs)) 162 d.setVar("BB_RECIPE_VIRTUAL_PROVIDERS", " ".join(virtprovs))
163 163
164 abisafe = (d.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE") or "").split() 164 abisafe = (d.getVar("SIGGEN_EXCLUDERECIPES_ABISAFE") or "").split()
165 extras = [] 165 extras = []
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 6123bcd123..19bd7ecc7b 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -553,6 +553,8 @@ HOSTTOOLS_NONFATAL += "gsutil"
553# Link to git-lfs if present 553# Link to git-lfs if present
554HOSTTOOLS_NONFATAL += "git-lfs" 554HOSTTOOLS_NONFATAL += "git-lfs"
555 555
556CCACHE ??= ""
557
556export CC 558export CC
557export CXX 559export CXX
558export FC 560export FC
@@ -828,7 +830,7 @@ OE_FRAGMENTS_PREFIX ?= "conf/fragments"
828OE_FRAGMENTS_METADATA_VARS ?= "BB_CONF_FRAGMENT_SUMMARY BB_CONF_FRAGMENT_DESCRIPTION" 830OE_FRAGMENTS_METADATA_VARS ?= "BB_CONF_FRAGMENT_SUMMARY BB_CONF_FRAGMENT_DESCRIPTION"
829addfragments ${OE_FRAGMENTS_PREFIX} OE_FRAGMENTS OE_FRAGMENTS_METADATA_VARS 831addfragments ${OE_FRAGMENTS_PREFIX} OE_FRAGMENTS OE_FRAGMENTS_METADATA_VARS
830 832
831require conf/multiconfig/${BB_CURRENT_MC}.conf 833require ${@"conf/multiconfig/${BB_CURRENT_MC}.conf" if "${BB_CURRENT_MC}" != "" else ""}
832include conf/machine/${MACHINE}.conf 834include conf/machine/${MACHINE}.conf
833include conf/machine-sdk/${SDKMACHINE}.conf 835include conf/machine-sdk/${SDKMACHINE}.conf
834require conf/cve-check-map.conf 836require conf/cve-check-map.conf
@@ -840,7 +842,8 @@ require conf/sanity.conf
840include conf/bblock.conf 842include conf/bblock.conf
841 843
842TOOLCHAIN ??= "gcc" 844TOOLCHAIN ??= "gcc"
843include toolchain/${TOOLCHAIN}.inc 845require toolchain/${TOOLCHAIN}.inc
846require toolchain/build-gcc.inc
844 847
845################################################################## 848##################################################################
846# Weak variables (usually to retain backwards compatibility) 849# Weak variables (usually to retain backwards compatibility)
diff --git a/meta/conf/distro/include/default-providers.inc b/meta/conf/distro/include/default-providers.inc
index 881cc64a00..d3eefb754b 100644
--- a/meta/conf/distro/include/default-providers.inc
+++ b/meta/conf/distro/include/default-providers.inc
@@ -1,7 +1,7 @@
1# 1#
2# Default virtual providers 2# Default virtual providers
3# 3#
4RECIPE_VIRTUAL_PROVIDERS = "virtual/cross-cc virtual/cross-c++ virtual/cross-binutils virtual/cross-sdk-cc virtual/cross-sdk-c++ virtual/cross-sdk-binutils" 4BB_RECIPE_VIRTUAL_PROVIDERS = "virtual/cross-cc virtual/cross-c++ virtual/cross-binutils virtual/nativesdk-cross-cc virtual/nativesdk-cross-c++ virtual/nativesdk-cross-binutils"
5PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg" 5PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
6PREFERRED_PROVIDER_virtual/xserver-xf86 ?= "xserver-xorg" 6PREFERRED_PROVIDER_virtual/xserver-xf86 ?= "xserver-xorg"
7PREFERRED_PROVIDER_virtual/egl ?= "mesa" 7PREFERRED_PROVIDER_virtual/egl ?= "mesa"
diff --git a/meta/conf/distro/include/tcmode-default.inc b/meta/conf/distro/include/tcmode-default.inc
index 67e83302a3..df914f6ef5 100644
--- a/meta/conf/distro/include/tcmode-default.inc
+++ b/meta/conf/distro/include/tcmode-default.inc
@@ -3,19 +3,10 @@
3# 3#
4 4
5PREFERRED_PROVIDER_virtual/cross-binutils = "${MLPREFIX}binutils-cross-${TARGET_ARCH}" 5PREFERRED_PROVIDER_virtual/cross-binutils = "${MLPREFIX}binutils-cross-${TARGET_ARCH}"
6PREFERRED_PROVIDER_virtual/cross-cc = "${MLPREFIX}gcc-cross-${TARGET_ARCH}"
7PREFERRED_PROVIDER_virtual/cross-c++ = "${MLPREFIX}gcc-cross-${TARGET_ARCH}"
8PREFERRED_PROVIDER_virtual/compilerlibs = "gcc-runtime"
9PREFERRED_PROVIDER_gdb = "gdb"
10
11PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk ?= "binutils-crosssdk-${SDK_SYS}" 6PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk ?= "binutils-crosssdk-${SDK_SYS}"
12PREFERRED_PROVIDER_virtual/cross-cc:class-nativesdk = "gcc-crosssdk-${SDK_SYS}" 7PREFERRED_PROVIDER_virtual/nativesdk-cross-binutils ?= "binutils-crosssdk-${SDK_SYS}"
13PREFERRED_PROVIDER_virtual/cross-c++:class-nativesdk = "gcc-crosssdk-${SDK_SYS}"
14 8
15PREFERRED_PROVIDER_virtual/cross-sdk-binutils ?= "binutils-crosssdk-${SDK_SYS}" 9PREFERRED_PROVIDER_gdb = "gdb"
16PREFERRED_PROVIDER_virtual/cross-sdk-cc = "gcc-crosssdk-${SDK_SYS}"
17PREFERRED_PROVIDER_virtual/cross-sdk-c++ = "gcc-crosssdk-${SDK_SYS}"
18PREFERRED_PROVIDER_virtual/sdk-compilerlibs = "nativesdk-gcc-runtime"
19 10
20# Default libc config 11# Default libc config
21PREFERRED_PROVIDER_virtual/gettext ??= "gettext" 12PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
@@ -23,7 +14,7 @@ PREFERRED_PROVIDER_virtual/gettext ??= "gettext"
23GCCVERSION ?= "14.%" 14GCCVERSION ?= "14.%"
24SDKGCCVERSION ?= "${GCCVERSION}" 15SDKGCCVERSION ?= "${GCCVERSION}"
25BINUVERSION ?= "2.43%" 16BINUVERSION ?= "2.43%"
26GDBVERSION ?= "15.%" 17GDBVERSION ?= "16.%"
27GLIBCVERSION ?= "2.40%" 18GLIBCVERSION ?= "2.40%"
28LINUXLIBCVERSION ?= "6.12%" 19LINUXLIBCVERSION ?= "6.12%"
29QEMUVERSION ?= "9.2%" 20QEMUVERSION ?= "9.2%"
diff --git a/meta/conf/distro/include/time64.inc b/meta/conf/distro/include/time64.inc
index f9f2fd0877..5122e2a122 100644
--- a/meta/conf/distro/include/time64.inc
+++ b/meta/conf/distro/include/time64.inc
@@ -53,5 +53,5 @@ INSANE_SKIP:append:pn-pseudo = " 32bit-time"
53INSANE_SKIP:append:pn-binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} = " 32bit-time" 53INSANE_SKIP:append:pn-binutils-cross-canadian-${TRANSLATED_TARGET_ARCH} = " 32bit-time"
54#gcc-cross-canadian-arm-14.1.0-r0 do_package_qa: QA Issue: xxx/x86_64-oesdk-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/14.1.0/plugin/gengtype uses 32-bit api 'ctime' 54#gcc-cross-canadian-arm-14.1.0-r0 do_package_qa: QA Issue: xxx/x86_64-oesdk-linux/usr/libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/14.1.0/plugin/gengtype uses 32-bit api 'ctime'
55INSANE_SKIP:append:pn-gcc-cross-canadian-${TRANSLATED_TARGET_ARCH} = " 32bit-time" 55INSANE_SKIP:append:pn-gcc-cross-canadian-${TRANSLATED_TARGET_ARCH} = " 32bit-time"
56#gdb-cross-canadian-arm-15.2-r0 do_package_qa: QA Issue: xxx/x86_64-oesdk-linux/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-gdb uses 32-bit api 'lstat' 56#gdb-cross-canadian-arm-16.1-r0 do_package_qa: QA Issue: xxx/x86_64-oesdk-linux/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-gdb uses 32-bit api 'lstat'
57INSANE_SKIP:append:pn-gdb-cross-canadian-${TRANSLATED_TARGET_ARCH} = " 32bit-time" 57INSANE_SKIP:append:pn-gdb-cross-canadian-${TRANSLATED_TARGET_ARCH} = " 32bit-time"
diff --git a/meta/conf/image-fitimage.conf b/meta/conf/image-fitimage.conf
new file mode 100644
index 0000000000..be9ae30134
--- /dev/null
+++ b/meta/conf/image-fitimage.conf
@@ -0,0 +1,53 @@
1# Possible options for fitImage generation, mainly
2# related to signing of the fitImage content.
3
4# Description string
5FIT_DESC ?= "Kernel fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}"
6
7# Kernel fitImage Hash Algo
8FIT_HASH_ALG ?= "sha256"
9
10# Kernel fitImage Signature Algo
11FIT_SIGN_ALG ?= "rsa2048"
12
13# Kernel / U-Boot fitImage Padding Algo
14FIT_PAD_ALG ?= "pkcs-1.5"
15
16# Generate keys for signing Kernel fitImage
17FIT_GENERATE_KEYS ?= "0"
18
19# Size of private keys in number of bits
20FIT_SIGN_NUMBITS ?= "2048"
21
22# args to openssl genrsa (Default is just the public exponent)
23FIT_KEY_GENRSA_ARGS ?= "-F4"
24
25# args to openssl req (Default is -batch for non interactive mode and
26# -new for new certificate)
27FIT_KEY_REQ_ARGS ?= "-batch -new"
28
29# Standard format for public key certificate
30FIT_KEY_SIGN_PKCS ?= "-x509"
31
32# Sign individual images as well
33FIT_SIGN_INDIVIDUAL ?= "0"
34
35FIT_CONF_PREFIX ?= "conf-"
36FIT_CONF_PREFIX[doc] = "Prefix to use for FIT configuration node name"
37
38FIT_SUPPORTED_INITRAMFS_FSTYPES ?= "cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst cpio.gz ext2.gz cpio"
39
40# Allow user to select the default DTB for FIT image when multiple dtb's exists.
41FIT_CONF_DEFAULT_DTB ?= ""
42
43# length of address in number of <u32> cells
44# ex: 1 32bits address, 2 64bits address
45FIT_ADDRESS_CELLS ?= "1"
46
47# Keys used to sign individually image nodes.
48# The keys to sign image nodes must be different from those used to sign
49# configuration nodes, otherwise the "required" property, from
50# UBOOT_DTB_BINARY, will be set to "conf", because "conf" prevails on "image".
51# Then the images signature checking will not be mandatory and no error will be
52# raised in case of failure.
53# UBOOT_SIGN_IMG_KEYNAME = "dev2" # keys name in keydir (eg. "dev2.crt", "dev2.key")
diff --git a/meta/conf/machine/include/riscv/qemuriscv.inc b/meta/conf/machine/include/riscv/qemuriscv.inc
index d01d988eee..6170ce65f2 100644
--- a/meta/conf/machine/include/riscv/qemuriscv.inc
+++ b/meta/conf/machine/include/riscv/qemuriscv.inc
@@ -27,6 +27,7 @@ UBOOT_ENTRYPOINT:riscv64 = "0x80200000"
27# qemuboot options 27# qemuboot options
28QB_SMP ?= "-smp 4" 28QB_SMP ?= "-smp 4"
29QB_KERNEL_CMDLINE_APPEND = "earlycon=sbi" 29QB_KERNEL_CMDLINE_APPEND = "earlycon=sbi"
30QB_CPU = "-cpu rv64, sv39=true"
30QB_MACHINE = "-machine virt" 31QB_MACHINE = "-machine virt"
31QB_DEFAULT_BIOS = "fw_jump.elf" 32QB_DEFAULT_BIOS = "fw_jump.elf"
32QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no" 33QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
diff --git a/meta/conf/toolchain/build-gcc.inc b/meta/conf/toolchain/build-gcc.inc
new file mode 100644
index 0000000000..a708bd0389
--- /dev/null
+++ b/meta/conf/toolchain/build-gcc.inc
@@ -0,0 +1,15 @@
1BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}"
2BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}"
3BUILD_FC = "${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}"
4BUILD_CPP = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH} -E"
5BUILD_LD = "${BUILD_PREFIX}ld ${BUILD_LD_ARCH}"
6BUILD_CCLD = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}"
7BUILD_AR = "${BUILD_PREFIX}ar"
8BUILD_AS = "${BUILD_PREFIX}as ${BUILD_AS_ARCH}"
9BUILD_RANLIB = "${BUILD_PREFIX}ranlib -D"
10BUILD_STRIP = "${BUILD_PREFIX}strip"
11BUILD_OBJCOPY = "${BUILD_PREFIX}objcopy"
12BUILD_OBJDUMP = "${BUILD_PREFIX}objdump"
13BUILD_NM = "${BUILD_PREFIX}nm"
14BUILD_READELF = "${BUILD_PREFIX}readelf"
15
diff --git a/meta/conf/toolchain/clang.inc b/meta/conf/toolchain/clang.inc
index e69de29bb2..40bfba2fd4 100644
--- a/meta/conf/toolchain/clang.inc
+++ b/meta/conf/toolchain/clang.inc
@@ -0,0 +1,26 @@
1CC = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
2CXX = "${CCACHE}${HOST_PREFIX}clang++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
3FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
4CPP = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} -E"
5LD = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-lld', '${HOST_PREFIX}ld.lld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', '${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}', d)}"
6CCLD = "${CCACHE}${HOST_PREFIX}clang ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
7RANLIB = "${HOST_PREFIX}llvm-ranlib"
8AR = "${HOST_PREFIX}llvm-ar"
9AS = "${HOST_PREFIX}as ${HOST_AS_ARCH}"
10RANLIB = "${HOST_PREFIX}gcc-ranlib"
11STRIP = "${HOST_PREFIX}llvm-strip"
12OBJCOPY = "${HOST_PREFIX}llvm-objcopy"
13OBJDUMP = "${HOST_PREFIX}llvm-objdump"
14STRINGS = "${HOST_PREFIX}llvm-strings"
15NM = "${HOST_PREFIX}llvm-nm"
16READELF = "${HOST_PREFIX}llvm-readelf"
17
18PREFERRED_PROVIDER_virtual/cross-cc = "${MLPREFIX}clang-cross-${TARGET_ARCH}"
19PREFERRED_PROVIDER_virtual/cross-c++ = "${MLPREFIX}clang-cross-${TARGET_ARCH}"
20PREFERRED_PROVIDER_virtual/compilerlibs = "gcc-runtime"
21PREFERRED_PROVIDER_virtual/cross-cc:class-nativesdk = "gcc-crosssdk-${SDK_SYS}"
22PREFERRED_PROVIDER_virtual/cross-c++:class-nativesdk = "gcc-crosssdk-${SDK_SYS}"
23
24PREFERRED_PROVIDER_virtual/nativesdk-cross-cc = "gcc-crosssdk-${SDK_SYS}"
25PREFERRED_PROVIDER_virtual/nativesdk-cross-c++ = "gcc-crosssdk-${SDK_SYS}"
26PREFERRED_PROVIDER_virtual/nativesdk-compilerlibs = "nativesdk-gcc-runtime"
diff --git a/meta/conf/toolchain/gcc.inc b/meta/conf/toolchain/gcc.inc
index c338d26c47..36d33f5d6d 100644
--- a/meta/conf/toolchain/gcc.inc
+++ b/meta/conf/toolchain/gcc.inc
@@ -1,4 +1,3 @@
1CCACHE ??= ""
2CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" 1CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
3CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" 2CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
4FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" 3FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
@@ -15,18 +14,13 @@ STRINGS = "${HOST_PREFIX}strings"
15NM = "${HOST_PREFIX}gcc-nm" 14NM = "${HOST_PREFIX}gcc-nm"
16READELF = "${HOST_PREFIX}readelf" 15READELF = "${HOST_PREFIX}readelf"
17 16
18BUILD_CC = "${CCACHE}${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" 17PREFERRED_PROVIDER_virtual/cross-cc = "${MLPREFIX}gcc-cross-${TARGET_ARCH}"
19BUILD_CXX = "${CCACHE}${BUILD_PREFIX}g++ ${BUILD_CC_ARCH}" 18PREFERRED_PROVIDER_virtual/cross-c++ = "${MLPREFIX}gcc-cross-${TARGET_ARCH}"
20BUILD_FC = "${BUILD_PREFIX}gfortran ${BUILD_CC_ARCH}" 19PREFERRED_PROVIDER_virtual/compilerlibs = "gcc-runtime"
21BUILD_CPP = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH} -E" 20PREFERRED_PROVIDER_virtual/cross-cc:class-nativesdk = "gcc-crosssdk-${SDK_SYS}"
22BUILD_LD = "${BUILD_PREFIX}ld ${BUILD_LD_ARCH}" 21PREFERRED_PROVIDER_virtual/cross-c++:class-nativesdk = "gcc-crosssdk-${SDK_SYS}"
23BUILD_CCLD = "${BUILD_PREFIX}gcc ${BUILD_CC_ARCH}" 22
24BUILD_AR = "${BUILD_PREFIX}ar" 23PREFERRED_PROVIDER_virtual/nativesdk-cross-cc = "gcc-crosssdk-${SDK_SYS}"
25BUILD_AS = "${BUILD_PREFIX}as ${BUILD_AS_ARCH}" 24PREFERRED_PROVIDER_virtual/nativesdk-cross-c++ = "gcc-crosssdk-${SDK_SYS}"
26BUILD_RANLIB = "${BUILD_PREFIX}ranlib -D" 25PREFERRED_PROVIDER_virtual/nativesdk-compilerlibs = "nativesdk-gcc-runtime"
27BUILD_STRIP = "${BUILD_PREFIX}strip"
28BUILD_OBJCOPY = "${BUILD_PREFIX}objcopy"
29BUILD_OBJDUMP = "${BUILD_PREFIX}objdump"
30BUILD_NM = "${BUILD_PREFIX}nm"
31BUILD_READELF = "${BUILD_PREFIX}readelf"
32 26
diff --git a/meta/files/overlayfs-create-dirs.service.in b/meta/files/overlayfs-create-dirs.service.in
index d8d916365a..c8431548d7 100644
--- a/meta/files/overlayfs-create-dirs.service.in
+++ b/meta/files/overlayfs-create-dirs.service.in
@@ -1,7 +1,6 @@
1[Unit] 1[Unit]
2Description=Overlayfs directories setup {LOWERDIR} 2Description=Overlayfs directories setup {LOWERDIR}
3Requires={DATA_MOUNT_UNIT} 3RequiresMountsFor={DATA_MOUNT_POINT}
4After={DATA_MOUNT_UNIT}
5DefaultDependencies=no 4DefaultDependencies=no
6 5
7[Service] 6[Service]
diff --git a/meta/lib/oe/classextend.py b/meta/lib/oe/classextend.py
index 7dd4bf94e7..8ae5d3b715 100644
--- a/meta/lib/oe/classextend.py
+++ b/meta/lib/oe/classextend.py
@@ -32,8 +32,6 @@ class ClassExtender(object):
32 if name.endswith("-" + self.extname): 32 if name.endswith("-" + self.extname):
33 name = name.replace("-" + self.extname, "") 33 name = name.replace("-" + self.extname, "")
34 if name.startswith("virtual/"): 34 if name.startswith("virtual/"):
35 if "cross-sdk" in name:
36 return name
37 # Assume large numbers of dashes means a triplet is present and we don't need to convert 35 # Assume large numbers of dashes means a triplet is present and we don't need to convert
38 if name.count("-") >= 3 and name.endswith(("-go",)): 36 if name.count("-") >= 3 and name.endswith(("-go",)):
39 return name 37 return name
diff --git a/meta/lib/oe/sbom30.py b/meta/lib/oe/sbom30.py
index 7993e1fbef..f7c4b323d5 100644
--- a/meta/lib/oe/sbom30.py
+++ b/meta/lib/oe/sbom30.py
@@ -495,7 +495,7 @@ class ObjectSet(oe.spdx30.SHACLObjectSet):
495 return [] 495 return []
496 496
497 if not to: 497 if not to:
498 to = [oe.spdx30.Element.NoneElement] 498 to = [oe.spdx30.IndividualElement.NoneElement]
499 499
500 ret = [] 500 ret = []
501 501
diff --git a/meta/lib/oe/spdx30.py b/meta/lib/oe/spdx30.py
index 5cd2eb45c3..cd97eebd18 100644
--- a/meta/lib/oe/spdx30.py
+++ b/meta/lib/oe/spdx30.py
@@ -133,8 +133,9 @@ class DateTimeProp(Property):
133 if value.utcoffset() is None: 133 if value.utcoffset() is None:
134 value = value.astimezone() 134 value = value.astimezone()
135 offset = value.utcoffset() 135 offset = value.utcoffset()
136 if offset % timedelta(minutes=1): 136 seconds = offset % timedelta(minutes=-1 if offset.total_seconds() < 0 else 1)
137 offset = offset - (offset % timedelta(minutes=1)) 137 if seconds:
138 offset = offset - seconds
138 value = value.replace(tzinfo=timezone(offset)) 139 value = value.replace(tzinfo=timezone(offset))
139 value = value.replace(microsecond=0) 140 value = value.replace(microsecond=0)
140 return value 141 return value
@@ -922,6 +923,12 @@ class SHACLExtensibleObject(object):
922 return obj 923 return obj
923 924
924 def _decode_properties(self, decoder, objectset=None): 925 def _decode_properties(self, decoder, objectset=None):
926 def decode_value(d):
927 if not d.is_list():
928 return d.read_value()
929
930 return [decode_value(val_d) for val_d in d.read_list()]
931
925 if self.CLOSED: 932 if self.CLOSED:
926 super()._decode_properties(decoder, objectset=objectset) 933 super()._decode_properties(decoder, objectset=objectset)
927 return 934 return
@@ -936,7 +943,7 @@ class SHACLExtensibleObject(object):
936 ) 943 )
937 944
938 with decoder.read_property(key) as prop_d: 945 with decoder.read_property(key) as prop_d:
939 self.__dict__["_obj_data"][key] = prop_d.read_value() 946 self.__dict__["_obj_data"][key] = decode_value(prop_d)
940 947
941 def _encode_properties(self, encoder, state): 948 def _encode_properties(self, encoder, state):
942 def encode_value(encoder, v): 949 def encode_value(encoder, v):
@@ -948,6 +955,11 @@ class SHACLExtensibleObject(object):
948 encoder.write_integer(v) 955 encoder.write_integer(v)
949 elif isinstance(v, float): 956 elif isinstance(v, float):
950 encoder.write_float(v) 957 encoder.write_float(v)
958 elif isinstance(v, list):
959 with encoder.write_list() as list_s:
960 for i in v:
961 with list_s.write_list_item() as item_s:
962 encode_value(item_s, i)
951 else: 963 else:
952 raise TypeError( 964 raise TypeError(
953 f"Unsupported serialized type {type(v)} with value '{v}'" 965 f"Unsupported serialized type {type(v)} with value '{v}'"
@@ -1197,7 +1209,7 @@ class SHACLObjectSet(object):
1197 1209
1198 return SHACLObjectSet(new_objects, link=True) 1210 return SHACLObjectSet(new_objects, link=True)
1199 1211
1200 def encode(self, encoder, force_list=False): 1212 def encode(self, encoder, force_list=False, *, key=None):
1201 """ 1213 """
1202 Serialize a list of objects to a serialization encoder 1214 Serialize a list of objects to a serialization encoder
1203 1215
@@ -1244,7 +1256,7 @@ class SHACLObjectSet(object):
1244 else: 1256 else:
1245 objects = list(self.objects) 1257 objects = list(self.objects)
1246 1258
1247 objects.sort() 1259 objects.sort(key=key)
1248 1260
1249 if use_list: 1261 if use_list:
1250 # Ensure top level objects are only written in the top level graph 1262 # Ensure top level objects are only written in the top level graph
@@ -1265,7 +1277,7 @@ class SHACLObjectSet(object):
1265 with list_s.write_list_item() as item_s: 1277 with list_s.write_list_item() as item_s:
1266 o.encode(item_s, state) 1278 o.encode(item_s, state)
1267 1279
1268 else: 1280 elif objects:
1269 objects[0].encode(encoder, state) 1281 objects[0].encode(encoder, state)
1270 1282
1271 def decode(self, decoder): 1283 def decode(self, decoder):
@@ -1410,6 +1422,15 @@ class Decoder(ABC):
1410 pass 1422 pass
1411 1423
1412 @abstractmethod 1424 @abstractmethod
1425 def is_list(self):
1426 """
1427 Checks if the next item is a list
1428
1429 Returns True if the next item is a list, or False if it is a scalar
1430 """
1431 pass
1432
1433 @abstractmethod
1413 def read_object(self): 1434 def read_object(self):
1414 """ 1435 """
1415 Consume next item as an object 1436 Consume next item as an object
@@ -1507,12 +1528,15 @@ class JSONLDDecoder(Decoder):
1507 return None 1528 return None
1508 1529
1509 def read_list(self): 1530 def read_list(self):
1510 if isinstance(self.data, (list, tuple, set)): 1531 if self.is_list():
1511 for v in self.data: 1532 for v in self.data:
1512 yield self.__class__(v) 1533 yield self.__class__(v)
1513 else: 1534 else:
1514 yield self 1535 yield self
1515 1536
1537 def is_list(self):
1538 return isinstance(self.data, (list, tuple, set))
1539
1516 def __get_value(self, *keys): 1540 def __get_value(self, *keys):
1517 for k in keys: 1541 for k in keys:
1518 if k and k in self.data: 1542 if k and k in self.data:
@@ -1962,18 +1986,11 @@ CONTEXT_URLS = [
1962 1986
1963 1987
1964# CLASSES 1988# CLASSES
1965@register("http://spdx.invalid./AbstractClass", abstract=False)
1966class http_spdx_invalid_AbstractClass(SHACLObject):
1967 NODE_KIND = NodeKind.BlankNodeOrIRI
1968 NAMED_INDIVIDUALS = {
1969 }
1970
1971
1972# A class for describing the energy consumption incurred by an AI model in 1989# A class for describing the energy consumption incurred by an AI model in
1973# different stages of its lifecycle. 1990# different stages of its lifecycle.
1974@register("https://spdx.org/rdf/3.0.1/terms/AI/EnergyConsumption", compact_type="ai_EnergyConsumption", abstract=False) 1991@register("https://spdx.org/rdf/3.0.1/terms/AI/EnergyConsumption", compact_type="ai_EnergyConsumption", abstract=False)
1975class ai_EnergyConsumption(SHACLObject): 1992class ai_EnergyConsumption(SHACLObject):
1976 NODE_KIND = NodeKind.BlankNode 1993 NODE_KIND = NodeKind.BlankNodeOrIRI
1977 NAMED_INDIVIDUALS = { 1994 NAMED_INDIVIDUALS = {
1978 } 1995 }
1979 1996
@@ -2010,7 +2027,7 @@ class ai_EnergyConsumption(SHACLObject):
2010# used for measurement. 2027# used for measurement.
2011@register("https://spdx.org/rdf/3.0.1/terms/AI/EnergyConsumptionDescription", compact_type="ai_EnergyConsumptionDescription", abstract=False) 2028@register("https://spdx.org/rdf/3.0.1/terms/AI/EnergyConsumptionDescription", compact_type="ai_EnergyConsumptionDescription", abstract=False)
2012class ai_EnergyConsumptionDescription(SHACLObject): 2029class ai_EnergyConsumptionDescription(SHACLObject):
2013 NODE_KIND = NodeKind.BlankNode 2030 NODE_KIND = NodeKind.BlankNodeOrIRI
2014 NAMED_INDIVIDUALS = { 2031 NAMED_INDIVIDUALS = {
2015 } 2032 }
2016 2033
@@ -2093,7 +2110,7 @@ class AnnotationType(SHACLObject):
2093# Provides information about the creation of the Element. 2110# Provides information about the creation of the Element.
2094@register("https://spdx.org/rdf/3.0.1/terms/Core/CreationInfo", compact_type="CreationInfo", abstract=False) 2111@register("https://spdx.org/rdf/3.0.1/terms/Core/CreationInfo", compact_type="CreationInfo", abstract=False)
2095class CreationInfo(SHACLObject): 2112class CreationInfo(SHACLObject):
2096 NODE_KIND = NodeKind.BlankNode 2113 NODE_KIND = NodeKind.BlankNodeOrIRI
2097 NAMED_INDIVIDUALS = { 2114 NAMED_INDIVIDUALS = {
2098 } 2115 }
2099 2116
@@ -2147,7 +2164,7 @@ class CreationInfo(SHACLObject):
2147# A key with an associated value. 2164# A key with an associated value.
2148@register("https://spdx.org/rdf/3.0.1/terms/Core/DictionaryEntry", compact_type="DictionaryEntry", abstract=False) 2165@register("https://spdx.org/rdf/3.0.1/terms/Core/DictionaryEntry", compact_type="DictionaryEntry", abstract=False)
2149class DictionaryEntry(SHACLObject): 2166class DictionaryEntry(SHACLObject):
2150 NODE_KIND = NodeKind.BlankNode 2167 NODE_KIND = NodeKind.BlankNodeOrIRI
2151 NAMED_INDIVIDUALS = { 2168 NAMED_INDIVIDUALS = {
2152 } 2169 }
2153 2170
@@ -2177,15 +2194,7 @@ class Element(SHACLObject):
2177 NODE_KIND = NodeKind.IRI 2194 NODE_KIND = NodeKind.IRI
2178 ID_ALIAS = "spdxId" 2195 ID_ALIAS = "spdxId"
2179 NAMED_INDIVIDUALS = { 2196 NAMED_INDIVIDUALS = {
2180 "NoAssertionElement": "https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement",
2181 "NoneElement": "https://spdx.org/rdf/3.0.1/terms/Core/NoneElement",
2182 } 2197 }
2183 # An Individual Value for Element representing a set of Elements of unknown
2184 # identify or cardinality (number).
2185 NoAssertionElement = "https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement"
2186 # An Individual Value for Element representing a set of Elements with
2187 # cardinality (number/count) of zero.
2188 NoneElement = "https://spdx.org/rdf/3.0.1/terms/Core/NoneElement"
2189 2198
2190 @classmethod 2199 @classmethod
2191 def _register_props(cls): 2200 def _register_props(cls):
@@ -2276,10 +2285,10 @@ class ElementCollection(Element):
2276 "element", 2285 "element",
2277 ListProp(ObjectProp(Element, False, context=[ 2286 ListProp(ObjectProp(Element, False, context=[
2278 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"), 2287 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"),
2288 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
2289 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
2279 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"), 2290 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"),
2280 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"), 2291 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"),
2281 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
2282 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
2283 ],)), 2292 ],)),
2284 iri="https://spdx.org/rdf/3.0.1/terms/Core/element", 2293 iri="https://spdx.org/rdf/3.0.1/terms/Core/element",
2285 compact="element", 2294 compact="element",
@@ -2308,10 +2317,10 @@ class ElementCollection(Element):
2308 "rootElement", 2317 "rootElement",
2309 ListProp(ObjectProp(Element, False, context=[ 2318 ListProp(ObjectProp(Element, False, context=[
2310 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"), 2319 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"),
2320 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
2321 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
2311 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"), 2322 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"),
2312 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"), 2323 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"),
2313 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
2314 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
2315 ],)), 2324 ],)),
2316 iri="https://spdx.org/rdf/3.0.1/terms/Core/rootElement", 2325 iri="https://spdx.org/rdf/3.0.1/terms/Core/rootElement",
2317 compact="rootElement", 2326 compact="rootElement",
@@ -2321,7 +2330,7 @@ class ElementCollection(Element):
2321# A reference to a resource identifier defined outside the scope of SPDX-3.0 content that uniquely identifies an Element. 2330# A reference to a resource identifier defined outside the scope of SPDX-3.0 content that uniquely identifies an Element.
2322@register("https://spdx.org/rdf/3.0.1/terms/Core/ExternalIdentifier", compact_type="ExternalIdentifier", abstract=False) 2331@register("https://spdx.org/rdf/3.0.1/terms/Core/ExternalIdentifier", compact_type="ExternalIdentifier", abstract=False)
2323class ExternalIdentifier(SHACLObject): 2332class ExternalIdentifier(SHACLObject):
2324 NODE_KIND = NodeKind.BlankNode 2333 NODE_KIND = NodeKind.BlankNodeOrIRI
2325 NAMED_INDIVIDUALS = { 2334 NAMED_INDIVIDUALS = {
2326 } 2335 }
2327 2336
@@ -2425,7 +2434,7 @@ class ExternalIdentifierType(SHACLObject):
2425# external to that SpdxDocument. 2434# external to that SpdxDocument.
2426@register("https://spdx.org/rdf/3.0.1/terms/Core/ExternalMap", compact_type="ExternalMap", abstract=False) 2435@register("https://spdx.org/rdf/3.0.1/terms/Core/ExternalMap", compact_type="ExternalMap", abstract=False)
2427class ExternalMap(SHACLObject): 2436class ExternalMap(SHACLObject):
2428 NODE_KIND = NodeKind.BlankNode 2437 NODE_KIND = NodeKind.BlankNodeOrIRI
2429 NAMED_INDIVIDUALS = { 2438 NAMED_INDIVIDUALS = {
2430 } 2439 }
2431 2440
@@ -2469,7 +2478,7 @@ class ExternalMap(SHACLObject):
2469# A reference to a resource outside the scope of SPDX-3.0 content related to an Element. 2478# A reference to a resource outside the scope of SPDX-3.0 content related to an Element.
2470@register("https://spdx.org/rdf/3.0.1/terms/Core/ExternalRef", compact_type="ExternalRef", abstract=False) 2479@register("https://spdx.org/rdf/3.0.1/terms/Core/ExternalRef", compact_type="ExternalRef", abstract=False)
2471class ExternalRef(SHACLObject): 2480class ExternalRef(SHACLObject):
2472 NODE_KIND = NodeKind.BlankNode 2481 NODE_KIND = NodeKind.BlankNodeOrIRI
2473 NAMED_INDIVIDUALS = { 2482 NAMED_INDIVIDUALS = {
2474 } 2483 }
2475 2484
@@ -2774,10 +2783,28 @@ class HashAlgorithm(SHACLObject):
2774 sha512 = "https://spdx.org/rdf/3.0.1/terms/Core/HashAlgorithm/sha512" 2783 sha512 = "https://spdx.org/rdf/3.0.1/terms/Core/HashAlgorithm/sha512"
2775 2784
2776 2785
2786# A concrete subclass of Element used by Individuals in the
2787# Core profile.
2788@register("https://spdx.org/rdf/3.0.1/terms/Core/IndividualElement", compact_type="IndividualElement", abstract=False)
2789class IndividualElement(Element):
2790 NODE_KIND = NodeKind.IRI
2791 ID_ALIAS = "spdxId"
2792 NAMED_INDIVIDUALS = {
2793 "NoAssertionElement": "https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement",
2794 "NoneElement": "https://spdx.org/rdf/3.0.1/terms/Core/NoneElement",
2795 }
2796 # An Individual Value for Element representing a set of Elements of unknown
2797 # identify or cardinality (number).
2798 NoAssertionElement = "https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement"
2799 # An Individual Value for Element representing a set of Elements with
2800 # cardinality (number/count) of zero.
2801 NoneElement = "https://spdx.org/rdf/3.0.1/terms/Core/NoneElement"
2802
2803
2777# Provides an independently reproducible mechanism that permits verification of a specific Element. 2804# Provides an independently reproducible mechanism that permits verification of a specific Element.
2778@register("https://spdx.org/rdf/3.0.1/terms/Core/IntegrityMethod", compact_type="IntegrityMethod", abstract=True) 2805@register("https://spdx.org/rdf/3.0.1/terms/Core/IntegrityMethod", compact_type="IntegrityMethod", abstract=True)
2779class IntegrityMethod(SHACLObject): 2806class IntegrityMethod(SHACLObject):
2780 NODE_KIND = NodeKind.BlankNode 2807 NODE_KIND = NodeKind.BlankNodeOrIRI
2781 NAMED_INDIVIDUALS = { 2808 NAMED_INDIVIDUALS = {
2782 } 2809 }
2783 2810
@@ -2823,7 +2850,7 @@ class LifecycleScopeType(SHACLObject):
2823# A mapping between prefixes and namespace partial URIs. 2850# A mapping between prefixes and namespace partial URIs.
2824@register("https://spdx.org/rdf/3.0.1/terms/Core/NamespaceMap", compact_type="NamespaceMap", abstract=False) 2851@register("https://spdx.org/rdf/3.0.1/terms/Core/NamespaceMap", compact_type="NamespaceMap", abstract=False)
2825class NamespaceMap(SHACLObject): 2852class NamespaceMap(SHACLObject):
2826 NODE_KIND = NodeKind.BlankNode 2853 NODE_KIND = NodeKind.BlankNodeOrIRI
2827 NAMED_INDIVIDUALS = { 2854 NAMED_INDIVIDUALS = {
2828 } 2855 }
2829 2856
@@ -2852,7 +2879,7 @@ class NamespaceMap(SHACLObject):
2852# An SPDX version 2.X compatible verification method for software packages. 2879# An SPDX version 2.X compatible verification method for software packages.
2853@register("https://spdx.org/rdf/3.0.1/terms/Core/PackageVerificationCode", compact_type="PackageVerificationCode", abstract=False) 2880@register("https://spdx.org/rdf/3.0.1/terms/Core/PackageVerificationCode", compact_type="PackageVerificationCode", abstract=False)
2854class PackageVerificationCode(IntegrityMethod): 2881class PackageVerificationCode(IntegrityMethod):
2855 NODE_KIND = NodeKind.BlankNode 2882 NODE_KIND = NodeKind.BlankNodeOrIRI
2856 NAMED_INDIVIDUALS = { 2883 NAMED_INDIVIDUALS = {
2857 } 2884 }
2858 2885
@@ -2911,7 +2938,7 @@ class PackageVerificationCode(IntegrityMethod):
2911# A tuple of two positive integers that define a range. 2938# A tuple of two positive integers that define a range.
2912@register("https://spdx.org/rdf/3.0.1/terms/Core/PositiveIntegerRange", compact_type="PositiveIntegerRange", abstract=False) 2939@register("https://spdx.org/rdf/3.0.1/terms/Core/PositiveIntegerRange", compact_type="PositiveIntegerRange", abstract=False)
2913class PositiveIntegerRange(SHACLObject): 2940class PositiveIntegerRange(SHACLObject):
2914 NODE_KIND = NodeKind.BlankNode 2941 NODE_KIND = NodeKind.BlankNodeOrIRI
2915 NAMED_INDIVIDUALS = { 2942 NAMED_INDIVIDUALS = {
2916 } 2943 }
2917 2944
@@ -2977,7 +3004,7 @@ class ProfileIdentifierType(SHACLObject):
2977 core = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/core" 3004 core = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/core"
2978 # the element follows the Dataset profile specification 3005 # the element follows the Dataset profile specification
2979 dataset = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/dataset" 3006 dataset = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/dataset"
2980 # the element follows the expanded Licensing profile specification 3007 # the element follows the ExpandedLicensing profile specification
2981 expandedLicensing = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/expandedLicensing" 3008 expandedLicensing = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/expandedLicensing"
2982 # the element follows the Extension profile specification 3009 # the element follows the Extension profile specification
2983 extension = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/extension" 3010 extension = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/extension"
@@ -2985,7 +3012,7 @@ class ProfileIdentifierType(SHACLObject):
2985 lite = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/lite" 3012 lite = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/lite"
2986 # the element follows the Security profile specification 3013 # the element follows the Security profile specification
2987 security = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/security" 3014 security = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/security"
2988 # the element follows the simple Licensing profile specification 3015 # the element follows the SimpleLicensing profile specification
2989 simpleLicensing = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/simpleLicensing" 3016 simpleLicensing = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/simpleLicensing"
2990 # the element follows the Software profile specification 3017 # the element follows the Software profile specification
2991 software = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/software" 3018 software = "https://spdx.org/rdf/3.0.1/terms/Core/ProfileIdentifierType/software"
@@ -3025,10 +3052,10 @@ class Relationship(Element):
3025 "from_", 3052 "from_",
3026 ObjectProp(Element, True, context=[ 3053 ObjectProp(Element, True, context=[
3027 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"), 3054 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"),
3055 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
3056 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3028 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"), 3057 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"),
3029 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"), 3058 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"),
3030 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3031 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
3032 ],), 3059 ],),
3033 iri="https://spdx.org/rdf/3.0.1/terms/Core/from", 3060 iri="https://spdx.org/rdf/3.0.1/terms/Core/from",
3034 min_count=1, 3061 min_count=1,
@@ -3114,10 +3141,10 @@ class Relationship(Element):
3114 "to", 3141 "to",
3115 ListProp(ObjectProp(Element, False, context=[ 3142 ListProp(ObjectProp(Element, False, context=[
3116 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"), 3143 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"),
3144 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
3145 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3117 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"), 3146 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"),
3118 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"), 3147 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"),
3119 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3120 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
3121 ],)), 3148 ],)),
3122 iri="https://spdx.org/rdf/3.0.1/terms/Core/to", 3149 iri="https://spdx.org/rdf/3.0.1/terms/Core/to",
3123 min_count=1, 3150 min_count=1,
@@ -3343,8 +3370,8 @@ class SpdxDocument(ElementCollection):
3343 cls._add_property( 3370 cls._add_property(
3344 "dataLicense", 3371 "dataLicense",
3345 ObjectProp(simplelicensing_AnyLicenseInfo, False, context=[ 3372 ObjectProp(simplelicensing_AnyLicenseInfo, False, context=[
3346 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3347 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"), 3373 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
3374 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3348 ],), 3375 ],),
3349 iri="https://spdx.org/rdf/3.0.1/terms/Core/dataLicense", 3376 iri="https://spdx.org/rdf/3.0.1/terms/Core/dataLicense",
3350 compact="dataLicense", 3377 compact="dataLicense",
@@ -3587,7 +3614,7 @@ class expandedlicensing_ListedLicenseException(expandedlicensing_LicenseAddition
3587# A property name with an associated value. 3614# A property name with an associated value.
3588@register("https://spdx.org/rdf/3.0.1/terms/Extension/CdxPropertyEntry", compact_type="extension_CdxPropertyEntry", abstract=False) 3615@register("https://spdx.org/rdf/3.0.1/terms/Extension/CdxPropertyEntry", compact_type="extension_CdxPropertyEntry", abstract=False)
3589class extension_CdxPropertyEntry(SHACLObject): 3616class extension_CdxPropertyEntry(SHACLObject):
3590 NODE_KIND = NodeKind.BlankNode 3617 NODE_KIND = NodeKind.BlankNodeOrIRI
3591 NAMED_INDIVIDUALS = { 3618 NAMED_INDIVIDUALS = {
3592 } 3619 }
3593 3620
@@ -3614,7 +3641,7 @@ class extension_CdxPropertyEntry(SHACLObject):
3614# A characterization of some aspect of an Element that is associated with the Element in a generalized fashion. 3641# A characterization of some aspect of an Element that is associated with the Element in a generalized fashion.
3615@register("https://spdx.org/rdf/3.0.1/terms/Extension/Extension", compact_type="extension_Extension", abstract=True) 3642@register("https://spdx.org/rdf/3.0.1/terms/Extension/Extension", compact_type="extension_Extension", abstract=True)
3616class extension_Extension(SHACLExtensibleObject, SHACLObject): 3643class extension_Extension(SHACLExtensibleObject, SHACLObject):
3617 NODE_KIND = NodeKind.BlankNode 3644 NODE_KIND = NodeKind.BlankNodeOrIRI
3618 NAMED_INDIVIDUALS = { 3645 NAMED_INDIVIDUALS = {
3619 } 3646 }
3620 3647
@@ -3724,13 +3751,7 @@ class security_VulnAssessmentRelationship(Relationship):
3724 # found. 3751 # found.
3725 cls._add_property( 3752 cls._add_property(
3726 "security_assessedElement", 3753 "security_assessedElement",
3727 ObjectProp(Element, False, context=[ 3754 ObjectProp(software_SoftwareArtifact, False),
3728 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"),
3729 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"),
3730 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"),
3731 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
3732 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
3733 ],),
3734 iri="https://spdx.org/rdf/3.0.1/terms/Security/assessedElement", 3755 iri="https://spdx.org/rdf/3.0.1/terms/Security/assessedElement",
3735 compact="security_assessedElement", 3756 compact="security_assessedElement",
3736 ) 3757 )
@@ -3826,7 +3847,7 @@ class simplelicensing_SimpleLicensingText(Element):
3826# A canonical, unique, immutable identifier 3847# A canonical, unique, immutable identifier
3827@register("https://spdx.org/rdf/3.0.1/terms/Software/ContentIdentifier", compact_type="software_ContentIdentifier", abstract=False) 3848@register("https://spdx.org/rdf/3.0.1/terms/Software/ContentIdentifier", compact_type="software_ContentIdentifier", abstract=False)
3828class software_ContentIdentifier(IntegrityMethod): 3849class software_ContentIdentifier(IntegrityMethod):
3829 NODE_KIND = NodeKind.BlankNode 3850 NODE_KIND = NodeKind.BlankNodeOrIRI
3830 NAMED_INDIVIDUALS = { 3851 NAMED_INDIVIDUALS = {
3831 } 3852 }
3832 3853
@@ -4134,10 +4155,10 @@ class Annotation(Element):
4134 "subject", 4155 "subject",
4135 ObjectProp(Element, True, context=[ 4156 ObjectProp(Element, True, context=[
4136 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"), 4157 ("https://spdx.org/rdf/3.0.1/terms/Core/NoneElement", "NoneElement"),
4158 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
4159 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
4137 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"), 4160 ("https://spdx.org/rdf/3.0.1/terms/Core/SpdxOrganization", "SpdxOrganization"),
4138 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"), 4161 ("https://spdx.org/rdf/3.0.1/terms/Core/NoAssertionElement", "NoAssertionElement"),
4139 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
4140 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
4141 ],), 4162 ],),
4142 iri="https://spdx.org/rdf/3.0.1/terms/Core/subject", 4163 iri="https://spdx.org/rdf/3.0.1/terms/Core/subject",
4143 min_count=1, 4164 min_count=1,
@@ -4245,7 +4266,7 @@ class Bundle(ElementCollection):
4245# A mathematically calculated representation of a grouping of data. 4266# A mathematically calculated representation of a grouping of data.
4246@register("https://spdx.org/rdf/3.0.1/terms/Core/Hash", compact_type="Hash", abstract=False) 4267@register("https://spdx.org/rdf/3.0.1/terms/Core/Hash", compact_type="Hash", abstract=False)
4247class Hash(IntegrityMethod): 4268class Hash(IntegrityMethod):
4248 NODE_KIND = NodeKind.BlankNode 4269 NODE_KIND = NodeKind.BlankNodeOrIRI
4249 NAMED_INDIVIDUALS = { 4270 NAMED_INDIVIDUALS = {
4250 } 4271 }
4251 4272
@@ -4366,8 +4387,8 @@ class expandedlicensing_ConjunctiveLicenseSet(simplelicensing_AnyLicenseInfo):
4366 cls._add_property( 4387 cls._add_property(
4367 "expandedlicensing_member", 4388 "expandedlicensing_member",
4368 ListProp(ObjectProp(simplelicensing_AnyLicenseInfo, False, context=[ 4389 ListProp(ObjectProp(simplelicensing_AnyLicenseInfo, False, context=[
4369 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
4370 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"), 4390 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
4391 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
4371 ],)), 4392 ],)),
4372 iri="https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/member", 4393 iri="https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/member",
4373 min_count=2, 4394 min_count=2,
@@ -4400,8 +4421,8 @@ class expandedlicensing_DisjunctiveLicenseSet(simplelicensing_AnyLicenseInfo):
4400 cls._add_property( 4421 cls._add_property(
4401 "expandedlicensing_member", 4422 "expandedlicensing_member",
4402 ListProp(ObjectProp(simplelicensing_AnyLicenseInfo, False, context=[ 4423 ListProp(ObjectProp(simplelicensing_AnyLicenseInfo, False, context=[
4403 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
4404 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"), 4424 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoAssertionLicense", "expandedlicensing_NoAssertionLicense"),
4425 ("https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/NoneLicense", "expandedlicensing_NoneLicense"),
4405 ],)), 4426 ],)),
4406 iri="https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/member", 4427 iri="https://spdx.org/rdf/3.0.1/terms/ExpandedLicensing/member",
4407 min_count=2, 4428 min_count=2,
@@ -4603,7 +4624,7 @@ class expandedlicensing_WithAdditionOperator(simplelicensing_AnyLicenseInfo):
4603# A type of extension consisting of a list of name value pairs. 4624# A type of extension consisting of a list of name value pairs.
4604@register("https://spdx.org/rdf/3.0.1/terms/Extension/CdxPropertiesExtension", compact_type="extension_CdxPropertiesExtension", abstract=False) 4625@register("https://spdx.org/rdf/3.0.1/terms/Extension/CdxPropertiesExtension", compact_type="extension_CdxPropertiesExtension", abstract=False)
4605class extension_CdxPropertiesExtension(extension_Extension): 4626class extension_CdxPropertiesExtension(extension_Extension):
4606 NODE_KIND = NodeKind.BlankNode 4627 NODE_KIND = NodeKind.BlankNodeOrIRI
4607 NAMED_INDIVIDUALS = { 4628 NAMED_INDIVIDUALS = {
4608 } 4629 }
4609 4630
@@ -4831,7 +4852,7 @@ class security_SsvcVulnAssessmentRelationship(security_VulnAssessmentRelationshi
4831 ) 4852 )
4832 4853
4833 4854
4834# Asbtract ancestor class for all VEX relationships 4855# Abstract ancestor class for all VEX relationships
4835@register("https://spdx.org/rdf/3.0.1/terms/Security/VexVulnAssessmentRelationship", compact_type="security_VexVulnAssessmentRelationship", abstract=True) 4856@register("https://spdx.org/rdf/3.0.1/terms/Security/VexVulnAssessmentRelationship", compact_type="security_VexVulnAssessmentRelationship", abstract=True)
4836class security_VexVulnAssessmentRelationship(security_VulnAssessmentRelationship): 4857class security_VexVulnAssessmentRelationship(security_VulnAssessmentRelationship):
4837 NODE_KIND = NodeKind.IRI 4858 NODE_KIND = NodeKind.IRI
@@ -5040,13 +5061,14 @@ class security_VexAffectedVulnAssessmentRelationship(security_VexVulnAssessmentR
5040 "security_actionStatement", 5061 "security_actionStatement",
5041 StringProp(), 5062 StringProp(),
5042 iri="https://spdx.org/rdf/3.0.1/terms/Security/actionStatement", 5063 iri="https://spdx.org/rdf/3.0.1/terms/Security/actionStatement",
5064 min_count=1,
5043 compact="security_actionStatement", 5065 compact="security_actionStatement",
5044 ) 5066 )
5045 # Records the time when a recommended action was communicated in a VEX statement 5067 # Records the time when a recommended action was communicated in a VEX statement
5046 # to mitigate a vulnerability. 5068 # to mitigate a vulnerability.
5047 cls._add_property( 5069 cls._add_property(
5048 "security_actionStatementTime", 5070 "security_actionStatementTime",
5049 ListProp(DateTimeStampProp(pattern=r"^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ$",)), 5071 DateTimeStampProp(pattern=r"^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ$",),
5050 iri="https://spdx.org/rdf/3.0.1/terms/Security/actionStatementTime", 5072 iri="https://spdx.org/rdf/3.0.1/terms/Security/actionStatementTime",
5051 compact="security_actionStatementTime", 5073 compact="security_actionStatementTime",
5052 ) 5074 )
diff --git a/meta/lib/oe/spdx30_tasks.py b/meta/lib/oe/spdx30_tasks.py
index c60c97896c..658e533d75 100644
--- a/meta/lib/oe/spdx30_tasks.py
+++ b/meta/lib/oe/spdx30_tasks.py
@@ -135,7 +135,7 @@ def add_package_files(
135 topdir, 135 topdir,
136 get_spdxid, 136 get_spdxid,
137 get_purposes, 137 get_purposes,
138 license_data, 138 license_data=None,
139 *, 139 *,
140 archive=None, 140 archive=None,
141 ignore_dirs=[], 141 ignore_dirs=[],
@@ -169,7 +169,10 @@ def add_package_files(
169 ) 169 )
170 spdx_files.add(spdx_file) 170 spdx_files.add(spdx_file)
171 171
172 if oe.spdx30.software_SoftwarePurpose.source in file_purposes: 172 if (
173 oe.spdx30.software_SoftwarePurpose.source in file_purposes
174 and license_data is not None
175 ):
173 objset.scan_declared_licenses(spdx_file, filepath, license_data) 176 objset.scan_declared_licenses(spdx_file, filepath, license_data)
174 177
175 if archive is not None: 178 if archive is not None:
@@ -1072,25 +1075,45 @@ def create_image_spdx(d):
1072 for image in task["images"]: 1075 for image in task["images"]:
1073 image_filename = image["filename"] 1076 image_filename = image["filename"]
1074 image_path = image_deploy_dir / image_filename 1077 image_path = image_deploy_dir / image_filename
1075 a = objset.add_root( 1078 if os.path.isdir(image_path):
1076 oe.spdx30.software_File( 1079 a = add_package_files(
1077 _id=objset.new_spdxid("image", image_filename), 1080 d,
1078 creationInfo=objset.doc.creationInfo, 1081 objset,
1079 name=image_filename, 1082 image_path,
1080 verifiedUsing=[ 1083 lambda file_counter: objset.new_spdxid(
1081 oe.spdx30.Hash( 1084 "imagefile", str(file_counter)
1082 algorithm=oe.spdx30.HashAlgorithm.sha256, 1085 ),
1083 hashValue=bb.utils.sha256_file(image_path), 1086 lambda filepath: [],
1084 ) 1087 license_data=None,
1085 ], 1088 ignore_dirs=[],
1089 ignore_top_level_dirs=[],
1090 archive=None,
1086 ) 1091 )
1087 ) 1092 artifacts.extend(a)
1088 set_purposes( 1093 else:
1089 d, a, "SPDX_IMAGE_PURPOSE:%s" % imagetype, "SPDX_IMAGE_PURPOSE" 1094 a = objset.add_root(
1090 ) 1095 oe.spdx30.software_File(
1091 set_timestamp_now(d, a, "builtTime") 1096 _id=objset.new_spdxid("image", image_filename),
1097 creationInfo=objset.doc.creationInfo,
1098 name=image_filename,
1099 verifiedUsing=[
1100 oe.spdx30.Hash(
1101 algorithm=oe.spdx30.HashAlgorithm.sha256,
1102 hashValue=bb.utils.sha256_file(image_path),
1103 )
1104 ],
1105 )
1106 )
1107
1108 artifacts.append(a)
1109
1110 for a in artifacts:
1111 set_purposes(
1112 d, a, "SPDX_IMAGE_PURPOSE:%s" % imagetype, "SPDX_IMAGE_PURPOSE"
1113 )
1114
1115 set_timestamp_now(d, a, "builtTime")
1092 1116
1093 artifacts.append(a)
1094 1117
1095 if artifacts: 1118 if artifacts:
1096 objset.new_scoped_relationship( 1119 objset.new_scoped_relationship(
diff --git a/meta/lib/oe/spdx_common.py b/meta/lib/oe/spdx_common.py
index ff18d91780..23a17271d6 100644
--- a/meta/lib/oe/spdx_common.py
+++ b/meta/lib/oe/spdx_common.py
@@ -187,6 +187,8 @@ def get_patched_src(d):
187 bb.build.exec_func("do_unpack", d) 187 bb.build.exec_func("do_unpack", d)
188 188
189 if d.getVar("SRC_URI") != "": 189 if d.getVar("SRC_URI") != "":
190 if bb.data.inherits_class('dos2unix', d):
191 bb.build.exec_func('do_convert_crlf_to_lf', d)
190 bb.build.exec_func("do_patch", d) 192 bb.build.exec_func("do_patch", d)
191 193
192 # Copy source from work-share to spdx_workdir 194 # Copy source from work-share to spdx_workdir
diff --git a/meta/lib/oeqa/sdk/context.py b/meta/lib/oeqa/sdk/context.py
index 01c38c24e6..77e6a98f39 100644
--- a/meta/lib/oeqa/sdk/context.py
+++ b/meta/lib/oeqa/sdk/context.py
@@ -41,11 +41,13 @@ class OESDKTestContext(OETestContext):
41 41
42 def hasTargetPackage(self, pkg, multilib=False, regex=False): 42 def hasTargetPackage(self, pkg, multilib=False, regex=False):
43 if multilib: 43 if multilib:
44 # match multilib according to sdk_env 44 stripped_sdk_env = os.path.basename(self.sdk_env)
45 mls = self.td.get('MULTILIB_VARIANTS', '').split() 45 if stripped_sdk_env.startswith('environment-setup-'):
46 for ml in mls: 46 # match multilib according to sdk_env
47 if ('ml'+ml) in self.sdk_env: 47 mls = self.td.get('MULTILIB_VARIANTS', '').split()
48 pkg = ml + '-' + pkg 48 for ml in mls:
49 if ('ml'+ml) in stripped_sdk_env:
50 pkg = ml + '-' + pkg
49 return self._hasPackage(self.target_pkg_manifest, pkg, regex=regex) 51 return self._hasPackage(self.target_pkg_manifest, pkg, regex=regex)
50 52
51class OESDKTestContextExecutor(OETestContextExecutor): 53class OESDKTestContextExecutor(OETestContextExecutor):
diff --git a/meta/lib/oeqa/selftest/cases/buildoptions.py b/meta/lib/oeqa/selftest/cases/buildoptions.py
index 09272314bb..b509bcf951 100644
--- a/meta/lib/oeqa/selftest/cases/buildoptions.py
+++ b/meta/lib/oeqa/selftest/cases/buildoptions.py
@@ -234,6 +234,5 @@ PREMIRRORS = "\\
234 234
235class Poisoning(OESelftestTestCase): 235class Poisoning(OESelftestTestCase):
236 def test_poisoning(self): 236 def test_poisoning(self):
237 res = bitbake("poison", ignore_status=True) 237 # The poison recipe fails if the poisoning didn't work
238 self.assertNotEqual(res.status, 0) 238 bitbake("poison")
239 self.assertTrue("is unsafe for cross-compilation" in res.output)
diff --git a/meta/lib/oeqa/selftest/cases/recipetool.py b/meta/lib/oeqa/selftest/cases/recipetool.py
index f742dd4d64..36557f270f 100644
--- a/meta/lib/oeqa/selftest/cases/recipetool.py
+++ b/meta/lib/oeqa/selftest/cases/recipetool.py
@@ -760,13 +760,13 @@ class RecipetoolCreateTests(RecipetoolBase):
760 temprecipe = os.path.join(self.tempdir, 'recipe') 760 temprecipe = os.path.join(self.tempdir, 'recipe')
761 os.makedirs(temprecipe) 761 os.makedirs(temprecipe)
762 762
763 recipefile = os.path.join(temprecipe, 'edgex-go_git.bb') 763 recipefile = os.path.join(temprecipe, 'recipetool-go-test_git.bb')
764 deps_require_file = os.path.join(temprecipe, 'edgex-go', 'edgex-go-modules.inc') 764 deps_require_file = os.path.join(temprecipe, 'recipetool-go-test', 'recipetool-go-test-modules.inc')
765 lics_require_file = os.path.join(temprecipe, 'edgex-go', 'edgex-go-licenses.inc') 765 lics_require_file = os.path.join(temprecipe, 'recipetool-go-test', 'recipetool-go-test-licenses.inc')
766 modules_txt_file = os.path.join(temprecipe, 'edgex-go', 'modules.txt') 766 modules_txt_file = os.path.join(temprecipe, 'recipetool-go-test', 'modules.txt')
767 767
768 srcuri = 'https://github.com/edgexfoundry/edgex-go.git' 768 srcuri = 'https://git.yoctoproject.org/recipetool-go-test.git'
769 srcrev = "v3.0.0" 769 srcrev = "c3e213c01b6c1406b430df03ef0d1ae77de5d2f7"
770 srcbranch = "main" 770 srcbranch = "main"
771 771
772 result = runCmd('recipetool create -o %s %s -S %s -B %s' % (temprecipe, srcuri, srcrev, srcbranch)) 772 result = runCmd('recipetool create -o %s %s -S %s -B %s' % (temprecipe, srcuri, srcrev, srcbranch))
@@ -775,207 +775,27 @@ class RecipetoolCreateTests(RecipetoolBase):
775 inherits = ['go-vendor'] 775 inherits = ['go-vendor']
776 776
777 checkvars = {} 777 checkvars = {}
778 checkvars['GO_IMPORT'] = "github.com/edgexfoundry/edgex-go" 778 checkvars['GO_IMPORT'] = "git.yoctoproject.org/recipetool-go-test"
779 checkvars['SRC_URI'] = {'git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https', 779 checkvars['SRC_URI'] = {'git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https',
780 'file://modules.txt'} 780 'file://modules.txt'}
781 checkvars['LIC_FILES_CHKSUM'] = {'file://src/${GO_IMPORT}/LICENSE;md5=8f8bc924cf73f6a32381e5fd4c58d603'} 781 checkvars['LIC_FILES_CHKSUM'] = {
782 'file://src/${GO_IMPORT}/LICENSE;md5=4e3933dd47afbf115e484d11385fb3bd',
783 'file://src/${GO_IMPORT}/is/LICENSE;md5=62beaee5a116dd1e80161667b1df39ab'
784 }
782 785
783 self.assertTrue(os.path.isfile(recipefile))
784 self._test_recipe_contents(recipefile, checkvars, inherits) 786 self._test_recipe_contents(recipefile, checkvars, inherits)
787 self.assertNotIn('Traceback', result.output)
785 788
786 checkvars = {} 789 checkvars = {}
787 checkvars['VENDORED_LIC_FILES_CHKSUM'] = set( 790 checkvars['VENDORED_LIC_FILES_CHKSUM'] = set(
788 ['file://src/${GO_IMPORT}/vendor/github.com/Microsoft/go-winio/LICENSE;md5=69205ff73858f2c22b2ca135b557e8ef', 791 ['file://src/${GO_IMPORT}/vendor/github.com/godbus/dbus/v5/LICENSE;md5=09042bd5c6c96a2b9e45ddf1bc517eed',
789 'file://src/${GO_IMPORT}/vendor/github.com/armon/go-metrics/LICENSE;md5=d2d77030c0183e3d1e66d26dc1f243be', 792 'file://src/${GO_IMPORT}/vendor/github.com/matryer/is/LICENSE;md5=62beaee5a116dd1e80161667b1df39ab'])
790 'file://src/${GO_IMPORT}/vendor/github.com/cenkalti/backoff/LICENSE;md5=1571d94433e3f3aa05267efd4dbea68b',
791 'file://src/${GO_IMPORT}/vendor/github.com/davecgh/go-spew/LICENSE;md5=c06795ed54b2a35ebeeb543cd3a73e56',
792 'file://src/${GO_IMPORT}/vendor/github.com/eclipse/paho.mqtt.golang/LICENSE;md5=dcdb33474b60c38efd27356d8f2edec7',
793 'file://src/${GO_IMPORT}/vendor/github.com/eclipse/paho.mqtt.golang/edl-v10;md5=3adfcc70f5aeb7a44f3f9b495aa1fbf3',
794 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-bootstrap/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
795 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-configuration/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
796 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-core-contracts/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
797 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-messaging/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
798 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-registry/v3/LICENSE;md5=0d6dae39976133b2851fba4c1e1275ff',
799 'file://src/${GO_IMPORT}/vendor/github.com/edgexfoundry/go-mod-secrets/v3/LICENSE;md5=f9fa2f4f8e0ef8cc7b5dd150963eb457',
800 'file://src/${GO_IMPORT}/vendor/github.com/fatih/color/LICENSE.md;md5=316e6d590bdcde7993fb175662c0dd5a',
801 'file://src/${GO_IMPORT}/vendor/github.com/fxamacker/cbor/v2/LICENSE;md5=827f5a2fa861382d35a3943adf9ebb86',
802 'file://src/${GO_IMPORT}/vendor/github.com/go-jose/go-jose/v3/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
803 'file://src/${GO_IMPORT}/vendor/github.com/go-jose/go-jose/v3/json/LICENSE;md5=591778525c869cdde0ab5a1bf283cd81',
804 'file://src/${GO_IMPORT}/vendor/github.com/go-kit/log/LICENSE;md5=5b7c15ad5fffe2ff6e9d58a6c161f082',
805 'file://src/${GO_IMPORT}/vendor/github.com/go-logfmt/logfmt/LICENSE;md5=98e39517c38127f969de33057067091e',
806 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/locales/LICENSE;md5=3ccbda375ee345400ad1da85ba522301',
807 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/universal-translator/LICENSE;md5=2e2b21ef8f61057977d27c727c84bef1',
808 'file://src/${GO_IMPORT}/vendor/github.com/go-playground/validator/v10/LICENSE;md5=a718a0f318d76f7c5d510cbae84f0b60',
809 'file://src/${GO_IMPORT}/vendor/github.com/go-redis/redis/v7/LICENSE;md5=58103aa5ea1ee9b7a369c9c4a95ef9b5',
810 'file://src/${GO_IMPORT}/vendor/github.com/golang/protobuf/LICENSE;md5=939cce1ec101726fa754e698ac871622',
811 'file://src/${GO_IMPORT}/vendor/github.com/gomodule/redigo/LICENSE;md5=2ee41112a44fe7014dce33e26468ba93',
812 'file://src/${GO_IMPORT}/vendor/github.com/google/uuid/LICENSE;md5=88073b6dd8ec00fe09da59e0b6dfded1',
813 'file://src/${GO_IMPORT}/vendor/github.com/gorilla/mux/LICENSE;md5=33fa1116c45f9e8de714033f99edde13',
814 'file://src/${GO_IMPORT}/vendor/github.com/gorilla/websocket/LICENSE;md5=c007b54a1743d596f46b2748d9f8c044',
815 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/consul/api/LICENSE;md5=b8a277a612171b7526e9be072f405ef4',
816 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/errwrap/LICENSE;md5=b278a92d2c1509760384428817710378',
817 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-cleanhttp/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
818 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-hclog/LICENSE;md5=ec7f605b74b9ad03347d0a93a5cc7eb8',
819 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-immutable-radix/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
820 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-multierror/LICENSE;md5=d44fdeb607e2d2614db9464dbedd4094',
821 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/go-rootcerts/LICENSE;md5=65d26fcc2f35ea6a181ac777e42db1ea',
822 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/golang-lru/LICENSE;md5=f27a50d2e878867827842f2c60e30bfc',
823 'file://src/${GO_IMPORT}/vendor/github.com/hashicorp/serf/LICENSE;md5=b278a92d2c1509760384428817710378',
824 'file://src/${GO_IMPORT}/vendor/github.com/leodido/go-urn/LICENSE;md5=8f50db5538ec1148a9b3d14ed96c3418',
825 'file://src/${GO_IMPORT}/vendor/github.com/mattn/go-colorable/LICENSE;md5=24ce168f90aec2456a73de1839037245',
826 'file://src/${GO_IMPORT}/vendor/github.com/mattn/go-isatty/LICENSE;md5=f509beadd5a11227c27b5d2ad6c9f2c6',
827 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/consulstructure/LICENSE;md5=96ada10a9e51c98c4656f2cede08c673',
828 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/copystructure/LICENSE;md5=56da355a12d4821cda57b8f23ec34bc4',
829 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/go-homedir/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
830 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/mapstructure/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
831 'file://src/${GO_IMPORT}/vendor/github.com/mitchellh/reflectwalk/LICENSE;md5=3f7765c3d4f58e1f84c4313cecf0f5bd',
832 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nats.go/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
833 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nkeys/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
834 'file://src/${GO_IMPORT}/vendor/github.com/nats-io/nuid/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
835 'file://src/${GO_IMPORT}/vendor/github.com/pmezard/go-difflib/LICENSE;md5=e9a2ebb8de779a07500ddecca806145e',
836 'file://src/${GO_IMPORT}/vendor/github.com/rcrowley/go-metrics/LICENSE;md5=1bdf5d819f50f141366dabce3be1460f',
837 'file://src/${GO_IMPORT}/vendor/github.com/spiffe/go-spiffe/v2/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327',
838 'file://src/${GO_IMPORT}/vendor/github.com/stretchr/objx/LICENSE;md5=d023fd31d3ca39ec61eec65a91732735',
839 'file://src/${GO_IMPORT}/vendor/github.com/stretchr/testify/LICENSE;md5=188f01994659f3c0d310612333d2a26f',
840 'file://src/${GO_IMPORT}/vendor/github.com/x448/float16/LICENSE;md5=de8f8e025d57fe7ee0b67f30d571323b',
841 'file://src/${GO_IMPORT}/vendor/github.com/zeebo/errs/LICENSE;md5=84914ab36fc0eb48edbaa53e66e8d326',
842 'file://src/${GO_IMPORT}/vendor/golang.org/x/crypto/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
843 'file://src/${GO_IMPORT}/vendor/golang.org/x/mod/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
844 'file://src/${GO_IMPORT}/vendor/golang.org/x/net/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
845 'file://src/${GO_IMPORT}/vendor/golang.org/x/sync/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
846 'file://src/${GO_IMPORT}/vendor/golang.org/x/sys/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
847 'file://src/${GO_IMPORT}/vendor/golang.org/x/text/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
848 'file://src/${GO_IMPORT}/vendor/golang.org/x/tools/LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707',
849 'file://src/${GO_IMPORT}/vendor/google.golang.org/genproto/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
850 'file://src/${GO_IMPORT}/vendor/google.golang.org/grpc/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57',
851 'file://src/${GO_IMPORT}/vendor/google.golang.org/protobuf/LICENSE;md5=02d4002e9171d41a8fad93aa7faf3956',
852 'file://src/${GO_IMPORT}/vendor/gopkg.in/eapache/queue.v1/LICENSE;md5=1bfd4408d3de090ef6b908b0cc45a316',
853 'file://src/${GO_IMPORT}/vendor/gopkg.in/yaml.v3/LICENSE;md5=3c91c17266710e16afdbb2b6d15c761c'])
854
855 self.assertTrue(os.path.isfile(lics_require_file)) 793 self.assertTrue(os.path.isfile(lics_require_file))
856 self._test_recipe_contents(lics_require_file, checkvars, []) 794 self._test_recipe_contents(lics_require_file, checkvars, [])
857 795
796 # make sure that dependencies don't mention local directory ./matryer/is
858 dependencies = \ 797 dependencies = \
859 [ ('github.com/eclipse/paho.mqtt.golang','v1.4.2', '', '', ''), 798 [ ('github.com/godbus/dbus','v5.1.0', 'github.com/godbus/dbus/v5', '/v5', ''),
860 ('github.com/edgexfoundry/go-mod-bootstrap','v3.0.1','github.com/edgexfoundry/go-mod-bootstrap/v3','/v3', ''),
861 ('github.com/edgexfoundry/go-mod-configuration','v3.0.0','github.com/edgexfoundry/go-mod-configuration/v3','/v3', ''),
862 ('github.com/edgexfoundry/go-mod-core-contracts','v3.0.0','github.com/edgexfoundry/go-mod-core-contracts/v3','/v3', ''),
863 ('github.com/edgexfoundry/go-mod-messaging','v3.0.0','github.com/edgexfoundry/go-mod-messaging/v3','/v3', ''),
864 ('github.com/edgexfoundry/go-mod-secrets','v3.0.1','github.com/edgexfoundry/go-mod-secrets/v3','/v3', ''),
865 ('github.com/fxamacker/cbor','v2.4.0','github.com/fxamacker/cbor/v2','/v2', ''),
866 ('github.com/gomodule/redigo','v1.8.9', '', '', ''),
867 ('github.com/google/uuid','v1.3.0', '', '', ''),
868 ('github.com/gorilla/mux','v1.8.0', '', '', ''),
869 ('github.com/rcrowley/go-metrics','v0.0.0-20201227073835-cf1acfcdf475', '', '', ''),
870 ('github.com/spiffe/go-spiffe','v2.1.4','github.com/spiffe/go-spiffe/v2','/v2', ''),
871 ('github.com/stretchr/testify','v1.8.2', '', '', ''),
872 ('go.googlesource.com/crypto','v0.8.0','golang.org/x/crypto', '', ''),
873 ('gopkg.in/eapache/queue.v1','v1.1.0', '', '', ''),
874 ('gopkg.in/yaml.v3','v3.0.1', '', '', ''),
875 ('github.com/microsoft/go-winio','v0.6.0','github.com/Microsoft/go-winio', '', ''),
876 ('github.com/hashicorp/go-metrics','v0.3.10','github.com/armon/go-metrics', '', ''),
877 ('github.com/cenkalti/backoff','v2.2.1+incompatible', '', '', ''),
878 ('github.com/davecgh/go-spew','v1.1.1', '', '', ''),
879 ('github.com/edgexfoundry/go-mod-registry','v3.0.0','github.com/edgexfoundry/go-mod-registry/v3','/v3', ''),
880 ('github.com/fatih/color','v1.9.0', '', '', ''),
881 ('github.com/go-jose/go-jose','v3.0.0','github.com/go-jose/go-jose/v3','/v3', ''),
882 ('github.com/go-kit/log','v0.2.1', '', '', ''),
883 ('github.com/go-logfmt/logfmt','v0.5.1', '', '', ''),
884 ('github.com/go-playground/locales','v0.14.1', '', '', ''),
885 ('github.com/go-playground/universal-translator','v0.18.1', '', '', ''),
886 ('github.com/go-playground/validator','v10.13.0','github.com/go-playground/validator/v10','/v10', ''),
887 ('github.com/go-redis/redis','v7.3.0','github.com/go-redis/redis/v7','/v7', ''),
888 ('github.com/golang/protobuf','v1.5.2', '', '', ''),
889 ('github.com/gorilla/websocket','v1.4.2', '', '', ''),
890 ('github.com/hashicorp/consul','v1.20.0','github.com/hashicorp/consul/api', '', 'api'),
891 ('github.com/hashicorp/errwrap','v1.0.0', '', '', ''),
892 ('github.com/hashicorp/go-cleanhttp','v0.5.1', '', '', ''),
893 ('github.com/hashicorp/go-hclog','v0.14.1', '', '', ''),
894 ('github.com/hashicorp/go-immutable-radix','v1.3.0', '', '', ''),
895 ('github.com/hashicorp/go-multierror','v1.1.1', '', '', ''),
896 ('github.com/hashicorp/go-rootcerts','v1.0.2', '', '', ''),
897 ('github.com/hashicorp/golang-lru','v0.5.4', '', '', ''),
898 ('github.com/hashicorp/serf','v0.10.1', '', '', ''),
899 ('github.com/leodido/go-urn','v1.2.3', '', '', ''),
900 ('github.com/mattn/go-colorable','v0.1.12', '', '', ''),
901 ('github.com/mattn/go-isatty','v0.0.14', '', '', ''),
902 ('github.com/mitchellh/consulstructure','v0.0.0-20190329231841-56fdc4d2da54', '', '', ''),
903 ('github.com/mitchellh/copystructure','v1.2.0', '', '', ''),
904 ('github.com/mitchellh/go-homedir','v1.1.0', '', '', ''),
905 ('github.com/mitchellh/mapstructure','v1.5.0', '', '', ''),
906 ('github.com/mitchellh/reflectwalk','v1.0.2', '', '', ''),
907 ('github.com/nats-io/nats.go','v1.25.0', '', '', ''),
908 ('github.com/nats-io/nkeys','v0.4.4', '', '', ''),
909 ('github.com/nats-io/nuid','v1.0.1', '', '', ''),
910 ('github.com/pmezard/go-difflib','v1.0.0', '', '', ''),
911 ('github.com/stretchr/objx','v0.5.0', '', '', ''),
912 ('github.com/x448/float16','v0.8.4', '', '', ''),
913 ('github.com/zeebo/errs','v1.3.0', '', '', ''),
914 ('go.googlesource.com/mod','v0.8.0','golang.org/x/mod', '', ''),
915 ('go.googlesource.com/net','v0.9.0','golang.org/x/net', '', ''),
916 ('go.googlesource.com/sync','v0.1.0','golang.org/x/sync', '', ''),
917 ('go.googlesource.com/sys','v0.7.0','golang.org/x/sys', '', ''),
918 ('go.googlesource.com/text','v0.9.0','golang.org/x/text', '', ''),
919 ('go.googlesource.com/tools','v0.6.0','golang.org/x/tools', '', ''),
920 ('github.com/googleapis/go-genproto','v0.0.0-20230223222841-637eb2293923','google.golang.org/genproto', '', ''),
921 ('github.com/grpc/grpc-go','v1.53.0','google.golang.org/grpc', '', ''),
922 ('go.googlesource.com/protobuf','v1.28.1','google.golang.org/protobuf', '', ''),
923 ]
924
925 src_uri = set()
926 for d in dependencies:
927 src_uri.add(self._go_urifiy(*d))
928
929 checkvars = {}
930 checkvars['GO_DEPENDENCIES_SRC_URI'] = src_uri
931
932 self.assertTrue(os.path.isfile(deps_require_file))
933 self._test_recipe_contents(deps_require_file, checkvars, [])
934
935 def test_recipetool_create_go_replace_modules(self):
936 # Check handling of replaced modules
937 temprecipe = os.path.join(self.tempdir, 'recipe')
938 os.makedirs(temprecipe)
939
940 recipefile = os.path.join(temprecipe, 'openapi-generator_git.bb')
941 deps_require_file = os.path.join(temprecipe, 'openapi-generator', 'go-modules.inc')
942 lics_require_file = os.path.join(temprecipe, 'openapi-generator', 'go-licenses.inc')
943 modules_txt_file = os.path.join(temprecipe, 'openapi-generator', 'modules.txt')
944
945 srcuri = 'https://github.com/OpenAPITools/openapi-generator.git'
946 srcrev = "v7.2.0"
947 srcbranch = "master"
948 srcsubdir = "samples/openapi3/client/petstore/go"
949
950 result = runCmd('recipetool create -o %s %s -S %s -B %s --src-subdir %s' % (temprecipe, srcuri, srcrev, srcbranch, srcsubdir))
951
952 self.maxDiff = None
953 inherits = ['go-vendor']
954
955 checkvars = {}
956 checkvars['GO_IMPORT'] = "github.com/OpenAPITools/openapi-generator/samples/openapi3/client/petstore/go"
957 checkvars['SRC_URI'] = {'git://${GO_IMPORT};destsuffix=git/src/${GO_IMPORT};nobranch=1;name=${BPN};protocol=https',
958 'file://modules.txt'}
959
960 self.assertNotIn('Traceback', result.output)
961 self.assertIn('No license file was detected for the main module', result.output)
962 self.assertTrue(os.path.isfile(recipefile))
963 self._test_recipe_contents(recipefile, checkvars, inherits)
964
965 # make sure that dependencies don't mention local directory ./go-petstore
966 dependencies = \
967 [ ('github.com/stretchr/testify','v1.8.4', '', '', ''),
968 ('go.googlesource.com/oauth2','v0.10.0','golang.org/x/oauth2', '', ''),
969 ('github.com/davecgh/go-spew','v1.1.1', '', '', ''),
970 ('github.com/golang/protobuf','v1.5.3', '', '', ''),
971 ('github.com/kr/pretty','v0.3.0', '', '', ''),
972 ('github.com/pmezard/go-difflib','v1.0.0', '', '', ''),
973 ('github.com/rogpeppe/go-internal','v1.9.0', '', '', ''),
974 ('go.googlesource.com/net','v0.12.0','golang.org/x/net', '', ''),
975 ('github.com/golang/appengine','v1.6.7','google.golang.org/appengine', '', ''),
976 ('go.googlesource.com/protobuf','v1.31.0','google.golang.org/protobuf', '', ''),
977 ('gopkg.in/check.v1','v1.0.0-20201130134442-10cb98267c6c', '', '', ''),
978 ('gopkg.in/yaml.v3','v3.0.1', '', '', ''),
979 ] 799 ]
980 800
981 src_uri = set() 801 src_uri = set()
diff --git a/meta/lib/oeqa/selftest/cases/runtime_test.py b/meta/lib/oeqa/selftest/cases/runtime_test.py
index 27090ae5cd..4843d810a2 100644
--- a/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -273,6 +273,8 @@ TEST_RUNQEMUPARAMS += " slirp"
273 import subprocess, os 273 import subprocess, os
274 274
275 distro = oe.lsb.distro_identifier() 275 distro = oe.lsb.distro_identifier()
276 # Merge request to address the issue on centos/rhel/derivatives:
277 # https://gitlab.com/cki-project/kernel-ark/-/merge_requests/3449
276 if distro and (distro in ['debian-9', 'debian-10', 'centos-7', 'centos-8', 'centos-9', 'ubuntu-16.04', 'ubuntu-18.04'] or 278 if distro and (distro in ['debian-9', 'debian-10', 'centos-7', 'centos-8', 'centos-9', 'ubuntu-16.04', 'ubuntu-18.04'] or
277 distro.startswith('almalinux') or distro.startswith('rocky')): 279 distro.startswith('almalinux') or distro.startswith('rocky')):
278 self.skipTest('virgl headless cannot be tested with %s' %(distro)) 280 self.skipTest('virgl headless cannot be tested with %s' %(distro))
diff --git a/meta/lib/oeqa/utils/sshcontrol.py b/meta/lib/oeqa/utils/sshcontrol.py
index 36c2ecb3db..6c5648779a 100644
--- a/meta/lib/oeqa/utils/sshcontrol.py
+++ b/meta/lib/oeqa/utils/sshcontrol.py
@@ -57,8 +57,10 @@ class SSHProcess(object):
57 if select.select([self.process.stdout], [], [], 5)[0] != []: 57 if select.select([self.process.stdout], [], [], 5)[0] != []:
58 data = os.read(self.process.stdout.fileno(), 1024) 58 data = os.read(self.process.stdout.fileno(), 1024)
59 if not data: 59 if not data:
60 self.process.stdout.close() 60 self.process.poll()
61 eof = True 61 if self.process.returncode is None:
62 self.process.stdout.close()
63 eof = True
62 else: 64 else:
63 data = data.decode("utf-8") 65 data = data.decode("utf-8")
64 output += data 66 output += data
diff --git a/meta/recipes-bsp/efivar/efivar_39.bb b/meta/recipes-bsp/efivar/efivar_39.bb
index fe213326a4..b052e3838f 100644
--- a/meta/recipes-bsp/efivar/efivar_39.bb
+++ b/meta/recipes-bsp/efivar/efivar_39.bb
@@ -5,7 +5,7 @@ HOMEPAGE = "https://github.com/rhboot/efivar"
5LICENSE = "LGPL-2.1-or-later" 5LICENSE = "LGPL-2.1-or-later"
6LIC_FILES_CHKSUM = "file://COPYING;md5=6626bb1e20189cfa95f2c508ba286393" 6LIC_FILES_CHKSUM = "file://COPYING;md5=6626bb1e20189cfa95f2c508ba286393"
7 7
8COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64).*-linux" 8COMPATIBLE_HOST = "(i.86|x86_64|arm|aarch64|riscv64).*-linux"
9 9
10SRC_URI = "git://github.com/rhinstaller/efivar.git;branch=main;protocol=https \ 10SRC_URI = "git://github.com/rhinstaller/efivar.git;branch=main;protocol=https \
11 file://0001-docs-do-not-build-efisecdb-manpage.patch \ 11 file://0001-docs-do-not-build-efisecdb-manpage.patch \
diff --git a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
index fed3c7e9a3..a004e3a3b2 100644
--- a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
+++ b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
@@ -23,7 +23,7 @@ python do_configure() {
23 bb.build.exec_func('build_efi_cfg', d) 23 bb.build.exec_func('build_efi_cfg', d)
24} 24}
25 25
26do_configure[vardeps] += "APPEND ROOT" 26do_configure[vardeps] += "APPEND ROOT GRUB_TITLE"
27 27
28do_install() { 28do_install() {
29 install -d ${D}${EFI_FILES_PATH} 29 install -d ${D}${EFI_FILES_PATH}
diff --git a/meta/recipes-connectivity/ofono/ofono/CVE-2024-7539.patch b/meta/recipes-connectivity/ofono/ofono/CVE-2024-7539.patch
new file mode 100644
index 0000000000..e41596959b
--- /dev/null
+++ b/meta/recipes-connectivity/ofono/ofono/CVE-2024-7539.patch
@@ -0,0 +1,88 @@
1From 389e2344f86319265fb72ae590b470716e038fdc Mon Sep 17 00:00:00 2001
2From: Sicelo A. Mhlongo <absicsz@gmail.com>
3Date: Tue, 17 Dec 2024 11:31:29 +0200
4Subject: [PATCH] ussd: ensure ussd content fits in buffers
5
6Fixes: CVE-2024-7539
7
8CVE: CVE-2024-7539
9Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?id=389e2344f86319265fb72ae590b470716e038fdc]
10
11Signed-off-by: Yogita Urade <yogita.urade@windriver.com>
12---
13 drivers/atmodem/ussd.c | 5 ++++-
14 drivers/huaweimodem/ussd.c | 5 ++++-
15 drivers/speedupmodem/ussd.c | 5 ++++-
16 3 files changed, 12 insertions(+), 3 deletions(-)
17
18diff --git a/drivers/atmodem/ussd.c b/drivers/atmodem/ussd.c
19index 32a9fe9..99da559 100644
20--- a/drivers/atmodem/ussd.c
21+++ b/drivers/atmodem/ussd.c
22@@ -93,7 +93,7 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
23 const char *content;
24 int dcs;
25 enum sms_charset charset;
26- unsigned char msg[160];
27+ unsigned char msg[160] = {0};
28 const unsigned char *msg_ptr = NULL;
29 long msg_len;
30
31@@ -113,6 +113,9 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
32 if (!g_at_result_iter_next_number(&iter, &dcs))
33 dcs = 0;
34
35+ if (strlen(content) > sizeof(msg) * 2)
36+ goto out;
37+
38 if (!cbs_dcs_decode(dcs, NULL, NULL, &charset, NULL, NULL, NULL)) {
39 ofono_error("Unsupported USSD data coding scheme (%02x)", dcs);
40 status = 4; /* Not supported */
41diff --git a/drivers/huaweimodem/ussd.c b/drivers/huaweimodem/ussd.c
42index 5e1c907..3d165c8 100644
43--- a/drivers/huaweimodem/ussd.c
44+++ b/drivers/huaweimodem/ussd.c
45@@ -38,7 +38,7 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
46 int status;
47 int dcs = 0;
48 const char *content;
49- unsigned char msg[160];
50+ unsigned char msg[160] = {0};
51 const unsigned char *msg_ptr = NULL;
52 long msg_len;
53
54@@ -55,6 +55,9 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
55
56 g_at_result_iter_next_number(&iter, &dcs);
57
58+ if (strlen(content) > sizeof(msg) * 2)
59+ goto out;
60+
61 msg_ptr = decode_hex_own_buf(content, -1, &msg_len, 0, msg);
62
63 out:
64diff --git a/drivers/speedupmodem/ussd.c b/drivers/speedupmodem/ussd.c
65index aafa4bc..a5efde0 100644
66--- a/drivers/speedupmodem/ussd.c
67+++ b/drivers/speedupmodem/ussd.c
68@@ -37,7 +37,7 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
69 int status;
70 int dcs = 0;
71 const char *content;
72- unsigned char msg[160];
73+ unsigned char msg[160] = {0};
74 const unsigned char *msg_ptr = NULL;
75 long msg_len;
76
77@@ -54,6 +54,9 @@ static void cusd_parse(GAtResult *result, struct ofono_ussd *ussd)
78
79 g_at_result_iter_next_number(&iter, &dcs);
80
81+ if (strlen(content) > sizeof(msg) * 2)
82+ goto out;
83+
84 msg_ptr = decode_hex_own_buf(content, -1, &msg_len, 0, msg);
85
86 out:
87--
882.40.0
diff --git a/meta/recipes-connectivity/ofono/ofono/CVE-2024-7540_CVE-2024-7541_CVE-2024-7542.patch b/meta/recipes-connectivity/ofono/ofono/CVE-2024-7540_CVE-2024-7541_CVE-2024-7542.patch
new file mode 100644
index 0000000000..fd97d4b51b
--- /dev/null
+++ b/meta/recipes-connectivity/ofono/ofono/CVE-2024-7540_CVE-2024-7541_CVE-2024-7542.patch
@@ -0,0 +1,52 @@
1From 29ff6334b492504ace101be748b256e6953d2c2f Mon Sep 17 00:00:00 2001
2From: "Sicelo A. Mhlongo" <absicsz@gmail.com>
3Date: Tue, 17 Dec 2024 11:31:28 +0200
4Subject: [PATCH] atmodem: sms: ensure buffer is initialized before use
5
6Fixes: CVE-2024-7540
7Fixes: CVE-2024-7541
8Fixes: CVE-2024-7542
9
10CVE: CVE-2024-7540
11CVE: CVE-2024-7541
12CVE: CVE-2024-7542
13Upstream-Status: Backport [https://git.kernel.org/pub/scm/network/ofono/ofono.git/commit/?id=29ff6334b492504ace101be748b256e6953d2c2f]
14Signed-off-by: Peter Marko <peter.marko@siemens.com>
15---
16 drivers/atmodem/sms.c | 6 +++---
17 1 file changed, 3 insertions(+), 3 deletions(-)
18
19diff --git a/drivers/atmodem/sms.c b/drivers/atmodem/sms.c
20index d994856b..0668c631 100644
21--- a/drivers/atmodem/sms.c
22+++ b/drivers/atmodem/sms.c
23@@ -399,7 +399,7 @@ static void at_cmt_notify(GAtResult *result, gpointer user_data)
24 struct sms_data *data = ofono_sms_get_data(sms);
25 GAtResultIter iter;
26 const char *hexpdu;
27- unsigned char pdu[176];
28+ unsigned char pdu[176] = {0};
29 long pdu_len;
30 int tpdu_len;
31
32@@ -466,7 +466,7 @@ static void at_cmgr_notify(GAtResult *result, gpointer user_data)
33 struct sms_data *data = ofono_sms_get_data(sms);
34 GAtResultIter iter;
35 const char *hexpdu;
36- unsigned char pdu[176];
37+ unsigned char pdu[176] = {0};
38 long pdu_len;
39 int tpdu_len;
40
41@@ -648,7 +648,7 @@ static void at_cmgl_notify(GAtResult *result, gpointer user_data)
42 struct sms_data *data = ofono_sms_get_data(sms);
43 GAtResultIter iter;
44 const char *hexpdu;
45- unsigned char pdu[176];
46+ unsigned char pdu[176] = {0};
47 long pdu_len;
48 int tpdu_len;
49 int index;
50--
512.30.2
52
diff --git a/meta/recipes-connectivity/ofono/ofono_2.14.bb b/meta/recipes-connectivity/ofono/ofono_2.14.bb
index 5d11d6cb45..9a91afaa7b 100644
--- a/meta/recipes-connectivity/ofono/ofono_2.14.bb
+++ b/meta/recipes-connectivity/ofono/ofono_2.14.bb
@@ -11,6 +11,8 @@ SRC_URI = "\
11 ${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \ 11 ${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
12 file://rmnet.patch \ 12 file://rmnet.patch \
13 file://ofono \ 13 file://ofono \
14 file://CVE-2024-7539.patch \
15 file://CVE-2024-7540_CVE-2024-7541_CVE-2024-7542.patch \
14" 16"
15SRC_URI[sha256sum] = "983cbfd5e1e1a410ba7ad2db7f50fadc91e50b29f1ede40cdc73f941da7ba95f" 17SRC_URI[sha256sum] = "983cbfd5e1e1a410ba7ad2db7f50fadc91e50b29f1ede40cdc73f941da7ba95f"
16 18
diff --git a/meta/recipes-connectivity/openssl/openssl_3.4.0.bb b/meta/recipes-connectivity/openssl/openssl_3.4.0.bb
index b7f96db394..9d99c21c20 100644
--- a/meta/recipes-connectivity/openssl/openssl_3.4.0.bb
+++ b/meta/recipes-connectivity/openssl/openssl_3.4.0.bb
@@ -265,6 +265,3 @@ INSANE_SKIP:${PN} = "already-stripped"
265BBCLASSEXTEND = "native nativesdk" 265BBCLASSEXTEND = "native nativesdk"
266 266
267CVE_PRODUCT = "openssl:openssl" 267CVE_PRODUCT = "openssl:openssl"
268
269CVE_VERSION_SUFFIX = "alphabetical"
270
diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb b/meta/recipes-core/base-files/base-files_3.0.14.bb
index 8bcd91e699..60253fcd42 100644
--- a/meta/recipes-core/base-files/base-files_3.0.14.bb
+++ b/meta/recipes-core/base-files/base-files_3.0.14.bb
@@ -72,29 +72,6 @@ hostname = "${MACHINE}"
72 72
73BASEFILESISSUEINSTALL ?= "do_install_basefilesissue" 73BASEFILESISSUEINSTALL ?= "do_install_basefilesissue"
74 74
75# In previous versions of base-files, /run was a softlink to /var/run and the
76# directory was located in /var/volatlie/run. Also, /var/lock was a softlink
77# to /var/volatile/lock which is where the real directory was located. Now,
78# /run and /run/lock are the real directories. If we are upgrading, we may
79# need to remove the symbolic links first before we create the directories.
80# Otherwise the directory creation will fail and we will have circular symbolic
81# links.
82#
83pkg_preinst:${PN} () {
84 #!/bin/sh -e
85 if [ x"$D" = "x" ]; then
86 if [ -h "/var/lock" ]; then
87 # Remove the symbolic link
88 rm -f /var/lock
89 fi
90
91 if [ -h "/run" ]; then
92 # Remove the symbolic link
93 rm -f /run
94 fi
95 fi
96}
97
98do_install () { 75do_install () {
99 for d in ${dirs555}; do 76 for d in ${dirs555}; do
100 install -m 0555 -d ${D}$d 77 install -m 0555 -d ${D}$d
diff --git a/meta/recipes-core/busybox/busybox.inc b/meta/recipes-core/busybox/busybox.inc
index f778cff0f4..cebfd3c48c 100644
--- a/meta/recipes-core/busybox/busybox.inc
+++ b/meta/recipes-core/busybox/busybox.inc
@@ -7,7 +7,7 @@ DEPENDS += "kern-tools-native virtual/crypt"
7 7
8# bzip2 applet in busybox is based on lightly-modified bzip2-1.0.4 source 8# bzip2 applet in busybox is based on lightly-modified bzip2-1.0.4 source
9# the GPL is version 2 only 9# the GPL is version 2 only
10LICENSE = "GPL-2.0-only & bzip2-1.0.4" 10LICENSE = "GPL-2.0-only & bzip2-1.0.6"
11LIC_FILES_CHKSUM = "file://LICENSE;md5=de10de48642ab74318e893a61105afbb \ 11LIC_FILES_CHKSUM = "file://LICENSE;md5=de10de48642ab74318e893a61105afbb \
12 file://archival/libarchive/bz/LICENSE;md5=28e3301eae987e8cfe19988e98383dae" 12 file://archival/libarchive/bz/LICENSE;md5=28e3301eae987e8cfe19988e98383dae"
13 13
diff --git a/meta/recipes-core/images/build-appliance-image_15.0.0.bb b/meta/recipes-core/images/build-appliance-image_15.0.0.bb
index 52b6088dd1..8869c92de1 100644
--- a/meta/recipes-core/images/build-appliance-image_15.0.0.bb
+++ b/meta/recipes-core/images/build-appliance-image_15.0.0.bb
@@ -26,7 +26,7 @@ inherit core-image setuptools3 features_check
26 26
27REQUIRED_DISTRO_FEATURES += "xattr" 27REQUIRED_DISTRO_FEATURES += "xattr"
28 28
29SRCREV ?= "a7c0cf3fab3bea1ca6703f9737bb8d92a62a2c4d" 29SRCREV ?= "df026a95e3eec32e7a010c09b8e98351e74876b2"
30SRC_URI = "git://git.yoctoproject.org/poky;branch=master \ 30SRC_URI = "git://git.yoctoproject.org/poky;branch=master \
31 file://Yocto_Build_Appliance.vmx \ 31 file://Yocto_Build_Appliance.vmx \
32 file://Yocto_Build_Appliance.vmxf \ 32 file://Yocto_Build_Appliance.vmxf \
diff --git a/meta/recipes-core/meta/cve-update-db-native.bb b/meta/recipes-core/meta/cve-update-db-native.bb
deleted file mode 100644
index b889c9e6a7..0000000000
--- a/meta/recipes-core/meta/cve-update-db-native.bb
+++ /dev/null
@@ -1,405 +0,0 @@
1SUMMARY = "Updates the NVD CVE database"
2LICENSE = "MIT"
3
4INHIBIT_DEFAULT_DEPS = "1"
5
6inherit native
7
8deltask do_patch
9deltask do_configure
10deltask do_compile
11deltask do_install
12deltask do_populate_sysroot
13
14NVDCVE_URL ?= "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-"
15FKIE_URL ?= "https://github.com/fkie-cad/nvd-json-data-feeds/releases/latest/download/CVE-"
16
17# CVE database update interval, in seconds. By default: once a day (24*60*60).
18# Use 0 to force the update
19# Use a negative value to skip the update
20CVE_DB_UPDATE_INTERVAL ?= "86400"
21
22# Timeout for blocking socket operations, such as the connection attempt.
23CVE_SOCKET_TIMEOUT ?= "60"
24
25CVE_CHECK_DB_DLDIR_FILE ?= "${DL_DIR}/CVE_CHECK2/${CVE_CHECK_DB_FILENAME}"
26CVE_CHECK_DB_DLDIR_LOCK ?= "${CVE_CHECK_DB_DLDIR_FILE}.lock"
27
28CVE_DB_TEMP_FILE ?= "${CVE_CHECK_DB_DIR}/temp_nvdcve_1.1.db"
29
30python () {
31 if not bb.data.inherits_class("cve-check", d):
32 raise bb.parse.SkipRecipe("Skip recipe when cve-check class is not loaded.")
33}
34
35python do_fetch() {
36 """
37 Update NVD database with json data feed
38 """
39 import bb.utils
40 import bb.progress
41 import shutil
42
43 bb.utils.export_proxies(d)
44
45 db_file = d.getVar("CVE_CHECK_DB_DLDIR_FILE")
46 db_dir = os.path.dirname(db_file)
47 db_tmp_file = d.getVar("CVE_DB_TEMP_FILE")
48
49 cleanup_db_download(db_file, db_tmp_file)
50
51 # The NVD database changes once a day, so no need to update more frequently
52 # Allow the user to force-update
53 try:
54 import time
55 update_interval = int(d.getVar("CVE_DB_UPDATE_INTERVAL"))
56 if update_interval < 0:
57 bb.note("CVE database update skipped")
58 return
59 if time.time() - os.path.getmtime(db_file) < update_interval:
60 bb.debug(2, "Recently updated, skipping")
61 return
62
63 except OSError:
64 pass
65
66 bb.utils.mkdirhier(db_dir)
67 if os.path.exists(db_file):
68 shutil.copy2(db_file, db_tmp_file)
69
70 if update_db_file(db_tmp_file, d) == True:
71 # Update downloaded correctly, can swap files
72 shutil.move(db_tmp_file, db_file)
73 else:
74 # Update failed, do not modify the database
75 bb.note("CVE database update failed")
76 os.remove(db_tmp_file)
77}
78
79do_fetch[lockfiles] += "${CVE_CHECK_DB_DLDIR_LOCK}"
80do_fetch[file-checksums] = ""
81do_fetch[vardeps] = ""
82
83python do_unpack() {
84 import shutil
85 shutil.copyfile(d.getVar("CVE_CHECK_DB_DLDIR_FILE"), d.getVar("CVE_CHECK_DB_FILE"))
86}
87do_unpack[lockfiles] += "${CVE_CHECK_DB_DLDIR_LOCK} ${CVE_CHECK_DB_FILE_LOCK}"
88
89def cleanup_db_download(db_file, db_tmp_file):
90 """
91 Cleanup the download space from possible failed downloads
92 """
93
94 # Clean up the updates done on the main file
95 # Remove it only if a journal file exists - it means a complete re-download
96 if os.path.exists("{0}-journal".format(db_file)):
97 # If a journal is present the last update might have been interrupted. In that case,
98 # just wipe any leftovers and force the DB to be recreated.
99 os.remove("{0}-journal".format(db_file))
100
101 if os.path.exists(db_file):
102 os.remove(db_file)
103
104 # Clean-up the temporary file downloads, we can remove both journal
105 # and the temporary database
106 if os.path.exists("{0}-journal".format(db_tmp_file)):
107 # If a journal is present the last update might have been interrupted. In that case,
108 # just wipe any leftovers and force the DB to be recreated.
109 os.remove("{0}-journal".format(db_tmp_file))
110
111 if os.path.exists(db_tmp_file):
112 os.remove(db_tmp_file)
113
114def db_file_names(d, year, is_nvd):
115 if is_nvd:
116 year_url = d.getVar('NVDCVE_URL') + str(year)
117 meta_url = year_url + ".meta"
118 json_url = year_url + ".json.gz"
119 return json_url, meta_url
120 year_url = d.getVar('FKIE_URL') + str(year)
121 meta_url = year_url + ".meta"
122 json_url = year_url + ".json.xz"
123 return json_url, meta_url
124
125def host_db_name(d, is_nvd):
126 if is_nvd:
127 return "nvd.nist.gov"
128 return "github.com"
129
130def db_decompress(d, data, is_nvd):
131 import gzip, lzma
132
133 if is_nvd:
134 return gzip.decompress(data).decode('utf-8')
135 # otherwise
136 return lzma.decompress(data)
137
138def update_db_file(db_tmp_file, d):
139 """
140 Update the given database file
141 """
142 import bb.utils, bb.progress
143 from datetime import date
144 import urllib, gzip, sqlite3
145
146 YEAR_START = 2002
147 cve_socket_timeout = int(d.getVar("CVE_SOCKET_TIMEOUT"))
148 is_nvd = d.getVar("NVD_DB_VERSION") == "NVD1"
149
150 # Connect to database
151 conn = sqlite3.connect(db_tmp_file)
152 initialize_db(conn)
153
154 with bb.progress.ProgressHandler(d) as ph, open(os.path.join(d.getVar("TMPDIR"), 'cve_check'), 'a') as cve_f:
155 total_years = date.today().year + 1 - YEAR_START
156 for i, year in enumerate(range(YEAR_START, date.today().year + 1)):
157 bb.debug(2, "Updating %d" % year)
158 ph.update((float(i + 1) / total_years) * 100)
159 json_url, meta_url = db_file_names(d, year, is_nvd)
160
161 # Retrieve meta last modified date
162 try:
163 response = urllib.request.urlopen(meta_url, timeout=cve_socket_timeout)
164 except urllib.error.URLError as e:
165 cve_f.write('Warning: CVE db update error, Unable to fetch CVE data.\n\n')
166 bb.warn("Failed to fetch CVE data (%s)" % e)
167 import socket
168 result = socket.getaddrinfo(host_db_name(d, is_nvd), 443, proto=socket.IPPROTO_TCP)
169 bb.warn("Host IPs are %s" % (", ".join(t[4][0] for t in result)))
170 return False
171
172 if response:
173 for l in response.read().decode("utf-8").splitlines():
174 key, value = l.split(":", 1)
175 if key == "lastModifiedDate":
176 last_modified = value
177 break
178 else:
179 bb.warn("Cannot parse CVE metadata, update failed")
180 return False
181
182 # Compare with current db last modified date
183 cursor = conn.execute("select DATE from META where YEAR = ?", (year,))
184 meta = cursor.fetchone()
185 cursor.close()
186
187 if not meta or meta[0] != last_modified:
188 bb.debug(2, "Updating entries")
189 # Clear products table entries corresponding to current year
190 conn.execute("delete from PRODUCTS where ID like ?", ('CVE-%d%%' % year,)).close()
191
192 # Update db with current year json file
193 try:
194 response = urllib.request.urlopen(json_url, timeout=cve_socket_timeout)
195 if response:
196 update_db(d, conn, db_decompress(d, response.read(), is_nvd))
197 conn.execute("insert or replace into META values (?, ?)", [year, last_modified]).close()
198 except urllib.error.URLError as e:
199 cve_f.write('Warning: CVE db update error, CVE data is outdated.\n\n')
200 bb.warn("Cannot parse CVE data (%s), update failed" % e.reason)
201 return False
202 else:
203 bb.debug(2, "Already up to date (last modified %s)" % last_modified)
204 # Update success, set the date to cve_check file.
205 if year == date.today().year:
206 cve_f.write('CVE database update : %s\n\n' % date.today())
207
208 conn.commit()
209 conn.close()
210 return True
211
212def initialize_db(conn):
213 with conn:
214 c = conn.cursor()
215
216 c.execute("CREATE TABLE IF NOT EXISTS META (YEAR INTEGER UNIQUE, DATE TEXT)")
217
218 c.execute("CREATE TABLE IF NOT EXISTS NVD (ID TEXT UNIQUE, SUMMARY TEXT, \
219 SCOREV2 TEXT, SCOREV3 TEXT, SCOREV4 TEXT, MODIFIED INTEGER, VECTOR TEXT, VECTORSTRING TEXT)")
220
221 c.execute("CREATE TABLE IF NOT EXISTS PRODUCTS (ID TEXT, \
222 VENDOR TEXT, PRODUCT TEXT, VERSION_START TEXT, OPERATOR_START TEXT, \
223 VERSION_END TEXT, OPERATOR_END TEXT)")
224 c.execute("CREATE INDEX IF NOT EXISTS PRODUCT_ID_IDX on PRODUCTS(ID);")
225
226 c.close()
227
228def parse_node_and_insert(conn, node, cveId, is_nvd):
229 # Parse children node if needed
230 for child in node.get('children', ()):
231 parse_node_and_insert(conn, child, cveId, is_nvd)
232
233 def cpe_generator(is_nvd):
234 match_string = "cpeMatch"
235 cpe_string = 'criteria'
236 if is_nvd:
237 match_string = "cpe_match"
238 cpe_string = 'cpe23Uri'
239
240 for cpe in node.get(match_string, ()):
241 if not cpe['vulnerable']:
242 return
243 cpe23 = cpe.get(cpe_string)
244 if not cpe23:
245 return
246 cpe23 = cpe23.split(':')
247 if len(cpe23) < 6:
248 return
249 vendor = cpe23[3]
250 product = cpe23[4]
251 version = cpe23[5]
252
253 if cpe23[6] == '*' or cpe23[6] == '-':
254 version_suffix = ""
255 else:
256 version_suffix = "_" + cpe23[6]
257
258 if version != '*' and version != '-':
259 # Version is defined, this is a '=' match
260 yield [cveId, vendor, product, version + version_suffix, '=', '', '']
261 elif version == '-':
262 # no version information is available
263 yield [cveId, vendor, product, version, '', '', '']
264 else:
265 # Parse start version, end version and operators
266 op_start = ''
267 op_end = ''
268 v_start = ''
269 v_end = ''
270
271 if 'versionStartIncluding' in cpe:
272 op_start = '>='
273 v_start = cpe['versionStartIncluding']
274
275 if 'versionStartExcluding' in cpe:
276 op_start = '>'
277 v_start = cpe['versionStartExcluding']
278
279 if 'versionEndIncluding' in cpe:
280 op_end = '<='
281 v_end = cpe['versionEndIncluding']
282
283 if 'versionEndExcluding' in cpe:
284 op_end = '<'
285 v_end = cpe['versionEndExcluding']
286
287 if op_start or op_end or v_start or v_end:
288 yield [cveId, vendor, product, v_start, op_start, v_end, op_end]
289 else:
290 # This is no version information, expressed differently.
291 # Save processing by representing as -.
292 yield [cveId, vendor, product, '-', '', '', '']
293
294 conn.executemany("insert into PRODUCTS values (?, ?, ?, ?, ?, ?, ?)", cpe_generator(is_nvd)).close()
295
296def update_db_nvdjson(conn, jsondata):
297 import json
298 root = json.loads(jsondata)
299
300 for elt in root['CVE_Items']:
301 if not elt['impact']:
302 continue
303
304 accessVector = None
305 vectorString = None
306 cvssv2 = 0.0
307 cvssv3 = 0.0
308 cvssv4 = 0.0
309 cveId = elt['cve']['CVE_data_meta']['ID']
310 cveDesc = elt['cve']['description']['description_data'][0]['value']
311 date = elt['lastModifiedDate']
312 try:
313 accessVector = elt['impact']['baseMetricV2']['cvssV2']['accessVector']
314 vectorString = elt['impact']['baseMetricV2']['cvssV2']['vectorString']
315 cvssv2 = elt['impact']['baseMetricV2']['cvssV2']['baseScore']
316 except KeyError:
317 cvssv2 = 0.0
318 try:
319 accessVector = accessVector or elt['impact']['baseMetricV3']['cvssV3']['attackVector']
320 vectorString = vectorString or elt['impact']['baseMetricV3']['cvssV3']['vectorString']
321 cvssv3 = elt['impact']['baseMetricV3']['cvssV3']['baseScore']
322 except KeyError:
323 accessVector = accessVector or "UNKNOWN"
324 cvssv3 = 0.0
325
326 conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?, ?)",
327 [cveId, cveDesc, cvssv2, cvssv3, cvssv4, date, accessVector, vectorString]).close()
328
329 configurations = elt['configurations']['nodes']
330 for config in configurations:
331 parse_node_and_insert(conn, config, cveId, True)
332
333def update_db_fkie(conn, jsondata):
334 import json
335 root = json.loads(jsondata)
336
337 for elt in root['cve_items']:
338 if not 'vulnStatus' in elt or elt['vulnStatus'] == 'Rejected':
339 continue
340
341 if not 'configurations' in elt:
342 continue
343
344 accessVector = None
345 vectorString = None
346 cvssv2 = 0.0
347 cvssv3 = 0.0
348 cvssv4 = 0.0
349 cveId = elt['id']
350 cveDesc = elt['descriptions'][0]['value']
351 date = elt['lastModified']
352 try:
353 for m in elt['metrics']['cvssMetricV2']:
354 if m['type'] == 'Primary':
355 accessVector = m['cvssData']['accessVector']
356 vectorString = m['cvssData']['vectorString']
357 cvssv2 = m['cvssData']['baseScore']
358 except KeyError:
359 cvssv2 = 0.0
360 try:
361 for m in elt['metrics']['cvssMetricV30']:
362 if m['type'] == 'Primary':
363 accessVector = m['cvssData']['accessVector']
364 vectorString = m['cvssData']['vectorString']
365 cvssv3 = m['cvssData']['baseScore']
366 except KeyError:
367 accessVector = accessVector or "UNKNOWN"
368 cvssv3 = 0.0
369 try:
370 for m in elt['metrics']['cvssMetricV31']:
371 if m['type'] == 'Primary':
372 accessVector = m['cvssData']['accessVector']
373 vectorString = m['cvssData']['vectorString']
374 cvssv3 = m['cvssData']['baseScore']
375 except KeyError:
376 accessVector = accessVector or "UNKNOWN"
377 cvssv3 = 0.0
378 try:
379 for m in elt['metrics']['cvssMetricV40']:
380 if m['type'] == 'Primary':
381 accessVector = m['cvssData']['accessVector']
382 vectorString = m['cvssData']['vectorString']
383 cvssv4 = m['cvssData']['baseScore']
384 except KeyError:
385 accessVector = accessVector or "UNKNOWN"
386 cvssv4 = 0.0
387
388 conn.execute("insert or replace into NVD values (?, ?, ?, ?, ?, ?, ?, ?)",
389 [cveId, cveDesc, cvssv2, cvssv3, cvssv4, date, accessVector, vectorString]).close()
390
391 for config in elt['configurations']:
392 # This is suboptimal as it doesn't handle AND/OR and negate, but is better than nothing
393 for node in config["nodes"]:
394 parse_node_and_insert(conn, node, cveId, False)
395
396
397def update_db(d, conn, jsondata):
398 if (d.getVar("NVD_DB_VERSION") == "FKIE"):
399 return update_db_fkie(conn, jsondata)
400 else:
401 return update_db_nvdjson(conn, jsondata)
402
403do_fetch[nostamp] = "1"
404
405EXCLUDE_FROM_WORLD = "1"
diff --git a/meta/recipes-core/ncurses/ncurses.inc b/meta/recipes-core/ncurses/ncurses.inc
index e96ee075bd..3f93550cf9 100644
--- a/meta/recipes-core/ncurses/ncurses.inc
+++ b/meta/recipes-core/ncurses/ncurses.inc
@@ -70,6 +70,7 @@ ncurses_configure() {
70 --without-debug \ 70 --without-debug \
71 --without-ada \ 71 --without-ada \
72 --without-gpm \ 72 --without-gpm \
73 --with-xterm-kbs=del \
73 --enable-hard-tabs \ 74 --enable-hard-tabs \
74 --enable-xmc-glitch \ 75 --enable-xmc-glitch \
75 --enable-colorfgbg \ 76 --enable-colorfgbg \
diff --git a/meta/recipes-core/systemd/systemd-systemctl/systemctl b/meta/recipes-core/systemd/systemd-systemctl/systemctl
index 2229bc7b6d..81c246a5b2 100755
--- a/meta/recipes-core/systemd/systemd-systemctl/systemctl
+++ b/meta/recipes-core/systemd/systemd-systemctl/systemctl
@@ -29,15 +29,15 @@ class SystemdFile():
29 29
30 _clearable_keys = ['WantedBy'] 30 _clearable_keys = ['WantedBy']
31 31
32 def __init__(self, root, path, instance_unit_name): 32 def __init__(self, root, path, instance_unit_name, unit_type):
33 self.sections = dict() 33 self.sections = dict()
34 self._parse(root, path) 34 self._parse(root, path)
35 dirname = os.path.basename(path.name) + ".d" 35 dirname = os.path.basename(path.name) + ".d"
36 for location in locations: 36 for location in locations:
37 files = (root / location / "system" / dirname).glob("*.conf") 37 files = (root / location / unit_type / dirname).glob("*.conf")
38 if instance_unit_name: 38 if instance_unit_name:
39 inst_dirname = instance_unit_name + ".d" 39 inst_dirname = instance_unit_name + ".d"
40 files = chain(files, (root / location / "system" / inst_dirname).glob("*.conf")) 40 files = chain(files, (root / location / unit_type / inst_dirname).glob("*.conf"))
41 for path2 in sorted(files): 41 for path2 in sorted(files):
42 self._parse(root, path2) 42 self._parse(root, path2)
43 43
@@ -182,21 +182,22 @@ class SystemdUnitNotFoundError(Exception):
182 182
183 183
184class SystemdUnit(): 184class SystemdUnit():
185 def __init__(self, root, unit): 185 def __init__(self, root, unit, unit_type):
186 self.root = root 186 self.root = root
187 self.unit = unit 187 self.unit = unit
188 self.unit_type = unit_type
188 self.config = None 189 self.config = None
189 190
190 def _path_for_unit(self, unit): 191 def _path_for_unit(self, unit):
191 for location in locations: 192 for location in locations:
192 path = self.root / location / "system" / unit 193 path = self.root / location / self.unit_type / unit
193 if path.exists() or path.is_symlink(): 194 if path.exists() or path.is_symlink():
194 return path 195 return path
195 196
196 raise SystemdUnitNotFoundError(self.root, unit) 197 raise SystemdUnitNotFoundError(self.root, unit)
197 198
198 def _process_deps(self, config, service, location, prop, dirstem, instance): 199 def _process_deps(self, config, service, location, prop, dirstem, instance):
199 systemdir = self.root / SYSCONFDIR / "systemd" / "system" 200 systemdir = self.root / SYSCONFDIR / "systemd" / self.unit_type
200 201
201 target = ROOT / location.relative_to(self.root) 202 target = ROOT / location.relative_to(self.root)
202 try: 203 try:
@@ -229,7 +230,7 @@ class SystemdUnit():
229 # ignore aliases 230 # ignore aliases
230 return 231 return
231 232
232 config = SystemdFile(self.root, path, instance_unit_name) 233 config = SystemdFile(self.root, path, instance_unit_name, self.unit_type)
233 if instance == "": 234 if instance == "":
234 try: 235 try:
235 default_instance = config.get('Install', 'DefaultInstance')[0] 236 default_instance = config.get('Install', 'DefaultInstance')[0]
@@ -250,14 +251,14 @@ class SystemdUnit():
250 try: 251 try:
251 units_enabled.append(unit) 252 units_enabled.append(unit)
252 if also not in units_enabled: 253 if also not in units_enabled:
253 SystemdUnit(self.root, also).enable(units_enabled) 254 SystemdUnit(self.root, also, self.unit_type).enable(units_enabled)
254 except SystemdUnitNotFoundError as e: 255 except SystemdUnitNotFoundError as e:
255 sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit)) 256 sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit))
256 257
257 except KeyError: 258 except KeyError:
258 pass 259 pass
259 260
260 systemdir = self.root / SYSCONFDIR / "systemd" / "system" 261 systemdir = self.root / SYSCONFDIR / "systemd" / self.unit_type
261 target = ROOT / path.relative_to(self.root) 262 target = ROOT / path.relative_to(self.root)
262 try: 263 try:
263 for dest in config.get('Install', 'Alias'): 264 for dest in config.get('Install', 'Alias'):
@@ -268,15 +269,15 @@ class SystemdUnit():
268 pass 269 pass
269 270
270 def mask(self): 271 def mask(self):
271 systemdir = self.root / SYSCONFDIR / "systemd" / "system" 272 systemdir = self.root / SYSCONFDIR / "systemd" / self.unit_type
272 add_link(systemdir / self.unit, "/dev/null") 273 add_link(systemdir / self.unit, "/dev/null")
273 274
274 275
275def collect_services(root): 276def collect_services(root, unit_type):
276 """Collect list of service files""" 277 """Collect list of service files"""
277 services = set() 278 services = set()
278 for location in locations: 279 for location in locations:
279 paths = (root / location / "system").glob("*") 280 paths = (root / location / unit_type).glob("*")
280 for path in paths: 281 for path in paths:
281 if path.is_dir(): 282 if path.is_dir():
282 continue 283 continue
@@ -285,16 +286,16 @@ def collect_services(root):
285 return services 286 return services
286 287
287 288
288def preset_all(root): 289def preset_all(root, unit_type):
289 presets = Presets('system-preset', root) 290 presets = Presets('{}-preset'.format(unit_type), root)
290 services = collect_services(root) 291 services = collect_services(root, unit_type)
291 292
292 for service in services: 293 for service in services:
293 state = presets.state(service) 294 state = presets.state(service)
294 295
295 if state == "enable" or state is None: 296 if state == "enable" or state is None:
296 try: 297 try:
297 SystemdUnit(root, service).enable() 298 SystemdUnit(root, service, unit_type).enable()
298 except SystemdUnitNotFoundError: 299 except SystemdUnitNotFoundError:
299 sys.exit("Error: Systemctl preset_all issue in %s" % service) 300 sys.exit("Error: Systemctl preset_all issue in %s" % service)
300 301
@@ -320,6 +321,7 @@ def main():
320 parser.add_argument('--preset-mode', 321 parser.add_argument('--preset-mode',
321 choices=['full', 'enable-only', 'disable-only'], 322 choices=['full', 'enable-only', 'disable-only'],
322 default='full') 323 default='full')
324 parser.add_argument('--global', dest="opt_global", action="store_true", default=False)
323 325
324 args = parser.parse_args() 326 args = parser.parse_args()
325 327
@@ -336,16 +338,18 @@ def main():
336 parser.print_help() 338 parser.print_help()
337 return 0 339 return 0
338 340
341 unit_type = "user" if args.opt_global else "system"
342
339 if command == "mask": 343 if command == "mask":
340 for service in args.service: 344 for service in args.service:
341 try: 345 try:
342 SystemdUnit(root, service).mask() 346 SystemdUnit(root, service, unit_type).mask()
343 except SystemdUnitNotFoundError as e: 347 except SystemdUnitNotFoundError as e:
344 sys.exit("Error: Systemctl main mask issue in %s (%s)" % (service, e.unit)) 348 sys.exit("Error: Systemctl main mask issue in %s (%s)" % (service, e.unit))
345 elif command == "enable": 349 elif command == "enable":
346 for service in args.service: 350 for service in args.service:
347 try: 351 try:
348 SystemdUnit(root, service).enable() 352 SystemdUnit(root, service, unit_type).enable()
349 except SystemdUnitNotFoundError as e: 353 except SystemdUnitNotFoundError as e:
350 sys.exit("Error: Systemctl main enable issue in %s (%s)" % (service, e.unit)) 354 sys.exit("Error: Systemctl main enable issue in %s (%s)" % (service, e.unit))
351 elif command == "preset-all": 355 elif command == "preset-all":
@@ -353,7 +357,7 @@ def main():
353 sys.exit("Too many arguments.") 357 sys.exit("Too many arguments.")
354 if args.preset_mode != "enable-only": 358 if args.preset_mode != "enable-only":
355 sys.exit("Only enable-only is supported as preset-mode.") 359 sys.exit("Only enable-only is supported as preset-mode.")
356 preset_all(root) 360 preset_all(root, unit_type)
357 else: 361 else:
358 raise RuntimeError() 362 raise RuntimeError()
359 363
diff --git a/meta/recipes-core/systemd/systemd/0001-Do-not-create-var-log-README.patch b/meta/recipes-core/systemd/systemd/0001-Do-not-create-var-log-README.patch
new file mode 100644
index 0000000000..850e356b2f
--- /dev/null
+++ b/meta/recipes-core/systemd/systemd/0001-Do-not-create-var-log-README.patch
@@ -0,0 +1,30 @@
1From 425ad51e727058b48dd4580fd6afe7e51e96a28a Mon Sep 17 00:00:00 2001
2From: Peter Kjellerstedt <pkj@axis.com>
3Date: Tue, 21 Jan 2025 05:02:00 +0100
4Subject: [PATCH] Do not create /var/log/README
5
6/var/log/README is a link to /usr/share/doc/systemd/README.logs. The
7latter is packaged in systemd-doc and likely not installed, which leaves
8/var/log/README as a dead link. Since /var/log/README is not very
9useful, just remove it.
10
11Upstream-Status: Inappropriate [OE specific]
12Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
13---
14 tmpfiles.d/legacy.conf.in | 3 ---
15 1 file changed, 3 deletions(-)
16
17diff --git a/tmpfiles.d/legacy.conf.in b/tmpfiles.d/legacy.conf.in
18index b475500e58..650c91a8da 100644
19--- a/tmpfiles.d/legacy.conf.in
20+++ b/tmpfiles.d/legacy.conf.in
21@@ -13,9 +13,6 @@
22
23 d /run/lock 0755 root root -
24 L /var/lock - - - - ../run/lock
25-{% if CREATE_LOG_DIRS %}
26-L$ /var/log/README - - - - ../..{{DOC_DIR}}/README.logs
27-{% endif %}
28
29 {% if HAVE_SYSV_COMPAT %}
30 # /run/lock/subsys is used for serializing SysV service execution, and
diff --git a/meta/recipes-core/systemd/systemd_257.1.bb b/meta/recipes-core/systemd/systemd_257.1.bb
index e7dae83957..cdf72a5015 100644
--- a/meta/recipes-core/systemd/systemd_257.1.bb
+++ b/meta/recipes-core/systemd/systemd_257.1.bb
@@ -28,6 +28,7 @@ SRC_URI += " \
28 file://systemd-pager.sh \ 28 file://systemd-pager.sh \
29 file://0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch \ 29 file://0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch \
30 file://0002-implment-systemd-sysv-install-for-OE.patch \ 30 file://0002-implment-systemd-sysv-install-for-OE.patch \
31 file://0001-Do-not-create-var-log-README.patch \
31 " 32 "
32 33
33# patches needed by musl 34# patches needed by musl
@@ -405,10 +406,6 @@ do_install() {
405 # Actively disable Predictable Network Interface Names 406 # Actively disable Predictable Network Interface Names
406 sed -i 's/^NamePolicy=.*/NamePolicy=/;s/^AlternativeNamesPolicy=.*/AlternativeNamesPolicy=/' ${D}${nonarch_libdir}/systemd/network/99-default.link 407 sed -i 's/^NamePolicy=.*/NamePolicy=/;s/^AlternativeNamesPolicy=.*/AlternativeNamesPolicy=/' ${D}${nonarch_libdir}/systemd/network/99-default.link
407 fi 408 fi
408
409 if [ -e ${D}${nonarch_libdir}/tmpfiles.d/legacy.conf ];then
410 sed -i -e '/^L \/var\/log\/README/d' ${D}${nonarch_libdir}/tmpfiles.d/legacy.conf
411 fi
412} 409}
413 410
414python populate_packages:prepend (){ 411python populate_packages:prepend (){
diff --git a/meta/recipes-core/udev/eudev/0001-random-util.c-sync-dev_urandom-implementation-to-sys.patch b/meta/recipes-core/udev/eudev/0001-random-util.c-sync-dev_urandom-implementation-to-sys.patch
new file mode 100644
index 0000000000..668aa731ac
--- /dev/null
+++ b/meta/recipes-core/udev/eudev/0001-random-util.c-sync-dev_urandom-implementation-to-sys.patch
@@ -0,0 +1,138 @@
1From 95c871b7b912f39539777ac222ef7f8798bb0225 Mon Sep 17 00:00:00 2001
2From: Masahisa Kojima <kojima.masahisa@socionext.com>
3Date: Thu, 25 Apr 2024 17:23:10 +0900
4Subject: [PATCH] random-util.c: sync dev_urandom implementation to
5 systemd-udev
6
7Current dev_urandom() assumes that reading /dev/urandom
8will never block regardless if the random pool is fully
9initialized or not.
10This assumption is no longer applicable since linux kerrnel
11enforces the /dev/urandom entropy initialization from
12v5.18-rc2 with the commit:
1348bff1053c17 ("random: opportunistically initialize on /dev/urandom reads").
14
15With this, when we use the linux v5.18-rc2 or later,
16dev_urandom() will block if enough random pool is not supplied.
17It causes the boot delay, typically 1024msec(4msec * 256 = 1024msec)
18delay to fill the 256 bits entropy for the case CONFIG_HZ=250.
19
20To prevent this boot delay, this commit syncs dev_urandom()
21implementation to the systemd-udev.
22The systemd-udev implementation of reading /dev/urandom is as follows.
23 - Try to get random with calling getrandom(GRND_INSECURE)
24 - If kernel does not support GRND_INSECURE, fallback to GRND_NONBLOCK
25 - If enough entropy is not supplied, fallback to reading /dev/urandom,
26 this will block when the kernel version is v5.18-rc2 or later
27
28With this modification, dev_urandom() tries not to block
29as much as possible.
30
31This modification still keeps the backword compatibility,
32dev_random() will never block if the commit(48bff1053c17) is not
33applied to the linux kernel, the behavior is same as before
34in this case.
35
36Upstream-Status: Backport [a49a3aaa460add6ae7ea208b4cac630e56fe1180]
37Signed-off-by: Masahisa Kojima <kojima.masahisa@socionext.com>
38---
39 src/shared/missing.h | 4 +++
40 src/shared/random-util.c | 70 ++++++++++++++++++----------------------
41 2 files changed, 35 insertions(+), 39 deletions(-)
42
43diff --git a/src/shared/missing.h b/src/shared/missing.h
44index 1967840cdbf3..1caec0f9207c 100644
45--- a/src/shared/missing.h
46+++ b/src/shared/missing.h
47@@ -79,6 +79,10 @@ static inline int getrandom(void *buffer, size_t count, unsigned flags) {
48 #define GRND_RANDOM 0x0002
49 #endif
50
51+#ifndef GRND_INSECURE
52+#define GRND_INSECURE 0x0004
53+#endif
54+
55 #ifndef BTRFS_IOCTL_MAGIC
56 #define BTRFS_IOCTL_MAGIC 0x94
57 #endif
58diff --git a/src/shared/random-util.c b/src/shared/random-util.c
59index 01a28c8ef4e9..852b00e4ce2b 100644
60--- a/src/shared/random-util.c
61+++ b/src/shared/random-util.c
62@@ -31,45 +31,37 @@
63 #include "util.h"
64
65 int dev_urandom(void *p, size_t n) {
66- static int have_syscall = -1;
67-
68- _cleanup_close_ int fd = -1;
69- int r;
70-
71- /* Gathers some randomness from the kernel. This call will
72- * never block, and will always return some data from the
73- * kernel, regardless if the random pool is fully initialized
74- * or not. It thus makes no guarantee for the quality of the
75- * returned entropy, but is good enough for or usual usecases
76- * of seeding the hash functions for hashtable */
77-
78- /* Use the getrandom() syscall unless we know we don't have
79- * it, or when the requested size is too large for it. */
80- if (have_syscall != 0 || (size_t) (int) n != n) {
81- r = getrandom(p, n, GRND_NONBLOCK);
82- if (r == (int) n) {
83- have_syscall = true;
84- return 0;
85- }
86-
87- if (r < 0) {
88- if (errno == ENOSYS)
89- /* we lack the syscall, continue with
90- * reading from /dev/urandom */
91- have_syscall = false;
92- else if (errno == EAGAIN)
93- /* not enough entropy for now. Let's
94- * remember to use the syscall the
95- * next time, again, but also read
96- * from /dev/urandom for now, which
97- * doesn't care about the current
98- * amount of entropy. */
99- have_syscall = true;
100- else
101- return -errno;
102- } else
103- /* too short read? */
104- return -ENODATA;
105+ static bool have_getrandom = true, have_grndinsecure = true;
106+ _cleanup_close_ int fd = -EBADF;
107+
108+ if (n == 0)
109+ return 0;
110+
111+ for (;;) {
112+ ssize_t l;
113+
114+ if (!have_getrandom)
115+ break;
116+
117+ l = getrandom(p, n, have_grndinsecure ? GRND_INSECURE : GRND_NONBLOCK);
118+ if (l > 0) {
119+ if ((size_t) l == n)
120+ return 0; /* Done reading, success. */
121+ p = (uint8_t *) p + l;
122+ n -= l;
123+ continue; /* Interrupted by a signal; keep going. */
124+ } else if (l == 0)
125+ break; /* Weird, so fallback to /dev/urandom. */
126+ else if (errno == ENOSYS) {
127+ have_getrandom = false;
128+ break; /* No syscall, so fallback to /dev/urandom. */
129+ } else if (errno == EINVAL && have_grndinsecure) {
130+ have_grndinsecure = false;
131+ continue; /* No GRND_INSECURE; fallback to GRND_NONBLOCK. */
132+ } else if (errno == EAGAIN && !have_grndinsecure)
133+ break; /* Will block, but no GRND_INSECURE, so fallback to /dev/urandom. */
134+
135+ break; /* Unexpected, so just give up and fallback to /dev/urandom. */
136 }
137
138 fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
diff --git a/meta/recipes-core/udev/eudev_3.2.14.bb b/meta/recipes-core/udev/eudev_3.2.14.bb
index 0e5610f77c..b3e7d092c5 100644
--- a/meta/recipes-core/udev/eudev_3.2.14.bb
+++ b/meta/recipes-core/udev/eudev_3.2.14.bb
@@ -13,6 +13,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
13 file://netifnames.patch \ 13 file://netifnames.patch \
14 file://init \ 14 file://init \
15 file://local.rules \ 15 file://local.rules \
16 file://0001-random-util.c-sync-dev_urandom-implementation-to-sys.patch \
16 " 17 "
17 18
18SRC_URI[sha256sum] = "8da4319102f24abbf7fff5ce9c416af848df163b29590e666d334cc1927f006f" 19SRC_URI[sha256sum] = "8da4319102f24abbf7fff5ce9c416af848df163b29590e666d334cc1927f006f"
diff --git a/meta/recipes-core/util-linux/util-linux.inc b/meta/recipes-core/util-linux/util-linux.inc
index 1dc30c0535..56162ab147 100644
--- a/meta/recipes-core/util-linux/util-linux.inc
+++ b/meta/recipes-core/util-linux/util-linux.inc
@@ -6,7 +6,7 @@ disk partitioning, kernel message management, filesystem creation, and system lo
6 6
7SECTION = "base" 7SECTION = "base"
8 8
9LICENSE = "GPL-1.0-or-later & GPL-2.0-only & GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT" 9LICENSE = "GPL-1.0-or-later & GPL-2.0-only & GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause-UC & MIT"
10LICENSE:${PN}-fcntl-lock = "MIT" 10LICENSE:${PN}-fcntl-lock = "MIT"
11LICENSE:${PN}-fdisk = "GPL-1.0-or-later" 11LICENSE:${PN}-fdisk = "GPL-1.0-or-later"
12LICENSE:${PN}-libblkid = "LGPL-2.1-or-later" 12LICENSE:${PN}-libblkid = "LGPL-2.1-or-later"
diff --git a/meta/recipes-devtools/binutils/binutils-cross-canadian.inc b/meta/recipes-devtools/binutils/binutils-cross-canadian.inc
index a322114b52..c1fda1a465 100644
--- a/meta/recipes-devtools/binutils/binutils-cross-canadian.inc
+++ b/meta/recipes-devtools/binutils/binutils-cross-canadian.inc
@@ -4,7 +4,7 @@ SUMMARY = "GNU binary utilities (cross-canadian for ${TARGET_ARCH} target)"
4PN = "binutils-cross-canadian-${TRANSLATED_TARGET_ARCH}" 4PN = "binutils-cross-canadian-${TRANSLATED_TARGET_ARCH}"
5BPN = "binutils" 5BPN = "binutils"
6 6
7DEPENDS = "flex-native bison-native virtual/cross-sdk-cc virtual/nativesdk-libc nativesdk-zlib nativesdk-gettext nativesdk-flex" 7DEPENDS = "flex-native bison-native virtual/nativesdk-cross-cc virtual/nativesdk-libc nativesdk-zlib nativesdk-gettext nativesdk-flex"
8EXTRA_OECONF += "--with-sysroot=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS} \ 8EXTRA_OECONF += "--with-sysroot=${SDKPATH}/sysroots/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS} \
9 --enable-poison-system-directories \ 9 --enable-poison-system-directories \
10 " 10 "
diff --git a/meta/recipes-devtools/cmake/cmake-native_3.31.3.bb b/meta/recipes-devtools/cmake/cmake-native_3.31.4.bb
index e285a17681..e285a17681 100644
--- a/meta/recipes-devtools/cmake/cmake-native_3.31.3.bb
+++ b/meta/recipes-devtools/cmake/cmake-native_3.31.4.bb
diff --git a/meta/recipes-devtools/cmake/cmake.inc b/meta/recipes-devtools/cmake/cmake.inc
index 14cd9ffc5e..f1410a2c4b 100644
--- a/meta/recipes-devtools/cmake/cmake.inc
+++ b/meta/recipes-devtools/cmake/cmake.inc
@@ -20,7 +20,7 @@ SRC_URI = "https://cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${PV}.tar.gz \
20 file://0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch \ 20 file://0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch \
21 " 21 "
22 22
23SRC_URI[sha256sum] = "fac45bc6d410b49b3113ab866074888d6c9e9dc81a141874446eb239ac38cb87" 23SRC_URI[sha256sum] = "a6130bfe75f5ba5c73e672e34359f7c0a1931521957e8393a5c2922c8b0f7f25"
24 24
25UPSTREAM_CHECK_REGEX = "cmake-(?P<pver>\d+(\.\d+)+)\.tar" 25UPSTREAM_CHECK_REGEX = "cmake-(?P<pver>\d+(\.\d+)+)\.tar"
26 26
diff --git a/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch b/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch
index 68c1020a42..cf00964a9c 100644
--- a/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch
+++ b/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch
@@ -1,4 +1,4 @@
1From d6e3cb98ffa81c6234ad5a563354ef5f442e1bb3 Mon Sep 17 00:00:00 2001 1From 969b2d07ad955fdc117bf2ea30305a5b2e74ea76 Mon Sep 17 00:00:00 2001
2From: Philip Lorenz <philip.lorenz@bmw.de> 2From: Philip Lorenz <philip.lorenz@bmw.de>
3Date: Mon, 3 Jun 2024 13:19:24 +0200 3Date: Mon, 3 Jun 2024 13:19:24 +0200
4Subject: [PATCH] CMakeDetermineCompilerABI: Strip -pipe from compile flags 4Subject: [PATCH] CMakeDetermineCompilerABI: Strip -pipe from compile flags
diff --git a/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch b/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch
index fe3bf33c60..a01e3fe8c7 100644
--- a/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch
+++ b/meta/recipes-devtools/cmake/cmake/0001-CMakeLists.txt-disable-USE_NGHTTP2.patch
@@ -1,4 +1,4 @@
1From 3f9b36a52f12e8f8860cf4337acc9a9514a2095b Mon Sep 17 00:00:00 2001 1From 8faeaefaf00f8d443511077b82624a8bd19cf725 Mon Sep 17 00:00:00 2001
2From: Changqing Li <changqing.li@windriver.com> 2From: Changqing Li <changqing.li@windriver.com>
3Date: Wed, 28 Dec 2022 17:51:27 +0800 3Date: Wed, 28 Dec 2022 17:51:27 +0800
4Subject: [PATCH] CMakeLists.txt: disable USE_NGHTTP2 4Subject: [PATCH] CMakeLists.txt: disable USE_NGHTTP2
diff --git a/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch b/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
index ea4c76f99f..95ae9108aa 100644
--- a/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
+++ b/meta/recipes-devtools/cmake/cmake/0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
@@ -1,4 +1,4 @@
1From 7a4c1ed7b4dd038ef99c4a82e1d27743b2801757 Mon Sep 17 00:00:00 2001 1From c0ca5859788189a81c53face2ab5eaeadc1236b4 Mon Sep 17 00:00:00 2001
2From: Otavio Salvador <otavio@ossystems.com.br> 2From: Otavio Salvador <otavio@ossystems.com.br>
3Date: Thu, 5 Jul 2018 10:28:04 -0300 3Date: Thu, 5 Jul 2018 10:28:04 -0300
4Subject: [PATCH] Disable use of ext2fs/ext2_fs.h by cmake's internal 4Subject: [PATCH] Disable use of ext2fs/ext2_fs.h by cmake's internal
diff --git a/meta/recipes-devtools/cmake/cmake_3.31.3.bb b/meta/recipes-devtools/cmake/cmake_3.31.4.bb
index 9146fa8c0f..9146fa8c0f 100644
--- a/meta/recipes-devtools/cmake/cmake_3.31.3.bb
+++ b/meta/recipes-devtools/cmake/cmake_3.31.4.bb
diff --git a/meta/recipes-devtools/fmt/files/fix-gcc9.patch b/meta/recipes-devtools/fmt/files/fix-gcc9.patch
new file mode 100644
index 0000000000..1d67f7094d
--- /dev/null
+++ b/meta/recipes-devtools/fmt/files/fix-gcc9.patch
@@ -0,0 +1,26 @@
1From 5f0572acdca120e11f6d810765d7a6a3c593fcbb Mon Sep 17 00:00:00 2001
2From: Victor Zverovich <viz@meta.com>
3Date: Sat, 18 Jan 2025 09:00:22 -0800
4Subject: [PATCH] Workaround a compilation error on gcc 9.4
5
6Upstream-Status: Backport [5f0572acdca120e11f6d810765d7a6a3c593fcbb]
7Signed-off-by: Ross Burton <ross.burton@arm.com>
8---
9 include/fmt/format.h | 4 +++-
10 1 file changed, 3 insertions(+), 1 deletion(-)
11
12diff --git a/include/fmt/format.h b/include/fmt/format.h
13index 9cd523a9e6a5..4466b4f4d24b 100644
14--- a/include/fmt/format.h
15+++ b/include/fmt/format.h
16@@ -227,7 +227,9 @@ FMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) {
17 #if defined(FMT_USE_STRING_VIEW)
18 template <typename Char> using std_string_view = std::basic_string_view<Char>;
19 #else
20-template <typename T> struct std_string_view {};
21+template <typename Char> struct std_string_view {
22+ operator basic_string_view<Char>() const;
23+};
24 #endif
25
26 template <typename Char, Char... C> struct string_literal {
diff --git a/meta/recipes-devtools/fmt/fmt_11.1.1.bb b/meta/recipes-devtools/fmt/fmt_11.1.1.bb
index a99a377ad4..cfacd81a11 100644
--- a/meta/recipes-devtools/fmt/fmt_11.1.1.bb
+++ b/meta/recipes-devtools/fmt/fmt_11.1.1.bb
@@ -4,7 +4,8 @@ HOMEPAGE = "https://fmt.dev"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=b9257785fc4f3803a4b71b76c1412729" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=b9257785fc4f3803a4b71b76c1412729"
6 6
7SRC_URI = "git://github.com/fmtlib/fmt;branch=master;protocol=https" 7SRC_URI = "git://github.com/fmtlib/fmt;branch=master;protocol=https \
8 file://fix-gcc9.patch"
8SRCREV = "e3ddede6c4ee818825c4e5a6dfa1d384860c27d9" 9SRCREV = "e3ddede6c4ee818825c4e5a6dfa1d384860c27d9"
9 10
10S = "${WORKDIR}/git" 11S = "${WORKDIR}/git"
diff --git a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
index a97329e58f..9b55ec21e0 100644
--- a/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
+++ b/meta/recipes-devtools/gcc/gcc-cross-canadian.inc
@@ -3,7 +3,7 @@ inherit cross-canadian
3SUMMARY = "GNU cc and gcc C compilers (cross-canadian for ${TARGET_ARCH} target)" 3SUMMARY = "GNU cc and gcc C compilers (cross-canadian for ${TARGET_ARCH} target)"
4PN = "gcc-cross-canadian-${TRANSLATED_TARGET_ARCH}" 4PN = "gcc-cross-canadian-${TRANSLATED_TARGET_ARCH}"
5 5
6DEPENDS = "virtual/cross-sdk-cc virtual/cross-cc virtual/cross-sdk-binutils virtual/nativesdk-libc nativesdk-gettext flex-native virtual/libc" 6DEPENDS = "virtual/nativesdk-cross-cc virtual/cross-cc virtual/nativesdk-cross-binutils virtual/nativesdk-libc nativesdk-gettext flex-native virtual/libc"
7 7
8GCCMULTILIB = "--enable-multilib" 8GCCMULTILIB = "--enable-multilib"
9 9
diff --git a/meta/recipes-devtools/gcc/gcc-crosssdk.inc b/meta/recipes-devtools/gcc/gcc-crosssdk.inc
index 1adce65cf8..4397dd898d 100644
--- a/meta/recipes-devtools/gcc/gcc-crosssdk.inc
+++ b/meta/recipes-devtools/gcc/gcc-crosssdk.inc
@@ -8,7 +8,7 @@ SYSTEMLIBS1 = "${SDKPATHNATIVE}${libdir_nativesdk}/"
8 8
9GCCMULTILIB = "--disable-multilib" 9GCCMULTILIB = "--disable-multilib"
10 10
11DEPENDS = "virtual/cross-sdk-binutils gettext-native ${NATIVEDEPS}" 11DEPENDS = "virtual/nativesdk-cross-binutils gettext-native ${NATIVEDEPS}"
12PROVIDES = "virtual/cross-sdk-cc virtual/cross-sdk-c++" 12PROVIDES = "virtual/nativesdk-cross-cc virtual/nativesdk-cross-c++"
13 13
14gcc_multilib_setup[vardepsexclude] = "MULTILIB_VARIANTS" 14gcc_multilib_setup[vardepsexclude] = "MULTILIB_VARIANTS"
diff --git a/meta/recipes-devtools/gcc/gcc-runtime.inc b/meta/recipes-devtools/gcc/gcc-runtime.inc
index 7380123ab6..291ace2d09 100644
--- a/meta/recipes-devtools/gcc/gcc-runtime.inc
+++ b/meta/recipes-devtools/gcc/gcc-runtime.inc
@@ -157,7 +157,7 @@ do_install:append:class-target () {
157 157
158INHIBIT_DEFAULT_DEPS = "1" 158INHIBIT_DEFAULT_DEPS = "1"
159DEPENDS = "virtual/cross-cc virtual/cross-c++ ${MLPREFIX}libgcc virtual/${MLPREFIX}libc" 159DEPENDS = "virtual/cross-cc virtual/cross-c++ ${MLPREFIX}libgcc virtual/${MLPREFIX}libc"
160DEPENDS:class-nativesdk = "virtual/cross-sdk-cc virtual/cross-sdk-c++ ${MLPREFIX}libgcc virtual/${MLPREFIX}libc" 160DEPENDS:class-nativesdk = "virtual/nativesdk-cross-cc virtual/nativesdk-cross-c++ ${MLPREFIX}libgcc virtual/${MLPREFIX}libc"
161PROVIDES = "virtual/${MLPREFIX}compilerlibs" 161PROVIDES = "virtual/${MLPREFIX}compilerlibs"
162 162
163BBCLASSEXTEND = "nativesdk" 163BBCLASSEXTEND = "nativesdk"
diff --git a/meta/recipes-devtools/gcc/gcc-sanitizers.inc b/meta/recipes-devtools/gcc/gcc-sanitizers.inc
index 4163e87e1f..6c81d30243 100644
--- a/meta/recipes-devtools/gcc/gcc-sanitizers.inc
+++ b/meta/recipes-devtools/gcc/gcc-sanitizers.inc
@@ -11,6 +11,10 @@ EXTRA_OECONF_PATHS = "\
11 --with-build-sysroot=${STAGING_DIR_TARGET} \ 11 --with-build-sysroot=${STAGING_DIR_TARGET} \
12" 12"
13 13
14# Workaround for this issue: https://github.com/llvm/llvm-project/issues/65144 on aarch64
15# compiler-rt/sanitizers/aarch64: CHECK failed: sanitizer_allocator_primary64.h:133
16CXXFLAGS:append:aarch64 = " -DSANITIZER_CAN_USE_ALLOCATOR64=0"
17
14do_configure () { 18do_configure () {
15 rm -rf ${B}/${TARGET_SYS}/libsanitizer/ 19 rm -rf ${B}/${TARGET_SYS}/libsanitizer/
16 mkdir -p ${B}/${TARGET_SYS}/libsanitizer/ 20 mkdir -p ${B}/${TARGET_SYS}/libsanitizer/
diff --git a/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch b/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch
index 367c9e3821..8523af1281 100644
--- a/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch
+++ b/meta/recipes-devtools/gcc/gcc/0002-gcc-poison-system-directories.patch
@@ -160,10 +160,23 @@ index f82f7d2817b..1da91813b0e 100644
160 @opindex Wno-float-equal 160 @opindex Wno-float-equal
161 @item -Wfloat-equal 161 @item -Wfloat-equal
162diff --git a/gcc/gcc.cc b/gcc/gcc.cc 162diff --git a/gcc/gcc.cc b/gcc/gcc.cc
163index 728332b8153..343e4915097 100644 163index 728332b8153..a63f128cb95 100644
164--- a/gcc/gcc.cc 164--- a/gcc/gcc.cc
165+++ b/gcc/gcc.cc 165+++ b/gcc/gcc.cc
166@@ -1159,6 +1159,8 @@ proper position among the other output files. */ 166@@ -902,6 +902,12 @@ proper position among the other output files. */
167 #define ASM_MAP ""
168 #endif
169
170+#ifdef POISON_BY_DEFAULT
171+#define POISON_IS_ERROR " -Werror=poison-system-directories"
172+#else
173+#define POISON_IS_ERROR
174+#endif
175+
176 /* Assembler options for compressed debug sections. */
177 #if HAVE_LD_COMPRESS_DEBUG == 0
178 /* Reject if the linker cannot write compressed debug sections. */
179@@ -1159,6 +1163,8 @@ proper position among the other output files. */
167 "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \ 180 "%{fuse-ld=*:-fuse-ld=%*} " LINK_COMPRESS_DEBUG_SPEC \
168 "%X %{o*} %{e*} %{N} %{n} %{r}\ 181 "%X %{o*} %{e*} %{N} %{n} %{r}\
169 %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \ 182 %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!r:%{!nostartfiles:%S}}} \
@@ -172,20 +185,24 @@ index 728332b8153..343e4915097 100644
172 %{static|no-pie|static-pie:} %@{L*} %(link_libgcc) " \ 185 %{static|no-pie|static-pie:} %@{L*} %(link_libgcc) " \
173 VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \ 186 VTABLE_VERIFICATION_SPEC " " SANITIZER_EARLY_SPEC " %o "" \
174 %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\ 187 %{fopenacc|fopenmp|%:gt(%{ftree-parallelize-loops=*:%*} 1):\
175@@ -1260,8 +1262,11 @@ static const char *cpp_unique_options = 188@@ -1261,7 +1267,7 @@ static const char *cpp_options =
176 static const char *cpp_options =
177 "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\ 189 "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\
178 %{f*} %{g*:%{%:debug-level-gt(0):%{g*}\ 190 %{f*} %{g*:%{%:debug-level-gt(0):%{g*}\
179- %{!fno-working-directory:-fworking-directory}}} %{O*}\ 191 %{!fno-working-directory:-fworking-directory}}} %{O*}\
180- %{undef} %{save-temps*:-fpch-preprocess}"; 192- %{undef} %{save-temps*:-fpch-preprocess}";
181+ %{!fno-working-directory:-fworking-directory}}} %{O*}" 193+ %{undef} %{save-temps*:-fpch-preprocess}" POISON_IS_ERROR;
182+#ifdef POISON_BY_DEFAULT
183+ " -Werror=poison-system-directories"
184+#endif
185+ " %{undef} %{save-temps*:-fpch-preprocess}";
186 194
187 /* Pass -d* flags, possibly modifying -dumpdir, -dumpbase et al. 195 /* Pass -d* flags, possibly modifying -dumpdir, -dumpbase et al.
188 196
197@@ -1290,7 +1296,7 @@ static const char *cc1_options =
198 %{coverage:-fprofile-arcs -ftest-coverage}\
199 %{fprofile-arcs|fcondition-coverage|fprofile-generate*|coverage:\
200 %{!fprofile-update=single:\
201- %{pthread:-fprofile-update=prefer-atomic}}}";
202+ %{pthread:-fprofile-update=prefer-atomic}}}" POISON_IS_ERROR;
203
204 static const char *asm_options =
205 "%{-target-help:%:print-asm-header()} "
189diff --git a/gcc/incpath.cc b/gcc/incpath.cc 206diff --git a/gcc/incpath.cc b/gcc/incpath.cc
190index 64cdd2f4a..89f42900d 100644 207index 64cdd2f4a..89f42900d 100644
191--- a/gcc/incpath.cc 208--- a/gcc/incpath.cc
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian.inc b/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
index b4b6742d13..9150c196a8 100644
--- a/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
+++ b/meta/recipes-devtools/gdb/gdb-cross-canadian.inc
@@ -7,7 +7,7 @@ PN = "gdb-cross-canadian-${TRANSLATED_TARGET_ARCH}"
7BPN = "gdb" 7BPN = "gdb"
8 8
9DEPENDS = "nativesdk-ncurses nativesdk-expat nativesdk-gettext nativesdk-gmp nativesdk-mpfr \ 9DEPENDS = "nativesdk-ncurses nativesdk-expat nativesdk-gettext nativesdk-gmp nativesdk-mpfr \
10 virtual/cross-sdk-cc virtual/cross-sdk-binutils virtual/nativesdk-libc" 10 virtual/nativesdk-cross-cc virtual/nativesdk-cross-binutils virtual/nativesdk-libc"
11 11
12GDBPROPREFIX = "--program-prefix='${TARGET_PREFIX}'" 12GDBPROPREFIX = "--program-prefix='${TARGET_PREFIX}'"
13 13
diff --git a/meta/recipes-devtools/gdb/gdb-cross-canadian_15.2.bb b/meta/recipes-devtools/gdb/gdb-cross-canadian_16.1.bb
index 4ab2b7156d..4ab2b7156d 100644
--- a/meta/recipes-devtools/gdb/gdb-cross-canadian_15.2.bb
+++ b/meta/recipes-devtools/gdb/gdb-cross-canadian_16.1.bb
diff --git a/meta/recipes-devtools/gdb/gdb-cross_15.2.bb b/meta/recipes-devtools/gdb/gdb-cross_16.1.bb
index 3b654a2f0d..3b654a2f0d 100644
--- a/meta/recipes-devtools/gdb/gdb-cross_15.2.bb
+++ b/meta/recipes-devtools/gdb/gdb-cross_16.1.bb
diff --git a/meta/recipes-devtools/gdb/gdb.inc b/meta/recipes-devtools/gdb/gdb.inc
index ff0db68da7..41f92be3cb 100644
--- a/meta/recipes-devtools/gdb/gdb.inc
+++ b/meta/recipes-devtools/gdb/gdb.inc
@@ -12,6 +12,5 @@ SRC_URI = "${GNU_MIRROR}/gdb/gdb-${PV}.tar.xz \
12 file://0005-Change-order-of-CFLAGS.patch \ 12 file://0005-Change-order-of-CFLAGS.patch \
13 file://0006-Fix-invalid-sigprocmask-call.patch \ 13 file://0006-Fix-invalid-sigprocmask-call.patch \
14 file://0007-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch \ 14 file://0007-Define-alignof-using-_Alignof-when-using-C11-or-newe.patch \
15 file://0001-Fix-Wenum-constexpr-conversion-in-enum-flags.h.patch \
16 " 15 "
17SRC_URI[sha256sum] = "83350ccd35b5b5a0cba6b334c41294ea968158c573940904f00b92f76345314d" 16SRC_URI[sha256sum] = "c2cc5ccca029b7a7c3879ce8a96528fdfd056b4d884f2b0511e8f7bc723355c6"
diff --git a/meta/recipes-devtools/gdb/gdb/0001-Fix-Wenum-constexpr-conversion-in-enum-flags.h.patch b/meta/recipes-devtools/gdb/gdb/0001-Fix-Wenum-constexpr-conversion-in-enum-flags.h.patch
deleted file mode 100644
index 8866db2e93..0000000000
--- a/meta/recipes-devtools/gdb/gdb/0001-Fix-Wenum-constexpr-conversion-in-enum-flags.h.patch
+++ /dev/null
@@ -1,313 +0,0 @@
1From dd22f64329c46797b3a3de2605ad1fa14cf77dd4 Mon Sep 17 00:00:00 2001
2From: Carlos Galvez <carlosgalvezp@gmail.com>
3Date: Sun, 30 Jun 2024 21:36:24 +0200
4Subject: [PATCH] Fix -Wenum-constexpr-conversion in enum-flags.h
5
6This fixes PR 31331:
7https://sourceware.org/bugzilla/show_bug.cgi?id=31331
8
9Currently, enum-flags.h is suppressing the warning
10-Wenum-constexpr-conversion coming from recent versions of Clang.
11This warning is intended to be made a compiler error
12(non-downgradeable) in future versions of Clang:
13
14https://github.com/llvm/llvm-project/issues/59036
15
16The rationale is that casting a value of an integral type into an
17enumeration is Undefined Behavior if the value does not fit in the
18range of values of the enum:
19https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1766
20
21Undefined Behavior is not allowed in constant expressions, leading to
22an ill-formed program.
23
24In this case, in enum-flags.h, we are casting the value -1 to an enum
25of a positive range only, which is UB as per the Standard and thus not
26allowed in a constexpr context.
27
28The purpose of doing this instead of using std::underlying_type is
29because, for C-style enums, std::underlying_type typically returns
30"unsigned int". However, when operating with it arithmetically, the
31enum is promoted to *signed* int, which is what we want to avoid.
32
33This patch solves this issue as follows:
34
35* Use std::underlying_type and remove the custom enum_underlying_type.
36
37* Ensure that operator~ is called always on an unsigned integer. We do
38 this by casting the input enum into std::size_t, which can fit any
39 unsigned integer. We have the guarantee that the cast is safe,
40 because we have checked that the underlying type is unsigned. If the
41 enum had negative values, the underlying type would be signed.
42
43 This solves the issue with C-style enums, but also solves a hidden
44 issue: enums with underlying type of std::uint8_t or std::uint16_t are
45 *also* promoted to signed int. Now they are all explicitly casted
46 to the largest unsigned int type and operator~ is safe to use.
47
48* There is one more thing that needs fix. Currently, operator~ is
49 implemented as follows:
50
51 return (enum_type) ~underlying(e);
52
53 After applying ~underlying(e), the result is a very large value,
54 which we then cast to "enum_type". This cast is Undefined Behavior
55 if the large value does not fit in the range of the enum. For
56 C++ enums (scoped and/or with explicit underlying type), the range
57 of the enum is the entire range of the underlying type, so the cast
58 is safe. However, for C-style enums, the range is the smallest
59 bit-field that can hold all the values of the enumeration. So the
60 range is a lot smaller and casting a large value to the enum would
61 invoke Undefined Behavior.
62
63 To solve this problem, we create a new trait
64 EnumHasFixedUnderlyingType, to ensure operator~ may only be called
65 on C++-style enums. This behavior is roughly the same as what we
66 had on trunk, but relying on different properties of the enums.
67
68* Once this is implemented, the following tests fail to compile:
69
70 CHECK_VALID (true, int, true ? EF () : EF2 ())
71
72 This is because it expects the enums to be promoted to signed int,
73 instead of unsigned int (which is the true underlying type).
74
75 I propose to remove these tests altogether, because:
76
77 - The comment nearby say they are not very important.
78 - Comparing 2 enums of different type like that is strange, relies
79 on integer promotions and thus hurts readability. As per comments
80 in the related PR, we likely don't want this type of code in gdb
81 code anyway, so there's no point in testing it.
82 - Most importantly, this type of comparison will be ill-formed in
83 C++26 for regular enums, so enum_flags does not need to emulate
84 that.
85
86Since this is the only place where the warning was suppressed, remove
87also the corresponding macro in include/diagnostics.h.
88
89The change has been tested by running the entire gdb test suite
90(make check) and comparing the results (testsuite/gdb.sum) against
91trunk. No noticeable differences have been observed.
92Tested-by: Keith Seitz <keiths@redhat.com>
93
94Signed-off-by: Khem Raj <raj.khem@gmail.com>
95Upstream-Status: Submitted [https://patchwork.sourceware.org/project/gdb/patch/20240630193624.2906762-1-carlosgalvezp@gmail.com/]
96---
97 gdb/unittests/enum-flags-selftests.c | 27 -------
98 gdbsupport/enum-flags.h | 104 ++++++++++++++++++---------
99 include/diagnostics.h | 5 --
100 3 files changed, 70 insertions(+), 66 deletions(-)
101
102diff --git a/gdb/unittests/enum-flags-selftests.c b/gdb/unittests/enum-flags-selftests.c
103index b55d8c3..02563e5 100644
104--- a/gdb/unittests/enum-flags-selftests.c
105+++ b/gdb/unittests/enum-flags-selftests.c
106@@ -233,33 +233,6 @@ CHECK_VALID (true, UEF, ~UEF ())
107 CHECK_VALID (true, EF, true ? EF () : RE ())
108 CHECK_VALID (true, EF, true ? RE () : EF ())
109
110-/* These are valid, but it's not a big deal since you won't be able to
111- assign the resulting integer to an enum or an enum_flags without a
112- cast.
113-
114- The latter two tests are disabled on older GCCs because they
115- incorrectly fail with gcc 4.8 and 4.9 at least. Running the test
116- outside a SFINAE context shows:
117-
118- invalid user-defined conversion from ‘EF’ to ‘RE2’
119-
120- They've been confirmed to compile/pass with gcc 5.3, gcc 7.1 and
121- clang 3.7. */
122-
123-CHECK_VALID (true, int, true ? EF () : EF2 ())
124-CHECK_VALID (true, int, true ? EF2 () : EF ())
125-CHECK_VALID (true, int, true ? EF () : RE2 ())
126-CHECK_VALID (true, int, true ? RE2 () : EF ())
127-
128-/* Same, but with an unsigned enum. */
129-
130-typedef unsigned int uns;
131-
132-CHECK_VALID (true, uns, true ? EF () : UEF ())
133-CHECK_VALID (true, uns, true ? UEF () : EF ())
134-CHECK_VALID (true, uns, true ? EF () : URE ())
135-CHECK_VALID (true, uns, true ? URE () : EF ())
136-
137 /* Unfortunately this can't work due to the way C++ computes the
138 return type of the ternary conditional operator. int isn't
139 implicitly convertible to the raw enum type, so the type of the
140diff --git a/gdbsupport/enum-flags.h b/gdbsupport/enum-flags.h
141index 5078004..acec203 100644
142--- a/gdbsupport/enum-flags.h
143+++ b/gdbsupport/enum-flags.h
144@@ -75,30 +75,6 @@
145 namespace. The compiler finds the corresponding
146 is_enum_flags_enum_type function via ADL. */
147
148-/* Note that std::underlying_type<enum_type> is not what we want here,
149- since that returns unsigned int even when the enum decays to signed
150- int. */
151-template<int size, bool sign> class integer_for_size { typedef void type; };
152-template<> struct integer_for_size<1, 0> { typedef uint8_t type; };
153-template<> struct integer_for_size<2, 0> { typedef uint16_t type; };
154-template<> struct integer_for_size<4, 0> { typedef uint32_t type; };
155-template<> struct integer_for_size<8, 0> { typedef uint64_t type; };
156-template<> struct integer_for_size<1, 1> { typedef int8_t type; };
157-template<> struct integer_for_size<2, 1> { typedef int16_t type; };
158-template<> struct integer_for_size<4, 1> { typedef int32_t type; };
159-template<> struct integer_for_size<8, 1> { typedef int64_t type; };
160-
161-template<typename T>
162-struct enum_underlying_type
163-{
164- DIAGNOSTIC_PUSH
165- DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
166- typedef typename
167- integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
168- type;
169- DIAGNOSTIC_POP
170-};
171-
172 namespace enum_flags_detail
173 {
174
175@@ -119,10 +95,62 @@ struct zero_type;
176 /* gdb::Requires trait helpers. */
177 template <typename enum_type>
178 using EnumIsUnsigned
179- = std::is_unsigned<typename enum_underlying_type<enum_type>::type>;
180+ = std::is_unsigned<typename std::underlying_type<enum_type>::type>;
181+
182+/* Helper to detect whether an enum has a fixed underlying type. This can be
183+ achieved by using a scoped enum (in which case the type is "int") or
184+ an explicit underlying type. C-style enums that are unscoped or do not
185+ have an explicit underlying type have an implementation-defined underlying
186+ type.
187+
188+ https://timsong-cpp.github.io/cppwp/n4659/dcl.enum#5
189+
190+ We need this trait in order to ensure that operator~ below does NOT
191+ operate on old-style enums. This is because we apply operator~ on
192+ the value and then cast the result to the enum_type. This is however
193+ Undefined Behavior if the result does not fit in the range of possible
194+ values for the enum. For enums with fixed underlying type, the entire
195+ range of the integer is available. However, for old-style enums, the range
196+ is only the smallest bit-field that can hold all the values of the
197+ enumeration, typically much smaller than the underlying integer:
198+
199+ https://timsong-cpp.github.io/cppwp/n4659/expr.static.cast#10
200+ https://timsong-cpp.github.io/cppwp/n4659/dcl.enum#8
201+
202+ To implement this, we leverage the fact that, since C++17, enums with
203+ fixed underlying type can be list-initialized from an integer:
204+ https://timsong-cpp.github.io/cppwp/n4659/dcl.init.list#3.7
205+
206+ Old-style enums cannot be initialized like that, leading to ill-formed
207+ code.
208+
209+ We then use this together with SFINAE to create the desired trait.
210+
211+*/
212+// Primary template
213+template <typename enum_type, typename = void>
214+struct EnumHasFixedUnderlyingType : std::false_type
215+{
216+ static_assert(std::is_enum<enum_type>::value);
217+};
218+
219+// Specialization that is active only if enum_type can be list-initialized
220+// from an integer (0). Only enums with fixed underlying type satisfy this
221+// property in C++17.
222+template <typename enum_type>
223+struct EnumHasFixedUnderlyingType<enum_type, std::void_t<decltype(enum_type{0})>> : std::true_type
224+{
225+ static_assert(std::is_enum<enum_type>::value);
226+};
227+
228+template <typename enum_type>
229+using EnumIsSafeForBitwiseComplement = std::conjunction<
230+ EnumIsUnsigned<enum_type>,
231+ EnumHasFixedUnderlyingType<enum_type>
232+>;
233+
234 template <typename enum_type>
235-using EnumIsSigned
236- = std::is_signed<typename enum_underlying_type<enum_type>::type>;
237+using EnumIsUnsafeForBitwiseComplement = std::negation<EnumIsSafeForBitwiseComplement<enum_type>>;
238
239 }
240
241@@ -131,7 +159,7 @@ class enum_flags
242 {
243 public:
244 typedef E enum_type;
245- typedef typename enum_underlying_type<enum_type>::type underlying_type;
246+ typedef typename std::underlying_type<enum_type>::type underlying_type;
247
248 /* For to_string. Maps one enumerator of E to a string. */
249 struct string_mapping
250@@ -394,33 +422,41 @@ ENUM_FLAGS_GEN_COMP (operator!=, !=)
251 template <typename enum_type,
252 typename = is_enum_flags_enum_type_t<enum_type>,
253 typename
254- = gdb::Requires<enum_flags_detail::EnumIsUnsigned<enum_type>>>
255+ = gdb::Requires<enum_flags_detail::EnumIsSafeForBitwiseComplement<enum_type>>>
256 constexpr enum_type
257 operator~ (enum_type e)
258 {
259 using underlying = typename enum_flags<enum_type>::underlying_type;
260- return (enum_type) ~underlying (e);
261+ // Cast to std::size_t first, to prevent integer promotions from
262+ // enums with fixed underlying type std::uint8_t or std::uint16_t
263+ // to signed int.
264+ // This ensures we apply the bitwise complement on an unsigned type.
265+ return (enum_type)(underlying) ~std::size_t (e);
266 }
267
268 template <typename enum_type,
269 typename = is_enum_flags_enum_type_t<enum_type>,
270- typename = gdb::Requires<enum_flags_detail::EnumIsSigned<enum_type>>>
271+ typename = gdb::Requires<enum_flags_detail::EnumIsUnsafeForBitwiseComplement<enum_type>>>
272 constexpr void operator~ (enum_type e) = delete;
273
274 template <typename enum_type,
275 typename = is_enum_flags_enum_type_t<enum_type>,
276 typename
277- = gdb::Requires<enum_flags_detail::EnumIsUnsigned<enum_type>>>
278+ = gdb::Requires<enum_flags_detail::EnumIsSafeForBitwiseComplement<enum_type>>>
279 constexpr enum_flags<enum_type>
280 operator~ (enum_flags<enum_type> e)
281 {
282 using underlying = typename enum_flags<enum_type>::underlying_type;
283- return (enum_type) ~underlying (e);
284+ // Cast to std::size_t first, to prevent integer promotions from
285+ // enums with fixed underlying type std::uint8_t or std::uint16_t
286+ // to signed int.
287+ // This ensures we apply the bitwise complement on an unsigned type.
288+ return (enum_type)(underlying) ~std::size_t (e);
289 }
290
291 template <typename enum_type,
292 typename = is_enum_flags_enum_type_t<enum_type>,
293- typename = gdb::Requires<enum_flags_detail::EnumIsSigned<enum_type>>>
294+ typename = gdb::Requires<enum_flags_detail::EnumIsUnsafeForBitwiseComplement<enum_type>>>
295 constexpr void operator~ (enum_flags<enum_type> e) = delete;
296
297 /* Delete operator<< and operator>>. */
298diff --git a/include/diagnostics.h b/include/diagnostics.h
299index 97e30ab..14575e2 100644
300--- a/include/diagnostics.h
301+++ b/include/diagnostics.h
302@@ -76,11 +76,6 @@
303 # define DIAGNOSTIC_ERROR_SWITCH \
304 DIAGNOSTIC_ERROR ("-Wswitch")
305
306-# if __has_warning ("-Wenum-constexpr-conversion")
307-# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
308- DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
309-# endif
310-
311 #elif defined (__GNUC__) /* GCC */
312
313 # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS \
diff --git a/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch b/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
index 56602b4116..69d4d51af0 100644
--- a/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
+++ b/meta/recipes-devtools/gdb/gdb/0002-ppc-ptrace-Define-pt_regs-uapi_pt_regs-on-GLIBC-syst.patch
@@ -16,8 +16,8 @@ index b51e2278f4b..f1bc07df0e9 100644
16--- a/gdb/nat/ppc-linux.h 16--- a/gdb/nat/ppc-linux.h
17+++ b/gdb/nat/ppc-linux.h 17+++ b/gdb/nat/ppc-linux.h
18@@ -18,7 +18,13 @@ 18@@ -18,7 +18,13 @@
19 #ifndef NAT_PPC_LINUX_H 19 #ifndef GDB_NAT_PPC_LINUX_H
20 #define NAT_PPC_LINUX_H 20 #define GDB_NAT_PPC_LINUX_H
21 21
22+#if !defined(__GLIBC__) 22+#if !defined(__GLIBC__)
23+# define pt_regs uapi_pt_regs 23+# define pt_regs uapi_pt_regs
diff --git a/meta/recipes-devtools/gdb/gdb_15.2.bb b/meta/recipes-devtools/gdb/gdb_16.1.bb
index 9c6db4ca2c..9c6db4ca2c 100644
--- a/meta/recipes-devtools/gdb/gdb_15.2.bb
+++ b/meta/recipes-devtools/gdb/gdb_16.1.bb
diff --git a/meta/recipes-devtools/go/go-1.22.8.inc b/meta/recipes-devtools/go/go-1.22.11.inc
index 542519b930..21222bea4e 100644
--- a/meta/recipes-devtools/go/go-1.22.8.inc
+++ b/meta/recipes-devtools/go/go-1.22.11.inc
@@ -15,4 +15,4 @@ SRC_URI += "\
15 file://0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch \ 15 file://0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch \
16 file://0009-go-Filter-build-paths-on-staticly-linked-arches.patch \ 16 file://0009-go-Filter-build-paths-on-staticly-linked-arches.patch \
17" 17"
18SRC_URI[main.sha256sum] = "df12c23ebf19dea0f4bf46a22cbeda4a3eca6f474f318390ce774974278440b8" 18SRC_URI[main.sha256sum] = "a60c23dec95d10a2576265ce580f57869d5ac2471c4f4aca805addc9ea0fc9fe"
diff --git a/meta/recipes-devtools/go/go-binary-native_1.22.8.bb b/meta/recipes-devtools/go/go-binary-native_1.22.11.bb
index 98799eb503..a526cc88bc 100644
--- a/meta/recipes-devtools/go/go-binary-native_1.22.8.bb
+++ b/meta/recipes-devtools/go/go-binary-native_1.22.11.bb
@@ -9,9 +9,9 @@ PROVIDES = "go-native"
9 9
10# Checksums available at https://go.dev/dl/ 10# Checksums available at https://go.dev/dl/
11SRC_URI = "https://dl.google.com/go/go${PV}.${BUILD_GOOS}-${BUILD_GOARCH}.tar.gz;name=go_${BUILD_GOTUPLE}" 11SRC_URI = "https://dl.google.com/go/go${PV}.${BUILD_GOOS}-${BUILD_GOARCH}.tar.gz;name=go_${BUILD_GOTUPLE}"
12SRC_URI[go_linux_amd64.sha256sum] = "5f467d29fc67c7ae6468cb6ad5b047a274bae8180cac5e0b7ddbfeba3e47e18f" 12SRC_URI[go_linux_amd64.sha256sum] = "0fc88d966d33896384fbde56e9a8d80a305dc17a9f48f1832e061724b1719991"
13SRC_URI[go_linux_arm64.sha256sum] = "5c616b32dab04bb8c4c8700478381daea0174dc70083e4026321163879278a4a" 13SRC_URI[go_linux_arm64.sha256sum] = "9ebfcab26801fa4cf0627c6439db7a4da4d3c6766142a3dd83508240e4f21031"
14SRC_URI[go_linux_ppc64le.sha256sum] = "c546f27866510bf8e54e86fe6f58c705af0e894341e5572c91f197a734152c27" 14SRC_URI[go_linux_ppc64le.sha256sum] = "963a0ec973640b23ee8bb7a462cc415276fd8436111a03df8c34eb3b1ae29f12"
15 15
16UPSTREAM_CHECK_URI = "https://golang.org/dl/" 16UPSTREAM_CHECK_URI = "https://golang.org/dl/"
17UPSTREAM_CHECK_REGEX = "go(?P<pver>\d+(\.\d+)+)\.linux" 17UPSTREAM_CHECK_REGEX = "go(?P<pver>\d+(\.\d+)+)\.linux"
diff --git a/meta/recipes-devtools/go/go-cross-canadian.inc b/meta/recipes-devtools/go/go-cross-canadian.inc
index 7be6fe778f..ff6c063d69 100644
--- a/meta/recipes-devtools/go/go-cross-canadian.inc
+++ b/meta/recipes-devtools/go/go-cross-canadian.inc
@@ -1,7 +1,7 @@
1inherit cross-canadian 1inherit cross-canadian
2 2
3DEPENDS = "go-native virtual/${HOST_PREFIX}go virtual/nativesdk-${HOST_PREFIX}go-runtime \ 3DEPENDS = "go-native virtual/${HOST_PREFIX}go virtual/nativesdk-${HOST_PREFIX}go-runtime \
4 virtual/cross-sdk-cc virtual/nativesdk-libc \ 4 virtual/nativesdk-cross-cc virtual/nativesdk-libc \
5 virtual/nativesdk-compilerlibs" 5 virtual/nativesdk-compilerlibs"
6PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}" 6PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}"
7 7
diff --git a/meta/recipes-devtools/go/go-cross-canadian_1.22.8.bb b/meta/recipes-devtools/go/go-cross-canadian_1.22.11.bb
index 7ac9449e47..7ac9449e47 100644
--- a/meta/recipes-devtools/go/go-cross-canadian_1.22.8.bb
+++ b/meta/recipes-devtools/go/go-cross-canadian_1.22.11.bb
diff --git a/meta/recipes-devtools/go/go-cross_1.22.8.bb b/meta/recipes-devtools/go/go-cross_1.22.11.bb
index 80b5a03f6c..80b5a03f6c 100644
--- a/meta/recipes-devtools/go/go-cross_1.22.8.bb
+++ b/meta/recipes-devtools/go/go-cross_1.22.11.bb
diff --git a/meta/recipes-devtools/go/go-crosssdk.inc b/meta/recipes-devtools/go/go-crosssdk.inc
index f2a0521ccf..4f19025ba7 100644
--- a/meta/recipes-devtools/go/go-crosssdk.inc
+++ b/meta/recipes-devtools/go/go-crosssdk.inc
@@ -1,6 +1,6 @@
1inherit crosssdk 1inherit crosssdk
2 2
3DEPENDS = "go-native virtual/cross-sdk-cc virtual/nativesdk-compilerlibs virtual/cross-sdk-binutils" 3DEPENDS = "go-native virtual/nativesdk-cross-cc virtual/nativesdk-compilerlibs virtual/nativesdk-cross-binutils"
4PN = "go-crosssdk-${SDK_SYS}" 4PN = "go-crosssdk-${SDK_SYS}"
5PROVIDES = "virtual/${TARGET_PREFIX}go" 5PROVIDES = "virtual/${TARGET_PREFIX}go"
6 6
diff --git a/meta/recipes-devtools/go/go-crosssdk_1.22.8.bb b/meta/recipes-devtools/go/go-crosssdk_1.22.11.bb
index 1857c8a577..1857c8a577 100644
--- a/meta/recipes-devtools/go/go-crosssdk_1.22.8.bb
+++ b/meta/recipes-devtools/go/go-crosssdk_1.22.11.bb
diff --git a/meta/recipes-devtools/go/go-runtime_1.22.8.bb b/meta/recipes-devtools/go/go-runtime_1.22.11.bb
index 63464a1501..63464a1501 100644
--- a/meta/recipes-devtools/go/go-runtime_1.22.8.bb
+++ b/meta/recipes-devtools/go/go-runtime_1.22.11.bb
diff --git a/meta/recipes-devtools/go/go_1.22.8.bb b/meta/recipes-devtools/go/go_1.22.11.bb
index 46f5fbc6be..46f5fbc6be 100644
--- a/meta/recipes-devtools/go/go_1.22.8.bb
+++ b/meta/recipes-devtools/go/go_1.22.11.bb
diff --git a/meta/recipes-devtools/llvm/llvm_19.1.6.bb b/meta/recipes-devtools/llvm/llvm_19.1.6.bb
index 003676a652..3efd6c40c3 100644
--- a/meta/recipes-devtools/llvm/llvm_19.1.6.bb
+++ b/meta/recipes-devtools/llvm/llvm_19.1.6.bb
@@ -82,12 +82,14 @@ EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
82 82
83EXTRA_OECMAKE:append:class-target = "\ 83EXTRA_OECMAKE:append:class-target = "\
84 -DCMAKE_CROSSCOMPILING:BOOL=ON \ 84 -DCMAKE_CROSSCOMPILING:BOOL=ON \
85 -DLLVM_HOST_TRIPLE=${TARGET_SYS} \
85 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \ 86 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \
86 -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \ 87 -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \
87 " 88 "
88 89
89EXTRA_OECMAKE:append:class-nativesdk = "\ 90EXTRA_OECMAKE:append:class-nativesdk = "\
90 -DCMAKE_CROSSCOMPILING:BOOL=ON \ 91 -DCMAKE_CROSSCOMPILING:BOOL=ON \
92 -DLLVM_HOST_TRIPLE=${SDK_SYS} \
91 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \ 93 -DLLVM_TABLEGEN=${STAGING_BINDIR_NATIVE}/llvm-tblgen${PV} \
92 -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \ 94 -DLLVM_CONFIG_PATH=${STAGING_BINDIR_NATIVE}/llvm-config${PV} \
93 " 95 "
diff --git a/meta/recipes-devtools/meson/meson_1.6.1.bb b/meta/recipes-devtools/meson/meson_1.7.0.bb
index 249a07c290..44872a5f7b 100644
--- a/meta/recipes-devtools/meson/meson_1.6.1.bb
+++ b/meta/recipes-devtools/meson/meson_1.7.0.bb
@@ -16,7 +16,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/meson-${PV}.tar.gz \
16 file://0002-Support-building-allarch-recipes-again.patch \ 16 file://0002-Support-building-allarch-recipes-again.patch \
17 file://0001-dependencies-dev-prepend-sysroot-when-searching-for-.patch \ 17 file://0001-dependencies-dev-prepend-sysroot-when-searching-for-.patch \
18 " 18 "
19SRC_URI[sha256sum] = "1eca49eb6c26d58bbee67fd3337d8ef557c0804e30a6d16bfdf269db997464de" 19SRC_URI[sha256sum] = "08efbe84803eed07f863b05092d653a9d348f7038761d900412fddf56deb0284"
20UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)$" 20UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)$"
21 21
22inherit python_setuptools_build_meta github-releases 22inherit python_setuptools_build_meta github-releases
diff --git a/meta/recipes-devtools/python/python3-cffi_1.17.1.bb b/meta/recipes-devtools/python/python3-cffi_1.17.1.bb
index 99979a73e8..fbe9051a90 100644
--- a/meta/recipes-devtools/python/python3-cffi_1.17.1.bb
+++ b/meta/recipes-devtools/python/python3-cffi_1.17.1.bb
@@ -8,7 +8,7 @@ SRC_URI[sha256sum] = "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789
8 8
9SRC_URI += "file://run-ptest" 9SRC_URI += "file://run-ptest"
10 10
11inherit pypi python_setuptools_build_meta ptest 11inherit pypi python_setuptools_build_meta ptest pkgconfig
12 12
13do_install_ptest() { 13do_install_ptest() {
14 cp -r ${S}/testing ${D}${PTEST_PATH} 14 cp -r ${S}/testing ${D}${PTEST_PATH}
diff --git a/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch b/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
index 4a67308106..437bafb54f 100644
--- a/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
+++ b/meta/recipes-devtools/python/python3-numpy/0001-Don-t-search-usr-and-so-on-for-libraries-by-default-.patch
@@ -1,4 +1,4 @@
1From 16a973c118989674afeeda2c2ccc24c9c366210e Mon Sep 17 00:00:00 2001 1From ad6c0196e4c97ca37368610c010e46c90a4749b4 Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex.kanavin@gmail.com> 2From: Alexander Kanavin <alex.kanavin@gmail.com>
3Date: Thu, 10 Dec 2015 13:20:30 +0200 3Date: Thu, 10 Dec 2015 13:20:30 +0200
4Subject: [PATCH] Don't search /usr and so on for libraries by default to 4Subject: [PATCH] Don't search /usr and so on for libraries by default to
diff --git a/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch b/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
index 18d7f3f84e..514073d94e 100644
--- a/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
+++ b/meta/recipes-devtools/python/python3-numpy/fix_reproducibility.patch
@@ -1,4 +1,4 @@
1From cde931f4380745b9818b55d7b06a43d347518967 Mon Sep 17 00:00:00 2001 1From 061a8ae1d1d000892d6dba89a444922e7a28804b Mon Sep 17 00:00:00 2001
2From: Richard Purdie <richard.purdie@linuxfoundation.org> 2From: Richard Purdie <richard.purdie@linuxfoundation.org>
3Date: Fri, 29 Sep 2023 22:53:24 +0100 3Date: Fri, 29 Sep 2023 22:53:24 +0100
4Subject: [PATCH] This regex decides whether to use O3 opimisation on numpy or 4Subject: [PATCH] This regex decides whether to use O3 opimisation on numpy or
diff --git a/meta/recipes-devtools/python/python3-numpy_2.2.1.bb b/meta/recipes-devtools/python/python3-numpy_2.2.2.bb
index 251e7b0c64..3b74e9059d 100644
--- a/meta/recipes-devtools/python/python3-numpy_2.2.1.bb
+++ b/meta/recipes-devtools/python/python3-numpy_2.2.2.bb
@@ -12,7 +12,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${SRCNAME}-${PV}.tar.gz \
12 file://fix_reproducibility.patch \ 12 file://fix_reproducibility.patch \
13 file://run-ptest \ 13 file://run-ptest \
14 " 14 "
15SRC_URI[sha256sum] = "45681fd7128c8ad1c379f0ca0776a8b0c6583d2f69889ddac01559dfe4390918" 15SRC_URI[sha256sum] = "ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f"
16 16
17GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases" 17GITHUB_BASE_URI = "https://github.com/numpy/numpy/releases"
18UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$" 18UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
index 4b7f9cc7e3..f99cc5e2f0 100644
--- a/meta/recipes-devtools/python/python3/python3-manifest.json
+++ b/meta/recipes-devtools/python/python3/python3-manifest.json
@@ -1035,7 +1035,7 @@
1035 ] 1035 ]
1036 }, 1036 },
1037 "stringold": { 1037 "stringold": {
1038 "summary": "Python string APIs [deprecated]", 1038 "summary": "Common string operations",
1039 "rdepends": [ 1039 "rdepends": [
1040 "core" 1040 "core"
1041 ], 1041 ],
diff --git a/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch b/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch
index 2379de84f2..3011308c61 100644
--- a/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch
+++ b/meta/recipes-devtools/rsync/files/0001-Add-missing-prototypes-to-function-declarations.patch
@@ -1,4 +1,4 @@
1From 2beb35c34c45320144f37b12ef4d72fb8734280e Mon Sep 17 00:00:00 2001 1From 073caa67f2aa221de113a21f8105940421a2da90 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com> 2From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 29 Aug 2022 19:53:28 -0700 3Date: Mon, 29 Aug 2022 19:53:28 -0700
4Subject: [PATCH] Add missing prototypes to function declarations 4Subject: [PATCH] Add missing prototypes to function declarations
@@ -15,21 +15,19 @@ Fixes errors like
15 15
16Upstream-Status: Submitted [https://lists.samba.org/archive/rsync/2022-August/032858.html] 16Upstream-Status: Submitted [https://lists.samba.org/archive/rsync/2022-August/032858.html]
17Signed-off-by: Khem Raj <raj.khem@gmail.com> 17Signed-off-by: Khem Raj <raj.khem@gmail.com>
18Signed-off-by: Archana Polampalli <archana.polampalli@windriver.com>
18--- 19---
19 checksum.c | 2 +- 20 checksum.c | 2 +-
20 exclude.c | 2 +- 21 exclude.c | 2 +-
21 hlink.c | 3 +-- 22 log.c | 2 +-
22 lib/pool_alloc.c | 2 +- 23 main.c | 2 +-
23 log.c | 2 +- 24 zlib/crc32.c | 2 +-
24 main.c | 2 +- 25 zlib/trees.c | 2 +-
25 syscall.c | 4 ++-- 26 zlib/zutil.c | 4 ++--
26 zlib/crc32.c | 2 +- 27 7 files changed, 8 insertions(+), 8 deletions(-)
27 zlib/trees.c | 2 +-
28 zlib/zutil.c | 4 ++--
29 10 files changed, 12 insertions(+), 13 deletions(-)
30 28
31diff --git a/checksum.c b/checksum.c 29diff --git a/checksum.c b/checksum.c
32index cb21882..736818b 100644 30index 66e8089..b24b202 100644
33--- a/checksum.c 31--- a/checksum.c
34+++ b/checksum.c 32+++ b/checksum.c
35@@ -779,7 +779,7 @@ static void verify_digest(struct name_num_item *nni, BOOL check_auth_list) 33@@ -779,7 +779,7 @@ static void verify_digest(struct name_num_item *nni, BOOL check_auth_list)
@@ -54,33 +52,6 @@ index 87edbcf..ae0de2f 100644
54 { 52 {
55 if (partial_string_buf) { 53 if (partial_string_buf) {
56 if (partial_string_len) 54 if (partial_string_len)
57diff --git a/hlink.c b/hlink.c
58index 20291f2..5c26a6b 100644
59--- a/hlink.c
60+++ b/hlink.c
61@@ -117,8 +117,7 @@ static void match_gnums(int32 *ndx_list, int ndx_count)
62 struct ht_int32_node *node = NULL;
63 int32 gnum, gnum_next;
64
65- qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)()) hlink_compare_gnum);
66-
67+ qsort(ndx_list, ndx_count, sizeof ndx_list[0], (int (*)(const void *, const void *)) hlink_compare_gnum);
68 for (from = 0; from < ndx_count; from++) {
69 file = hlink_flist->sorted[ndx_list[from]];
70 gnum = F_HL_GNUM(file);
71diff --git a/lib/pool_alloc.c b/lib/pool_alloc.c
72index a1a7245..4eae062 100644
73--- a/lib/pool_alloc.c
74+++ b/lib/pool_alloc.c
75@@ -9,7 +9,7 @@ struct alloc_pool
76 size_t size; /* extent size */
77 size_t quantum; /* allocation quantum */
78 struct pool_extent *extents; /* top extent is "live" */
79- void (*bomb)(); /* called if malloc fails */
80+ void (*bomb)(const char *, const char *, int); /* called if malloc fails */
81 int flags;
82
83 /* statistical data */
84diff --git a/log.c b/log.c 55diff --git a/log.c b/log.c
85index e4ba1cc..8482b71 100644 56index e4ba1cc..8482b71 100644
86--- a/log.c 57--- a/log.c
@@ -95,7 +66,7 @@ index e4ba1cc..8482b71 100644
95 int options = LOG_PID; 66 int options = LOG_PID;
96 67
97diff --git a/main.c b/main.c 68diff --git a/main.c b/main.c
98index 0c60b86..4bc664a 100644 69index 4f070ac..f59eaec 100644
99--- a/main.c 70--- a/main.c
100+++ b/main.c 71+++ b/main.c
101@@ -246,7 +246,7 @@ void read_del_stats(int f) 72@@ -246,7 +246,7 @@ void read_del_stats(int f)
@@ -107,22 +78,6 @@ index 0c60b86..4bc664a 100644
107 { 78 {
108 char *gname; 79 char *gname;
109 uid_t uid; 80 uid_t uid;
110diff --git a/syscall.c b/syscall.c
111index d92074a..92ca86d 100644
112--- a/syscall.c
113+++ b/syscall.c
114@@ -389,9 +389,9 @@ OFF_T do_lseek(int fd, OFF_T offset, int whence)
115 {
116 #ifdef HAVE_LSEEK64
117 #if !SIZEOF_OFF64_T
118- OFF_T lseek64();
119+ OFF_T lseek64(int fd, OFF_T offset, int whence);
120 #else
121- off64_t lseek64();
122+ off64_t lseek64(int fd, off64_t offset, int whence);
123 #endif
124 return lseek64(fd, offset, whence);
125 #else
126diff --git a/zlib/crc32.c b/zlib/crc32.c 81diff --git a/zlib/crc32.c b/zlib/crc32.c
127index 05733f4..50c6c02 100644 82index 05733f4..50c6c02 100644
128--- a/zlib/crc32.c 83--- a/zlib/crc32.c
diff --git a/meta/recipes-devtools/rsync/files/determism.patch b/meta/recipes-devtools/rsync/files/determism.patch
index e3494fdded..f915d658c8 100644
--- a/meta/recipes-devtools/rsync/files/determism.patch
+++ b/meta/recipes-devtools/rsync/files/determism.patch
@@ -1,7 +1,12 @@
1From 41b859a9df9611b7b3f6cbe28af47118d947080f Mon Sep 17 00:00:00 2001
2From: Richard Purdie <richard.purdie@linuxfoundation.org>
3Date: Sun, 21 Feb 2021 09:45:48 +0000
4Subject: [PATCH] rsync: Fix a file sorting determinism issue
5
1The Makefile calls awk on a "*.c" glob. The results of this glob are sorted 6The Makefile calls awk on a "*.c" glob. The results of this glob are sorted
2but the order depends on the locale settings, particularly whether 7but the order depends on the locale settings, particularly whether
3"util.c" and "util2.c" sort before or after each other. In en_US.UTF-8 8"util.c" and "util2.c" sort before or after each other. In en_US.UTF-8
4they sort one way, in C, they sort the other. The sorting order changes 9they sort one way, in C, they sort the other. The sorting order changes
5the output binaries. The behaviour also changes dependning on whether 10the output binaries. The behaviour also changes dependning on whether
6SHELL (/bin/sh) is dash or bash. 11SHELL (/bin/sh) is dash or bash.
7 12
@@ -15,12 +20,15 @@ Upstream-Status: Backport [ish, see below]
15After discussion upstream renamed util.c to util1.c which avoids the problem 20After discussion upstream renamed util.c to util1.c which avoids the problem
16in a different way. This patch can be dropped when we upgrade to include: 21in a different way. This patch can be dropped when we upgrade to include:
17https://github.com/WayneD/rsync/commit/d3085f7add38a5cf833a0b31cb0637ff46c80f8d 22https://github.com/WayneD/rsync/commit/d3085f7add38a5cf833a0b31cb0637ff46c80f8d
23---
24 Makefile.in | 5 +++++
25 1 file changed, 5 insertions(+)
18 26
19Index: rsync-3.2.3/Makefile.in 27diff --git a/Makefile.in b/Makefile.in
20=================================================================== 28index 1d13e8c..2c5cf99 100644
21--- rsync-3.2.3.orig/Makefile.in 29--- a/Makefile.in
22+++ rsync-3.2.3/Makefile.in 30+++ b/Makefile.in
23@@ -26,6 +26,11 @@ MKDIR_P=@MKDIR_P@ 31@@ -27,6 +27,11 @@ MKDIR_P=@MKDIR_P@
24 VPATH=$(srcdir) 32 VPATH=$(srcdir)
25 SHELL=/bin/sh 33 SHELL=/bin/sh
26 34
diff --git a/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch b/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch
index 0c9ce8b8e3..42af4c55d0 100644
--- a/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch
+++ b/meta/recipes-devtools/rsync/files/makefile-no-rebuild.patch
@@ -1,4 +1,4 @@
1From f446686c26c499e15ef17d495a93cfbc20e16090 Mon Sep 17 00:00:00 2001 1From 603e5862cca832ae925d0c92a8654a57caff5910 Mon Sep 17 00:00:00 2001
2From: Ross Burton <ross.burton@intel.com> 2From: Ross Burton <ross.burton@intel.com>
3Date: Tue, 12 Apr 2016 15:51:54 +0100 3Date: Tue, 12 Apr 2016 15:51:54 +0100
4Subject: [PATCH] rsync: remove upstream's rebuild logic 4Subject: [PATCH] rsync: remove upstream's rebuild logic
@@ -13,12 +13,12 @@ Signed-off-by: Ross Burton <ross.burton@intel.com>
13 1 file changed, 54 deletions(-) 13 1 file changed, 54 deletions(-)
14 14
15diff --git a/Makefile.in b/Makefile.in 15diff --git a/Makefile.in b/Makefile.in
16index a1253e5..a084935 100644 16index 7c75c26..1d13e8c 100644
17--- a/Makefile.in 17--- a/Makefile.in
18+++ b/Makefile.in 18+++ b/Makefile.in
19@@ -192,60 +192,6 @@ gensend: gen 19@@ -184,60 +184,6 @@ conf: configure.sh config.h.in
20 fi 20 .PHONY: gen
21 rsync -aic $(GENFILES) git-version.h $${SAMBA_HOST-samba.org}:/home/ftp/pub/rsync/generated-files/ || true 21 gen: conf proto.h man git-version.h
22 22
23-aclocal.m4: $(srcdir)/m4/*.m4 23-aclocal.m4: $(srcdir)/m4/*.m4
24- aclocal -I $(srcdir)/m4 24- aclocal -I $(srcdir)/m4
diff --git a/meta/recipes-devtools/rsync/rsync_3.3.0.bb b/meta/recipes-devtools/rsync/rsync_3.4.1.bb
index c03bb270d4..2cf87d379a 100644
--- a/meta/recipes-devtools/rsync/rsync_3.3.0.bb
+++ b/meta/recipes-devtools/rsync/rsync_3.4.1.bb
@@ -16,7 +16,7 @@ SRC_URI = "https://download.samba.org/pub/${BPN}/src/${BP}.tar.gz \
16 file://determism.patch \ 16 file://determism.patch \
17 file://0001-Add-missing-prototypes-to-function-declarations.patch \ 17 file://0001-Add-missing-prototypes-to-function-declarations.patch \
18 " 18 "
19SRC_URI[sha256sum] = "7399e9a6708c32d678a72a63219e96f23be0be2336e50fd1348498d07041df90" 19SRC_URI[sha256sum] = "2924bcb3a1ed8b551fc101f740b9f0fe0a202b115027647cf69850d65fd88c52"
20 20
21# Doesn't use automake 21# Doesn't use automake
22inherit autotools-brokensep 22inherit autotools-brokensep
diff --git a/meta/recipes-devtools/rust/cargo_1.81.0.bb b/meta/recipes-devtools/rust/cargo_1.81.0.bb
index 123032cdf7..d05b076d30 100644
--- a/meta/recipes-devtools/rust/cargo_1.81.0.bb
+++ b/meta/recipes-devtools/rust/cargo_1.81.0.bb
@@ -50,8 +50,23 @@ do_install:append:class-nativesdk() {
50 # sets to libdir but not base_libdir leading to symbol mismatches depending on the 50 # sets to libdir but not base_libdir leading to symbol mismatches depending on the
51 # host OS. Fully set LD_LIBRARY_PATH to contain both to avoid this. 51 # host OS. Fully set LD_LIBRARY_PATH to contain both to avoid this.
52 create_wrapper ${D}/${bindir}/cargo LD_LIBRARY_PATH=${libdir}:${base_libdir} 52 create_wrapper ${D}/${bindir}/cargo LD_LIBRARY_PATH=${libdir}:${base_libdir}
53
54 ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
55 mkdir "${ENV_SETUP_DIR}"
56 CARGO_ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh"
57
58 cat <<- EOF > "${CARGO_ENV_SETUP_SH}"
59 # Keep the below off as long as HTTP/2 is disabled.
60 export CARGO_HTTP_MULTIPLEXING=false
61
62 export CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt"
63 EOF
64
65 chown -R root.root ${D}
53} 66}
54 67
68FILES:${PN} += "${base_prefix}/environment-setup.d"
69
55# Disabled due to incompatibility with libgit2 0.28.x (https://github.com/rust-lang/git2-rs/issues/458, https://bugs.gentoo.org/707746#c1) 70# Disabled due to incompatibility with libgit2 0.28.x (https://github.com/rust-lang/git2-rs/issues/458, https://bugs.gentoo.org/707746#c1)
56# as shipped by Yocto Dunfell. 71# as shipped by Yocto Dunfell.
57# According to https://github.com/rust-lang/git2-rs/issues/458#issuecomment-522567539, there are no compatibility guarantees between 72# According to https://github.com/rust-lang/git2-rs/issues/458#issuecomment-522567539, there are no compatibility guarantees between
diff --git a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
index b42dda8b34..bb27ca35ff 100644
--- a/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
+++ b/meta/recipes-devtools/rust/files/oeqa-selftest-Increase-timeout-in-process-sigpipe-ru.patch
@@ -25,7 +25,7 @@ index 11f363d62..c12d66016 100644
25 // Just in case `yes` doesn't check for EPIPE... 25 // Just in case `yes` doesn't check for EPIPE...
26 thread::spawn(|| { 26 thread::spawn(|| {
27- thread::sleep_ms(5000); 27- thread::sleep_ms(5000);
28+ thread::sleep_ms(10000); 28+ thread::sleep_ms(50000);
29 process::exit(1); 29 process::exit(1);
30 }); 30 });
31 let output = process::Command::new("sh") 31 let output = process::Command::new("sh")
diff --git a/meta/recipes-devtools/rust/rust-cross-canadian.inc b/meta/recipes-devtools/rust/rust-cross-canadian.inc
index 0c2f6144b8..906f2d7aaa 100644
--- a/meta/recipes-devtools/rust/rust-cross-canadian.inc
+++ b/meta/recipes-devtools/rust/rust-cross-canadian.inc
@@ -9,7 +9,7 @@ LICENSE = "MIT"
9 9
10MODIFYTOS = "0" 10MODIFYTOS = "0"
11 11
12DEPENDS += "virtual/cross-sdk-cc virtual/nativesdk-libc virtual/nativesdk-compilerlibs" 12DEPENDS += "virtual/nativesdk-cross-cc virtual/nativesdk-libc virtual/nativesdk-compilerlibs"
13 13
14SRC_URI += "file://target-rust-ccld.c" 14SRC_URI += "file://target-rust-ccld.c"
15LIC_FILES_CHKSUM = "file://target-rust-ccld.c;md5=af4e0e29f81a34cffe05aa07c89e93e9;endline=7" 15LIC_FILES_CHKSUM = "file://target-rust-ccld.c;md5=af4e0e29f81a34cffe05aa07c89e93e9;endline=7"
@@ -54,39 +54,16 @@ do_install () {
54 54
55 ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d 55 ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
56 mkdir "${ENV_SETUP_DIR}" 56 mkdir "${ENV_SETUP_DIR}"
57 RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh" 57 RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/${RUST_TARGET_SYS}_rust.sh"
58 58
59 RUST_TARGET_TRIPLE=`echo ${RUST_TARGET_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'` 59 RUST_TARGET_TRIPLE=`echo ${RUST_TARGET_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
60 RUST_HOST_TRIPLE=`echo ${RUST_HOST_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
61 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)}
62 60
63 cat <<- EOF > "${RUST_ENV_SETUP_SH}" 61 cat <<- EOF > "${RUST_ENV_SETUP_SH}"
64 export CARGO_TARGET_${RUST_TARGET_TRIPLE}_RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT" 62 export CARGO_TARGET_${RUST_TARGET_TRIPLE}_RUSTFLAGS="--sysroot=\$OECORE_TARGET_SYSROOT/usr -C link-arg=--sysroot=\$OECORE_TARGET_SYSROOT"
65 export CARGO_TARGET_${RUST_HOST_TRIPLE}_RUNNER="\$OECORE_NATIVE_SYSROOT/lib/${SDKLOADER}" 63 export RUST_TARGET_PATH="\$RUST_TARGET_PATH:\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
66 export RUST_TARGET_PATH="\$OECORE_NATIVE_SYSROOT/usr/lib/${TARGET_SYS}/rustlib"
67 EOF 64 EOF
68 65
69 chown -R root.root ${D} 66 chown -R root.root ${D}
70
71 CARGO_ENV_SETUP_SH="${ENV_SETUP_DIR}/cargo.sh"
72 cat <<- EOF > "${CARGO_ENV_SETUP_SH}"
73 export CARGO_HOME="\$OECORE_TARGET_SYSROOT/home/cargo"
74 mkdir -p "\$CARGO_HOME"
75 # Init the default target once, it might be otherwise user modified.
76 if [ ! -f "\$CARGO_HOME/config" ]; then
77 touch "\$CARGO_HOME/config"
78 echo "[build]" >> "\$CARGO_HOME/config"
79 echo 'target = "'${RUST_TARGET_SYS}'"' >> "\$CARGO_HOME/config"
80 echo '# TARGET_SYS' >> "\$CARGO_HOME/config"
81 echo '[target.'${RUST_TARGET_SYS}']' >> "\$CARGO_HOME/config"
82 echo 'linker = "target-rust-ccld"' >> "\$CARGO_HOME/config"
83 fi
84
85 # Keep the below off as long as HTTP/2 is disabled.
86 export CARGO_HTTP_MULTIPLEXING=false
87
88 export CARGO_HTTP_CAINFO="\$OECORE_NATIVE_SYSROOT/etc/ssl/certs/ca-certificates.crt"
89 EOF
90} 67}
91 68
92FILES:${PN} += "${base_prefix}/environment-setup.d" 69FILES:${PN} += "${base_prefix}/environment-setup.d"
diff --git a/meta/recipes-devtools/rust/rust_1.81.0.bb b/meta/recipes-devtools/rust/rust_1.81.0.bb
index b583508456..24a0319dbe 100644
--- a/meta/recipes-devtools/rust/rust_1.81.0.bb
+++ b/meta/recipes-devtools/rust/rust_1.81.0.bb
@@ -272,8 +272,21 @@ rust_do_install:class-nativesdk() {
272 rm ${D}${libdir}/rustlib/install.log 272 rm ${D}${libdir}/rustlib/install.log
273 rm ${D}${libdir}/rustlib/manifest* 273 rm ${D}${libdir}/rustlib/manifest*
274 rm ${D}${libdir}/rustlib/${RUST_HOST_SYS}/lib/libstd*.so 274 rm ${D}${libdir}/rustlib/${RUST_HOST_SYS}/lib/libstd*.so
275
276 ENV_SETUP_DIR=${D}${base_prefix}/environment-setup.d
277 mkdir "${ENV_SETUP_DIR}"
278 RUST_ENV_SETUP_SH="${ENV_SETUP_DIR}/rust.sh"
279 RUST_HOST_TRIPLE=`echo ${RUST_HOST_SYS} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g'`
280 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)}
281
282 cat <<- EOF > "${RUST_ENV_SETUP_SH}"
283 export CARGO_TARGET_${RUST_HOST_TRIPLE}_RUNNER="\$OECORE_NATIVE_SYSROOT/lib/${SDKLOADER}"
284 EOF
285 chown -R root.root ${D}
275} 286}
276 287
288FILES:${PN} += "${base_prefix}/environment-setup.d"
289
277EXTRA_TOOLS ?= "cargo-clippy clippy-driver rustfmt" 290EXTRA_TOOLS ?= "cargo-clippy clippy-driver rustfmt"
278rust_do_install:class-target() { 291rust_do_install:class-target() {
279 export PSEUDO_UNLOAD=1 292 export PSEUDO_UNLOAD=1
diff --git a/meta/recipes-devtools/tcltk/tcl_9.0.1.bb b/meta/recipes-devtools/tcltk/tcl_9.0.1.bb
index 0ba7288a60..485b293768 100644
--- a/meta/recipes-devtools/tcltk/tcl_9.0.1.bb
+++ b/meta/recipes-devtools/tcltk/tcl_9.0.1.bb
@@ -37,7 +37,7 @@ inherit autotools ptest binconfig
37AUTOTOOLS_SCRIPT_PATH = "${S}/unix" 37AUTOTOOLS_SCRIPT_PATH = "${S}/unix"
38EXTRA_AUTORECONF = "--exclude=aclocal" 38EXTRA_AUTORECONF = "--exclude=aclocal"
39 39
40EXTRA_OECONF = "--disable-rpath --enable-man-suffix=tcl9" 40EXTRA_OECONF = "--disable-rpath --enable-man-suffix=tcl9 --disable-zipfs"
41 41
42# Prevent installing copy of tzdata based on tzdata installation on the build host 42# Prevent installing copy of tzdata based on tzdata installation on the build host
43# It doesn't install tzdata if one of the following files exist on the host: 43# It doesn't install tzdata if one of the following files exist on the host:
diff --git a/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch b/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch
new file mode 100644
index 0000000000..1859992838
--- /dev/null
+++ b/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch
@@ -0,0 +1,33 @@
1From ff508f2e6786df697876140f21855ecb92a3ed36 Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex@linutronix.de>
3Date: Fri, 18 Aug 2023 12:25:11 +0200
4Subject: [PATCH] generic/tcl.h: use Tcl_WideInt for seconds in Tcl_Time
5
6This ensures the value will not overflow, particularly on 32 bit systems
7in 2038, where long will.
8
9This patch was proposed at https://core.tcl-lang.org/tcl/tktview/86dd172271
10Upstream was generally supportive of the fix, but they merged a much more
11elaborate version of it for tcl 9.x (released in 9.0.0), and declined
12to merge it into 8.x due to ABI breakage (sadly this change is in a public header).
13But we can carry the fix downstream.
14
15Upstream-Status: Inappropriate [see above]
16Signed-off-by: Alexander Kanavin <alex@linutronix.de>
17---
18 generic/tcl.h | 2 +-
19 1 file changed, 1 insertion(+), 1 deletion(-)
20
21diff --git a/generic/tcl.h b/generic/tcl.h
22index 3a4622e..6204c57 100644
23--- a/generic/tcl.h
24+++ b/generic/tcl.h
25@@ -1418,7 +1418,7 @@ typedef enum {
26 */
27
28 typedef struct Tcl_Time {
29- long sec; /* Seconds. */
30+ Tcl_WideInt sec; /* Seconds. */
31 long usec; /* Microseconds. */
32 } Tcl_Time;
33
diff --git a/meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb b/meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb
index c8f4b5df2a..076bbc906c 100644
--- a/meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb
+++ b/meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb
@@ -23,6 +23,7 @@ SRC_URI = "${BASE_SRC_URI} \
23 file://alter-includedir.patch \ 23 file://alter-includedir.patch \
24 file://interp.patch \ 24 file://interp.patch \
25 file://run-ptest \ 25 file://run-ptest \
26 file://0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch \
26 " 27 "
27SRC_URI[sha256sum] = "3b371386a9a928eecdbf263bcab7d6a531e620ca3fbab4fdeeb3d6a9a56f38e9" 28SRC_URI[sha256sum] = "3b371386a9a928eecdbf263bcab7d6a531e620ca3fbab4fdeeb3d6a9a56f38e9"
28 29
diff --git a/meta/recipes-extended/man-db/files/flex.patch b/meta/recipes-extended/man-db/files/flex.patch
new file mode 100644
index 0000000000..c18be7e36a
--- /dev/null
+++ b/meta/recipes-extended/man-db/files/flex.patch
@@ -0,0 +1,36 @@
1From d3f7c160bddf5d879c74e19e4f577882e8b22559 Mon Sep 17 00:00:00 2001
2From: Ross Burton <ross.burton@arm.com>
3Date: Wed, 22 Jan 2025 14:16:48 +0000
4Subject: [PATCH] configure: check for shipped generated sources in source
5 directory
6
7The configure script fails if it can't find flex and the pregenerated
8source code isn't available, as is the case in builds from git whereas
9tarballs include the code.
10
11However this breaks with out-of-tree builds, where cwd during configure
12is the build directory not the source directory, and the pregenerated
13sources will always be inside the source directory.
14
15Upstream-Status: Submitted [https://gitlab.com/man-db/man-db/-/merge_requests/12]
16Signed-off-by: Ross Burton <ross.burton@arm.com>
17---
18 configure.ac | 2 +-
19 1 file changed, 1 insertion(+), 1 deletion(-)
20
21diff --git a/configure.ac b/configure.ac
22index 7e9148fb..49a213fd 100644
23--- a/configure.ac
24+++ b/configure.ac
25@@ -380,7 +380,7 @@ dnl To add more decompressors just follow the scheme above.
26 dnl The "noyywrap" argument is new in Autoconf 2.70, but this also works
27 dnl fine with older versions that ignore the argument.
28 AC_PROG_LEX([noyywrap])
29-if test "$LEX" = ":" && (test ! -e src/lexgrog.c || test ! -e src/zsoelim.c)
30+if test "$LEX" = ":" && (test ! -e $srcdir/src/lexgrog.c || test ! -e $srcdir/src/zsoelim.c)
31 then
32 AC_MSG_ERROR([flex is required when building from revision control])
33 fi
34--
352.43.0
36
diff --git a/meta/recipes-extended/man-db/man-db_2.13.0.bb b/meta/recipes-extended/man-db/man-db_2.13.0.bb
index 2fa18a8f24..2178239bb6 100644
--- a/meta/recipes-extended/man-db/man-db_2.13.0.bb
+++ b/meta/recipes-extended/man-db/man-db_2.13.0.bb
@@ -8,6 +8,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=1ebbd3e34237af26da5dc08a4e440464 \
8 " 8 "
9 9
10SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/man-db/man-db-${PV}.tar.xz \ 10SRC_URI = "${SAVANNAH_NONGNU_MIRROR}/man-db/man-db-${PV}.tar.xz \
11 file://flex.patch \
11 file://99_mandb \ 12 file://99_mandb \
12 " 13 "
13SRC_URI[sha256sum] = "82f0739f4f61aab5eb937d234de3b014e777b5538a28cbd31433c45ae09aefb9" 14SRC_URI[sha256sum] = "82f0739f4f61aab5eb937d234de3b014e777b5538a28cbd31433c45ae09aefb9"
diff --git a/meta/recipes-extended/man-pages/man-pages_6.9.1.bb b/meta/recipes-extended/man-pages/man-pages_6.9.1.bb
index ba1a6c16c4..8258874dd7 100644
--- a/meta/recipes-extended/man-pages/man-pages_6.9.1.bb
+++ b/meta/recipes-extended/man-pages/man-pages_6.9.1.bb
@@ -2,7 +2,7 @@ SUMMARY = "Linux man-pages"
2DESCRIPTION = "The Linux man-pages project documents the Linux kernel and C library interfaces that are employed by user programs" 2DESCRIPTION = "The Linux man-pages project documents the Linux kernel and C library interfaces that are employed by user programs"
3SECTION = "console/utils" 3SECTION = "console/utils"
4HOMEPAGE = "http://www.kernel.org/pub/linux/docs/man-pages" 4HOMEPAGE = "http://www.kernel.org/pub/linux/docs/man-pages"
5LICENSE = "GPL-2.0-or-later & GPL-2.0-only & GPL-1.0-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT" 5LICENSE = "GPL-2.0-or-later & GPL-2.0-only & GPL-1.0-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause-UC & MIT"
6 6
7LIC_FILES_CHKSUM = "file://README;md5=72cff06b7954222c24d38bc2c41b234e \ 7LIC_FILES_CHKSUM = "file://README;md5=72cff06b7954222c24d38bc2c41b234e \
8 file://LICENSES/BSD-2-Clause.txt;md5=9e16594a228301089d759b4f178db91f \ 8 file://LICENSES/BSD-2-Clause.txt;md5=9e16594a228301089d759b4f178db91f \
diff --git a/meta/recipes-extended/timezone/timezone.inc b/meta/recipes-extended/timezone/timezone.inc
index adf095280f..f1dbd7ba81 100644
--- a/meta/recipes-extended/timezone/timezone.inc
+++ b/meta/recipes-extended/timezone/timezone.inc
@@ -6,7 +6,7 @@ SECTION = "base"
6LICENSE = "PD & BSD-3-Clause" 6LICENSE = "PD & BSD-3-Clause"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba" 7LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba"
8 8
9PV = "2024b" 9PV = "2025a"
10 10
11SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode;subdir=tz \ 11SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode;subdir=tz \
12 http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata;subdir=tz \ 12 http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata;subdir=tz \
@@ -16,5 +16,5 @@ S = "${WORKDIR}/tz"
16 16
17UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones" 17UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones"
18 18
19SRC_URI[tzcode.sha256sum] = "5e438fc449624906af16a18ff4573739f0cda9862e5ec28d3bcb19cbaed0f672" 19SRC_URI[tzcode.sha256sum] = "119679d59f76481eb5e03d3d2a47d7870d592f3999549af189dbd31f2ebf5061"
20SRC_URI[tzdata.sha256sum] = "70e754db126a8d0db3d16d6b4cb5f7ec1e04d5f261255e4558a67fe92d39e550" 20SRC_URI[tzdata.sha256sum] = "4d5fcbc72c7c450ebfe0b659bd0f1c02fbf52fd7f517a9ea13fe71c21eb5f0d0"
diff --git a/meta/recipes-extended/timezone/tzcode-native.bb b/meta/recipes-extended/timezone/tzcode-native.bb
index d0b23a9d80..dc9f076377 100644
--- a/meta/recipes-extended/timezone/tzcode-native.bb
+++ b/meta/recipes-extended/timezone/tzcode-native.bb
@@ -4,7 +4,7 @@ SUMMARY = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect"
4 4
5inherit native 5inherit native
6 6
7EXTRA_OEMAKE += "cc='${CC}'" 7EXTRA_OEMAKE += "CC='${CC}'"
8 8
9do_install () { 9do_install () {
10 install -d ${D}${bindir}/ 10 install -d ${D}${bindir}/
diff --git a/meta/recipes-gnome/libsecret/libsecret/0001-meson-add-option-to-disable-pam-tests.patch b/meta/recipes-gnome/libsecret/libsecret/0001-meson-add-option-to-disable-pam-tests.patch
index 87ab8a32cd..1bd49bbc38 100644
--- a/meta/recipes-gnome/libsecret/libsecret/0001-meson-add-option-to-disable-pam-tests.patch
+++ b/meta/recipes-gnome/libsecret/libsecret/0001-meson-add-option-to-disable-pam-tests.patch
@@ -3,7 +3,7 @@ From: Markus Volk <f_l_k@t-online.de>
3Date: Tue, 3 Dec 2024 15:58:17 +0100 3Date: Tue, 3 Dec 2024 15:58:17 +0100
4Subject: [PATCH] meson: add option to disable pam tests 4Subject: [PATCH] meson: add option to disable pam tests
5 5
6Upstream-Status: Submitted [https://gitlab.gnome.org/GNOME/libsecret/-/merge_requests/151/commits] 6Upstream-Status: Denied [https://gitlab.gnome.org/GNOME/libsecret/-/merge_requests/151]
7 7
8Signed-off-by: Markus Volk <f_l_k@t-online.de> 8Signed-off-by: Markus Volk <f_l_k@t-online.de>
9--- 9---
diff --git a/meta/recipes-graphics/piglit/piglit/0001-CMakeLists.txt-do-not-obtain-wayland-scanner-path-fr.patch b/meta/recipes-graphics/piglit/piglit/0001-CMakeLists.txt-do-not-obtain-wayland-scanner-path-fr.patch
index 75c2d2fbfc..c7e6a68e23 100644
--- a/meta/recipes-graphics/piglit/piglit/0001-CMakeLists.txt-do-not-obtain-wayland-scanner-path-fr.patch
+++ b/meta/recipes-graphics/piglit/piglit/0001-CMakeLists.txt-do-not-obtain-wayland-scanner-path-fr.patch
@@ -1,4 +1,4 @@
1From db3a33a91ce0a28f297fe270167cf2d0a44354e2 Mon Sep 17 00:00:00 2001 1From ae76c836d98320dacb00616e19af93ac20c48825 Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex@linutronix.de> 2From: Alexander Kanavin <alex@linutronix.de>
3Date: Fri, 23 Aug 2024 15:29:45 +0200 3Date: Fri, 23 Aug 2024 15:29:45 +0200
4Subject: [PATCH] CMakeLists.txt: do not obtain wayland-scanner path from 4Subject: [PATCH] CMakeLists.txt: do not obtain wayland-scanner path from
diff --git a/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch b/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch
index 22dd6c360a..8b7da9f43d 100644
--- a/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch
+++ b/meta/recipes-graphics/piglit/piglit/0001-tests-Fix-narrowing-errors-seen-with-clang.patch
@@ -1,4 +1,4 @@
1From 6559f5a7d82d411eb035f9d7c5dfb9987182803d Mon Sep 17 00:00:00 2001 1From e1d84dc54b0eca3cef1136264dbbceb9ea19524c Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com> 2From: Khem Raj <raj.khem@gmail.com>
3Date: Wed, 3 May 2023 21:59:43 -0700 3Date: Wed, 3 May 2023 21:59:43 -0700
4Subject: [PATCH] tests: Fix narrowing errors seen with clang 4Subject: [PATCH] tests: Fix narrowing errors seen with clang
diff --git a/meta/recipes-graphics/piglit/piglit/0001-tests-egl-spec-make-egl_ext_surface_compression-cond.patch b/meta/recipes-graphics/piglit/piglit/0001-tests-egl-spec-make-egl_ext_surface_compression-cond.patch
index c9e7fe1e96..d68e9d477d 100644
--- a/meta/recipes-graphics/piglit/piglit/0001-tests-egl-spec-make-egl_ext_surface_compression-cond.patch
+++ b/meta/recipes-graphics/piglit/piglit/0001-tests-egl-spec-make-egl_ext_surface_compression-cond.patch
@@ -1,4 +1,4 @@
1From 8320c2ff5793a612aa7d7223ae317657744169f1 Mon Sep 17 00:00:00 2001 1From e23bacb04ff77f86e56d6684451e5e93b59f1b0a Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex@linutronix.de> 2From: Alexander Kanavin <alex@linutronix.de>
3Date: Fri, 22 Nov 2024 22:52:31 +0100 3Date: Fri, 22 Nov 2024 22:52:31 +0100
4Subject: [PATCH] tests/egl/spec: make egl_ext_surface_compression conditional 4Subject: [PATCH] tests/egl/spec: make egl_ext_surface_compression conditional
diff --git a/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch b/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
index fd085da220..a934d48c56 100644
--- a/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
+++ b/meta/recipes-graphics/piglit/piglit/0002-cmake-use-proper-WAYLAND_INCLUDE_DIRS-variable.patch
@@ -1,4 +1,4 @@
1From 29033f323d870552410c31d1e3721304b8a38e99 Mon Sep 17 00:00:00 2001 1From 6810358403b2de577d76cab80a4e39da77c5c442 Mon Sep 17 00:00:00 2001
2From: Pascal Bach <pascal.bach@siemens.com> 2From: Pascal Bach <pascal.bach@siemens.com>
3Date: Thu, 4 Oct 2018 14:43:17 +0200 3Date: Thu, 4 Oct 2018 14:43:17 +0200
4Subject: [PATCH] cmake: use proper WAYLAND_INCLUDE_DIRS variable 4Subject: [PATCH] cmake: use proper WAYLAND_INCLUDE_DIRS variable
diff --git a/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch b/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch
index ce1ce12a07..fa9cad3687 100644
--- a/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch
+++ b/meta/recipes-graphics/piglit/piglit/0003-tests-util-piglit-shader.c-do-not-hardcode-build-pat.patch
@@ -1,4 +1,4 @@
1From ddd12c056bf05f80ddd728750a519bc502d55f3e Mon Sep 17 00:00:00 2001 1From d18b10cde60f209375e79db480c46489d483c7f2 Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex.kanavin@gmail.com> 2From: Alexander Kanavin <alex.kanavin@gmail.com>
3Date: Tue, 10 Nov 2020 17:13:50 +0000 3Date: Tue, 10 Nov 2020 17:13:50 +0000
4Subject: [PATCH] tests/util/piglit-shader.c: do not hardcode build path into 4Subject: [PATCH] tests/util/piglit-shader.c: do not hardcode build path into
diff --git a/meta/recipes-graphics/piglit/piglit_git.bb b/meta/recipes-graphics/piglit/piglit_git.bb
index 829cb7730f..c4091eecb0 100644
--- a/meta/recipes-graphics/piglit/piglit_git.bb
+++ b/meta/recipes-graphics/piglit/piglit_git.bb
@@ -15,7 +15,7 @@ SRC_URI = "git://gitlab.freedesktop.org/mesa/piglit.git;protocol=https;branch=ma
15 " 15 "
16UPSTREAM_CHECK_COMMITS = "1" 16UPSTREAM_CHECK_COMMITS = "1"
17 17
18SRCREV = "00affcf3a78a1200cc8fb1e5264c19ac1f8f0fa2" 18SRCREV = "631b72944f56e688f56a08d26c8a9f3988801a08"
19# (when PV goes above 1.0 remove the trailing r) 19# (when PV goes above 1.0 remove the trailing r)
20PV = "1.0+gitr" 20PV = "1.0+gitr"
21 21
diff --git a/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb b/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
index 0c65927fb4..6ad112aca7 100644
--- a/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
+++ b/meta/recipes-graphics/xorg-font/font-util_1.4.1.bb
@@ -2,7 +2,7 @@ SUMMARY = "X.Org font package creation/installation utilities"
2 2
3require xorg-font-common.inc 3require xorg-font-common.inc
4 4
5LICENSE = "Unicode-TOU & BSD-4-Clause & BSD-2-Clause" 5LICENSE = "Unicode-TOU & MIT & X11 & BSD-2-Clause"
6LIC_FILES_CHKSUM = "file://COPYING;md5=2a9e705c00e463c8d294f90486852e06 \ 6LIC_FILES_CHKSUM = "file://COPYING;md5=2a9e705c00e463c8d294f90486852e06 \
7 file://ucs2any.c;endline=28;md5=8357dc567fc628bd12696f15b2a33bcb \ 7 file://ucs2any.c;endline=28;md5=8357dc567fc628bd12696f15b2a33bcb \
8 file://bdftruncate.c;endline=26;md5=4f82ffc101a1b165eae9c6998abff937 \ 8 file://bdftruncate.c;endline=26;md5=4f82ffc101a1b165eae9c6998abff937 \
diff --git a/meta/recipes-graphics/xorg-lib/libxfont2_2.0.7.bb b/meta/recipes-graphics/xorg-lib/libxfont2_2.0.7.bb
index bf0c7d0775..bf49d728b9 100644
--- a/meta/recipes-graphics/xorg-lib/libxfont2_2.0.7.bb
+++ b/meta/recipes-graphics/xorg-lib/libxfont2_2.0.7.bb
@@ -6,7 +6,7 @@ such as freetype)."
6 6
7require xorg-lib-common.inc 7require xorg-lib-common.inc
8 8
9LICENSE = "MIT & MIT & BSD-4-Clause & BSD-2-Clause" 9LICENSE = "MIT & MIT & BSD-4-Clause-UC & BSD-2-Clause"
10LIC_FILES_CHKSUM = "file://COPYING;md5=a5d1388c9d40be70dbad35fa440443f7" 10LIC_FILES_CHKSUM = "file://COPYING;md5=a5d1388c9d40be70dbad35fa440443f7"
11 11
12DEPENDS += "freetype xtrans xorgproto libfontenc zlib" 12DEPENDS += "freetype xtrans xorgproto libfontenc zlib"
diff --git a/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb b/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb
index 40cf616f0b..d87ff661d9 100644
--- a/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb
+++ b/meta/recipes-graphics/xorg-lib/libxkbcommon_1.7.0.bb
@@ -31,9 +31,9 @@ python populate_packages:prepend () {
31 do_split_packages(d, d.expand('${libdir}'), r'^(lib.*)\.so\.*', '%s', '%s library', extra_depends='', allow_links=True) 31 do_split_packages(d, d.expand('${libdir}'), r'^(lib.*)\.so\.*', '%s', '%s library', extra_depends='', allow_links=True)
32} 32}
33 33
34# Fix a following runtime error: 34# Recommended to fix a possible runtime error:
35# xkbcommon: ERROR: couldn't find a Compose file for locale "C" 35# xkbcommon: ERROR: couldn't find a Compose file for locale "C"
36RDEPENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11-locale', 'libx11-compose-data', d)}" 36RRECOMMENDS:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libx11-locale', 'libx11-compose-data', d)}"
37 37
38BBCLASSEXTEND += "native" 38BBCLASSEXTEND += "native"
39 39
diff --git a/meta/recipes-kernel/linux-firmware/linux-firmware_20241210.bb b/meta/recipes-kernel/linux-firmware/linux-firmware_20250109.bb
index d3757b5bbc..f0b710a6cc 100644
--- a/meta/recipes-kernel/linux-firmware/linux-firmware_20241210.bb
+++ b/meta/recipes-kernel/linux-firmware/linux-firmware_20250109.bb
@@ -158,7 +158,7 @@ LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
158 " 158 "
159# WHENCE checksum is defined separately to ease overriding it if 159# WHENCE checksum is defined separately to ease overriding it if
160# class-devupstream is selected. 160# class-devupstream is selected.
161WHENCE_CHKSUM = "0b30c661e226decdac3acd31d83517e0" 161WHENCE_CHKSUM = "c90a25ccbd027eb8d61b2943ab68447c"
162 162
163# These are not common licenses, set NO_GENERIC_LICENSE for them 163# These are not common licenses, set NO_GENERIC_LICENSE for them
164# so that the license files will be copied from fetched source 164# so that the license files will be copied from fetched source
@@ -247,7 +247,7 @@ SRC_URI:class-devupstream = "git://git.kernel.org/pub/scm/linux/kernel/git/firmw
247# Pin this to the 20220509 release, override this in local.conf 247# Pin this to the 20220509 release, override this in local.conf
248SRCREV:class-devupstream ?= "b19cbdca78ab2adfd210c91be15a22568e8b8cae" 248SRCREV:class-devupstream ?= "b19cbdca78ab2adfd210c91be15a22568e8b8cae"
249 249
250SRC_URI[sha256sum] = "2bb035708576d076f97d4196a1c22e0a4d33fbb0210d05428d0bf4f243e99af5" 250SRC_URI[sha256sum] = "a12cb38f4793394bf56c6702be29b6e4f09deca0714943bba98a492030651570"
251 251
252inherit allarch 252inherit allarch
253 253
@@ -259,6 +259,9 @@ PACKAGECONFIG[deduplicate] = ",,rdfind-native"
259# Possible values are "xz" and "zst". 259# Possible values are "xz" and "zst".
260FIRMWARE_COMPRESSION ?= "" 260FIRMWARE_COMPRESSION ?= ""
261 261
262# Specifying -j requires GNU parallel, which is a part of meta-oe
263PARALLEL_MAKE = ""
264
262def fw_compr_suffix(d): 265def fw_compr_suffix(d):
263 compr = d.getVar('FIRMWARE_COMPRESSION') 266 compr = d.getVar('FIRMWARE_COMPRESSION')
264 if compr == '': 267 if compr == '':
@@ -287,6 +290,32 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
287 ${PN}-mt76x-license ${PN}-mt7601u ${PN}-mt7650 ${PN}-mt76x2 \ 290 ${PN}-mt76x-license ${PN}-mt7601u ${PN}-mt7650 ${PN}-mt76x2 \
288 ${PN}-radeon-license ${PN}-radeon \ 291 ${PN}-radeon-license ${PN}-radeon \
289 ${PN}-amdgpu-license ${PN}-amdgpu \ 292 ${PN}-amdgpu-license ${PN}-amdgpu \
293 ${PN}-amdgpu-aldebaran \
294 ${PN}-amdgpu-carrizo \
295 ${PN}-amdgpu-cezanne \
296 ${PN}-amdgpu-fiji \
297 ${PN}-amdgpu-hawaii \
298 ${PN}-amdgpu-navi10 \
299 ${PN}-amdgpu-navi14 \
300 ${PN}-amdgpu-navi21 \
301 ${PN}-amdgpu-navi22 \
302 ${PN}-amdgpu-navi23 \
303 ${PN}-amdgpu-navi24 \
304 ${PN}-amdgpu-navi31 \
305 ${PN}-amdgpu-navi32 \
306 ${PN}-amdgpu-oland \
307 ${PN}-amdgpu-polaris10 \
308 ${PN}-amdgpu-polaris11 \
309 ${PN}-amdgpu-polaris12 \
310 ${PN}-amdgpu-raven \
311 ${PN}-amdgpu-rembrandt \
312 ${PN}-amdgpu-renoir \
313 ${PN}-amdgpu-stoney \
314 ${PN}-amdgpu-tonga \
315 ${PN}-amdgpu-topaz \
316 ${PN}-amdgpu-vega10 \
317 ${PN}-amdgpu-vega12 \
318 ${PN}-amdgpu-misc \
290 ${PN}-marvell-license ${PN}-pcie8897 ${PN}-pcie8997 \ 319 ${PN}-marvell-license ${PN}-pcie8897 ${PN}-pcie8997 \
291 ${PN}-mediatek-license ${PN}-mediatek \ 320 ${PN}-mediatek-license ${PN}-mediatek \
292 ${PN}-microchip-license ${PN}-microchip \ 321 ${PN}-microchip-license ${PN}-microchip \
@@ -343,8 +372,39 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
343 ${PN}-carl9170 \ 372 ${PN}-carl9170 \
344 ${PN}-qcom-qcm2290-wifi ${PN}-qcom-qrb4210-wifi ${PN}-qcom-sdm845-modem \ 373 ${PN}-qcom-qcm2290-wifi ${PN}-qcom-qrb4210-wifi ${PN}-qcom-sdm845-modem \
345 ${PN}-ar3k-license ${PN}-ar3k \ 374 ${PN}-ar3k-license ${PN}-ar3k \
346 ${PN}-ath10k-license ${PN}-ath10k-wcn3990 ${PN}-ath10k \ 375 ${PN}-ath10k-license ${PN}-ath10k \
347 ${PN}-ath11k ${PN}-ath12k ${PN}-qca \ 376 ${PN}-ath10k-qca4019 \
377 ${PN}-ath10k-qca6174 \
378 ${PN}-ath10k-qca9377 \
379 ${PN}-ath10k-qca9887 \
380 ${PN}-ath10k-qca9888 \
381 ${PN}-ath10k-qca988x \
382 ${PN}-ath10k-qca9984 \
383 ${PN}-ath10k-qca99x0 \
384 ${PN}-ath10k-wcn3990 \
385 ${PN}-ath10k-misc \
386 ${PN}-ath11k \
387 ${PN}-ath11k-ipq5018 \
388 ${PN}-ath11k-ipq6018 \
389 ${PN}-ath11k-ipq8074 \
390 ${PN}-ath11k-qca2066 \
391 ${PN}-ath11k-qca6390 \
392 ${PN}-ath11k-qcn9074 \
393 ${PN}-ath11k-wcn6750 \
394 ${PN}-ath11k-wcn6855 \
395 ${PN}-ath11k-misc \
396 ${PN}-ath12k \
397 ${PN}-ath12k-qcn9274 \
398 ${PN}-ath12k-wcn7850 \
399 ${PN}-ath12k-misc \
400 ${PN}-qca \
401 ${PN}-qca-qca61x4 \
402 ${PN}-qca-wcn3988 \
403 ${PN}-qca-wcn399x \
404 ${PN}-qca-wcn6750 \
405 ${PN}-qca-qca2066 \
406 ${PN}-qca-wcn7850 \
407 ${PN}-qca-misc \
348 \ 408 \
349 ${PN}-imx-sdma-license ${PN}-imx-sdma-imx6q ${PN}-imx-sdma-imx7d \ 409 ${PN}-imx-sdma-license ${PN}-imx-sdma-imx6q ${PN}-imx-sdma-imx7d \
350 \ 410 \
@@ -505,9 +565,38 @@ LICENSE:${PN}-carl9170 = "GPL-2.0-or-later"
505LICENSE:${PN}-ar3k = "Firmware-qualcommAthos_ar3k & Firmware-atheros_firmware" 565LICENSE:${PN}-ar3k = "Firmware-qualcommAthos_ar3k & Firmware-atheros_firmware"
506LICENSE:${PN}-ar3k-license = "Firmware-qualcommAthos_ar3k" 566LICENSE:${PN}-ar3k-license = "Firmware-qualcommAthos_ar3k"
507LICENSE:${PN}-ath10k = "Firmware-qualcommAthos_ath10k" 567LICENSE:${PN}-ath10k = "Firmware-qualcommAthos_ath10k"
568LICENSE:${PN}-ath10k-qca4019 = "Firmware-qualcommAthos_ath10k"
569LICENSE:${PN}-ath10k-qca6174 = "Firmware-qualcommAthos_ath10k"
570LICENSE:${PN}-ath10k-qca9377 = "Firmware-qualcommAthos_ath10k"
571LICENSE:${PN}-ath10k-qca9887 = "Firmware-qualcommAthos_ath10k"
572LICENSE:${PN}-ath10k-qca9888 = "Firmware-qualcommAthos_ath10k"
573LICENSE:${PN}-ath10k-qca988x = "Firmware-qualcommAthos_ath10k"
574LICENSE:${PN}-ath10k-qca9984 = "Firmware-qualcommAthos_ath10k"
575LICENSE:${PN}-ath10k-qca99x0 = "Firmware-qualcommAthos_ath10k"
508LICENSE:${PN}-ath10k-wcn3990 = "Firmware-qualcommAthos_ath10k" 576LICENSE:${PN}-ath10k-wcn3990 = "Firmware-qualcommAthos_ath10k"
577LICENSE:${PN}-ath10k-misc = "Firmware-qualcommAthos_ath10k"
509LICENSE:${PN}-ath10k-license = "Firmware-qualcommAthos_ath10k" 578LICENSE:${PN}-ath10k-license = "Firmware-qualcommAthos_ath10k"
510LICENSE:${PN}-qca = "Firmware-qualcommAthos_ath10k" 579LICENSE:${PN}-ath11k = "Firmware-qualcommAthos_ath10k"
580LICENSE:${PN}-ath11k-ipq5018 = "Firmware-qualcommAthos_ath10k"
581LICENSE:${PN}-ath11k-ipq6018 = "Firmware-qualcommAthos_ath10k"
582LICENSE:${PN}-ath11k-ipq8074 = "Firmware-qualcommAthos_ath10k"
583LICENSE:${PN}-ath11k-qca2066 = "Firmware-qualcommAthos_ath10k"
584LICENSE:${PN}-ath11k-qca6390 = "Firmware-qualcommAthos_ath10k"
585LICENSE:${PN}-ath11k-qcn9074 = "Firmware-qualcommAthos_ath10k"
586LICENSE:${PN}-ath11k-wcn6750 = "Firmware-qualcommAthos_ath10k"
587LICENSE:${PN}-ath11k-wcn6855 = "Firmware-qualcommAthos_ath10k"
588LICENSE:${PN}-ath11k-misc = "Firmware-qualcommAthos_ath10k"
589LICENSE:${PN}-ath12k = "Firmware-qualcommAthos_ath10k"
590LICENSE:${PN}-ath12k-qcn9274 = "Firmware-qualcommAthos_ath10k"
591LICENSE:${PN}-ath12k-wcn7850 = "Firmware-qualcommAthos_ath10k"
592LICENSE:${PN}-ath12k-misc = "Firmware-qualcommAthos_ath10k"
593LICENSE:${PN}-qca-qca61x4 = "Firmware-qualcommAthos_ath10k"
594LICENSE:${PN}-qca-wcn3988 = "Firmware-qcom"
595LICENSE:${PN}-qca-wcn399x = "Firmware-qualcommAthos_ath10k"
596LICENSE:${PN}-qca-wcn6750 = "Firmware-qualcommAthos_ath10k"
597LICENSE:${PN}-qca-qca2066 = "Firmware-qualcommAthos_ath10k"
598LICENSE:${PN}-qca-wcn7850 = "Firmware-qcom"
599LICENSE:${PN}-qca-misc = "Firmware-qualcommAthos_ath10k & Firmware-qcom"
511 600
512FILES:${PN}-ar3k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ar3k" 601FILES:${PN}-ar3k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ar3k"
513FILES:${PN}-ar3k = " \ 602FILES:${PN}-ar3k = " \
@@ -515,33 +604,191 @@ FILES:${PN}-ar3k = " \
515" 604"
516 605
517FILES:${PN}-ath10k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ath10k" 606FILES:${PN}-ath10k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ath10k"
518FILES:${PN}-ath10k = " \ 607FILES:${PN}-ath10k-qca4019 = "${nonarch_base_libdir}/firmware/ath10k/QCA4019"
519 ${nonarch_base_libdir}/firmware/ath10k \ 608FILES:${PN}-ath10k-qca6174 = "${nonarch_base_libdir}/firmware/ath10k/QCA6174"
520" 609FILES:${PN}-ath10k-qca9377 = "${nonarch_base_libdir}/firmware/ath10k/QCA9377"
521FILES:${PN}-ath10k-wcn3990 = " \ 610FILES:${PN}-ath10k-qca9887 = "${nonarch_base_libdir}/firmware/ath10k/QCA9887"
522 ${nonarch_base_libdir}/firmware/ath10k/WCN3990 \ 611FILES:${PN}-ath10k-qca9888 = "${nonarch_base_libdir}/firmware/ath10k/QCA9888"
523" 612FILES:${PN}-ath10k-qca988x = "${nonarch_base_libdir}/firmware/ath10k/QCA988X"
524 613FILES:${PN}-ath10k-qca9984 = "${nonarch_base_libdir}/firmware/ath10k/QCA9984"
525FILES:${PN}-ath11k = " \ 614FILES:${PN}-ath10k-qca99x0 = "${nonarch_base_libdir}/firmware/ath10k/QCA99X0"
526 ${nonarch_base_libdir}/firmware/ath11k \ 615FILES:${PN}-ath10k-wcn3990 = "${nonarch_base_libdir}/firmware/ath10k/WCN3990"
527" 616FILES:${PN}-ath10k-misc = "${nonarch_base_libdir}/firmware/ath10k/*"
528 617# -ath10k is a virtual package that depends upon all ath10k packages.
529FILES:${PN}-ath12k = " \ 618ALLOW_EMPTY:${PN}-ath10k = "1"
530 ${nonarch_base_libdir}/firmware/ath12k \ 619# -ath10k-misc is a catch all package that includes all the ath10k
531" 620# firmwares that are not already included in other -ath10k- packages.
621ALLOW_EMPTY:${PN}-ath10k-misc = "1"
622
623FILES:${PN}-ath11k-ipq5018 = "${nonarch_base_libdir}/firmware/ath11k/IPQ5018"
624FILES:${PN}-ath11k-ipq6018 = "${nonarch_base_libdir}/firmware/ath11k/IPQ6018"
625FILES:${PN}-ath11k-ipq8074 = "${nonarch_base_libdir}/firmware/ath11k/IPQ8074"
626FILES:${PN}-ath11k-qca2066 = "${nonarch_base_libdir}/firmware/ath11k/QCA2066"
627FILES:${PN}-ath11k-qca6390 = "${nonarch_base_libdir}/firmware/ath11k/QCA6390"
628FILES:${PN}-ath11k-qcn9074 = "${nonarch_base_libdir}/firmware/ath11k/QCN9074"
629FILES:${PN}-ath11k-wcn6750 = "${nonarch_base_libdir}/firmware/ath11k/WCN6750"
630FILES:${PN}-ath11k-wcn6855 = "${nonarch_base_libdir}/firmware/ath11k/WCN6855"
631FILES:${PN}-ath11k-misc = "${nonarch_base_libdir}/firmware/ath11k/*"
632# -ath11k is a virtual package that depends upon all ath11k packages.
633ALLOW_EMPTY:${PN}-ath11k = "1"
634# -ath11k-misc is a catch all package that includes all the ath11k
635# firmwares that are not already included in other -ath11k- packages.
636ALLOW_EMPTY:${PN}-ath11k-misc = "1"
637
638FILES:${PN}-ath12k-qcn9274 = "${nonarch_base_libdir}/firmware/ath12k/QCN9274"
639FILES:${PN}-ath12k-wcn7850 = "${nonarch_base_libdir}/firmware/ath12k/WCN7850"
640FILES:${PN}-ath12k-misc = "${nonarch_base_libdir}/firmware/ath12k/*"
641# -ath12k is a virtual package that depends upon all ath12k packages.
642ALLOW_EMPTY:${PN}-ath12k = "1"
643# -ath12k-misc is a catch all package that includes all the ath12k
644# firmwares that are not already included in other -ath12k- packages.
645ALLOW_EMPTY:${PN}-ath12k-misc = "1"
646
647FILES:${PN}-qca-qca61x4 = " \
648 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00000201.bin \
649 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00000200.bin \
650 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00000300.bin \
651 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00000302.bin \
652 ${nonarch_base_libdir}/firmware/qca/nvm_00130300.bin \
653 ${nonarch_base_libdir}/firmware/qca/nvm_00130302.bin \
654 ${nonarch_base_libdir}/firmware/qca/nvm_00230302.bin \
655 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00000200.bin \
656 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00000201.bin \
657 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00000300.bin \
658 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00000302.bin \
659 ${nonarch_base_libdir}/firmware/qca/rampatch_00130300.bin \
660 ${nonarch_base_libdir}/firmware/qca/rampatch_00130302.bin \
661 ${nonarch_base_libdir}/firmware/qca/rampatch_00230302.bin \
662 ${nonarch_base_libdir}/firmware/qca/nvm_00440302.bin \
663 ${nonarch_base_libdir}/firmware/qca/rampatch_00440302.bin \
664 ${nonarch_base_libdir}/firmware/qca/nvm_00440302_eu.bin \
665 ${nonarch_base_libdir}/firmware/qca/nvm_00440302_i2s_eu.bin \
666 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00000302_eu.bin \
667 ${nonarch_base_libdir}/firmware/qca/htbtfw20.tlv \
668 ${nonarch_base_libdir}/firmware/qca/htnv20.bin \
669 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00130200.bin \
670 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200.bin \
671 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200_0104.bin \
672 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200_0105.bin \
673 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200_0106.bin \
674 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200_0107.bin \
675 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200_0109.bin \
676 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130200_0110.bin \
677 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00130201.bin \
678 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201.bin \
679 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_010a.bin \
680 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_010b.bin \
681 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_0303.bin \
682 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_gf.bin \
683 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_gf_010a.bin \
684 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_gf_010b.bin \
685 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00130201_gf_0303.bin \
686 ${nonarch_base_libdir}/firmware/qca/rampatch_usb_00190200.bin \
687 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00190200.bin \
688 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00190200_010e.bin \
689 ${nonarch_base_libdir}/firmware/qca/nvm_usb_00190200_0112.bin \
690"
691FILES:${PN}-qca-wcn3988 = " \
692 ${nonarch_base_libdir}/firmware/qca/apbtfw10.tlv \
693 ${nonarch_base_libdir}/firmware/qca/apbtfw11.tlv \
694 ${nonarch_base_libdir}/firmware/qca/apnv10.bin \
695 ${nonarch_base_libdir}/firmware/qca/apnv11.bin \
696"
697FILES:${PN}-qca-wcn399x = " \
698 ${nonarch_base_libdir}/firmware/qca/crbtfw21.tlv \
699 ${nonarch_base_libdir}/firmware/qca/crnv21.bin \
700 ${nonarch_base_libdir}/firmware/qca/crbtfw32.tlv \
701 ${nonarch_base_libdir}/firmware/qca/crnv32.bin \
702 ${nonarch_base_libdir}/firmware/qca/crnv32u.bin \
703"
704FILES:${PN}-qca-wcn6750 = " \
705 ${nonarch_base_libdir}/firmware/qca/msbtfw11.mbn \
706 ${nonarch_base_libdir}/firmware/qca/msbtfw11.tlv \
707 ${nonarch_base_libdir}/firmware/qca/msnv11.bin \
708 ${nonarch_base_libdir}/firmware/qca/msnv11.b0a \
709 ${nonarch_base_libdir}/firmware/qca/msnv11.b09 \
710"
711FILES:${PN}-qca-qca2066 = " \
712 ${nonarch_base_libdir}/firmware/qca/hpbtfw21.tlv \
713 ${nonarch_base_libdir}/firmware/qca/hpnv21.bin \
714 ${nonarch_base_libdir}/firmware/qca/hpnv21g.bin \
715 ${nonarch_base_libdir}/firmware/qca/hpnv21.301 \
716 ${nonarch_base_libdir}/firmware/qca/hpnv21.302 \
717 ${nonarch_base_libdir}/firmware/qca/hpnv21g.301 \
718 ${nonarch_base_libdir}/firmware/qca/hpnv21g.302 \
719 ${nonarch_base_libdir}/firmware/qca/hpnv21.309 \
720 ${nonarch_base_libdir}/firmware/qca/hpnv21g.309 \
721 ${nonarch_base_libdir}/firmware/qca/hpnv21.b8c \
722 ${nonarch_base_libdir}/firmware/qca/hpnv21.b9f \
723 ${nonarch_base_libdir}/firmware/qca/hpnv21.ba0 \
724 ${nonarch_base_libdir}/firmware/qca/hpnv21.ba1 \
725 ${nonarch_base_libdir}/firmware/qca/hpnv21.ba2 \
726 ${nonarch_base_libdir}/firmware/qca/hpnv21.ba3 \
727 ${nonarch_base_libdir}/firmware/qca/hpnv21.ba4 \
728 ${nonarch_base_libdir}/firmware/qca/hpnv21.baa \
729 ${nonarch_base_libdir}/firmware/qca/hpnv21.bb8 \
730 ${nonarch_base_libdir}/firmware/qca/hpnv21.b10c \
731 ${nonarch_base_libdir}/firmware/qca/hpnv21.b111 \
732 ${nonarch_base_libdir}/firmware/qca/hpnv21g.b8c \
733 ${nonarch_base_libdir}/firmware/qca/hpnv21g.b9f \
734 ${nonarch_base_libdir}/firmware/qca/hpnv21g.ba0 \
735 ${nonarch_base_libdir}/firmware/qca/hpnv21g.ba1 \
736 ${nonarch_base_libdir}/firmware/qca/hpnv21g.ba2 \
737 ${nonarch_base_libdir}/firmware/qca/hpnv21g.ba3 \
738 ${nonarch_base_libdir}/firmware/qca/hpnv21g.ba4 \
739 ${nonarch_base_libdir}/firmware/qca/hpnv21g.baa \
740 ${nonarch_base_libdir}/firmware/qca/hpnv21g.bb8 \
741 ${nonarch_base_libdir}/firmware/qca/hpnv21g.b10c \
742 ${nonarch_base_libdir}/firmware/qca/hpnv21g.b111 \
743"
744FILES:${PN}-qca-wcn7850 = " \
745 ${nonarch_base_libdir}/firmware/qca/hmtbtfw20.tlv \
746 ${nonarch_base_libdir}/firmware/qca/hmtnv20.b10f \
747 ${nonarch_base_libdir}/firmware/qca/hmtnv20.b112 \
748 ${nonarch_base_libdir}/firmware/qca/hmtnv20.bin \
749"
750FILES:${PN}-qca-misc = "${nonarch_base_libdir}/firmware/qca/*"
751# -qca is a virtual package that depends upon all qca packages.
752ALLOW_EMPTY:${PN}-qca = "1"
753# -qca-misc is a catch all package that includes all the qca
754# firmwares that are not already included in other -qca- packages.
755ALLOW_EMPTY:${PN}-qca-misc = "1"
532 756
533FILES:${PN}-qca = " \
534 ${nonarch_base_libdir}/firmware/qca \
535"
536 757
537RDEPENDS:${PN}-ar3k += "${PN}-ar3k-license ${PN}-atheros-license" 758RDEPENDS:${PN}-ar3k += "${PN}-ar3k-license ${PN}-atheros-license"
538RDEPENDS:${PN}-ath10k += "${PN}-ath10k-license" 759RDEPENDS:${PN}-ath10k += "${PN}-ath10k-license"
539RDEPENDS:${PN}-ath10k += "${PN}-ath10k-wcn3990" 760RDEPENDS:${PN}-ath10k-qca4019 += "${PN}-ath10k-license"
761RDEPENDS:${PN}-ath10k-qca6174 += "${PN}-ath10k-license"
762RDEPENDS:${PN}-ath10k-qca9377 += "${PN}-ath10k-license"
763RDEPENDS:${PN}-ath10k-qca9887 += "${PN}-ath10k-license"
764RDEPENDS:${PN}-ath10k-qca9888 += "${PN}-ath10k-license"
765RDEPENDS:${PN}-ath10k-qca988x += "${PN}-ath10k-license"
766RDEPENDS:${PN}-ath10k-qca9984 += "${PN}-ath10k-license"
767RDEPENDS:${PN}-ath10k-qca99x0 += "${PN}-ath10k-license"
540RDEPENDS:${PN}-ath10k-wcn3990 += "${PN}-ath10k-license" 768RDEPENDS:${PN}-ath10k-wcn3990 += "${PN}-ath10k-license"
769RDEPENDS:${PN}-ath10k-misc += "${PN}-ath10k-license"
541RDEPENDS:${PN}-ath11k += "${PN}-ath10k-license" 770RDEPENDS:${PN}-ath11k += "${PN}-ath10k-license"
771RDEPENDS:${PN}-ath11k-ipq5018 += "${PN}-ath10k-license"
772RDEPENDS:${PN}-ath11k-ipq6018 += "${PN}-ath10k-license"
773RDEPENDS:${PN}-ath11k-ipq8074 += "${PN}-ath10k-license"
774RDEPENDS:${PN}-ath11k-qca2066 += "${PN}-ath10k-license"
775RDEPENDS:${PN}-ath11k-qca6390 += "${PN}-ath10k-license"
776RDEPENDS:${PN}-ath11k-qcn9074 += "${PN}-ath10k-license"
777RDEPENDS:${PN}-ath11k-wcn6750 += "${PN}-ath10k-license"
778RDEPENDS:${PN}-ath11k-wcn6855 += "${PN}-ath10k-license"
779RDEPENDS:${PN}-ath11k-misc += "${PN}-ath10k-license"
542RDEPENDS:${PN}-ath12k += "${PN}-ath10k-license" 780RDEPENDS:${PN}-ath12k += "${PN}-ath10k-license"
543RDEPENDS:${PN}-qca += "${PN}-ath10k-license" 781RDEPENDS:${PN}-ath12k-qcn9274 += "${PN}-ath10k-license"
544 782RDEPENDS:${PN}-ath12k-wcn7850 += "${PN}-ath10k-license"
783RDEPENDS:${PN}-ath12k-misc += "${PN}-ath10k-license"
784RDEPENDS:${PN}-qca += "${PN}-ath10k-license ${PN}-qcom-license"
785RDEPENDS:${PN}-qca-qca61x4 += "${PN}-ath10k-license"
786RDEPENDS:${PN}-qca-wcn3988 += "${PN}-qcom-license"
787RDEPENDS:${PN}-qca-wcn399x += "${PN}-ath10k-license"
788RDEPENDS:${PN}-qca-wcn6750 += "${PN}-ath10k-license"
789RDEPENDS:${PN}-qca-qca2066 += "${PN}-ath10k-license"
790RDEPENDS:${PN}-qca-wcn7850 += "${PN}-qcom-license"
791RDEPENDS:${PN}-qca-misc += "${PN}-ath10k-license ${PN}-qcom-license"
545# For ralink 792# For ralink
546LICENSE:${PN}-ralink = "Firmware-ralink-firmware" 793LICENSE:${PN}-ralink = "Firmware-ralink-firmware"
547LICENSE:${PN}-ralink-license = "Firmware-ralink-firmware" 794LICENSE:${PN}-ralink-license = "Firmware-ralink-firmware"
@@ -633,13 +880,107 @@ RDEPENDS:${PN}-radeon += "${PN}-radeon-license"
633# For amdgpu 880# For amdgpu
634LICENSE:${PN}-amdgpu = "Firmware-amdgpu" 881LICENSE:${PN}-amdgpu = "Firmware-amdgpu"
635LICENSE:${PN}-amdgpu-license = "Firmware-amdgpu" 882LICENSE:${PN}-amdgpu-license = "Firmware-amdgpu"
883LICENSE:${PN}-amdgpu-aldebaran = "Firmware-amdgpu"
884LICENSE:${PN}-amdgpu-carrizo = "Firmware-amdgpu"
885LICENSE:${PN}-amdgpu-cezanne = "Firmware-amdgpu"
886LICENSE:${PN}-amdgpu-fiji = "Firmware-amdgpu"
887LICENSE:${PN}-amdgpu-hawaii = "Firmware-amdgpu"
888LICENSE:${PN}-amdgpu-navi10 = "Firmware-amdgpu"
889LICENSE:${PN}-amdgpu-navi14 = "Firmware-amdgpu"
890LICENSE:${PN}-amdgpu-navi21 = "Firmware-amdgpu"
891LICENSE:${PN}-amdgpu-navi22 = "Firmware-amdgpu"
892LICENSE:${PN}-amdgpu-navi23 = "Firmware-amdgpu"
893LICENSE:${PN}-amdgpu-navi24 = "Firmware-amdgpu"
894LICENSE:${PN}-amdgpu-navi31 = "Firmware-amdgpu"
895LICENSE:${PN}-amdgpu-navi32 = "Firmware-amdgpu"
896LICENSE:${PN}-amdgpu-oland = "Firmware-amdgpu"
897LICENSE:${PN}-amdgpu-polaris10 = "Firmware-amdgpu"
898LICENSE:${PN}-amdgpu-polaris11 = "Firmware-amdgpu"
899LICENSE:${PN}-amdgpu-polaris12 = "Firmware-amdgpu"
900LICENSE:${PN}-amdgpu-raven = "Firmware-amdgpu"
901LICENSE:${PN}-amdgpu-rembrandt = "Firmware-amdgpu"
902LICENSE:${PN}-amdgpu-renoir = "Firmware-amdgpu"
903LICENSE:${PN}-amdgpu-stoney = "Firmware-amdgpu"
904LICENSE:${PN}-amdgpu-tonga = "Firmware-amdgpu"
905LICENSE:${PN}-amdgpu-topaz = "Firmware-amdgpu"
906LICENSE:${PN}-amdgpu-vega10 = "Firmware-amdgpu"
907LICENSE:${PN}-amdgpu-vega12 = "Firmware-amdgpu"
908LICENSE:${PN}-amdgpu-misc = "Firmware-amdgpu"
636 909
637FILES:${PN}-amdgpu-license = "${nonarch_base_libdir}/firmware/LICENSE.amdgpu" 910FILES:${PN}-amdgpu-license = "${nonarch_base_libdir}/firmware/LICENSE.amdgpu"
638FILES:${PN}-amdgpu = " \ 911FILES:${PN}-amdgpu-aldebaran = "${nonarch_base_libdir}/firmware/amdgpu/aldebaran_*.bin"
639 ${nonarch_base_libdir}/firmware/amdgpu \ 912FILES:${PN}-amdgpu-carrizo = "${nonarch_base_libdir}/firmware/amdgpu/carrizo_*.bin"
640" 913FILES:${PN}-amdgpu-cezanne = "${nonarch_base_libdir}/firmware/amdgpu/green_sardine_*.bin"
914FILES:${PN}-amdgpu-fiji = "${nonarch_base_libdir}/firmware/amdgpu/fiji_*.bin"
915FILES:${PN}-amdgpu-hawaii = "${nonarch_base_libdir}/firmware/amdgpu/hawaii_*.bin"
916FILES:${PN}-amdgpu-navi10 = "${nonarch_base_libdir}/firmware/amdgpu/navi10_*.bin"
917FILES:${PN}-amdgpu-navi14 = "${nonarch_base_libdir}/firmware/amdgpu/navi14_*.bin"
918FILES:${PN}-amdgpu-navi21 = "${nonarch_base_libdir}/firmware/amdgpu/sienna_cichlid_*.bin"
919FILES:${PN}-amdgpu-navi22 = "${nonarch_base_libdir}/firmware/amdgpu/navy_flounder_*.bin"
920FILES:${PN}-amdgpu-navi23 = "${nonarch_base_libdir}/firmware/amdgpu/dimgrey_cavefish_*.bin"
921FILES:${PN}-amdgpu-navi24 = "${nonarch_base_libdir}/firmware/amdgpu/beige_goby_*.bin"
922FILES:${PN}-amdgpu-navi31 = "${nonarch_base_libdir}/firmware/amdgpu/gc_11_0_0_*.bin \
923 ${nonarch_base_libdir}/firmware/amdgpu/psp_13_0_0_sos.bin \
924 ${nonarch_base_libdir}/firmware/amdgpu/psp_13_0_0_ta.bin \
925 ${nonarch_base_libdir}/firmware/amdgpu/smu_13_0_0.bin \
926 ${nonarch_base_libdir}/firmware/amdgpu/dcn_3_2_0_dmcub.bin \
927 ${nonarch_base_libdir}/firmware/amdgpu/sdma_6_0_0.bin \
928 ${nonarch_base_libdir}/firmware/amdgpu/vcn_4_0_0.bin \
929"
930FILES:${PN}-amdgpu-navi32 = "${nonarch_base_libdir}/firmware/amdgpu/dcn_3_2_0_dmcub.bin \
931 ${nonarch_base_libdir}/firmware/amdgpu/gc_11_0_3_*.bin \
932 ${nonarch_base_libdir}/firmware/amdgpu/psp_13_0_10_sos.bin \
933 ${nonarch_base_libdir}/firmware/amdgpu/psp_13_0_10_ta.bin \
934 ${nonarch_base_libdir}/firmware/amdgpu/sdma_6_0_3.bin \
935 ${nonarch_base_libdir}/firmware/amdgpu/smu_13_0_10.bin \
936 ${nonarch_base_libdir}/firmware/amdgpu/vcn_4_0_0.bin \
937"
938FILES:${PN}-amdgpu-oland = "${nonarch_base_libdir}/firmware/amdgpu/oland_*.bin"
939FILES:${PN}-amdgpu-polaris10 = "${nonarch_base_libdir}/firmware/amdgpu/polaris10_*.bin"
940FILES:${PN}-amdgpu-polaris11 = "${nonarch_base_libdir}/firmware/amdgpu/polaris11_*.bin"
941FILES:${PN}-amdgpu-polaris12 = "${nonarch_base_libdir}/firmware/amdgpu/polaris12_*.bin"
942FILES:${PN}-amdgpu-raven = "${nonarch_base_libdir}/firmware/amdgpu/raven_*.bin"
943FILES:${PN}-amdgpu-rembrandt = "${nonarch_base_libdir}/firmware/amdgpu/yellow_carp_*.bin"
944FILES:${PN}-amdgpu-renoir = "${nonarch_base_libdir}/firmware/amdgpu/renoir_*.bin"
945FILES:${PN}-amdgpu-stoney = "${nonarch_base_libdir}/firmware/amdgpu/stoney_*.bin"
946FILES:${PN}-amdgpu-tonga = "${nonarch_base_libdir}/firmware/amdgpu/tonga_*.bin"
947FILES:${PN}-amdgpu-topaz = "${nonarch_base_libdir}/firmware/amdgpu/topaz_*.bin"
948FILES:${PN}-amdgpu-vega10 = "${nonarch_base_libdir}/firmware/amdgpu/vega10_*.bin"
949FILES:${PN}-amdgpu-vega12 = "${nonarch_base_libdir}/firmware/amdgpu/vega12_*.bin"
950FILES:${PN}-amdgpu-misc = "${nonarch_base_libdir}/firmware/amdgpu/*"
951# -amdgpu is a virtual package that depends upon all amdgpu packages.
952ALLOW_EMPTY:${PN}-amdgpu = "1"
953# -amdgpu-misc is a catch all package that includes all the amdgpu
954# firmwares that are not already included in other -amdgpu- packages.
955ALLOW_EMPTY:${PN}-amdgpu-misc = "1"
641 956
642RDEPENDS:${PN}-amdgpu += "${PN}-amdgpu-license" 957RDEPENDS:${PN}-amdgpu += "${PN}-amdgpu-license"
958RDEPENDS:${PN}-amdgpu-aldebaran += "${PN}-amdgpu-license"
959RDEPENDS:${PN}-amdgpu-carrizo += "${PN}-amdgpu-license"
960RDEPENDS:${PN}-amdgpu-cezanne += "${PN}-amdgpu-license"
961RDEPENDS:${PN}-amdgpu-fiji += "${PN}-amdgpu-license"
962RDEPENDS:${PN}-amdgpu-hawaii += "${PN}-amdgpu-license"
963RDEPENDS:${PN}-amdgpu-navi10 += "${PN}-amdgpu-license"
964RDEPENDS:${PN}-amdgpu-navi14 += "${PN}-amdgpu-license"
965RDEPENDS:${PN}-amdgpu-navi21 += "${PN}-amdgpu-license"
966RDEPENDS:${PN}-amdgpu-navi22 += "${PN}-amdgpu-license"
967RDEPENDS:${PN}-amdgpu-navi23 += "${PN}-amdgpu-license"
968RDEPENDS:${PN}-amdgpu-navi24 += "${PN}-amdgpu-license"
969RDEPENDS:${PN}-amdgpu-navi31 += "${PN}-amdgpu-license"
970RDEPENDS:${PN}-amdgpu-navi32 += "${PN}-amdgpu-license"
971RDEPENDS:${PN}-amdgpu-oland += "${PN}-amdgpu-license"
972RDEPENDS:${PN}-amdgpu-polaris10 += "${PN}-amdgpu-license"
973RDEPENDS:${PN}-amdgpu-polaris11 += "${PN}-amdgpu-license"
974RDEPENDS:${PN}-amdgpu-polaris12 += "${PN}-amdgpu-license"
975RDEPENDS:${PN}-amdgpu-raven += "${PN}-amdgpu-license"
976RDEPENDS:${PN}-amdgpu-rembrandt += "${PN}-amdgpu-license"
977RDEPENDS:${PN}-amdgpu-renoir += "${PN}-amdgpu-license"
978RDEPENDS:${PN}-amdgpu-stoney += "${PN}-amdgpu-license"
979RDEPENDS:${PN}-amdgpu-tonga += "${PN}-amdgpu-license"
980RDEPENDS:${PN}-amdgpu-topaz += "${PN}-amdgpu-license"
981RDEPENDS:${PN}-amdgpu-vega10 += "${PN}-amdgpu-license"
982RDEPENDS:${PN}-amdgpu-vega12 += "${PN}-amdgpu-license"
983RDEPENDS:${PN}-amdgpu-misc += "${PN}-amdgpu-license"
643 984
644# For lontium 985# For lontium
645LICENSE:${PN}-lt9611uxc = "Firmware-Lontium" 986LICENSE:${PN}-lt9611uxc = "Firmware-Lontium"
@@ -1694,6 +2035,11 @@ RDEPENDS:${PN} += "${PN}-whence-license"
1694# Make linux-firmware depend on all of the split-out packages. 2035# Make linux-firmware depend on all of the split-out packages.
1695# Make linux-firmware-iwlwifi depend on all of the split-out iwlwifi packages. 2036# Make linux-firmware-iwlwifi depend on all of the split-out iwlwifi packages.
1696# Make linux-firmware-ibt depend on all of the split-out ibt packages. 2037# Make linux-firmware-ibt depend on all of the split-out ibt packages.
2038# Make linux-firmware-ath10k depend on all of the split-out ath10k packages.
2039# Make linux-firmware-ath11k depend on all of the split-out ath11k packages.
2040# Make linux-firmware-ath12k depend on all of the split-out ath12k packages.
2041# Make linux-firmware-qca depend on all of the split-out qca packages.
2042# Make linux-firmware-amdgpu depend on all of the split-out amdgpu packages.
1697python populate_packages:prepend () { 2043python populate_packages:prepend () {
1698 firmware_pkgs = oe.utils.packages_filter_out_system(d) 2044 firmware_pkgs = oe.utils.packages_filter_out_system(d)
1699 d.appendVar('RRECOMMENDS:linux-firmware', ' ' + ' '.join(firmware_pkgs)) 2045 d.appendVar('RRECOMMENDS:linux-firmware', ' ' + ' '.join(firmware_pkgs))
@@ -1703,6 +2049,21 @@ python populate_packages:prepend () {
1703 2049
1704 ibt_pkgs = filter(lambda x: x.find('-ibt-') != -1, firmware_pkgs) 2050 ibt_pkgs = filter(lambda x: x.find('-ibt-') != -1, firmware_pkgs)
1705 d.appendVar('RRECOMMENDS:linux-firmware-ibt', ' ' + ' '.join(ibt_pkgs)) 2051 d.appendVar('RRECOMMENDS:linux-firmware-ibt', ' ' + ' '.join(ibt_pkgs))
2052
2053 ath10k_pkgs = filter(lambda x: x.find('-ath10k-') != -1, firmware_pkgs)
2054 d.appendVar('RRECOMMENDS:linux-firmware-ath10k', ' ' + ' '.join(ath10k_pkgs))
2055
2056 ath11k_pkgs = filter(lambda x: x.find('-ath11k-') != -1, firmware_pkgs)
2057 d.appendVar('RRECOMMENDS:linux-firmware-ath11k', ' ' + ' '.join(ath11k_pkgs))
2058
2059 ath12k_pkgs = filter(lambda x: x.find('-ath12k-') != -1, firmware_pkgs)
2060 d.appendVar('RRECOMMENDS:linux-firmware-ath12k', ' ' + ' '.join(ath12k_pkgs))
2061
2062 qca_pkgs = filter(lambda x: x.find('-qca-') != -1, firmware_pkgs)
2063 d.appendVar('RRECOMMENDS:linux-firmware-qca', ' ' + ' '.join(qca_pkgs))
2064
2065 amdgpu_pkgs = filter(lambda x: x.find('-amdgpu-') != -1, firmware_pkgs)
2066 d.appendVar('RRECOMMENDS:linux-firmware-amdgpu', ' ' + ' '.join(amdgpu_pkgs))
1706} 2067}
1707 2068
1708# Firmware files are generally not ran on the CPU, so they can be 2069# Firmware files are generally not ran on the CPU, so they can be
diff --git a/meta/recipes-kernel/lttng/lttng-tools_2.13.14.bb b/meta/recipes-kernel/lttng/lttng-tools_2.13.14.bb
index 65d19b6e5f..98c2f9831b 100644
--- a/meta/recipes-kernel/lttng/lttng-tools_2.13.14.bb
+++ b/meta/recipes-kernel/lttng/lttng-tools_2.13.14.bb
@@ -47,6 +47,8 @@ inherit autotools ptest pkgconfig useradd python3-dir manpages systemd
47 47
48CACHED_CONFIGUREVARS = "PGREP=/usr/bin/pgrep" 48CACHED_CONFIGUREVARS = "PGREP=/usr/bin/pgrep"
49 49
50EXTRA_OECONF += "--disable-libtool-linkdep-fixup"
51
50SYSTEMD_SERVICE:${PN} = "lttng-sessiond.service" 52SYSTEMD_SERVICE:${PN} = "lttng-sessiond.service"
51SYSTEMD_AUTO_ENABLE = "disable" 53SYSTEMD_AUTO_ENABLE = "disable"
52 54
diff --git a/meta/recipes-rt/rt-tests/files/0001-sched_attr-Do-not-define-for-glibc-2.41.patch b/meta/recipes-rt/rt-tests/files/0001-sched_attr-Do-not-define-for-glibc-2.41.patch
new file mode 100644
index 0000000000..915f8baa61
--- /dev/null
+++ b/meta/recipes-rt/rt-tests/files/0001-sched_attr-Do-not-define-for-glibc-2.41.patch
@@ -0,0 +1,44 @@
1From e1f5f9379a68471c9f5fb0859e87dd84001b0b6f Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Tue, 28 Jan 2025 15:03:59 -0800
4Subject: [PATCH] sched_attr: Do not define for glibc >= 2.41
5
6glibc 2.41+ has added [1] definitions for sched_setattr and sched_getattr functions
7and struct sched_attr. Therefore, it needs to be checked for here as well before
8defining sched_attr
9
10Define sched_attr conditionally on SCHED_ATTR_SIZE_VER0
11
12Fixes builds with glibc/trunk
13
14[1] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=21571ca0d70302909cf72707b2a7736cf12190a0;hp=298bc488fdc047da37482f4003023cb9adef78f8
15
16Upstream-Status: Submitted [https://lore.kernel.org/linux-rt-users/20250128230838.2311298-1-raj.khem@gmail.com/T/#u]
17Signed-off-by: Khem Raj <raj.khem@gmail.com>
18Cc: Clark Williams <williams@redhat.com>
19Cc: John Kacur <jkacur@redhat.com>
20Cc: rt-users <linux-rt-users@vger.kernel.org>
21---
22 src/include/rt-sched.h | 4 ++++
23 1 file changed, 4 insertions(+)
24
25diff --git a/src/include/rt-sched.h b/src/include/rt-sched.h
26index 80171c7..9cf0e3a 100644
27--- a/src/include/rt-sched.h
28+++ b/src/include/rt-sched.h
29@@ -42,6 +42,8 @@
30 #define __NR_sched_getattr 275
31 #endif
32
33+/* sched_attr is not defined in glibc < 2.41 */
34+#ifndef SCHED_ATTR_SIZE_VER0
35 struct sched_attr {
36 uint32_t size;
37 uint32_t sched_policy;
38@@ -68,4 +70,6 @@ int sched_getattr(pid_t pid,
39 unsigned int size,
40 unsigned int flags);
41
42+#endif /* SCHED_ATTR_SIZE_VER0 */
43+
44 #endif /* __RT_SCHED_H__ */
diff --git a/meta/recipes-rt/rt-tests/rt-tests_git.bb b/meta/recipes-rt/rt-tests/rt-tests_git.bb
index 1f48e143d4..5fa980dbdf 100644
--- a/meta/recipes-rt/rt-tests/rt-tests_git.bb
+++ b/meta/recipes-rt/rt-tests/rt-tests_git.bb
@@ -13,6 +13,7 @@ SRC_URI += " \
13 file://run-ptest \ 13 file://run-ptest \
14 file://rt_bmark.py \ 14 file://rt_bmark.py \
15 file://0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch \ 15 file://0001-Makefile-Allow-for-CC-and-AR-to-be-overridden.patch \
16 file://0001-sched_attr-Do-not-define-for-glibc-2.41.patch \
16 " 17 "
17 18
18# rt-tests needs PI mutex support in libc 19# rt-tests needs PI mutex support in libc
diff --git a/meta/recipes-support/gnupg/gnupg/0001-fix-compile-failure-with-musl.patch b/meta/recipes-support/gnupg/gnupg/0001-fix-compile-failure-with-musl.patch
deleted file mode 100644
index ec99f4b10c..0000000000
--- a/meta/recipes-support/gnupg/gnupg/0001-fix-compile-failure-with-musl.patch
+++ /dev/null
@@ -1,33 +0,0 @@
1From 81c222ea179ef73fcae4b50c56342bdad4787a28 Mon Sep 17 00:00:00 2001
2From: Hongxu Jia <hongxu.jia@windriver.com>
3Date: Thu, 22 Aug 2024 15:31:16 +0800
4Subject: [PATCH] fix compile failure with musl
5
6```
7../../gnupg-2.5.0/scd/app.c:379:3: error: implicit declaration of function 'write'; did you mean 'fwrite'? [-Wimplicit-function-declaration]
8 379 | write (card_list_lock.notify_pipe[1], "", 1);
9 | ^~~~~
10 | fwrite
11```
12To access the Posix low level file interface such as open, read,
13write and close, should include <unistd.h>.
14
15Upstream-Status: Backport [https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=commit;h=1d5cfa9b7fd22e1c46eeed5fa9fed2af6f81d34f]
16
17Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
18---
19 scd/app.c | 1 +
20 1 file changed, 1 insertion(+)
21
22diff --git a/scd/app.c b/scd/app.c
23index ba7bb23..7d41e53 100644
24--- a/scd/app.c
25+++ b/scd/app.c
26@@ -24,6 +24,7 @@
27 #include <string.h>
28 #include <unistd.h>
29 #include <npth.h>
30+#include <unistd.h>
31
32 #ifndef HAVE_W32_SYSTEM
33 #include <fcntl.h> /* F_SETFD F_GETFL F_SETFL O_NONBLOCK fcntl(2) */
diff --git a/meta/recipes-support/gnupg/gnupg_2.5.2.bb b/meta/recipes-support/gnupg/gnupg_2.5.2.bb
index 64c63e31ce..8e87382f12 100644
--- a/meta/recipes-support/gnupg/gnupg_2.5.2.bb
+++ b/meta/recipes-support/gnupg/gnupg_2.5.2.bb
@@ -18,7 +18,6 @@ SRC_URI = "${GNUPG_MIRROR}/${BPN}/${BPN}-${PV}.tar.bz2 \
18 file://0002-use-pkgconfig-instead-of-npth-config.patch \ 18 file://0002-use-pkgconfig-instead-of-npth-config.patch \
19 file://0004-autogen.sh-fix-find-version-for-beta-checking.patch \ 19 file://0004-autogen.sh-fix-find-version-for-beta-checking.patch \
20 file://0001-Woverride-init-is-not-needed-with-gcc-9.patch \ 20 file://0001-Woverride-init-is-not-needed-with-gcc-9.patch \
21 file://0001-fix-compile-failure-with-musl.patch \
22 " 21 "
23SRC_URI:append:class-native = " file://0001-configure.ac-use-a-custom-value-for-the-location-of-.patch \ 22SRC_URI:append:class-native = " file://0001-configure.ac-use-a-custom-value-for-the-location-of-.patch \
24 file://relocate.patch" 23 file://relocate.patch"
diff --git a/meta/recipes-support/libbsd/libbsd_0.12.2.bb b/meta/recipes-support/libbsd/libbsd_0.12.2.bb
index 7d5e88f293..bd503cb031 100644
--- a/meta/recipes-support/libbsd/libbsd_0.12.2.bb
+++ b/meta/recipes-support/libbsd/libbsd_0.12.2.bb
@@ -15,20 +15,17 @@ HOMEPAGE = "https://libbsd.freedesktop.org/wiki/"
15# License: BSD-3-clause-author 15# License: BSD-3-clause-author
16# License: BSD-3-clause-John-Birrell 16# License: BSD-3-clause-John-Birrell
17# License: BSD-3-clause-Regents 17# License: BSD-3-clause-Regents
18# License: BSD-4-clause-Christopher-G-Demetriou
19# License: BSD-4-clause-Niels-Provos
20# License: BSD-5-clause-Peter-Wemm 18# License: BSD-5-clause-Peter-Wemm
21# License: Beerware 19# License: Beerware
22# License: Expat 20# License: Expat
23# License: ISC 21# License: ISC
24# License: ISC-Original 22# License: ISC-Original
25# License: public-domain 23# License: public-domain
26# License: public-domain-Colin-Plumb 24LICENSE = "BSD-3-Clause & ISC & PD"
27LICENSE = "BSD-3-Clause & BSD-4-Clause & ISC & PD"
28LICENSE:${PN} = "BSD-3-Clause & ISC & PD" 25LICENSE:${PN} = "BSD-3-Clause & ISC & PD"
29LICENSE:${PN}-dbg = "BSD-3-Clause & ISC & PD" 26LICENSE:${PN}-dbg = "BSD-3-Clause & ISC & PD"
30LICENSE:${PN}-dev = "BSD-3-Clause & ISC & PD" 27LICENSE:${PN}-dev = "BSD-3-Clause & ISC & PD"
31LICENSE:${PN}-doc = "BSD-3-Clause & BSD-4-Clause & ISC & PD" 28LICENSE:${PN}-doc = "BSD-3-Clause & ISC & PD"
32LICENSE:${PN}-locale = "BSD-3-Clause & ISC & PD" 29LICENSE:${PN}-locale = "BSD-3-Clause & ISC & PD"
33LICENSE:${PN}-src = "BSD-3-Clause & ISC & PD" 30LICENSE:${PN}-src = "BSD-3-Clause & ISC & PD"
34LICENSE:${PN}-staticdev = "BSD-3-Clause & ISC & PD" 31LICENSE:${PN}-staticdev = "BSD-3-Clause & ISC & PD"