summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes-recipe/systemd.bbclass3
-rw-r--r--meta/conf/distro/include/maintainers.inc2
-rw-r--r--meta/conf/distro/include/ptest-packagelists.inc1
-rw-r--r--meta/files/bitbake-setup.schema.json108
-rw-r--r--meta/files/ptest-perl/run-ptest4
-rw-r--r--meta/lib/oeqa/runtime/cases/logrotate.py19
-rw-r--r--meta/lib/oeqa/runtime/cases/weston.py9
-rw-r--r--meta/lib/oeqa/selftest/cases/bblayers.py43
-rw-r--r--meta/recipes-devtools/clang/common-clang.inc2
-rw-r--r--meta/recipes-devtools/clang/common.inc2
-rw-r--r--meta/recipes-devtools/elfutils/elfutils_0.193.bb2
-rw-r--r--meta/recipes-devtools/fmt/fmt/run-ptest5
-rw-r--r--meta/recipes-devtools/fmt/fmt_11.2.0.bb10
-rw-r--r--meta/recipes-devtools/pkgconfig/pkgconfig/0001-Backport-g-s-size-g-u-intptr-atomics-in-builtin-glib.patch157
-rw-r--r--meta/recipes-devtools/pkgconfig/pkgconfig_git.bb1
-rw-r--r--meta/recipes-extended/libarchive/libarchive_3.8.2.bb (renamed from meta/recipes-extended/libarchive/libarchive_3.8.1.bb)2
-rw-r--r--meta/recipes-kernel/lttng/lttng-modules_2.14.2.bb (renamed from meta/recipes-kernel/lttng/lttng-modules_2.14.1.bb)2
-rwxr-xr-xscripts/contrib/improve_kernel_cve_report.py27
-rw-r--r--scripts/lib/devtool/deploy.py19
-rwxr-xr-xscripts/lib/devtool/ide_sdk.py2
20 files changed, 383 insertions, 37 deletions
diff --git a/meta/classes-recipe/systemd.bbclass b/meta/classes-recipe/systemd.bbclass
index 5a0550b287..562e71fb56 100644
--- a/meta/classes-recipe/systemd.bbclass
+++ b/meta/classes-recipe/systemd.bbclass
@@ -247,7 +247,8 @@ python systemd_populate_packages() {
247 if not systemd_service_exists(service, user, d): 247 if not systemd_service_exists(service, user, d):
248 continue 248 continue
249 if '@' in service and '@.' not in service: 249 if '@' in service and '@.' not in service:
250 (servicename, instance, service_type) = re.split('[@.]', service) 250 (servicename, postfix) = service.split('@')
251 (instance, service_type) = postfix.rsplit('.', 1)
251 template_services.setdefault(servicename + '@.' + service_type, []).append(instance) 252 template_services.setdefault(servicename + '@.' + service_type, []).append(instance)
252 else: 253 else:
253 template_services.setdefault(service, []) 254 template_services.setdefault(service, [])
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index 444c7f6521..c4142e2b72 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -481,7 +481,7 @@ RECIPE_MAINTAINER:pn-linux-yocto-rt = "Bruce Ashfield <bruce.ashfield@gmail.com>
481RECIPE_MAINTAINER:pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield@gmail.com>" 481RECIPE_MAINTAINER:pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield@gmail.com>"
482RECIPE_MAINTAINER:pn-lld = "Khem Raj <raj.khem@gmail.com>" 482RECIPE_MAINTAINER:pn-lld = "Khem Raj <raj.khem@gmail.com>"
483RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>" 483RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>"
484RECIPE_MAINTAINER:pn-llvm-project-source-21.1.3 = "Khem Raj <raj.khem@gmail.com>" 484RECIPE_MAINTAINER:pn-llvm-project-source-21.1.4 = "Khem Raj <raj.khem@gmail.com>"
485RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>" 485RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>"
486RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>" 486RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>"
487RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>" 487RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>"
diff --git a/meta/conf/distro/include/ptest-packagelists.inc b/meta/conf/distro/include/ptest-packagelists.inc
index e6e725bd25..06d113e264 100644
--- a/meta/conf/distro/include/ptest-packagelists.inc
+++ b/meta/conf/distro/include/ptest-packagelists.inc
@@ -19,6 +19,7 @@ PTESTS_FAST = "\
19 expect \ 19 expect \
20 findutils \ 20 findutils \
21 flex \ 21 flex \
22 fmt \
22 gawk \ 23 gawk \
23 gdbm \ 24 gdbm \
24 gdk-pixbuf \ 25 gdk-pixbuf \
diff --git a/meta/files/bitbake-setup.schema.json b/meta/files/bitbake-setup.schema.json
new file mode 100644
index 0000000000..5101b0de53
--- /dev/null
+++ b/meta/files/bitbake-setup.schema.json
@@ -0,0 +1,108 @@
1{
2 "$schema": "https://json-schema.org/draft/2020-12/schema",
3 "description": "Schema for bitbake-setup configuration files",
4 "type": "object",
5 "required": [
6 "description",
7 "bitbake-setup",
8 "version"
9 ],
10 "properties": {
11 "description": {
12 "type": "string",
13 "description": "Description of the bitbake-setup configuration file"
14 },
15 "sources": {
16 "$ref": "layers.schema.json#/properties/sources"
17 },
18 "bitbake-setup": {
19 "type": "object",
20 "description": "BitBake-setup configurations",
21 "required": [
22 "configurations"
23 ],
24 "properties": {
25 "configurations": {
26 "type": "array",
27 "minItems": 1,
28 "$anchor": "configurations",
29 "items": {
30 "type": "object",
31 "properties": {
32 "name": {
33 "type": "string",
34 "description": "Name of the configuration"
35 },
36 "description": {
37 "type": "string",
38 "description": "Human-readable description of the configuration"
39 },
40 "bb-layers": {
41 "type": "array",
42 "description": "List of BitBake layers to include",
43 "items": {
44 "type": "string"
45 }
46 },
47 "oe-template": {
48 "type": "string",
49 "description": "OE-template configuration"
50 },
51 "oe-fragments": {
52 "$anchor": "oe-fragments",
53 "type": "array",
54 "description": "List of BitBake configuration fragments to enable",
55 "items": {
56 "type": "string"
57 }
58 },
59 "oe-fragments-one-of": {
60 "type": "object",
61 "description": "Mutually exclusive bitbake configuration fragment",
62 "patternProperties": {
63 ".*": {
64 "type": "object",
65 "required": [
66 "description",
67 "options"
68 ],
69 "properties": {
70 "description": {
71 "type": "string",
72 "description": "Human-readable description of the fragment category"
73 },
74 "options": {
75 "$ref": "#oe-fragments"
76 }
77 },
78 "additionalProperties": false
79 }
80 },
81 "additionalProperties": false
82 },
83 "configurations": {
84 "$ref": "#configurations"
85 },
86 "bb-env-passthrough-additions": {
87 "type": "array",
88 "description": "List of environment variables to include in BB_ENV_PASSTHROUGH_ADDITIONS",
89 "items": {
90 "type": "string"
91 }
92 }
93 },
94 "additionalProperties": false
95 }
96 }
97 },
98 "additionalProperties": false
99 },
100 "version": {
101 "description": "The version of this document; currently '1.0'",
102 "enum": [
103 "1.0"
104 ]
105 }
106 },
107 "additionalProperties": false
108}
diff --git a/meta/files/ptest-perl/run-ptest b/meta/files/ptest-perl/run-ptest
index fd35357b42..51e467abe7 100644
--- a/meta/files/ptest-perl/run-ptest
+++ b/meta/files/ptest-perl/run-ptest
@@ -1,10 +1,12 @@
1#!/bin/sh 1#!/bin/sh
2 2
3result=0
3for case in `find t -type f -name '*.t'`; do 4for case in `find t -type f -name '*.t'`; do
4 perl -I . $case >$case.output 2>&1 5 perl -I . $case >$case.output 2>&1
5 ret=$? 6 ret=$?
6 cat $case.output 7 cat $case.output
7 if [ $ret -ne 0 ]; then 8 if [ $ret -ne 0 ]; then
9 result=1
8 echo "FAIL: ${case%.t}" 10 echo "FAIL: ${case%.t}"
9 elif grep -i 'SKIP' $case.output; then 11 elif grep -i 'SKIP' $case.output; then
10 echo "SKIP: ${case%.t}" 12 echo "SKIP: ${case%.t}"
@@ -14,3 +16,5 @@ for case in `find t -type f -name '*.t'`; do
14 16
15 rm -f $case.output 17 rm -f $case.output
16done 18done
19
20exit $result
diff --git a/meta/lib/oeqa/runtime/cases/logrotate.py b/meta/lib/oeqa/runtime/cases/logrotate.py
index 0d4b9ac60b..9fe1170226 100644
--- a/meta/lib/oeqa/runtime/cases/logrotate.py
+++ b/meta/lib/oeqa/runtime/cases/logrotate.py
@@ -12,17 +12,6 @@ from oeqa.core.decorator.depends import OETestDepends
12from oeqa.runtime.decorator.package import OEHasPackage 12from oeqa.runtime.decorator.package import OEHasPackage
13 13
14class LogrotateTest(OERuntimeTestCase): 14class LogrotateTest(OERuntimeTestCase):
15
16 @classmethod
17 def setUpClass(cls):
18 cls.tc.target.run('cp /etc/logrotate.d/wtmp $HOME/wtmp.oeqabak',
19 ignore_ssh_fails=True)
20
21 @classmethod
22 def tearDownClass(cls):
23 cls.tc.target.run('mv -f $HOME/wtmp.oeqabak /etc/logrotate.d/wtmp && rm -rf /var/log/logrotate_dir', ignore_ssh_fails=True)
24 cls.tc.target.run('rm -rf /var/log/logrotate_testfile && rm -rf /etc/logrotate.d/logrotate_testfile', ignore_ssh_fails=True)
25
26 @OETestDepends(['ssh.SSHTest.test_ssh']) 15 @OETestDepends(['ssh.SSHTest.test_ssh'])
27 @OEHasPackage(['logrotate']) 16 @OEHasPackage(['logrotate'])
28 def test_logrotate_wtmp(self): 17 def test_logrotate_wtmp(self):
@@ -33,6 +22,7 @@ class LogrotateTest(OERuntimeTestCase):
33 22
34 # Create a folder to store rotated file and add the corresponding 23 # Create a folder to store rotated file and add the corresponding
35 # configuration option 24 # configuration option
25 self.addCleanup(self.target.run, 'rm -rf /var/log/logrotate_dir')
36 status, output = self.target.run('mkdir /var/log/logrotate_dir') 26 status, output = self.target.run('mkdir /var/log/logrotate_dir')
37 msg = ('Could not create logrotate_dir. Output: %s' % output) 27 msg = ('Could not create logrotate_dir. Output: %s' % output)
38 self.assertEqual(status, 0, msg = msg) 28 self.assertEqual(status, 0, msg = msg)
@@ -55,10 +45,17 @@ class LogrotateTest(OERuntimeTestCase):
55 self.assertEqual(status, 0, msg = msg) 45 self.assertEqual(status, 0, msg = msg)
56 46
57 # Create a new configuration file dedicated to a /var/log/logrotate_testfile 47 # Create a new configuration file dedicated to a /var/log/logrotate_testfile
48 self.addCleanup(self.target.run, 'rm -f /var/log/logrotate_testfile')
58 status, output = self.target.run('echo "/var/log/logrotate_testfile {\n missingok \n monthly \n rotate 1}" > /etc/logrotate.d/logrotate_testfile') 49 status, output = self.target.run('echo "/var/log/logrotate_testfile {\n missingok \n monthly \n rotate 1}" > /etc/logrotate.d/logrotate_testfile')
59 msg = ('Could not write to /etc/logrotate.d/logrotate_testfile') 50 msg = ('Could not write to /etc/logrotate.d/logrotate_testfile')
60 self.assertEqual(status, 0, msg = msg) 51 self.assertEqual(status, 0, msg = msg)
61 52
53 self.addCleanup(self.target.run, 'rm -rf /var/log/logrotate_dir')
54 status, output = self.target.run('mkdir /var/log/logrotate_dir')
55 msg = ('Could not create logrotate_dir. Output: %s' % output)
56 self.assertEqual(status, 0, msg = msg)
57
58 self.addCleanup(self.target.run, 'rm -f /etc/logrotate.d/logrotate_testfile')
62 status, output = self.target.run('echo "create \n olddir /var/log/logrotate_dir \n include /etc/logrotate.d/logrotate_testfile" > /tmp/logrotate-test2.conf') 59 status, output = self.target.run('echo "create \n olddir /var/log/logrotate_dir \n include /etc/logrotate.d/logrotate_testfile" > /tmp/logrotate-test2.conf')
63 msg = ('Could not write to /tmp/logrotate_test2.conf') 60 msg = ('Could not write to /tmp/logrotate_test2.conf')
64 self.assertEqual(status, 0, msg = msg) 61 self.assertEqual(status, 0, msg = msg)
diff --git a/meta/lib/oeqa/runtime/cases/weston.py b/meta/lib/oeqa/runtime/cases/weston.py
index e2cecffe83..b0dccee73b 100644
--- a/meta/lib/oeqa/runtime/cases/weston.py
+++ b/meta/lib/oeqa/runtime/cases/weston.py
@@ -14,10 +14,6 @@ import time
14class WestonTest(OERuntimeTestCase): 14class WestonTest(OERuntimeTestCase):
15 weston_log_file = '/tmp/weston-2.log' 15 weston_log_file = '/tmp/weston-2.log'
16 16
17 @classmethod
18 def tearDownClass(cls):
19 cls.tc.target.run('rm %s' % cls.weston_log_file, ignore_ssh_fails=True)
20
21 @OETestDepends(['ssh.SSHTest.test_ssh']) 17 @OETestDepends(['ssh.SSHTest.test_ssh'])
22 @OEHasPackage(['weston']) 18 @OEHasPackage(['weston'])
23 def test_weston_running(self): 19 def test_weston_running(self):
@@ -67,6 +63,10 @@ class WestonTest(OERuntimeTestCase):
67 existing_wl_processes = self.get_processes_of('weston-desktop-shell', 'existing') 63 existing_wl_processes = self.get_processes_of('weston-desktop-shell', 'existing')
68 existing_weston_processes = self.get_processes_of('weston', 'existing') 64 existing_weston_processes = self.get_processes_of('weston', 'existing')
69 65
66 # weston log file should be removed, except if test_weston_supports_xwayland() test has to be run.
67 if 'x11' not in self.td.get('DISTRO_FEATURES'):
68 self.addCleanup(self.target.run, 'rm -f %s' % self.weston_log_file)
69
70 weston_thread = threading.Thread(target=self.run_weston_init) 70 weston_thread = threading.Thread(target=self.run_weston_init)
71 weston_thread.start() 71 weston_thread.start()
72 new_wl_processes, try_cnt = self.get_new_wayland_processes(existing_wl_processes) 72 new_wl_processes, try_cnt = self.get_new_wayland_processes(existing_wl_processes)
@@ -83,6 +83,7 @@ class WestonTest(OERuntimeTestCase):
83 @skipIfNotFeature('x11', 'Test requires x11 to be in DISTRO_FEATURES') 83 @skipIfNotFeature('x11', 'Test requires x11 to be in DISTRO_FEATURES')
84 @OEHasPackage(['weston']) 84 @OEHasPackage(['weston'])
85 def test_weston_supports_xwayland(self): 85 def test_weston_supports_xwayland(self):
86 self.addCleanup(self.target.run, 'rm -f %s' % self.weston_log_file)
86 cmd ='cat %s | grep "xserver listening on display"' % self.weston_log_file 87 cmd ='cat %s | grep "xserver listening on display"' % self.weston_log_file
87 status, output = self.target.run(cmd) 88 status, output = self.target.run(cmd)
88 msg = ('xwayland does not appear to be running') 89 msg = ('xwayland does not appear to be running')
diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index 982287c9a5..6c710b2751 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -20,6 +20,12 @@ class BitbakeLayers(OESelftestTestCase):
20 bitbake("python3-jsonschema-native") 20 bitbake("python3-jsonschema-native")
21 bitbake("-c addto_recipe_sysroot python3-jsonschema-native") 21 bitbake("-c addto_recipe_sysroot python3-jsonschema-native")
22 22
23 # Fetch variables used in multiple test cases
24 bb_vars = get_bb_vars(['COREBASE', 'BITBAKEPATH'])
25 cls.corebase = bb_vars['COREBASE']
26 cls.bitbakepath = bb_vars['BITBAKEPATH']
27 cls.jsonschema_staging_bindir = get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native')
28
23 def test_bitbakelayers_layerindexshowdepends(self): 29 def test_bitbakelayers_layerindexshowdepends(self):
24 result = runCmd('bitbake-layers layerindex-show-depends meta-poky') 30 result = runCmd('bitbake-layers layerindex-show-depends meta-poky')
25 find_in_contents = re.search("openembedded-core", result.output) 31 find_in_contents = re.search("openembedded-core", result.output)
@@ -58,7 +64,7 @@ class BitbakeLayers(OESelftestTestCase):
58 self.assertTrue(find_in_contents, msg = "Flattening layers did not work. bitbake-layers flatten output: %s" % result.output) 64 self.assertTrue(find_in_contents, msg = "Flattening layers did not work. bitbake-layers flatten output: %s" % result.output)
59 65
60 def test_bitbakelayers_add_remove(self): 66 def test_bitbakelayers_add_remove(self):
61 test_layer = os.path.join(get_bb_var('COREBASE'), 'meta-skeleton') 67 test_layer = os.path.join(self.corebase, 'meta-skeleton')
62 result = runCmd('bitbake-layers show-layers') 68 result = runCmd('bitbake-layers show-layers')
63 self.assertNotIn('meta-skeleton', result.output, "This test cannot run with meta-skeleton in bblayers.conf. bitbake-layers show-layers output: %s" % result.output) 69 self.assertNotIn('meta-skeleton', result.output, "This test cannot run with meta-skeleton in bblayers.conf. bitbake-layers show-layers output: %s" % result.output)
64 result = runCmd('bitbake-layers add-layer %s' % test_layer) 70 result = runCmd('bitbake-layers add-layer %s' % test_layer)
@@ -136,16 +142,39 @@ class BitbakeLayers(OESelftestTestCase):
136 self.assertTrue(os.path.isfile(recipe_file), msg = "Can't find recipe file for %s" % recipe) 142 self.assertTrue(os.path.isfile(recipe_file), msg = "Can't find recipe file for %s" % recipe)
137 return os.path.basename(recipe_file) 143 return os.path.basename(recipe_file)
138 144
145 def validate_json(self, json, jsonschema):
146 python = os.path.join(self.jsonschema_staging_bindir, 'nativepython3')
147 jsonvalidator = os.path.join(self.jsonschema_staging_bindir, 'jsonschema')
148 schemas_dir = os.path.join(self.corebase, "meta/files/")
149 if not os.path.isabs(jsonschema):
150 jsonschema = os.path.join(schemas_dir, jsonschema)
151
152 result = runCmd(
153 "{} {} -i {} --base-uri file://{}/ {}".format(
154 python, jsonvalidator, json, schemas_dir, jsonschema
155 )
156 )
157
139 def validate_layersjson(self, json): 158 def validate_layersjson(self, json):
140 python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native'), 'nativepython3') 159 self.validate_json(json, "layers.schema.json")
141 jsonvalidator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-jsonschema-native'), 'jsonschema')
142 jsonschema = os.path.join(get_bb_var('COREBASE'), 'meta/files/layers.schema.json')
143 result = runCmd("{} {} -i {} {}".format(python, jsonvalidator, json, jsonschema))
144 160
145 def test_validate_examplelayersjson(self): 161 def test_validate_examplelayersjson(self):
146 json = os.path.join(get_bb_var('COREBASE'), "meta/files/layers.example.json") 162 json = os.path.join(self.corebase, "meta/files/layers.example.json")
147 self.validate_layersjson(json) 163 self.validate_layersjson(json)
148 164
165 def test_validate_bitbake_setup_default_registry(self):
166 jsonschema = "bitbake-setup.schema.json"
167
168 default_registry_path = os.path.join(self.bitbakepath, "..", "default-registry", "configurations")
169
170 for root, _, files in os.walk(default_registry_path):
171 for f in files:
172 if not f.endswith(".conf.json"):
173 continue
174 json = os.path.join(root, f)
175 self.logger.debug("Validating %s", json)
176 self.validate_json(json, jsonschema)
177
149 def test_bitbakelayers_setup(self): 178 def test_bitbakelayers_setup(self):
150 result = runCmd('bitbake-layers create-layers-setup {}'.format(self.testlayer_path)) 179 result = runCmd('bitbake-layers create-layers-setup {}'.format(self.testlayer_path))
151 jsonfile = os.path.join(self.testlayer_path, "setup-layers.json") 180 jsonfile = os.path.join(self.testlayer_path, "setup-layers.json")
@@ -173,7 +202,7 @@ class BitbakeLayers(OESelftestTestCase):
173 202
174 # As setup-layers checkout out an old revision of poky, there is no setup-build symlink, 203 # As setup-layers checkout out an old revision of poky, there is no setup-build symlink,
175 # and we need to run oe-setup-build directly from the current poky tree under test 204 # and we need to run oe-setup-build directly from the current poky tree under test
176 oe_setup_build = os.path.join(get_bb_var('COREBASE'), 'scripts/oe-setup-build') 205 oe_setup_build = os.path.join(self.corebase, 'scripts/oe-setup-build')
177 oe_setup_build_l = os.path.join(testcheckoutdir, 'setup-build') 206 oe_setup_build_l = os.path.join(testcheckoutdir, 'setup-build')
178 os.symlink(oe_setup_build,oe_setup_build_l) 207 os.symlink(oe_setup_build,oe_setup_build_l)
179 208
diff --git a/meta/recipes-devtools/clang/common-clang.inc b/meta/recipes-devtools/clang/common-clang.inc
index 7191d41efd..416258c5d3 100644
--- a/meta/recipes-devtools/clang/common-clang.inc
+++ b/meta/recipes-devtools/clang/common-clang.inc
@@ -5,7 +5,7 @@ LLVM_HTTP ?= "https://github.com/llvm"
5 5
6MAJOR_VER = "21" 6MAJOR_VER = "21"
7MINOR_VER = "1" 7MINOR_VER = "1"
8PATCH_VER = "3" 8PATCH_VER = "4"
9# could be 'rcX' or 'git' or empty ( for release ) 9# could be 'rcX' or 'git' or empty ( for release )
10VER_SUFFIX = "" 10VER_SUFFIX = ""
11 11
diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc
index 8a7ac57554..20adbf2610 100644
--- a/meta/recipes-devtools/clang/common.inc
+++ b/meta/recipes-devtools/clang/common.inc
@@ -17,7 +17,7 @@ BASEURI ?= "${LLVM_HTTP}/llvm-project/releases/download/llvmorg-${PV}${VER_SUFFI
17UPSTREAM_CHECK_URI = "${LLVM_HTTP}/llvm-project/releases/" 17UPSTREAM_CHECK_URI = "${LLVM_HTTP}/llvm-project/releases/"
18UPSTREAM_CHECK_REGEX = "releases/tag/llvmorg-?(?P<pver>\d+(\.\d+)+)" 18UPSTREAM_CHECK_REGEX = "releases/tag/llvmorg-?(?P<pver>\d+(\.\d+)+)"
19SOURCEDIR ?= "llvm-project-${PV}${VER_SUFFIX}.src" 19SOURCEDIR ?= "llvm-project-${PV}${VER_SUFFIX}.src"
20SRC_URI[sha256sum] = "9c9db50d8046f668156d83f6b594631b4ca79a0d96e4f19bed9dc019b022e58f" 20SRC_URI[sha256sum] = "a01ad7e5167780c945871d75c0413081d12067607a6de5cf71dc3e8d1a82112c"
21 21
22SRC_URI = "\ 22SRC_URI = "\
23 ${BASEURI} \ 23 ${BASEURI} \
diff --git a/meta/recipes-devtools/elfutils/elfutils_0.193.bb b/meta/recipes-devtools/elfutils/elfutils_0.193.bb
index 29a8ee5af6..85aef7881b 100644
--- a/meta/recipes-devtools/elfutils/elfutils_0.193.bb
+++ b/meta/recipes-devtools/elfutils/elfutils_0.193.bb
@@ -33,8 +33,6 @@ EXTRA_OECONF = "--program-prefix=eu-"
33# Only used at runtime for make check but we want deterministic makefiles for ptest so hardcode 33# Only used at runtime for make check but we want deterministic makefiles for ptest so hardcode
34CACHED_CONFIGUREVARS += "ac_cv_prog_HAVE_BUNZIP2=yes" 34CACHED_CONFIGUREVARS += "ac_cv_prog_HAVE_BUNZIP2=yes"
35 35
36BUILD_CFLAGS += "-Wno-error=stringop-overflow"
37
38DEPENDS_BZIP2 = "bzip2-replacement-native" 36DEPENDS_BZIP2 = "bzip2-replacement-native"
39DEPENDS_BZIP2:class-target = "bzip2" 37DEPENDS_BZIP2:class-target = "bzip2"
40 38
diff --git a/meta/recipes-devtools/fmt/fmt/run-ptest b/meta/recipes-devtools/fmt/fmt/run-ptest
new file mode 100644
index 0000000000..a069e4543c
--- /dev/null
+++ b/meta/recipes-devtools/fmt/fmt/run-ptest
@@ -0,0 +1,5 @@
1#!/bin/sh
2
3for t in `ls ./*-test`; do
4 ./$t && echo PASS: $t || echo FAIL: $t
5done
diff --git a/meta/recipes-devtools/fmt/fmt_11.2.0.bb b/meta/recipes-devtools/fmt/fmt_11.2.0.bb
index fd5dc0c4ab..06ba523ada 100644
--- a/meta/recipes-devtools/fmt/fmt_11.2.0.bb
+++ b/meta/recipes-devtools/fmt/fmt_11.2.0.bb
@@ -7,11 +7,19 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=b9257785fc4f3803a4b71b76c1412729"
7SRC_URI = "git://github.com/fmtlib/fmt;branch=master;protocol=https;tag=${PV}\ 7SRC_URI = "git://github.com/fmtlib/fmt;branch=master;protocol=https;tag=${PV}\
8 file://0001-Workaround-an-ABI-issue-in-spdlog.patch \ 8 file://0001-Workaround-an-ABI-issue-in-spdlog.patch \
9 file://0001-Fix-compilation-on-clang-21-libc-21-4477.patch \ 9 file://0001-Fix-compilation-on-clang-21-libc-21-4477.patch \
10 file://run-ptest \
10 " 11 "
11SRCREV = "40626af88bd7df9a5fb80be7b25ac85b122d6c21" 12SRCREV = "40626af88bd7df9a5fb80be7b25ac85b122d6c21"
12 13
13inherit cmake 14inherit cmake ptest
14 15
15EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON" 16EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON"
17EXTRA_OECMAKE += "${@bb.utils.contains('PTEST_ENABLED', '1', '-DFMT_TEST=ON', '', d)}"
18
19do_install_ptest(){
20 for t in `ls ${B}/bin/*-test`; do
21 install $t ${D}${PTEST_PATH}/
22 done
23}
16 24
17BBCLASSEXTEND = "native nativesdk" 25BBCLASSEXTEND = "native nativesdk"
diff --git a/meta/recipes-devtools/pkgconfig/pkgconfig/0001-Backport-g-s-size-g-u-intptr-atomics-in-builtin-glib.patch b/meta/recipes-devtools/pkgconfig/pkgconfig/0001-Backport-g-s-size-g-u-intptr-atomics-in-builtin-glib.patch
new file mode 100644
index 0000000000..5ef4cec811
--- /dev/null
+++ b/meta/recipes-devtools/pkgconfig/pkgconfig/0001-Backport-g-s-size-g-u-intptr-atomics-in-builtin-glib.patch
@@ -0,0 +1,157 @@
1From 5fb4ae80ae13ae134a33804b1938af0e9f27a222 Mon Sep 17 00:00:00 2001
2From: Dan Fuhry <dan@fuhry.com>
3Date: Sun, 26 Oct 2025 09:09:07 -0700
4Subject: [PATCH] Backport g(s)size -> g(u)intptr atomics in builtin glib for
5 gcc14 and clang15
6
7pkg-config 0.29.2 doesn't build on clang 15 and up and
8gcc 14 and up, due to -Wint-conversion now defaulting to being an error in
9both compilers. The old version of glib 2.36 bundled with pkg-config uses
10gssize/gssize as the return type of the g_atomic_pointer_* functions, which
11newer versions of gcc and clang complain (rightly) is not portable (as
12these are aliased to long and ulong, respectively).
13
14This was previously addressed in glib upstream commit c762d511 [1] by Alex
15Richardson on Dec 14, 2022. The attached patch backports Alex's change to
16glib 2.36 bundled with pkg-config, and also switches to the newer
17__atomic_* intrinsics from commit 2eb37622 [2] (Philip Withnall).
18
19This patch has been tested on clang 17 and only clang 17.
20
21[1]
22https://gitlab.gnome.org/GNOME/glib/-/commit/c762d511346d3cb84cea3557a246ccf8873b4a1c
23[2]
24https://gitlab.gnome.org/GNOME/glib/-/commit/2eb37622418a5c9f31a9d728a99bc621d3157ab0
25
26Upstream-Status: Submitted [https://lists.freedesktop.org/archives/pkg-config/2024-May/001122.html]
27Signed-off-by: Khem Raj <raj.khem@gmail.com>
28---
29 glib/glib/gatomic.c | 14 +++++++-------
30 glib/glib/gatomic.h | 34 ++++++++++++++++++++--------------
31 2 files changed, 27 insertions(+), 21 deletions(-)
32
33diff --git a/glib/glib/gatomic.c b/glib/glib/gatomic.c
34index eb2fe46..c0609eb 100644
35--- a/glib/glib/gatomic.c
36+++ b/glib/glib/gatomic.c
37@@ -385,7 +385,7 @@ gboolean
38 *
39 * Since: 2.30
40 **/
41-gssize
42+gintptr
43 (g_atomic_pointer_add) (volatile void *atomic,
44 gssize val)
45 {
46@@ -409,11 +409,11 @@ gssize
47 *
48 * Since: 2.30
49 **/
50-gsize
51+guintptr
52 (g_atomic_pointer_and) (volatile void *atomic,
53 gsize val)
54 {
55- return g_atomic_pointer_and ((volatile gpointer *) atomic, val);
56+ return g_atomic_pointer_and ((gpointer *) atomic, val);
57 }
58
59 /**
60@@ -433,11 +433,11 @@ gsize
61 *
62 * Since: 2.30
63 **/
64-gsize
65+guintptr
66 (g_atomic_pointer_or) (volatile void *atomic,
67 gsize val)
68 {
69- return g_atomic_pointer_or ((volatile gpointer *) atomic, val);
70+ return g_atomic_pointer_or ((gpointer *) atomic, val);
71 }
72
73 /**
74@@ -457,11 +457,11 @@ gsize
75 *
76 * Since: 2.30
77 **/
78-gsize
79+guintptr
80 (g_atomic_pointer_xor) (volatile void *atomic,
81 gsize val)
82 {
83- return g_atomic_pointer_xor ((volatile gpointer *) atomic, val);
84+ return g_atomic_pointer_xor ((gpointer *) atomic, val);
85 }
86
87 #elif defined (G_PLATFORM_WIN32)
88diff --git a/glib/glib/gatomic.h b/glib/glib/gatomic.h
89index e7fd1f2..124a3dd 100644
90--- a/glib/glib/gatomic.h
91+++ b/glib/glib/gatomic.h
92@@ -66,16 +66,16 @@ gboolean g_atomic_pointer_compare_and_exchange (volatile void *a
93 gpointer oldval,
94 gpointer newval);
95 GLIB_AVAILABLE_IN_ALL
96-gssize g_atomic_pointer_add (volatile void *atomic,
97+gintptr g_atomic_pointer_add (volatile void *atomic,
98 gssize val);
99 GLIB_AVAILABLE_IN_2_30
100-gsize g_atomic_pointer_and (volatile void *atomic,
101+guintptr g_atomic_pointer_and (volatile void *atomic,
102 gsize val);
103 GLIB_AVAILABLE_IN_2_30
104-gsize g_atomic_pointer_or (volatile void *atomic,
105+guintptr g_atomic_pointer_or (volatile void *atomic,
106 gsize val);
107 GLIB_AVAILABLE_IN_ALL
108-gsize g_atomic_pointer_xor (volatile void *atomic,
109+guintptr g_atomic_pointer_xor (volatile void *atomic,
110 gsize val);
111
112 GLIB_DEPRECATED_IN_2_30_FOR(g_atomic_add)
113@@ -167,28 +167,34 @@ G_END_DECLS
114 G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
115 (void) (0 ? (gpointer) *(atomic) : 0); \
116 (void) (0 ? (val) ^ (val) : 0); \
117- (gssize) __sync_fetch_and_add ((atomic), (val)); \
118+ (guintptr) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST); \
119 }))
120 #define g_atomic_pointer_and(atomic, val) \
121 (G_GNUC_EXTENSION ({ \
122+ guintptr *gapa_atomic = (guintptr *) atomic; \
123 G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
124- (void) (0 ? (gpointer) *(atomic) : 0); \
125- (void) (0 ? (val) ^ (val) : 0); \
126- (gsize) __sync_fetch_and_and ((atomic), (val)); \
127+ G_STATIC_ASSERT (sizeof *(atomic) == sizeof (guintptr)); \
128+ (void) (0 ? (gpointer) *(atomic) : NULL); \
129+ (void) (0 ? (val) ^ (val) : 1); \
130+ (guintptr) __atomic_fetch_and (gapa_atomic, (val), __ATOMIC_SEQ_CST); \
131 }))
132 #define g_atomic_pointer_or(atomic, val) \
133 (G_GNUC_EXTENSION ({ \
134+ guintptr *gapa_atomic = (guintptr *) atomic; \
135 G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
136- (void) (0 ? (gpointer) *(atomic) : 0); \
137- (void) (0 ? (val) ^ (val) : 0); \
138- (gsize) __sync_fetch_and_or ((atomic), (val)); \
139+ G_STATIC_ASSERT (sizeof *(atomic) == sizeof (guintptr)); \
140+ (void) (0 ? (gpointer) *(atomic) : NULL); \
141+ (void) (0 ? (val) ^ (val) : 1); \
142+ (guintptr) __atomic_fetch_or (gapa_atomic, (val), __ATOMIC_SEQ_CST); \
143 }))
144 #define g_atomic_pointer_xor(atomic, val) \
145 (G_GNUC_EXTENSION ({ \
146+ guintptr *gapa_atomic = (guintptr *) atomic; \
147 G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
148- (void) (0 ? (gpointer) *(atomic) : 0); \
149- (void) (0 ? (val) ^ (val) : 0); \
150- (gsize) __sync_fetch_and_xor ((atomic), (val)); \
151+ G_STATIC_ASSERT (sizeof *(atomic) == sizeof (guintptr)); \
152+ (void) (0 ? (gpointer) *(atomic) : NULL); \
153+ (void) (0 ? (val) ^ (val) : 1); \
154+ (guintptr) __atomic_fetch_xor (gapa_atomic, (val), __ATOMIC_SEQ_CST); \
155 }))
156
157 #else /* defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) */
diff --git a/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb b/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb
index f537c635ef..19b9b6bc9d 100644
--- a/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb
+++ b/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb
@@ -16,6 +16,7 @@ SRC_URI = "git://gitlab.freedesktop.org/pkg-config/pkg-config.git;branch=master;
16 file://pkg-config-native.in \ 16 file://pkg-config-native.in \
17 file://0001-glib-gettext.m4-Update-AM_GLIB_GNU_GETTEXT-to-match-.patch \ 17 file://0001-glib-gettext.m4-Update-AM_GLIB_GNU_GETTEXT-to-match-.patch \
18 file://0001-Do-not-use-bool-as-a-field-name.patch \ 18 file://0001-Do-not-use-bool-as-a-field-name.patch \
19 file://0001-Backport-g-s-size-g-u-intptr-atomics-in-builtin-glib.patch \
19 " 20 "
20 21
21inherit autotools 22inherit autotools
diff --git a/meta/recipes-extended/libarchive/libarchive_3.8.1.bb b/meta/recipes-extended/libarchive/libarchive_3.8.2.bb
index 69520b1bad..d4f367009a 100644
--- a/meta/recipes-extended/libarchive/libarchive_3.8.1.bb
+++ b/meta/recipes-extended/libarchive/libarchive_3.8.2.bb
@@ -32,7 +32,7 @@ EXTRA_OECONF += "--enable-largefile --without-iconv"
32SRC_URI = "https://libarchive.org/downloads/libarchive-${PV}.tar.gz" 32SRC_URI = "https://libarchive.org/downloads/libarchive-${PV}.tar.gz"
33UPSTREAM_CHECK_URI = "https://www.libarchive.org/" 33UPSTREAM_CHECK_URI = "https://www.libarchive.org/"
34 34
35SRC_URI[sha256sum] = "bde832a5e3344dc723cfe9cc37f8e54bde04565bfe6f136bc1bd31ab352e9fab" 35SRC_URI[sha256sum] = "5f2d3c2fde8dc44583a61165549dc50ba8a37c5947c90fc02c8e5ce7f1cfb80d"
36 36
37inherit autotools update-alternatives pkgconfig 37inherit autotools update-alternatives pkgconfig
38 38
diff --git a/meta/recipes-kernel/lttng/lttng-modules_2.14.1.bb b/meta/recipes-kernel/lttng/lttng-modules_2.14.2.bb
index 3af6db5a83..c9c0b17291 100644
--- a/meta/recipes-kernel/lttng/lttng-modules_2.14.1.bb
+++ b/meta/recipes-kernel/lttng/lttng-modules_2.14.2.bb
@@ -15,7 +15,7 @@ SRC_URI = "https://lttng.org/files/${BPN}/${BPN}-${PV}.tar.bz2 \
15# Use :append here so that the patch is applied also when using devupstream 15# Use :append here so that the patch is applied also when using devupstream
16SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch \ 16SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch \
17 " 17 "
18SRC_URI[sha256sum] = "a87684b8a58f426e9574c4aa7591d6e49d54469872f9641652df2b4a938f9a40" 18SRC_URI[sha256sum] = "a581dd44ea61af869a935e71498d4273be59944d56f906135c6451d6548742a5"
19 19
20export INSTALL_MOD_DIR = "kernel/lttng-modules" 20export INSTALL_MOD_DIR = "kernel/lttng-modules"
21 21
diff --git a/scripts/contrib/improve_kernel_cve_report.py b/scripts/contrib/improve_kernel_cve_report.py
index 5c39df05a5..3a15b1ed26 100755
--- a/scripts/contrib/improve_kernel_cve_report.py
+++ b/scripts/contrib/improve_kernel_cve_report.py
@@ -236,6 +236,26 @@ def read_spdx3(spdx):
236 cfiles.add(filename) 236 cfiles.add(filename)
237 return cfiles 237 return cfiles
238 238
239def read_debugsources(file_path):
240 '''
241 Read zstd file from pkgdata to extract sources
242 '''
243 import zstandard as zstd
244 import itertools
245 # Decompress the .zst file
246 cfiles = set()
247 with open(file_path, 'rb') as fh:
248 dctx = zstd.ZstdDecompressor()
249 with dctx.stream_reader(fh) as reader:
250 decompressed_bytes = reader.read()
251 json_data = json.loads(decompressed_bytes)
252 # We need to remove one level from the debug sources
253 for source_list in json_data.values():
254 for source in source_list:
255 src = source.split("/",1)[1]
256 cfiles.add(src)
257 return cfiles
258
239def check_kernel_compiled_files(compiled_files, cve_info): 259def check_kernel_compiled_files(compiled_files, cve_info):
240 """ 260 """
241 Return if a CVE affected us depending on compiled files 261 Return if a CVE affected us depending on compiled files
@@ -373,6 +393,10 @@ def main():
373 help="SPDX2/3 for the kernel. Needs to include compiled sources", 393 help="SPDX2/3 for the kernel. Needs to include compiled sources",
374 ) 394 )
375 parser.add_argument( 395 parser.add_argument(
396 "--debug-sources-file",
397 help="Debug sources zstd file generated from Yocto",
398 )
399 parser.add_argument(
376 "--datadir", 400 "--datadir",
377 type=pathlib.Path, 401 type=pathlib.Path,
378 help="Directory where CVE data is", 402 help="Directory where CVE data is",
@@ -415,6 +439,9 @@ def main():
415 if args.spdx: 439 if args.spdx:
416 compiled_files = read_spdx(args.spdx) 440 compiled_files = read_spdx(args.spdx)
417 logging.info("Total compiled files %d", len(compiled_files)) 441 logging.info("Total compiled files %d", len(compiled_files))
442 if args.debug_sources_file:
443 compiled_files = read_debugsources(args.debug_sources_file)
444 logging.info("Total compiled files %d", len(compiled_files))
418 445
419 if args.old_cve_report: 446 if args.old_cve_report:
420 with open(args.old_cve_report, encoding='ISO-8859-1') as f: 447 with open(args.old_cve_report, encoding='ISO-8859-1') as f:
diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py
index b5ca8f2c2f..a98b33c571 100644
--- a/scripts/lib/devtool/deploy.py
+++ b/scripts/lib/devtool/deploy.py
@@ -20,9 +20,9 @@ from devtool import exec_fakeroot_no_d, setup_tinfoil, check_workspace_recipe, D
20 20
21logger = logging.getLogger('devtool') 21logger = logging.getLogger('devtool')
22 22
23deploylist_path = '/.devtool' 23deploylist_dirname = '.devtool'
24 24
25def _prepare_remote_script(deploy, verbose=False, dryrun=False, undeployall=False, nopreserve=False, nocheckspace=False): 25def _prepare_remote_script(deploy, destdir='/', verbose=False, dryrun=False, undeployall=False, nopreserve=False, nocheckspace=False):
26 """ 26 """
27 Prepare a shell script for running on the target to 27 Prepare a shell script for running on the target to
28 deploy/undeploy files. We have to be careful what we put in this 28 deploy/undeploy files. We have to be careful what we put in this
@@ -31,6 +31,7 @@ def _prepare_remote_script(deploy, verbose=False, dryrun=False, undeployall=Fals
31 busybox rather than bash with coreutils). 31 busybox rather than bash with coreutils).
32 """ 32 """
33 lines = [] 33 lines = []
34 deploylist_path = os.path.join(destdir, deploylist_dirname)
34 lines.append('#!/bin/sh') 35 lines.append('#!/bin/sh')
35 lines.append('set -e') 36 lines.append('set -e')
36 if undeployall: 37 if undeployall:
@@ -146,7 +147,7 @@ def deploy(args, config, basepath, workspace):
146 except Exception as e: 147 except Exception as e:
147 raise DevtoolError('Exception parsing recipe %s: %s' % 148 raise DevtoolError('Exception parsing recipe %s: %s' %
148 (args.recipename, e)) 149 (args.recipename, e))
149 150
150 srcdir = rd.getVar('D') 151 srcdir = rd.getVar('D')
151 workdir = rd.getVar('WORKDIR') 152 workdir = rd.getVar('WORKDIR')
152 path = rd.getVar('PATH') 153 path = rd.getVar('PATH')
@@ -244,6 +245,7 @@ def deploy_no_d(srcdir, workdir, path, strip_cmd, libdir, base_libdir, max_proce
244 tmpscript = '/tmp/devtool_deploy.sh' 245 tmpscript = '/tmp/devtool_deploy.sh'
245 tmpfilelist = os.path.join(os.path.dirname(tmpscript), 'devtool_deploy.list') 246 tmpfilelist = os.path.join(os.path.dirname(tmpscript), 'devtool_deploy.list')
246 shellscript = _prepare_remote_script(deploy=True, 247 shellscript = _prepare_remote_script(deploy=True,
248 destdir=destdir,
247 verbose=args.show_status, 249 verbose=args.show_status,
248 nopreserve=args.no_preserve, 250 nopreserve=args.no_preserve,
249 nocheckspace=args.no_check_space) 251 nocheckspace=args.no_check_space)
@@ -303,12 +305,19 @@ def undeploy(args, config, basepath, workspace):
303 scp_port = "-P %s" % args.port 305 scp_port = "-P %s" % args.port
304 ssh_port = "-p %s" % args.port 306 ssh_port = "-p %s" % args.port
305 307
306 args.target = args.target.split(':')[0] 308 try:
309 host, destdir = args.target.split(':')
310 except ValueError:
311 destdir = '/'
312 else:
313 args.target = host
314 if not destdir.endswith('/'):
315 destdir += '/'
307 316
308 tmpdir = tempfile.mkdtemp(prefix='devtool') 317 tmpdir = tempfile.mkdtemp(prefix='devtool')
309 try: 318 try:
310 tmpscript = '/tmp/devtool_undeploy.sh' 319 tmpscript = '/tmp/devtool_undeploy.sh'
311 shellscript = _prepare_remote_script(deploy=False, dryrun=args.dry_run, undeployall=args.all) 320 shellscript = _prepare_remote_script(deploy=False, destdir=destdir, dryrun=args.dry_run, undeployall=args.all)
312 # Write out the script to a file 321 # Write out the script to a file
313 with open(os.path.join(tmpdir, os.path.basename(tmpscript)), 'w') as f: 322 with open(os.path.join(tmpdir, os.path.basename(tmpscript)), 'w') as f:
314 f.write(shellscript) 323 f.write(shellscript)
diff --git a/scripts/lib/devtool/ide_sdk.py b/scripts/lib/devtool/ide_sdk.py
index d9b54f7991..87a4c13ec5 100755
--- a/scripts/lib/devtool/ide_sdk.py
+++ b/scripts/lib/devtool/ide_sdk.py
@@ -104,7 +104,7 @@ class RecipeNative:
104 104
105 105
106class RecipeGdbCross(RecipeNative): 106class RecipeGdbCross(RecipeNative):
107 """Handle handle gdb-cross on the host and the gdbserver on the target device""" 107 """Handle gdb-cross on the host and the gdbserver on the target device"""
108 108
109 def __init__(self, args, target_arch, target_device): 109 def __init__(self, args, target_arch, target_device):
110 super().__init__('gdb-cross-' + target_arch, target_arch) 110 super().__init__('gdb-cross-' + target_arch, target_arch)