From: Yash Shinde Date: Mon, 31 Mar 2025 05:54:20 +0000 (-0700) Subject: rust: Update "do_update_snapshot" task for rust-snapshot.inc X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d64456f6ea58d683993b0bc7294baa889bafdf7b;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git rust: Update "do_update_snapshot" task for rust-snapshot.inc The 'do_update_snapshot' task is failed with below error: Exception: FileNotFoundError: [Errno 2] No such file or directory: '.../rustc-1.83.0-src/src/stage0.json' There are changes in use of key-value format in stage0 file in rust sources and the rust recipe should be apdated for that. Changes in rust: https://github.com/rust-lang/rust/commit/1adfffd07f8704ca722f3897719ace079944b0c5 Signed-off-by: Yash Shinde Signed-off-by: Richard Purdie --- diff --git a/meta/recipes-devtools/rust/rust_1.84.1.bb b/meta/recipes-devtools/rust/rust_1.84.1.bb index ee8c782ce3..5a181b059c 100644 --- a/meta/recipes-devtools/rust/rust_1.84.1.bb +++ b/meta/recipes-devtools/rust/rust_1.84.1.bb @@ -327,24 +327,37 @@ python do_update_snapshot() { from collections import defaultdict - with open(os.path.join(d.getVar("S"), "src", "stage0.json")) as f: - j = json.load(f) - - config_dist_server = j['config']['dist_server'] - compiler_date = j['compiler']['date'] - compiler_version = j['compiler']['version'] + key_value_pairs = {} + with open(os.path.join(d.getVar("S"), "src", "stage0")) as f: + for line in f: + # Skip empty lines or comments + if not line.strip() or line.startswith("#"): + continue + # Split the line into key and value using '=' as separator + match = re.match(r'(\S+)\s*=\s*(\S+)', line.strip()) + if match: + key = match.group(1) + value = match.group(2) + key_value_pairs[key] = value + # Extract the required values from key_value_pairs + config_dist_server = key_value_pairs.get('dist_server', '') + compiler_date = key_value_pairs.get('compiler_date', '') + compiler_version = key_value_pairs.get('compiler_version', '') src_uri = defaultdict(list) - for k, v in j['checksums_sha256'].items(): - m = re.search(f"dist/{compiler_date}/(?P.*)-{compiler_version}-(?P.*)-unknown-linux-gnu\\.tar\\.xz", k) - if m: - component = m.group('component') - arch = m.group('arch') - src_uri[arch].append(f"SRC_URI[{component}-snapshot-{arch}.sha256sum] = \"{v}\"") - + # Assuming checksums_sha256 is now a key-value pair like: checksum_key = checksum_value + for k, v in key_value_pairs.items(): + # Match the pattern for checksums + if "dist" in k and "tar.xz" in k: + m = re.search(f"dist/{compiler_date}/(?P.*)-{compiler_version}-(?P.*)-unknown-linux-gnu\\.tar\\.xz", k) + if m: + component = m.group('component') + arch = m.group('arch') + src_uri[arch].append(f"SRC_URI[{component}-snapshot-{arch}.sha256sum] = \"{v}\"") + # Create the snapshot string with the extracted values snapshot = """\ ## This is information on the rust-snapshot (binary) used to build our current release. -## snapshot info is taken from rust/src/stage0.json +## snapshot info is taken from rust/src/stage0 ## Rust is self-hosting and bootstraps itself with a pre-built previous version of itself. ## The exact (previous) version that has been used is specified in the source tarball. ## The version is replicated here. @@ -352,10 +365,10 @@ python do_update_snapshot() { SNAPSHOT_VERSION = "%s" """ % compiler_version - + # Add the checksum components to the snapshot for arch, components in src_uri.items(): snapshot += "\n".join(components) + "\n\n" - + # Add the additional snapshot URIs snapshot += """\ SRC_URI += " \\ ${RUST_DIST_SERVER}/dist/${RUST_STD_SNAPSHOT}.tar.xz;name=rust-std-snapshot-${RUST_BUILD_ARCH};subdir=rust-snapshot-components \\ @@ -369,7 +382,7 @@ RUST_STD_SNAPSHOT = "rust-std-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-lin RUSTC_SNAPSHOT = "rustc-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu" CARGO_SNAPSHOT = "cargo-${SNAPSHOT_VERSION}-${RUST_BUILD_ARCH}-unknown-linux-gnu" """ % config_dist_server - + # Write the updated snapshot information to the rust-snapshot.inc file with open(os.path.join(d.getVar("THISDIR"), "rust-snapshot.inc"), "w") as f: f.write(snapshot) }