cargo2ebuild.py: Generate ebuilds for all crates in a workspace
BUG=none
TEST=verify that scripts generates build for all crates in a
workspace (for example, parking_lot).
Change-Id: I680e9e25fb6b62ea57d2fbda6a70e71d03fff92c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/dev-util/+/3322714
Reviewed-by: Allen Webb <allenwebb@google.com>
Commit-Queue: Kristian Kristensen <hoegsberg@chromium.org>
Tested-by: Kristian Kristensen <hoegsberg@chromium.org>
diff --git a/contrib/cargo2ebuild.py b/contrib/cargo2ebuild.py
index 1964bdd..69245e5 100755
--- a/contrib/cargo2ebuild.py
+++ b/contrib/cargo2ebuild.py
@@ -316,7 +316,7 @@
# The crate that will be initially checked when flattening the depgraph into a list of required and optional
# crates.
- self.root = None
+ self.roots = []
def add_package(self, package):
"""Add a crate to the dependency graph from a parsed metadata.json generated by cargo.
@@ -425,9 +425,9 @@
logging.debug("Found ebuild: '%s'.", efile_path[len(target_dir):])
available[version] = features
- def set_root(self, package):
- """Set the root of the dependency graph used when flattening the graph into a list of dependencies."""
- self.root = package
+ def add_root(self, package):
+ """Add a root of the dependency graph used when flattening the graph into a list of dependencies."""
+ self.roots.append(package)
def resolve_version_range(self, name, version_range):
"""Find a dependency graph entry that fits the constraints.
@@ -561,7 +561,7 @@
# (name, version) -> set(features)
required = defaultdict(set)
optional = defaultdict(set)
- remaining = [(self.root, {'default'})]
+ remaining = [(root, {'default'}) for root in self.roots]
while remaining:
to_check, features = remaining.pop(0)
name = to_check['name']
@@ -908,7 +908,7 @@
# Add the user submitted package to the set of required packages.
if package.get('source', None) is None:
- dep_graph.set_root(package)
+ dep_graph.add_root(package)
filter_target, crate_dependencies = dep_graph.add_package(package)
download_package(package, staging_dir)