gst-plugins-rs/dependencies.py
Thibault Saunier f19af9f760 meson: Use workspace Cargo.toml to find crates path
We were globing recursively during meson run and it was spending 20secs
here in total only to run the dependencies.py script
2022-09-19 20:11:40 +00:00

64 lines
1.7 KiB
Python
Executable file

#!/usr/bin/env python3
# Parse Cargo.toml files for each plugin to collect their external dependencies.
# Meson will lookup those dependencies using pkg-config to be able to link
# static Rust plugins into gst-full.
from argparse import ArgumentParser
from pathlib import Path
import sys
try:
# Python11 stdlib
import tomllib
except ImportError:
import tomli as tomllib
PARSER = ArgumentParser()
PARSER.add_argument('src_dir', type=Path)
PARSER.add_argument('plugins', nargs='*')
# Map plugin name to directory name, for those that does not match.
RENAMES = {
'rsaudiofx': 'audiofx',
'rsfile': 'file',
'rsflv': 'flavors',
'rstextwrap': 'wrap',
'rsjson': 'json',
'rsregex': 'regex',
'rswebp': 'webp',
'textahead': 'ahead',
'rsonvif': 'onvif',
'rstracers': 'tracers',
'rsclosedcaption': 'closedcaption',
'rsdav1d': 'dav1d',
'webrtchttp': 'webrtc-http',
}
if __name__ == "__main__":
opts = PARSER.parse_args()
with (opts.src_dir / 'Cargo.toml').open('rb') as f:
crates = tomllib.load(f)['workspace']['members']
deps = set()
for p in opts.plugins:
assert p.startswith('gst')
name = p[3:]
name = RENAMES.get(name, name)
crate_path = None
for crate in crates:
if Path(crate).name == name:
crate_path = opts.src_dir / crate / 'Cargo.toml'
assert crate_path
with crate_path.open('rb') as f:
data = tomllib.load(f)
try:
requires = data['package']['metadata']['capi']['pkg_config']['requires_private']
except KeyError:
continue
deps.update([i.strip() for i in requires.split(',')])
print(','.join(deps))