mirror of
https://github.com/YellowJacketLinux/LFS.git
synced 2025-02-02 23:07:14 +08:00
work on guidelines
This commit is contained in:
parent
5ad25f42b6
commit
8e495c2855
@ -1,2 +1,104 @@
|
||||
Packaging of Perl Modules
|
||||
=========================
|
||||
|
||||
This file explains the packaging guidelines that I am attempting to
|
||||
follow for Free Libre Open Source Software (FLOSS) Perl modules from
|
||||
[CPAN](https://metacpan.org/)
|
||||
|
||||
These guildelines are for RPM packages, not for installing modules via
|
||||
the native cpan installer (which also works).
|
||||
|
||||
|
||||
YJL RPM Macros for Perl
|
||||
-----------------------
|
||||
|
||||
The RPM Macros used when building Perl and Perl modules are defined
|
||||
in [`/usr/lib/rpm/macros.d/macros.perl`](SOURCES/rpm-macros-perl-5.36)
|
||||
which is owned by the `perl-devel` package.
|
||||
|
||||
For packaging modules from CPAN, the following macros are used:
|
||||
|
||||
* `%{perl5_vendorlib}` --- The base directory for RPM packaged perl
|
||||
modules that are architecture independent.
|
||||
* `%{perl5_vendorarch}` --- The base directory for RPM packaged perl
|
||||
modules with compiled components.
|
||||
* `%{perl5_API}` --- Used in YJL to limit a `noarch` package to the
|
||||
series of Perl it was packaged for (e.g. 5.38.x)
|
||||
* `%{perl5_ABI}` --- Used in YJL to limit a binary package to the
|
||||
series of Perl it was packaged for.
|
||||
* `%{perl5_cpanlic}` --- Used in YJL for the handful of cases where
|
||||
a perl packages specifies a license but does not actually include
|
||||
the license in the package tarball.
|
||||
|
||||
### Spec File Portability Note
|
||||
|
||||
The last three listed above should be used in such a way that the spec
|
||||
file still builds on other systems where they will not be defined.
|
||||
|
||||
For the first two listed above, to build a YJL perl module on another
|
||||
system the user will have to define them on their system. Usually just
|
||||
adding the following to a `~/.rpmmacros` file will suffice:
|
||||
|
||||
%perl5_vendorlib %{perl_vendorlib}
|
||||
%perl5_vendorarch %{perl_vendorarch}
|
||||
|
||||
While I could have just used the more standard convention for the
|
||||
purpose, it is my opinion a good idea to restrict the macros to the
|
||||
Perl5 just so that it makes it easier to have a future Perl 7 installed
|
||||
on the same system as Perl 5.
|
||||
|
||||
Scripting language specific macros should be versioned, and I chose
|
||||
to not follow the incorrect mainstream naming scheme just because that
|
||||
is what all (or most) distributions do.
|
||||
|
||||
|
||||
First Line
|
||||
----------
|
||||
|
||||
The very first line should define the CPAN name of the module in a macro
|
||||
name `cpanname`. Usually it is the perl module but replacing any
|
||||
occurrences `::` with a `-`, e.g. the Perl module `Test::More::UTF8`
|
||||
would have a CPAN name of `Test-More-UTF8`.
|
||||
|
||||
Precisely, it has the name of the tarball on CPAN without the version
|
||||
and tarball extension.
|
||||
|
||||
Example first line:
|
||||
|
||||
%global cpanname Text-Template
|
||||
|
||||
|
||||
RPM Spec File Metadata Tags
|
||||
---------------------------
|
||||
|
||||
The RPM spec file `Name:` metadata field then contains the following:
|
||||
|
||||
Name: perl-%{cpanname}
|
||||
|
||||
For the RPM spec file `Summary:` metadata field, it is best to use the
|
||||
summary provided after the __NAME__ heading on the CPAN web page for
|
||||
the Perl module. For example:
|
||||
|
||||
Summary: Expand template text with embedded Perl
|
||||
|
||||
When a Perl module only contains text files as opposed to binary files
|
||||
(this is usually the case), the Perl module package __MUST__ be defined
|
||||
as a `noarch` package:
|
||||
|
||||
BuildArch: noarch
|
||||
|
||||
While not strictly required, I do like to have an empty line between
|
||||
that first group of metadata tags and the next group.
|
||||
|
||||
For the RPM spec file `Group:` metadata tag, how to categorize groups
|
||||
in YJL has not yet been determined. Generally for the present I am
|
||||
just using `Development/Libraries` as such:
|
||||
|
||||
Group: Development/Libraries
|
||||
|
||||
To me that does not quite feel right as most perl modules are both
|
||||
development *and* runtime libraries. I will figure that out later.
|
||||
It seems on my CentOS 7.9.2009 (running the ancient Perl 5.16.3)
|
||||
that many Perl modules just do not specify a group. Anyway...
|
||||
|
||||
For the
|
||||
|
Loading…
Reference in New Issue
Block a user