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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2022-02-14 13:15:09 +01:00
parent 55f64aaf80
commit 970160a316
2 changed files with 10 additions and 0 deletions

View file

@ -363,6 +363,8 @@ def main():
help="Use autorelease and autochangelog features") help="Use autorelease and autochangelog features")
parser.add_argument("--no-rpmautospec", action="store_false", parser.add_argument("--no-rpmautospec", action="store_false",
help="Do not use rpmautospec") help="Do not use rpmautospec")
parser.add_argument("--relative-license-paths", action="store_true",
help="Put all license files in main license directory")
parser.add_argument("--all-features", action="store_true", parser.add_argument("--all-features", action="store_true",
help="Activate all available features") help="Activate all available features")
parser.add_argument("--dynamic-buildrequires", action="store_true", parser.add_argument("--dynamic-buildrequires", action="store_true",
@ -447,6 +449,8 @@ def main():
rpmautospec = detect_rpmautospec(default_target, spec_file) rpmautospec = detect_rpmautospec(default_target, spec_file)
kwargs["rpmautospec"] = rpmautospec kwargs["rpmautospec"] = rpmautospec
kwargs["relative_license_paths"] = args.relative_license_paths
if args.target in {"fedora", "mageia", "opensuse"}: if args.target in {"fedora", "mageia", "opensuse"}:
kwargs["include_build_requires"] = True kwargs["include_build_requires"] = True
kwargs["include_provides"] = False kwargs["include_provides"] = False

View file

@ -160,7 +160,13 @@ use {% if feature is not none %}the "{{ feature }}" feature of {% endif %}the "%
%files {{ pkg }} %files {{ pkg }}
{% if feature is none %} {% if feature is none %}
{% if license_files|length > 0 %} {% if license_files|length > 0 %}
{% if relative_license_paths %}
%license {{ license_files|join(' ') }} %license {{ license_files|join(' ') }}
{% else %}
{% for file in license_files %}
%license %{crate_instdir}/{{ file }}
{% endfor %}
{% endif %}
{% else %} {% else %}
# FIXME: no license files detected # FIXME: no license files detected
{% endif %} {% endif %}