diff --git a/autospec/buildreq.py b/autospec/buildreq.py index 99273a5..06f882f 100644 --- a/autospec/buildreq.py +++ b/autospec/buildreq.py @@ -224,6 +224,7 @@ def parse_cargo_toml(filename): """ global cargo_bin buildpattern.set_build_pattern("cargo", 1) + add_buildreq("cargo") add_buildreq("rustc") with open(filename, "r", encoding="latin-1") as ctoml: cargo = toml.loads(ctoml.read()) @@ -231,8 +232,9 @@ def parse_cargo_toml(filename): cargo_bin = True if not cargo.get("dependencies"): return - for bdep in cargo["dependencies"]: - add_buildreq(bdep) + for cdep in cargo["dependencies"]: + if add_buildreq(cdep): + add_requires(cdep) def set_build_req(): @@ -556,7 +558,7 @@ def scan_for_configure(dirn): buildpattern.set_build_pattern("meson", default_score) for name in files: - if name.lower() == "cargo.toml": + if name.lower() == "cargo.toml" and dirpath == dirn: parse_cargo_toml(os.path.join(dirpath, name)) if name.lower().startswith("configure."): parse_configure_ac(os.path.join(dirpath, name)) diff --git a/autospec/failed_commands b/autospec/failed_commands index bc06c46..d62d4cd 100644 --- a/autospec/failed_commands +++ b/autospec/failed_commands @@ -506,3 +506,4 @@ g-ir-scanner, gobject-introspection get_mempolicy, numactl-dev pcap_dump, libpcap-dev ldap.h, openldap-dev +cargo, cargo diff --git a/autospec/specfiles.py b/autospec/specfiles.py index e17b26c..3ff7e53 100644 --- a/autospec/specfiles.py +++ b/autospec/specfiles.py @@ -1043,7 +1043,7 @@ class Specfile(object): def write_cargo_pattern(self): """Write cargo build pattern to spec file""" self.write_prep() - src_dir = "/usr/share/rust/src/{0}-{1}".format(self.name, self.version) + src_dir = "/usr/share/rust/src/{0}".format(self.name) self._write_strip("%build") self.write_proxy_exports() self._write_strip("mkdir .cargo") diff --git a/autospec/tarball.py b/autospec/tarball.py index 842cf5e..70936ca 100644 --- a/autospec/tarball.py +++ b/autospec/tarball.py @@ -274,6 +274,10 @@ def detect_build_from_url(url): if ".maven." in url: buildpattern.set_build_pattern("maven", 10) + # rust crate + if "crates.io" in url: + buildpattern.set_build_pattern("cargo", 10) + def name_and_version(name_arg, version_arg, filemanager): """ @@ -399,6 +403,13 @@ def name_and_version(name_arg, version_arg, filemanager): name = m.group(1).strip() version = convert_version(m.group(2)) + # rust crate + if "crates.io" in url: + m = re.search(r"/crates.io/api/v[0-9]+/crates/(.*)/(.*)/download.*\.crate", url) + if m: + name = m.group(1).strip() + version = convert_version(m.group(2)) + # override name and version from commandline name = name_arg if name_arg else name version = version_arg if version_arg else version diff --git a/tests/test_buildreq.py b/tests/test_buildreq.py index b9719ef..3d479de 100644 --- a/tests/test_buildreq.py +++ b/tests/test_buildreq.py @@ -177,7 +177,7 @@ class TestBuildreq(unittest.TestCase): buildreq.toml.loads = loads_backup self.assertEqual(buildreq.buildreqs, - set(['rustc', 'dep1', 'dep2', 'dep3'])) + set(['cargo', 'rustc', 'dep1', 'dep2', 'dep3'])) self.assertTrue(buildreq.cargo_bin) self.assertEqual(buildreq.buildpattern.default_pattern, 'cargo')