// -*- 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 GPLv1+
12: PERL_FOO_BAR_LICENSE_FILES = LICENSE
13:
14: $(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).

Finally, on line 14, 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 +supports/scripts/scancpan Foo-Bar+ in the Buildroot directory
(or in the +BR2_EXTERNAL+ directory).
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+, +Module-Build+ and +Module-Build-Tiny+.
+Build.PL+ is always preferred 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_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.
