Files
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

81 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: Apache-2.0
# Copyright Pionix GmbH and Contributors to EVerest
#
"""
author: kai-uwe.hermann@pionix.de
Convert Cargo.lock files (that can also be provided as an URL) into a .bb file
"""
import argparse
import os
import requests
import toml
def read_cargo_lock_file(cargo_lock_path):
try:
cargo_lock_file = open(cargo_lock_path, 'r')
except Exception:
return None
with cargo_lock_file:
return toml.load(cargo_lock_file)
def read_cargo_lock_from_url(cargo_lock_url):
try:
req = requests.get(cargo_lock_url, timeout=5)
return toml.loads(req.text)
except Exception:
return None
def print_bb_output(cargo_lock, skip_packages):
if not cargo_lock or 'package' not in cargo_lock:
print('# No packages in Cargo.lock file')
return
print(f'SRC_URI += " \\')
for package in cargo_lock['package']:
if package['name'] in skip_packages:
continue
print(f' crate://crates.io/{package["name"]}/{package["version"]} \\')
print(' "')
def main():
parser = argparse.ArgumentParser(description='converts Cargo.lock files to bitbake recipe output')
parser.add_argument('--input',
dest='in_cargo_lock',
default='Cargo.lock',
help='Path to the Cargo.lock file')
parser.add_argument('--url',
dest='url_cargo_lock',
default=None,
help='URL to the Cargo.lock file')
parser.add_argument('--skip',
dest='in_skip',
default='',
type=str,
help='List of packages to skip, using \',\' as delimiter.')
args = parser.parse_args()
in_cargo_lock = os.path.realpath(os.path.expanduser(args.in_cargo_lock))
in_cargo_lock_url = args.url_cargo_lock
in_skip_packages = [entry for entry in args.in_skip.split(',')]
if in_cargo_lock_url:
cargo_lock = read_cargo_lock_from_url(in_cargo_lock_url)
else:
cargo_lock = read_cargo_lock_file(in_cargo_lock)
print_bb_output(cargo_lock, in_skip_packages)
if __name__ == '__main__':
main()