Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dependencies.py')
-rwxr-xr-xdependencies.py92
1 files changed, 70 insertions, 22 deletions
diff --git a/dependencies.py b/dependencies.py
index eff6729bf..9955a5df6 100755
--- a/dependencies.py
+++ b/dependencies.py
@@ -19,6 +19,8 @@ except ImportError:
PARSER = ArgumentParser()
PARSER.add_argument('src_dir', type=Path)
PARSER.add_argument('plugins', nargs='*')
+PARSER.add_argument('--features', action="store_true", help="Get list of features to activate")
+PARSER.add_argument('--gst-version', help="Get list of features to activate")
# Map plugin name to directory name, for those that does not match.
@@ -38,27 +40,73 @@ RENAMES = {
'textwrap': 'wrap',
}
+class CargoAnalyzer:
+ def __init__(self):
+ self.src_dir = None
+ self.plugins = None
+ self.features = False
+ self.gst_version = "1.18"
-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:
+ def extract_version(self, feature_name):
+ if feature_name.startswith('v'):
+ verindex = 1
+ elif feature_name.startswith('gst'):
+ verindex = 3
+ else:
+ return None
+
+ (majver, minver) = feature_name[verindex:].split("_")
+ return (int(majver), int(minver))
+
+ def extract_features(self, cargo_data):
+ features = cargo_data['features']
+ wanted_features = set()
+ gst_version_major = int(self.gst_version.split('.')[0])
+ gst_version_minor = int(self.gst_version.split('.')[1])
+ for (name, value) in features.items():
+ version = self.extract_version(name)
+
+ if version is None:
+ continue
+ (majver, minver) = version
+
+ if gst_version_major < majver or gst_version_minor < minver:
continue
- deps.update([i.strip().replace('>', "|>").replace('<', "|<").replace("==", "|==") for i in requires.split(',')])
- print(','.join(deps))
+ wanted_features |= set(value)
+ if name.startswith("gst"):
+ # Required for some reason for rswebrtc which has a specific feature
+ wanted_features |= {f"{cargo_data['package']['name']}/{name}"}
+
+ return wanted_features
+
+ def run(self):
+ with (opts.src_dir / 'Cargo.toml').open('rb') as f:
+ crates = tomllib.load(f)['workspace']['members']
+ res = set()
+ for name in opts.plugins:
+ if name.startswith('gst'):
+ name = name[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)
+ if opts.features:
+ res |= self.extract_features(data)
+ else:
+ try:
+ requires = data['package']['metadata']['capi']['pkg_config']['requires_private']
+ except KeyError:
+ continue
+ res.update([i.strip().replace('>', "|>").replace('<', "|<").replace("==", "|==") for i in requires.split(',')])
+ return res
+
+if __name__ == "__main__":
+ analyzer = CargoAnalyzer()
+ opts = PARSER.parse_args(namespace=analyzer)
+
+ print(','.join(analyzer.run()))