add support for feeding user configuration
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
This commit is contained in:
parent
a1d3a84645
commit
197150ee2e
4 changed files with 55 additions and 6 deletions
26
README.md
Normal file
26
README.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
# rust2rpm
|
||||
|
||||
Convert Rust crates to RPM.
|
||||
|
||||
## `.rust2rpm.conf`
|
||||
|
||||
You can place configuration file which is used as source for additional
|
||||
information for spec generation.
|
||||
|
||||
Some simple example would be better than many words ;)
|
||||
|
||||
```ini
|
||||
[DEFAULT]
|
||||
buildrequires =
|
||||
pkgconfig(foo) >= 1.2.3
|
||||
lib.requires =
|
||||
pkgconfig(foo) >= 1.2.3
|
||||
|
||||
[fedora]
|
||||
bin.requires =
|
||||
findutils
|
||||
buildrequires =
|
||||
lib.requires =
|
||||
lib+default.requires =
|
||||
pkgconfig(bar) >= 2.0.0
|
||||
```
|
|
@ -1,5 +0,0 @@
|
|||
========
|
||||
rust2rpm
|
||||
========
|
||||
|
||||
Convert Rust crates to RPM.
|
|
@ -199,6 +199,11 @@ def make_diff_metadata(crate, version, patch=False, store=False):
|
|||
shutil.copy2(cratef, os.path.join(os.getcwd(), f"{metadata.name}-{version}.crate"))
|
||||
return crate, diff, metadata
|
||||
|
||||
def to_list(s):
|
||||
if not s:
|
||||
return []
|
||||
return list(filter(None, (l.strip() for l in s.splitlines())))
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser("rust2rpm",
|
||||
formatter_class=argparse.RawTextHelpFormatter)
|
||||
|
@ -232,6 +237,7 @@ def main():
|
|||
store=args.store_crate)
|
||||
|
||||
JINJA_ENV.globals["normalize_deps"] = normalize_deps
|
||||
JINJA_ENV.globals["to_list"] = to_list
|
||||
template = JINJA_ENV.get_template("main.spec")
|
||||
|
||||
if args.patch and len(diff) > 0:
|
||||
|
@ -287,6 +293,13 @@ def main():
|
|||
kwargs["license"] = license
|
||||
kwargs["license_comments"] = comments
|
||||
|
||||
conf = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation())
|
||||
conf.read(".rust2rpm.conf")
|
||||
if args.target not in conf:
|
||||
conf.add_section(args.target)
|
||||
|
||||
kwargs["distconf"] = conf[args.target]
|
||||
|
||||
spec_file = f"rust-{metadata.name}.spec"
|
||||
spec_contents = template.render(md=metadata, patch_file=patch_file, **kwargs)
|
||||
if args.stdout:
|
||||
|
|
|
@ -65,6 +65,9 @@ BuildRequires: {{ req }}
|
|||
{% endfor %}
|
||||
%endif
|
||||
{% endif %}
|
||||
{% for req in to_list(distconf.get("buildrequires"))|sort %}
|
||||
BuildRequires: {{ req }}
|
||||
{% endfor %}
|
||||
|
||||
%global _description \
|
||||
{% if md.description is none %}
|
||||
|
@ -81,6 +84,9 @@ Summary: %{summary}
|
|||
{% if rust_group is defined %}
|
||||
Group: # FIXME
|
||||
{% endif %}
|
||||
{% for req in to_list(distconf.get("bin.requires"))|sort %}
|
||||
Requires: {{ req }}
|
||||
{% endfor %}
|
||||
|
||||
%description -n %{crate}
|
||||
%{summary}.
|
||||
|
@ -106,7 +112,13 @@ Group: # FIXME
|
|||
{% do features.insert(0, None) %}
|
||||
{% do features.insert(1, "default") %}
|
||||
{% for feature in features %}
|
||||
{% set pkg = "-n %%{name}+%s-devel"|format(feature) if feature is not none else " devel" %}
|
||||
{% if feature is none %}
|
||||
{% set pkg = " devel" %}
|
||||
{% set conf_prefix = "lib" %}
|
||||
{% else %}
|
||||
{% set pkg = "-n %%{name}+%s-devel"|format(feature) %}
|
||||
{% set conf_prefix = "lib+%s"|format(feature) %}
|
||||
{% endif %}
|
||||
%package {{ pkg }}
|
||||
Summary: %{summary}
|
||||
{% if rust_group is defined %}
|
||||
|
@ -122,6 +134,9 @@ Requires: cargo
|
|||
Requires: {{ req }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% for req in to_list(distconf.get("%s.requires"|format(conf_prefix)))|sort %}
|
||||
Requires: {{ req }}
|
||||
{% endfor %}
|
||||
|
||||
%description {{ pkg }} %{_description}
|
||||
|
||||
|
|
Loading…
Reference in a new issue