$ perldoc -F README.ALT
=head1 NAME
F<rpm-build-perl/README.ALT> - notes on Perl packaging
=head1 DESCRIPTION
This document is an early attempt of Perl policy for ALT Linux Team.
Most of the packages, modules and even files mentioned in this document
have comprehensive documentation. Be sure to read it, too!
Blind guess: what you are looking for is probably C<_perl_lib_path>. See below.
=head1 Packages
B<perl-base> is a part of basesystem.
B<perl-devel> is required to build Perl modules that have F<Makefile.PL>.
B<perl-Module-Build> is additionally required to build modules that have F<Build.PL>.
B<perl-CPAN> is useful for finding modules that need updating.
B<rpm-build> is required to build RPM packages.
B<rpm-build-perl> is required to build Perl RPM packages; it contains
scripts for automatic dependency tracking, RPM macros for Perl, and this
document.
B<rpm-utils> has C<buildreq> script which automatically inserts/updates
C<BuildRequires> clause in specfile.
B<sisyphus_check> is to check package acceptability for Sisyphus.
B<hasher> is a build system.
=head1 Files and modules
F</usr/lib/rpm/perl.req>, F</usr/lib/rpm/perl.prov> - scripts for
automatic dependency tracking.
$ alias perl.req=/usr/lib/rpm/perl.req
$ perl.req --verbose /usr/lib/perl5/perl5db.pl
# perl(IO/Handle.pm) at line 492
# perl(strict.pm) at line 4582 (builtin SKIP)
# perl(Config.pm) at line 1157 inside eval (SKIP)
# perl(IO/Socket.pm) at line 1560
# perl(Carp.pm) at line 7338 (builtin SKIP)
# perl(Term/ReadLine.pm) at line 5725 inside eval (SKIP)
# perl(Config.pm) at line 7633
# perl(dumpvar.pl) at line 2222
# perl(PadWalker.pm) >= 0.080 at line 2409 inside eval (SKIP)
# perl(dumpvar.pl) at line 2418
# perl(dumpvar.pl) at line 5316
# perl(Class/ISA.pm) at line 4576 inside eval (SKIP)
# perl(Carp.pm) at line 7278 (builtin SKIP)
# perl(Devel/Peek.pm) at line 7487 inside eval (SKIP)
/usr/lib/perl5/perl5db.pl syntax OK
perl(Config.pm)
perl(dumpvar.pl)
perl(IO/Handle.pm)
perl(IO/Socket.pm)
$
F</etc/rpm/macros.d/perl5> - RPM macros for Perl.
B<ExtUtils::MakeMaker> - process Makefile.PL and build Perl module.
$ cd libnet-1.19
$ perl Makefile.PL PRINT_PREREQ=1
Checking for Socket...ok
Checking for IO::Socket...ok
perl(IO::Socket)>=1.05 perl(Socket)>=1.3
$
B<Module::Build> - process Build.PL and build Perl module.
B<CPAN> - list modules than need updating:
$ perl -MCPAN -e 'CPAN::Shell->r'
Download and test a module:
$ perl -MCPAN -e 'CPAN::Shell->test("Some::Module")'
But don't you run CPAN as root!
=head1 Directories
C<INSTALLDIRS=vendor> is used by default for RPM packages.
See L<ExtUtils::MakeMaker> for details.
B<%perl_vendor_privlib> - standard RPM directory for
architecture-independent perl modules. (Disclaimer: there's no ANSI
standard so far.)
B<%perl_vendor_privlib/auto> - standard RPM directory for
architecture-independent autosplitted functions (used rarely).
B<%perl_vendor_archlib> - standard RPM directory for
architecture-dependent perl modules.
B<%perl_vendor_autolib> - a shortcut for C<%perl_vendor_archlib/auto>,
standard RPM directory for architecture-dependent autosplitted functions
and compiled extensions.
Typical %files sections:
%files # noarch
%perl_vendor_privlib/Module*
%files # i586
%perl_vendor_archlib/Module*
%perl_vendor_autolib/Module*
Directory ownership!!!
%files # WRONG, Module/ directory is not owned by any package
%perl_vendor_privlib/Module/*
%files # WRONG, auto/ directory is captured
%perl_vendor_privlib/*
B<_perl_lib_path> must be defined when non-standard library path for
perl modules is used (which is discouraged).
# from kdoc.spec
%define _perl_lib_path %_datadir/%name
%files # kdoc*.pm are under non-standard location
%_datadir/%name
=head1 Scriplets
B<%perl_vendor_build> - basically equivalent to
C<perl Makefile.PL INSTALLDIRS=vendor; make; make test>.
Typical %build sections:
%build
%perl_vendor_build [arguments for Makefile.PL]
Sample arguments for Makefile.PL:
INC=-I%_includedir/ncurses LIBS=-lncurses DEFINE=-DHAVE_STRING_H
To disable C<make test> completely:
# This package is broken but I think that it works.
%def_without test
To disable some tests:
%__rm -fv t/bad-test-1.t t/bad-test-2.t
To disable X-server dependent tests:
# always run tests for maintainer
$ echo '%_build_display :0' >> ~/.rpmmacros
# don't run tests for others
%ifndef _build_display
%def_without test
%endif
To disable tests in BTE (hasher or sandman):
%ifdef __BTE
%def_without test
%endif
To disable tests when syslog is not available:
%if "%(logger -d -u /dev/log -p user.debug test >/dev/null 2>&1 || echo no)" == "no"
%def_without test
%endif
To skip tests when /dev/tty is not available:
%if "%([ -c /dev/tty ] || echo no)" == "no"
%def_without test
%endif
B<%perl_vendor_install> - basically equivalent to
C<make install DESTDIR=%buildroot>.
Typical %install section:
%install
%perl_vendor_install [arguments to make]
=head1 Dependencies
B<%add_findreq_skiplist> F<*/Some/Module.pm> -- don't run perl.req
against files that match the given shell pattern. (Generally discouraged.)
B<%add_findprov_skiplist> F<*/Some/Module.pm> don't run perl.prov
against files that match the given shell pattern. (Generally discouraged.)
There's no way to skip a particular dependency so far.
=head1 AUTHOR
Written by Alexey Tourbin <at@altlinux.org>.
=head1 COPYING
Copyright (c) 2004 Alexey Tourbin, ALT Linux Team.
What is the best license for such a document, by the way?
=head1 SEE ALSO
Debian Perl Policy,
L<http://www.debian.org/doc/packaging-manuals/perl-policy/>.
=cut
# vim:ft=pod tw=72