Difference between revisions of "Perl package guidelines"

From ArchWiki
Jump to: navigation, search
(reorganised page to match other guideline pages)
Line 5: Line 5:
 
[[Category:Package development (English)]]
 
[[Category:Package development (English)]]
  
=Generating PKGBUILD=
+
==Package Naming==
As Perl is centered around the CPAN, there are a few scripts to make the most of this, and save you writing PKGBUILDs by hand.
+
For modules the package name should begin with '''perl-''' and the rest of the name should be constructed from the module name by converting it to lowercase and then replacing colons with hyphens. For example the package name corresponding to HTML::Parser will be '''perl-html-parser'''. Perl applications should have the same name as that of the application but in lowercase.
  
There is a CPANPLUS::Dist plugin which adds support for pacman, avaiable on the AUR: http://aur.archlinux.org/packages.php?ID=5954
+
==Example==
 +
An example PKGBUILD can be found at ''/usr/share/pacman/PKGBUILD-perl.proto'' which is present in the '''abs''' package. It is also reproduced below (without the comments)
  
There is also a script called pacpan, which can generate (recursively) PKGBUILDs for a module: http://aur.archlinux.org/packages.php?ID=23495
+
<pre>
 +
# Contributor: Your Name <youremail@domain.com>
 +
pkgname=perl-foo-bar
 +
pkgver=VERSION
 +
pkgrel=1
 +
pkgdesc=""
 +
arch=()
 +
url=""
 +
license=('GPL' 'PerlArtistic')
 +
depends=('perl>=5.10.0')
 +
makedepends=()
 +
provides=()
 +
conflicts=()
 +
replaces=()
 +
backup=()
 +
options=(!emptydirs)
 +
install=
 +
source=(http://search.cpan.org/CPAN/authors/id/***/***-$pkgver.tar.gz)
 +
md5sums=()
  
=Writing PKGBUILDs=
+
build() {
There are basically two types of “distributions” on CPAN: those that rely on Makefile.PL and those that use Build.PL.
+
  cd "$srcdir/***-$pkgver"
  
 +
  # install module in vendor directories.
 +
  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
 +
  make || return 1
 +
  make install DESTDIR="$pkgdir/" || return 1
  
== Perl 5.10.0-1 And After ==
+
  ## for packages with Build.PL, do this instead:
 +
  # perl Build.PL installdirs=vendor destdir="$pkgdir/"
 +
  # perl Build
 +
  # perl Build install
  
Will be posted soon.
+
  # remove perllocal.pod and .packlist
 +
  find "$pkgdir" -name perllocal.pod -delete
 +
  find "$pkgdir" -name .packlist -delete
 +
}
 +
 
 +
# vim:set ts=2 sw=2 et:
 +
</pre>
 +
 
 +
In most cases, you should put '''any''' in the ''arch'' array since most Perl packages are architecture independent. However if you intend to upload to the official repositories then you should use ''arch=(i686 x86_64)''.
 +
 
 +
==Automation==
 +
As Perl is centered around the [http://www.cpan.org CPAN], there are a few scripts to make the most of this, and save you writing PKGBUILDs by hand.
 +
 
 +
There is a CPANPLUS::Dist plugin which adds support for pacman, available on the AUR: http://aur.archlinux.org/packages.php?ID=5954
 +
 
 +
There is also a script called pacpan, which can generate (recursively) PKGBUILDs for a module: http://aur.archlinux.org/packages.php?ID=23495
  
 +
==Before Perl 5.10.0-1 (legacy)==
 +
'''This section refers to the old Perl guidelines and is kept for historical purposes only.'''
  
== Before Perl 5.10.0-1 ==
 
  
 
Packages before perl 5.10.0-1 installed modules into /usr/lib/perl5/current and /usr/lib/perl5/site_perl/current.
 
Packages before perl 5.10.0-1 installed modules into /usr/lib/perl5/current and /usr/lib/perl5/site_perl/current.

Revision as of 11:43, 21 April 2009

Tango-document-new.pngThis article is a stub.Tango-document-new.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Perl package guidelines#)

Package Naming

For modules the package name should begin with perl- and the rest of the name should be constructed from the module name by converting it to lowercase and then replacing colons with hyphens. For example the package name corresponding to HTML::Parser will be perl-html-parser. Perl applications should have the same name as that of the application but in lowercase.

Example

An example PKGBUILD can be found at /usr/share/pacman/PKGBUILD-perl.proto which is present in the abs package. It is also reproduced below (without the comments)

# Contributor: Your Name <youremail@domain.com>
pkgname=perl-foo-bar
pkgver=VERSION
pkgrel=1
pkgdesc=""
arch=()
url=""
license=('GPL' 'PerlArtistic')
depends=('perl>=5.10.0')
makedepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=(!emptydirs)
install=
source=(http://search.cpan.org/CPAN/authors/id/***/***-$pkgver.tar.gz)
md5sums=()

build() {
  cd "$srcdir/***-$pkgver"

  # install module in vendor directories.
  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
  make || return 1
  make install DESTDIR="$pkgdir/" || return 1

  ## for packages with Build.PL, do this instead:
  # perl Build.PL installdirs=vendor destdir="$pkgdir/"
  # perl Build
  # perl Build install

  # remove perllocal.pod and .packlist
  find "$pkgdir" -name perllocal.pod -delete
  find "$pkgdir" -name .packlist -delete
}

# vim:set ts=2 sw=2 et:

In most cases, you should put any in the arch array since most Perl packages are architecture independent. However if you intend to upload to the official repositories then you should use arch=(i686 x86_64).

Automation

As Perl is centered around the CPAN, there are a few scripts to make the most of this, and save you writing PKGBUILDs by hand.

There is a CPANPLUS::Dist plugin which adds support for pacman, available on the AUR: http://aur.archlinux.org/packages.php?ID=5954

There is also a script called pacpan, which can generate (recursively) PKGBUILDs for a module: http://aur.archlinux.org/packages.php?ID=23495

Before Perl 5.10.0-1 (legacy)

This section refers to the old Perl guidelines and is kept for historical purposes only.


Packages before perl 5.10.0-1 installed modules into /usr/lib/perl5/current and /usr/lib/perl5/site_perl/current.


Example Makefile.PL PKGBUILD

# Contributor:  Your Name <your_email@foobar.org>
pkgname=perl-dbd-pg
pkgver=1.49
pkgrel=1
pkgdesc="Postgres Driver for DBI"
url="http://search.cpan.org/~DBDPG/DBD-Pg"
depends=('perl-dbi>=1.45')
license=('GPL')
options=('!emptydirs')
arch=('i686' 'x86_64')
source=(http://www.cpan.org/authors/id/D/DB/DBDPG/DBD-Pg-$pkgver.tar.gz) 
md5sums=('76b9d6a2f4cbaefcba23380f83998215')

build() {
  cd  ${srcdir}/DBD-Pg-$pkgver
  eval `perl -V:archname`
  /usr/bin/perl Makefile.PL \
      INSTALLARCHLIB=/usr/lib/perl5/current/${archname} \
      INSTALLSITELIB=/usr/lib/perl5/site_perl/current \
      INSTALLSITEARCH=/usr/lib/perl5/site_perl/current/${archname}
  /usr/bin/make || return 1
  /usr/bin/make DESTDIR=${pkgdir} install
  /usr/bin/find ${pkgdir} -name '.packlist' -delete
  /usr/bin/find ${pkgdir} -name '*.pod' -delete
}

Example Build.PL PKGBUILD

# Contributor:  Your Name <your_email@foobar.org>
pkgname=perl-string-random
pkgver=0.22
pkgrel=1
pkgdesc="Generate random strings"
url="http://search.cpan.org/~STEVE/String-Random"
makedepends=('perl-module-build')
license=('GPL')
options=('!emptydirs')
arch=('i686' 'x86_64')
source=(http://www.cpan.org/authors/id/S/ST/STEVE/String-Random-$pkgver.tar.gz) 
md5sums=('c0319f95c56450624cc646f7425e327e')

build() {
  cd  ${srcdir}/String-Random-$pkgver
  eval `perl -V:archname`
  perl Build.PL destdir=${pkgdir} \
       --install_path lib=/usr/lib/perl5/site_perl/current \
       --install_path arch=/usr/lib/perl5/site_perl/current/${archname}
  ./Build
  ./Build install
  /usr/bin/find ${pkgdir} -name '.packlist' -delete
  /usr/bin/find ${pkgdir} -name '*.pod' -delete
}