// -*- mode:doc; -*-
// vim: set syntax=asciidoc:

=== Infrastructure for Perl/CPAN packages

[[perl-package-tutorial]]

==== +perl-package+ tutorial

First, let's see how to write a +.mk+ file for a Perl/CPAN package,
with an example :

------------------------
01: ################################################################################
02: #
03: # perl-foo-bar
04: #
05: ################################################################################
06:
07: PERL_FOO_BAR_VERSION = 0.02
08: PERL_FOO_BAR_SOURCE = Foo-Bar-$(PERL_FOO_BAR_VERSION).tar.gz
09: PERL_FOO_BAR_SITE = $(BR2_CPAN_MIRROR)/authors/id/M/MO/MONGER
10: PERL_FOO_BAR_DEPENDENCIES = perl-strictures
11: PERL_FOO_BAR_LICENSE = Artistic or GPL-1.0+
12: PERL_FOO_BAR_LICENSE_FILES = LICENSE
13: PERL_FOO_BAR_DISTNAME = Foo-Bar
14:
15: $(eval $(perl-package))
------------------------

On line 7, we declare the version of the package.

On line 8 and 9, we declare the name of the tarball and the location
of the tarball on a CPAN server. Buildroot will automatically download
the tarball from this location.

On line 10, we declare our dependencies, so that they are built
before the build process of our package starts.

On line 11 and 12, we give licensing details about the package (its
license on line 11, and the file containing the license text on line
12).

On line 13, the name of the distribution as needed by the script
+utils/scancpan+ (in order to regenerate/upgrade these package files).

Finally, on line 15, we invoke the +perl-package+ macro that
generates all the Makefile rules that actually allow the package to be
built.

Most of these data can be retrieved from https://metacpan.org/.
So, this file and the Config.in can be generated by running
the script +utils/scancpan Foo-Bar+ in the Buildroot directory
(or in a br2-external tree).
This script creates a Config.in file and foo-bar.mk file for the
requested package, and also recursively for all dependencies specified by
CPAN. You should still manually edit the result. In particular, the
following things should be checked.

* If the perl module links with a shared library that is provided by
  another (non-perl) package, this dependency is not added automatically.
  It has to be added manually to +PERL_FOO_BAR_DEPENDENCIES+.
* The +package/Config.in+ file has to be updated manually to include the
  generated Config.in files. As a hint, the +scancpan+ script prints out
  the required +source "..."+ statements, sorted alphabetically.

[[perl-package-reference]]

==== +perl-package+ reference

As a policy, packages that provide Perl/CPAN modules should all be
named +perl-<something>+ in Buildroot.

This infrastructure handles various Perl build systems :
+ExtUtils-MakeMaker+ (EUMM), +Module-Build+ (MB) and +Module-Build-Tiny+.
+Build.PL+ is preferred by default when a package provides a +Makefile.PL+
and a +Build.PL+.

The main macro of the Perl/CPAN package infrastructure is
+perl-package+. It is similar to the +generic-package+ macro. The ability to
have target and host packages is also available, with the
+host-perl-package+ macro.

Just like the generic infrastructure, the Perl/CPAN infrastructure
works by defining a number of variables before calling the
+perl-package+ macro.

First, all the package metadata information variables that exist in the
generic infrastructure also exist in the Perl/CPAN infrastructure:
+PERL_FOO_VERSION+, +PERL_FOO_SOURCE+,
+PERL_FOO_PATCH+, +PERL_FOO_SITE+,
+PERL_FOO_SUBDIR+, +PERL_FOO_DEPENDENCIES+,
+PERL_FOO_INSTALL_TARGET+.

Note that setting +PERL_FOO_INSTALL_STAGING+ to +YES+ has no effect
unless a +PERL_FOO_INSTALL_STAGING_CMDS+ variable is defined. The perl
infrastructure doesn't define these commands since Perl modules generally
don't need to be installed to the +staging+ directory.

A few additional variables, specific to the Perl/CPAN infrastructure,
can also be defined. Many of them are only useful in very specific
cases, typical packages will therefore only use a few of them.

* +PERL_FOO_PREFER_INSTALLER+/+HOST_PERL_FOO_PREFER_INSTALLER+,
  specifies the preferred installation method. Possible values are
  +EUMM+ (for +Makefile.PL+ based installation using
  +ExtUtils-MakeMaker+) and +MB+ (for +Build.PL+ based installation
  using +Module-Build+). This variable is only used when the package
  provides both installation methods.

* +PERL_FOO_CONF_ENV+/+HOST_PERL_FOO_CONF_ENV+, to specify additional
  environment variables to pass to the +perl Makefile.PL+ or +perl Build.PL+.
  By default, empty.

* +PERL_FOO_CONF_OPTS+/+HOST_PERL_FOO_CONF_OPTS+, to specify additional
  configure options to pass to the +perl Makefile.PL+ or +perl Build.PL+.
  By default, empty.

* +PERL_FOO_BUILD_OPTS+/+HOST_PERL_FOO_BUILD_OPTS+, to specify additional
  options to pass to +make pure_all+ or +perl Build build+ in the build step.
  By default, empty.

* +PERL_FOO_INSTALL_TARGET_OPTS+, to specify additional options to
  pass to +make pure_install+ or +perl Build install+ in the install step.
  By default, empty.

* +HOST_PERL_FOO_INSTALL_OPTS+, to specify additional options to
  pass to +make pure_install+ or +perl Build install+ in the install step.
  By default, empty.
