81 lines
3.4 KiB
Markdown
81 lines
3.4 KiB
Markdown
# rust2rpm
|
|
|
|
rust2rpm is a tool for automatically generating RPM spec files for Rust crates.
|
|
|
|
## `rust2rpm.conf`
|
|
|
|
If it is present, a `rust2rpm.conf` configuration file is read
|
|
by rust2rpm to override some aspects of the automatic spec file generation.
|
|
|
|
This file can be committed to dist-git to ensure that these settings
|
|
will be applied for future updates of a crate package, as well.
|
|
|
|
The file follows a slightly modified `ini` syntax. It supports sections for
|
|
default settings (`[DEFAULT]`) and target-specific settings (i.e. `[fedora]`).
|
|
|
|
These configuration options are available right now:
|
|
|
|
- `summary`: override the generated summary for the RPM package for cases where
|
|
generating a summary from the crate's description fails
|
|
- `supported-arches`: conditionally build and run tests only on specific
|
|
architectures (mostly useful for libraries with limited cross-platform
|
|
support - applications need to use `ExcludeArch` or `ExclusiveArch` instead)
|
|
- `all-features`: enable all cargo features when generating `BuildRequires`,
|
|
building the crate, and running cargo tests (defaults to `false`; setting this
|
|
value to `true` is equivalent to supplying the `--all-features` CLI flag)
|
|
- `unwanted-features`: features or optional dependencies for which no
|
|
`+feature` subpackage should be generated (for example, dependencies on Rust
|
|
compiler internals for crates that are also bundled with Rust itself)
|
|
- `enabled-features`: features or optional dependencies which should be enabled
|
|
when generating `BuildRequires` and building the crate
|
|
- `buildrequires`: additional build dependencies that must be installed for the
|
|
package to build correctly (i.e., `pkgconfig(foo)` for the `foo-sys` crate)
|
|
- `testrequires`: additional build dependencies that must be installed for the
|
|
package's tests to build and / or run correctly (treated like `buildrequires`,
|
|
but wrapped in an `%if %{with check}` conditional in the generated spec)
|
|
- `lib.requires`: additional build dependencies that must be installed for the
|
|
crate to build correctly as a dependency of another crate (usually, this
|
|
contains the same values as the `buildrequires` option)
|
|
- `lib+foo.requires`: additional build dependencies that must be installed for
|
|
the crate to build correctly as a dependency of another crate if it has
|
|
enabled the optional `foo` feature
|
|
- `bin.requires`: additional runtime dependencies of the binary application that
|
|
is built from this crate
|
|
|
|
```ini
|
|
[DEFAULT]
|
|
unwanted-features =
|
|
compiler_builtins
|
|
rustc-dep-of-std
|
|
enabled-features =
|
|
important
|
|
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
|
|
```
|
|
|
|
Note that features and optional dependencies that are marked as
|
|
`unwanted-features` must not be dependencies of other Cargo features that are
|
|
not marked "unwanted" as well. Failing to consider transitive dependencies will
|
|
lead to broken dependencies of generated `rust-foo+bar-devel` packages and / or
|
|
errors when generating spec files with rust2rpm.
|
|
|
|
Specifying a non-empty list of `enabled-features` and setting `all-features` to
|
|
`true` at the same time is not allowed.
|
|
|
|
## Testing
|
|
|
|
Invoking `tox` will automatically run the test suite on all python versions
|
|
that should be supported.
|
|
|
|
Use `python -m pytest -v` or `PYTHONPATH=. pytest -v` in the source tree
|
|
(possibly within a virtualenv) to run the tests manually.
|