rpmspec-rs

Crate for RPM spec generation in Rust
Usage
This crate provides a simple builder interface for RPM spec files generation.
Here's an example of building a spec file from scratch (some fields are ommited):
```rust
use rpmspec::RpmSpec;
fn main() -> Result<(), std::boxed::Box> {
let spec = RpmSpec::builder()
.name("rpmspec")
.license("MIT")
.summary("short summary")
.description("very long summary...")
.buildscript(BUILD)
.installscript(INSTALL)
.prepscript(r#"cat /etc/os-release"#)
.checkscript("uptime")
.url("https://github.com/wojciechkepka/rpmspec")
.version("0.1.0")
.release("1")
.epoch("42")
.vendor("Wojciech Kępka")
.packager("Wojciech Kępka wojciech@wkepka.dev")
.copyright("2021 test")
.buildarch("noarch")
.excludearch("x8664")
.group("group")
.icon("rpm.xpm")
.buildroot("/root/bld")
.addpatchesentries(vec!["patch.1", "patch.2"])
.addsourcesentries(vec!["source.tar.gz", "source-2.tar.xz"])
.addfilesentries(vec!["/bin/test.bin", "/docs/README"])
.adddocfilesentries(vec!["README"])
.addlicensefilesentries(vec!["LICENSE"])
.addprovidesentries(vec!["rpmspec"])
.addrequiresentries(vec!["rust"])
.addbuildrequiresentries(vec!["rust", "cargo"])
.addobsoletesentries(vec!["rpmspec-old"])
.addconflictsentries(vec!["rpmspec2"])
.confignoreplace("%{sysconfdir}/%{name}/%{name}.conf")
.prescript("echo")
.postscript("false")
.preunscript("echo 123")
.postunscript("true")
.addmacro("githash", None::<&str>, "0ab32f")
.add_macro("python", Some("-c"), "import os")
.build();
// you can later render it to a string like so:
let _rendered = spec.render()?;
// or save it directly to a file
spec.save_to("/tmp/RPMSPEC")?;
Ok(())
}
```
License
MIT