mirror of
https://git.yoctoproject.org/poky
synced 2026-09-13 18:49:33 +02:00
Do not fail if only some Cargo.lock files are empty. Only fail, if there
are absolutely no dependencies found in any Cargo.lock.
This fixes the following error message, which would occur with "bitbake
-c update_crates python3-orjson":
ERROR: python3-orjson-3.10.17-r0 do_update_crates: Execution of '.../python3-orjson/3.10.17/temp/run.do_update_crates.70693' failed with exit code 1
ERROR: Logfile of failure stored in: .../python3-orjson/3.10.17/temp/log.do_update_crates.70693
Log data follows:
| DEBUG: Executing python function extend_recipe_sysroot
| NOTE: Direct dependencies are ['.../sources/oe-core/../oe-core/meta/recipes-devtools/quilt/quilt-native_0.69.bb:do_populate_sysroot', 'virtual:native:.../sources/oe-core/../oe-core/meta/recipes-devtools/patch/patch_2.8.bb:do_populate_sysroot', 'virtual:native:.../sources/oe-core/../oe-core/meta/recipes-devtools/python/python3_3.13.9.bb:do_populate_sysroot']
| NOTE: Installed into sysroot: []
| NOTE: Skipping as already exists in sysroot: ['gettext-minimal-native', 'cmake-native', 'libtool-native', 'quilt-native', 'texinfo-dummy-native', 'openssl-native', 'expat-native', 'ncurses-native', 'util-linux-libuuid-native', 'zlib-native', 'libedit-native', 'make-native', 'patch-native', 'perl-native', 'python3-native', 'bzip2-native', 'xz-native', 'zstd-native', 'attr-native', 'gdbm-native', 'libffi-native', 'sqlite3-native']
| DEBUG: Python function extend_recipe_sysroot finished
| DEBUG: Executing shell function do_update_crates
| Traceback (most recent call last):
| File "<stdin>", line 41, in <module>
| File "<stdin>", line 12, in get_crates
| ValueError: Unable to find any candidate crates that use crates.io
|
| The above exception was the direct cause of the following exception:
|
| Traceback (most recent call last):
| File "<stdin>", line 43, in <module>
| ValueError: Cannot parse '.../python3-orjson/3.10.17/sources/orjson-3.10.17/include/cargo/simdutf8-0.1.5/Cargo.lock'
| WARNING: exit code 1 from a shell command.
ERROR: Task (.../sources/oe-core/../meta-openembedded/meta-python/recipes-devtools/python/python3-orjson_3.10.17.bb:do_update_crates) failed with exit code '1'
(From OE-Core rev: 59f1965358f59457857c920ed836998509450d9a)
Signed-off-by: Martin Schwan <m.schwan@phytec.de>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Ross Burton <ross.burton@arm.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 1ef39b3fa731fb121d338aea2b1ac004620063e0)
Signed-off-by: Yoann Congal <yoann.congal@smile.fr>
Signed-off-by: Paul Barker <paul@pbarker.dev>
78 lines
2.5 KiB
Plaintext
78 lines
2.5 KiB
Plaintext
#
|
|
# Copyright OpenEmbedded Contributors
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
|
|
##
|
|
## Purpose:
|
|
## This class is used to update the list of crates in SRC_URI
|
|
## by reading Cargo.lock in the source tree.
|
|
##
|
|
## See meta/recipes-devtools/python/python3-bcrypt_*.bb for an example
|
|
##
|
|
## To perform the update: bitbake -c update_crates recipe-name
|
|
|
|
addtask do_update_crates after do_patch
|
|
do_update_crates[depends] = "python3-native:do_populate_sysroot"
|
|
do_update_crates[nostamp] = "1"
|
|
do_update_crates[doc] = "Update the recipe by reading Cargo.lock and write in ${THISDIR}/${BPN}-crates.inc"
|
|
|
|
# The directory where to search for Cargo.lock files
|
|
CARGO_LOCK_SRC_DIR ??= "${S}"
|
|
|
|
do_update_crates() {
|
|
TARGET_FILE="${THISDIR}/${BPN}-crates.inc"
|
|
|
|
nativepython3 - <<EOF
|
|
|
|
def get_crates(f):
|
|
import tomllib
|
|
c_list = '# from %s' % os.path.relpath(f, '${CARGO_LOCK_SRC_DIR}')
|
|
c_list += '\nSRC_URI += " \\\'
|
|
crates = tomllib.load(open(f, 'rb'))
|
|
|
|
# Build a list with crates info that have crates.io in the source
|
|
crates_candidates = list(filter(lambda c: 'crates.io' in c.get('source', ''), crates['package']))
|
|
|
|
if not crates_candidates:
|
|
print("WARNING: Unable to find any candidate crates that use crates.io")
|
|
return None
|
|
|
|
# Update crates uri and their checksum, to avoid name clashing on the checksum
|
|
# we need to rename crates with name and version to have a unique key
|
|
cksum_list = ''
|
|
for c in crates_candidates:
|
|
rename = "%s-%s" % (c['name'], c['version'])
|
|
c_list += '\n crate://crates.io/%s/%s \\\' % (c['name'], c['version'])
|
|
if 'checksum' in c:
|
|
cksum_list += '\nSRC_URI[%s.sha256sum] = "%s"' % (rename, c['checksum'])
|
|
|
|
c_list += '\n"\n'
|
|
c_list += cksum_list
|
|
c_list += '\n'
|
|
return c_list
|
|
|
|
import os
|
|
crates = "# Autogenerated with 'bitbake -c update_crates ${PN}'\n\n"
|
|
found = False
|
|
for root, dirs, files in os.walk('${CARGO_LOCK_SRC_DIR}'):
|
|
# ignore git and patches directories
|
|
if root.startswith(os.path.join('${CARGO_LOCK_SRC_DIR}', '.pc')):
|
|
continue
|
|
if root.startswith(os.path.join('${CARGO_LOCK_SRC_DIR}', '.git')):
|
|
continue
|
|
for file in files:
|
|
if file == 'Cargo.lock':
|
|
cargo_lock_path = os.path.join(root, file)
|
|
c = get_crates(cargo_lock_path)
|
|
if c is not None:
|
|
crates += c
|
|
if crates is None:
|
|
raise ValueError("Unable to find any Cargo.lock in ${CARGO_LOCK_SRC_DIR}")
|
|
open("${TARGET_FILE}", 'w').write(crates)
|
|
EOF
|
|
|
|
bbnote "Successfully update crates inside '${TARGET_FILE}'"
|
|
}
|