diff options
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> | |||
| 481 | RECIPE_MAINTAINER:pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield@gmail.com>" | 481 | RECIPE_MAINTAINER:pn-linux-yocto-tiny = "Bruce Ashfield <bruce.ashfield@gmail.com>" |
| 482 | RECIPE_MAINTAINER:pn-lld = "Khem Raj <raj.khem@gmail.com>" | 482 | RECIPE_MAINTAINER:pn-lld = "Khem Raj <raj.khem@gmail.com>" |
| 483 | RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>" | 483 | RECIPE_MAINTAINER:pn-lldb = "Khem Raj <raj.khem@gmail.com>" |
| 484 | RECIPE_MAINTAINER:pn-llvm-project-source-21.1.3 = "Khem Raj <raj.khem@gmail.com>" | 484 | RECIPE_MAINTAINER:pn-llvm-project-source-21.1.4 = "Khem Raj <raj.khem@gmail.com>" |
| 485 | RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>" | 485 | RECIPE_MAINTAINER:pn-llvm-tblgen-native = "Khem Raj <raj.khem@gmail.com>" |
| 486 | RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>" | 486 | RECIPE_MAINTAINER:pn-llvm = "Khem Raj <raj.khem@gmail.com>" |
| 487 | RECIPE_MAINTAINER:pn-logrotate = "Yi Zhao <yi.zhao@windriver.com>" | 487 | RECIPE_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 | ||
| 3 | result=0 | ||
| 3 | for case in `find t -type f -name '*.t'`; do | 4 | for 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 |
| 16 | done | 18 | done |
| 19 | |||
| 20 | exit $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 | |||
| 12 | from oeqa.runtime.decorator.package import OEHasPackage | 12 | from oeqa.runtime.decorator.package import OEHasPackage |
| 13 | 13 | ||
| 14 | class LogrotateTest(OERuntimeTestCase): | 14 | class 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 | |||
| 14 | class WestonTest(OERuntimeTestCase): | 14 | class 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 | ||
| 6 | MAJOR_VER = "21" | 6 | MAJOR_VER = "21" |
| 7 | MINOR_VER = "1" | 7 | MINOR_VER = "1" |
| 8 | PATCH_VER = "3" | 8 | PATCH_VER = "4" |
| 9 | # could be 'rcX' or 'git' or empty ( for release ) | 9 | # could be 'rcX' or 'git' or empty ( for release ) |
| 10 | VER_SUFFIX = "" | 10 | VER_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 | |||
| 17 | UPSTREAM_CHECK_URI = "${LLVM_HTTP}/llvm-project/releases/" | 17 | UPSTREAM_CHECK_URI = "${LLVM_HTTP}/llvm-project/releases/" |
| 18 | UPSTREAM_CHECK_REGEX = "releases/tag/llvmorg-?(?P<pver>\d+(\.\d+)+)" | 18 | UPSTREAM_CHECK_REGEX = "releases/tag/llvmorg-?(?P<pver>\d+(\.\d+)+)" |
| 19 | SOURCEDIR ?= "llvm-project-${PV}${VER_SUFFIX}.src" | 19 | SOURCEDIR ?= "llvm-project-${PV}${VER_SUFFIX}.src" |
| 20 | SRC_URI[sha256sum] = "9c9db50d8046f668156d83f6b594631b4ca79a0d96e4f19bed9dc019b022e58f" | 20 | SRC_URI[sha256sum] = "a01ad7e5167780c945871d75c0413081d12067607a6de5cf71dc3e8d1a82112c" |
| 21 | 21 | ||
| 22 | SRC_URI = "\ | 22 | SRC_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 |
| 34 | CACHED_CONFIGUREVARS += "ac_cv_prog_HAVE_BUNZIP2=yes" | 34 | CACHED_CONFIGUREVARS += "ac_cv_prog_HAVE_BUNZIP2=yes" |
| 35 | 35 | ||
| 36 | BUILD_CFLAGS += "-Wno-error=stringop-overflow" | ||
| 37 | |||
| 38 | DEPENDS_BZIP2 = "bzip2-replacement-native" | 36 | DEPENDS_BZIP2 = "bzip2-replacement-native" |
| 39 | DEPENDS_BZIP2:class-target = "bzip2" | 37 | DEPENDS_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 | |||
| 3 | for t in `ls ./*-test`; do | ||
| 4 | ./$t && echo PASS: $t || echo FAIL: $t | ||
| 5 | done | ||
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" | |||
| 7 | SRC_URI = "git://github.com/fmtlib/fmt;branch=master;protocol=https;tag=${PV}\ | 7 | SRC_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 | " |
| 11 | SRCREV = "40626af88bd7df9a5fb80be7b25ac85b122d6c21" | 12 | SRCREV = "40626af88bd7df9a5fb80be7b25ac85b122d6c21" |
| 12 | 13 | ||
| 13 | inherit cmake | 14 | inherit cmake ptest |
| 14 | 15 | ||
| 15 | EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON" | 16 | EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON" |
| 17 | EXTRA_OECMAKE += "${@bb.utils.contains('PTEST_ENABLED', '1', '-DFMT_TEST=ON', '', d)}" | ||
| 18 | |||
| 19 | do_install_ptest(){ | ||
| 20 | for t in `ls ${B}/bin/*-test`; do | ||
| 21 | install $t ${D}${PTEST_PATH}/ | ||
| 22 | done | ||
| 23 | } | ||
| 16 | 24 | ||
| 17 | BBCLASSEXTEND = "native nativesdk" | 25 | BBCLASSEXTEND = "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 @@ | |||
| 1 | From 5fb4ae80ae13ae134a33804b1938af0e9f27a222 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Dan Fuhry <dan@fuhry.com> | ||
| 3 | Date: Sun, 26 Oct 2025 09:09:07 -0700 | ||
| 4 | Subject: [PATCH] Backport g(s)size -> g(u)intptr atomics in builtin glib for | ||
| 5 | gcc14 and clang15 | ||
| 6 | |||
| 7 | pkg-config 0.29.2 doesn't build on clang 15 and up and | ||
| 8 | gcc 14 and up, due to -Wint-conversion now defaulting to being an error in | ||
| 9 | both compilers. The old version of glib 2.36 bundled with pkg-config uses | ||
| 10 | gssize/gssize as the return type of the g_atomic_pointer_* functions, which | ||
| 11 | newer versions of gcc and clang complain (rightly) is not portable (as | ||
| 12 | these are aliased to long and ulong, respectively). | ||
| 13 | |||
| 14 | This was previously addressed in glib upstream commit c762d511 [1] by Alex | ||
| 15 | Richardson on Dec 14, 2022. The attached patch backports Alex's change to | ||
| 16 | glib 2.36 bundled with pkg-config, and also switches to the newer | ||
| 17 | __atomic_* intrinsics from commit 2eb37622 [2] (Philip Withnall). | ||
| 18 | |||
| 19 | This patch has been tested on clang 17 and only clang 17. | ||
| 20 | |||
| 21 | [1] | ||
| 22 | https://gitlab.gnome.org/GNOME/glib/-/commit/c762d511346d3cb84cea3557a246ccf8873b4a1c | ||
| 23 | [2] | ||
| 24 | https://gitlab.gnome.org/GNOME/glib/-/commit/2eb37622418a5c9f31a9d728a99bc621d3157ab0 | ||
| 25 | |||
| 26 | Upstream-Status: Submitted [https://lists.freedesktop.org/archives/pkg-config/2024-May/001122.html] | ||
| 27 | Signed-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 | |||
| 33 | diff --git a/glib/glib/gatomic.c b/glib/glib/gatomic.c | ||
| 34 | index 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) | ||
| 88 | diff --git a/glib/glib/gatomic.h b/glib/glib/gatomic.h | ||
| 89 | index 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 | ||
| 21 | inherit autotools | 22 | inherit 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" | |||
| 32 | SRC_URI = "https://libarchive.org/downloads/libarchive-${PV}.tar.gz" | 32 | SRC_URI = "https://libarchive.org/downloads/libarchive-${PV}.tar.gz" |
| 33 | UPSTREAM_CHECK_URI = "https://www.libarchive.org/" | 33 | UPSTREAM_CHECK_URI = "https://www.libarchive.org/" |
| 34 | 34 | ||
| 35 | SRC_URI[sha256sum] = "bde832a5e3344dc723cfe9cc37f8e54bde04565bfe6f136bc1bd31ab352e9fab" | 35 | SRC_URI[sha256sum] = "5f2d3c2fde8dc44583a61165549dc50ba8a37c5947c90fc02c8e5ce7f1cfb80d" |
| 36 | 36 | ||
| 37 | inherit autotools update-alternatives pkgconfig | 37 | inherit 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 |
| 16 | SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch \ | 16 | SRC_URI:append = " file://0001-src-Kbuild-change-missing-CONFIG_TRACEPOINTS-to-warn.patch \ |
| 17 | " | 17 | " |
| 18 | SRC_URI[sha256sum] = "a87684b8a58f426e9574c4aa7591d6e49d54469872f9641652df2b4a938f9a40" | 18 | SRC_URI[sha256sum] = "a581dd44ea61af869a935e71498d4273be59944d56f906135c6451d6548742a5" |
| 19 | 19 | ||
| 20 | export INSTALL_MOD_DIR = "kernel/lttng-modules" | 20 | export 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 | ||
| 239 | def 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 | |||
| 239 | def check_kernel_compiled_files(compiled_files, cve_info): | 259 | def 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 | ||
| 21 | logger = logging.getLogger('devtool') | 21 | logger = logging.getLogger('devtool') |
| 22 | 22 | ||
| 23 | deploylist_path = '/.devtool' | 23 | deploylist_dirname = '.devtool' |
| 24 | 24 | ||
| 25 | def _prepare_remote_script(deploy, verbose=False, dryrun=False, undeployall=False, nopreserve=False, nocheckspace=False): | 25 | def _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 | ||
| 106 | class RecipeGdbCross(RecipeNative): | 106 | class 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) |
