Commit graph

464 commits

Author SHA1 Message Date
a57d4b2c95 Automatically strip foreign dependencies
The basic workflow is that very similarly to how we would open an editor to do
manual patching of Cargo.toml, we automatically rewrite the file first. In this
automatic rewrite, for any sections like [target.cfg(…)], we evaluate the
conditional and drop the whole section if the conditional is known to be false.

When the conditional cannot be evaluated because it uses some form that we don't
understand, it is left untouched. But it seems that the conditionals used in
practice don't have too much variety. If parser and evaluator certainly don't
cover all the corner cases, but it might not matter in practice. We can always
fix them later if unsupported cases are found.

Removed dependencies are filter out from [feature] lists:

For example for tokio:
[features]
-net = ["libc", "mio/os-poll", "mio/os-ext", "mio/net", "socket2", "winapi/namedpipeapi"]
+net = ["libc", "mio/os-poll", "mio/os-ext", "mio/net", "socket2"]

If -p was used, after the automatic filtering, the editor is opened for the user
to do further manual patching.

Automatic and manual changes land in separate patches.

Fixes #2.
2022-07-12 10:48:16 +02:00
d326bb0180 Add cfg.parse_and_evaluate() 2022-07-12 10:48:16 +02:00
61e7b5fc7a Add parser and evaluator for rust cfg expressions 2022-07-12 10:48:16 +02:00
Zbigniew Jędrzejewski-Szmek
80602add3d Merge #200 Add tests that actually test spec file generation 2022-07-12 08:46:57 +00:00
3fdc1b24cb Make sure the generated spec file has the trailing newline 2022-07-08 16:51:02 +02:00
cdfed25089 tests: fix date in output
Otherwise we'd get bogus changes on every recreation.
2022-07-08 16:51:02 +02:00
d9c3212961 tests: add a test that does generation for all targets from sample crates 2022-07-08 16:51:02 +02:00
942b435cb3 Refactor code to separate config gathering from spec file generation
This is a prerequisite for testing the rendering logic without invoking
the whole program. But I think it also makes it much easier to see what
is going on.

I used slightly non-standard formatting with extra whitespace because
the invocation was hard to rid otherwise.
2022-07-08 16:38:10 +02:00
a09caca7e3 templates: rename "md" to "metadata"
We also use "md" as short for "markdown", and this abbrevation can be
confusing. It's also weird to use 'md' as the parameter name in an
exported entry point.
2022-07-08 15:55:28 +02:00
274fa18712 Split out parser generation into a separate function 2022-07-08 15:54:35 +02:00
5bf0041067 Do not print comment about license if no conversion was done 2022-07-08 15:54:35 +02:00
345e8accbc
rust2rpm: fix logic in existence check (use correct URL for .spec) 2022-07-08 15:03:35 +02:00
0544354e00
rust2rpm: tweak existence check warning (tweak for compat packages) 2022-07-08 15:00:07 +02:00
aa2bacbad6 Simplify handling of package suffix
Instead of constructing the package name from "rust-" prefix,
the name, and the suffix, let's just do it once.
2022-07-08 09:32:17 +02:00
598c5e3972 Guess crate name based on %crate or directory name
This makes is much nicer to work with dist-git: the same command
without modifications can be used for different crates.
2022-07-08 09:32:17 +02:00
628fb7c494 Skip pre-release versions when looking for the lastest
Fixes #57.
2022-07-06 12:49:39 +02:00
4436a110cf Use separate lines for each file in %doc/%license
Fixes #187.
2022-07-06 12:49:39 +02:00
c18514544e Move old test file under src/tests/ 2022-07-05 17:01:36 +02:00
03584a81e4 Stop translating license for Fedora and EPEL
The infrastracture to translate the license remains in place.
We can remove it later, when all users are gone. I'm keeping
the behaviour for Mageia unchanged for now. I assume that they'll
want to follow the change in Fedora later too.

We still want to do syntax cleanup with translate_slashes().

Fixes #193.
2022-07-04 09:45:25 +02:00
92edcce644 Refactor the patching code to pass args lower in the call stack
The code is complicated by passing behaviour options through multiple
levels. This is already hard to read because the names are different
at different levels. Let's just pass args, so that it's easy to add
new options in the future.
2022-07-04 09:45:25 +02:00
91230d4eba Invert negative arguments in --help parsing
"Negative logic" is harder to follow. We may define only a
negative option for users, but we should still convert it to a normal
boolean internally.
2022-07-04 09:45:25 +02:00
91907b066f Use just a single field for handling of --build-requires
Having two fields in the args structure is super ugly. Let's just
use one field, and assign True or False to it.

No change in function.
2022-07-04 09:45:25 +02:00
1d225f99b1 Make --no-rpmautospec actually work
It seems I screwed up the implementation one hundred percent.
2022-07-04 09:45:25 +02:00
166214f834 docs: start adding docstrings to functions
I don't have enough energy to do this for all functions, but I'll try
to add some docs as I look at the code. The project is growing and it's
harder to remember what all the parts do.
2022-07-04 09:45:25 +02:00
30fa63961e
spec template: Remove unnecessary patch numbering
Signed-off-by: Maxwell G <gotmax@e.email>
2022-07-03 18:26:41 -05:00
98638813aa
macros.cargo: vacuum up Cargo.toml.orig in addition to Cargo.lock
This fixes builds with cargo from Rust 1.62+, which now complains
and fails our builds if the Cargo.toml.orig file already exists.
2022-07-01 19:29:56 +02:00
4b93531d5f
Allow setting the "all-features" setting in rust2rpm.conf
This new setting works the same way as the `--all-features` CLI flag
when set to `true`. This makes it possible to set it to `true` permanently,
without having to remember to use the CLI flag when running rust2rpm.
2022-06-06 21:37:00 +02:00
63acdf63c4 Accept and move to rust2rpm.conf as standard config file location
Using .rust2rpm.conf is confusing to new users, because they never see
these files in existing packages and are only seeing magic happen.

This commit changes the default location of the configuration file to
./rust2rpm.conf, and will rename existing .rust2rpm.conf or _rust2rpm.conf
files to the new name if they already exist.

I have also added a little more documentation about the config file itself
to the README.
2022-06-06 07:33:54 +00:00
Anders Blomdell
f54be37deb Base rpmautospec on choosen target instead of default_target 2022-06-03 16:42:13 +02:00
7d8c9a8028 Print information about written files
We already output some messages, but not the most important part: what
files were written.
2022-02-28 15:06:51 +01:00
b9e95b4d61 Fix autodetection of rpmautospec
When store_true or store_false are used, the default default changes
from None to a boolean. I didn't know about this, and I wrote the code
to assume args.rpmautospec would be None. rpmautospec detection was
effectively always disabled.
2022-02-28 15:06:51 +01:00
1b14d44d57 Allow easy overriding of the opt-level/debuginfo/codegen-units flags
Some crates use debuginfo=0 or debuginfo=1 to reduce memory pressure during
builds. This should make this easy.

Fixes https://pagure.io/fedora-rust/rust2rpm/issue/181
2022-02-22 12:05:49 +01:00
0aa82d22b0 Add comment about unused macro 2022-02-22 11:28:52 +01:00
cc8cabd57b Version 21 2022-02-20 15:51:04 +01:00
7117dcce81 Use underscore instead of a dash in compat suffixes
The Fedora Packaging Guidelines are clear on this:

> If the base package name ends with a digit, a single underscore (_)
> MUST be appended to the name, and the version MUST be appended to
> that, in order to avoid confusion over where the name ends and the
> version begins.
>
> If the base package name does not end with a digit, the version MUST
> be directly appended to the package name with no intervening
> separator.

Fixes #180.
2022-02-20 15:40:48 +01:00
Zbigniew Jędrzejewski-Szmek
3781ce3b33 Merge #179 Include linker flags for package note in %build_rustflags 2022-02-20 14:17:32 +00:00
e1f911661f Include linker flags for package note in %build_rustflags
%build_rustflags was used in %cargo_prep, which is executed in %prep,
when %buildsubdir is not set yet. To avoid this, insertion of flags is
moved to an environment variable that is set for %cargo_build and
%cargo_test.

The linker flag gets passed to rustc, and resulting binaries seem to have
note as expected.
2022-02-15 17:25:09 +01:00
fea18a3f0d Mark installed doc files as %doc
I'm keeping this separate becuase it's logically a seperate change.
In the -devel package, we installed the files once. I think it's nice
to mark them as %doc, so that it shows up correctly when filtered
by rpm attributes.

After a mock build with the changes here:

$ rpm -Vv -p /var/lib/mock/fedora-rawhide-x86_64/result/rust-rust-ini-devel-0.17.0-6.fc37.noarch.rpm
...
missing     /usr/share/cargo/registry/rust-ini-0.17.0
missing     /usr/share/cargo/registry/rust-ini-0.17.0/.cargo-checksum.json
missing     /usr/share/cargo/registry/rust-ini-0.17.0/Cargo.toml
missing   l /usr/share/cargo/registry/rust-ini-0.17.0/LICENSE
missing   d /usr/share/cargo/registry/rust-ini-0.17.0/README.rst
missing     /usr/share/cargo/registry/rust-ini-0.17.0/examples
missing     /usr/share/cargo/registry/rust-ini-0.17.0/examples/test.rs
missing     /usr/share/cargo/registry/rust-ini-0.17.0/rustfmt.toml
missing     /usr/share/cargo/registry/rust-ini-0.17.0/src
missing     /usr/share/cargo/registry/rust-ini-0.17.0/src/lib.rs
2022-02-14 14:09:28 +01:00
970160a316 Use license files installed by crate
Before, we'd use the same pattern for the main package (if present),
and the -devel files:
  %license LICENSE1 LICENSE2
Since the create usually also installs the license files to %create_instdir,
we end up with duplicated files in -devel.

It seems reasonable to reuse the file that is already present in
%create_instdir. Fedora packaging guidelines only say that "%license
must be used for license files", and doesn't say anything about the
location. And in fact, you can't assume any fixed location, because
packages will often use a common license directory, so the only
reliable way to list license files is to look at the %license mark.
And in our particular case, -devel files are not installed on user
systems, so we can assume that users will not manually search for
license files by browsing /usr/share/licenses/<package-name>. We can't
remove the license file from %{create_instdir}, because the crate might
be need it, for example to display the license text internally. Thus,
I think reasonable and not against the guidelines to "reuse" the license
file present under %{create_instdir}.

For the main package though, it seems better to keep the existing
location. Those packages *are* installed on end-user systems, and also
it'd be strange to suddently have one file under /usr/share/cargo/registry/.

So this patch uses absolute paths under %create_instdir for -devel,
and the relative path (effectively under /usr/share/licenses) for the
main package.

It is possible to opt-out of the new behaviour with --relative-license-paths.

Fixes #176.
2022-02-14 14:01:47 +01:00
55f64aaf80 Add warnings when no license files have been detected
Fixes #175.
2022-02-14 14:01:47 +01:00
c2a760efcd Add %crate_instdir convenience macro
Fixes #41.

The template is adjusted to use the new macro. This will only work
if the macro is defined, thus the required version of rust-packaging
is bumped.
2022-02-14 14:01:44 +01:00
Michel Alexandre Salim
9d72601698 Update AGPL, GPL, LGPL for new SPDX identifiers
- add the new -only SPDX identifiers
- note that the ones without -only are now deprecated

Signed-off-by: Michel Alexandre Salim <salimma@fedoraproject.org>
2022-01-30 13:10:08 -08:00
Igor Raits
fbcb8d0d3e
Support wildcards in 0.x versions
Fixes: https://pagure.io/fedora-rust/rust2rpm/issue/173
Signed-off-by: Igor Raits <igor.raits@gmail.com>
2022-01-09 08:08:17 +01:00
Anders Blomdell
dc4dd1c6e0 Normalize requires for '--target plain' 2022-01-05 13:13:00 +01:00
498f0d5978 Filter out .tpl and .in and documentation file names
Those suffixes are commonly used for files that are processed during
build to produce some final version.

Fixes #169.
2021-12-11 12:52:44 +01:00
e9a84e8261 Simplify and tighten license and documentation file name matching
[\.] is the same as [.], and [-] matches the dash, no need for backclash-escaping.
Also, let's shorten the patches by using alternatives for the common parts.

Before we would match any prefix, even though the matches were clearly intended
to cover the whole file name. Let's use fullmatch to make it clear that the whole
string must be matched.
2021-12-11 12:46:27 +01:00
8e8ae0c969 Add --no-rpmautospec option
Fixes #170.
2021-12-11 12:14:01 +01:00
73f5d593c3 fedora: also check for the spec file in the existence check
Fixes https://pagure.io/fedora-rust/rust2rpm/issue/165.
the following workflow wasn't well supported by the check:

- request compat package repo
- fedpkg clone it
- try to run rust2rpm for it
- Get this message:
  Crate tiny_http0.6 is already packaged in Fedora (...)
  Re-run with --no-existence-check if you still want to convert it.
2021-12-11 11:08:35 +00:00
9e4c5fdd0f Stop including %doc in -devel packages
The documentation files are already included once in installation paths
underneath the crate directory. We need them there because the package might
use them in some way, and anyway we don't want to mess with the crate contents.
Adding them a second time under /usr/share/doc creates duplication. People
generally don't install rust-*-devel packages, and it doesn't make much sense
to provide documentation.

Fixes https://pagure.io/fedora-rust/rust2rpm/issue/164.
2021-12-11 11:07:24 +00:00
Aleksei Bavshin
f1be3a0d4d
macros: pass CFLAGS/CXXFLAGS to the processes started by cargo
This is mainly targeted to the crates using `rust-cc`, where we want to
apply system-wide compiler flags when invoking the compiler. `cc`
supports CFLAGS and CXXFLAGS, but we never set those.
Defining that per project is not possible, as we have no way to inherit
any build context from a dependency package.

Possibly also affects: `bindgen`, `cxx`, any other crate that invokes
the C/C++ compiler and passes the CFLAGSS
2021-12-05 22:20:52 -08:00