cargo2android.py: Support cargo_pkg_version flag.

This parses a module's Cargo.toml file for package version number,
setting it to cargo_pkg_version. Also sets cargo_env_compat true by
default.

Bug: 171011485
Test: generated Android.bp includes cargo_env_compat, cargo_pkg_version.
Change-Id: Ibb8021633719650e2021b90806374a5d3c6a161a
This commit is contained in:
Ivan Lozano
2021-08-11 16:49:46 -04:00
parent 39f573eb00
commit cc660f1d75

View File

@@ -227,6 +227,8 @@ class Crate(object):
self.emit_list = '' # e.g., --emit=dep-info,metadata,link
self.edition = '2015' # rustc default, e.g., --edition=2018
self.target = '' # follows --target
self.cargo_env_compat = True
self.cargo_pkg_version = '' # value extracted from Cargo.toml version field
def write(self, s):
# convenient way to output one line at a time with EOL.
@@ -429,6 +431,20 @@ class Crate(object):
# Write to Android.bp in the subdirectory with Cargo.toml.
self.outf_name = self.cargo_dir + '/Android.bp'
self.main_src = self.main_src[len(self.cargo_dir) + 1:]
# get the package version from running cargo metadata
cargo_metadata = subprocess.run(["cargo", "metadata", "--no-deps"],
cwd=os.path.abspath(self.cargo_dir), capture_output=True)
if cargo_metadata.returncode:
self.errors += ("ERROR: unable to get cargo metadata for package version; return code " +
cargo_metadata.returncode + "\n")
else:
metadata_json = json.loads(cargo_metadata.stdout)
if len(metadata_json["packages"]) > 1:
self.errors += "ERROR: multiple packages defined, will not output package version"
else:
self.cargo_pkg_version = metadata_json["packages"][0]["version"]
else:
self.errors += 'ERROR: unknown ' + arg + '\n'
i += 1
@@ -817,6 +833,9 @@ class Crate(object):
self.write(' host_supported: true,')
if not self.defaults:
self.write(' crate_name: "' + self.crate_name + '",')
if not self.defaults and self.cargo_env_compat:
self.write(' cargo_env_compat: true,')
self.write(' cargo_pkg_version: "' + self.cargo_pkg_version + '",')
if not self.default_srcs:
self.dump_srcs_list()
if 'test' in self.crate_types and not self.defaults: