about summary refs log tree commit diff
path: root/doc/languages-frameworks/perl.xml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/languages-frameworks/perl.xml')
-rw-r--r--doc/languages-frameworks/perl.xml237
1 files changed, 117 insertions, 120 deletions
diff --git a/doc/languages-frameworks/perl.xml b/doc/languages-frameworks/perl.xml
index 149fcb275a09..a675e6665863 100644
--- a/doc/languages-frameworks/perl.xml
+++ b/doc/languages-frameworks/perl.xml
@@ -1,24 +1,27 @@
 <section xmlns="http://docbook.org/ns/docbook"
          xmlns:xlink="http://www.w3.org/1999/xlink"
          xml:id="sec-language-perl">
-
-<title>Perl</title>
-
-<para>Nixpkgs provides a function <varname>buildPerlPackage</varname>,
-a generic package builder function for any Perl package that has a
-standard <varname>Makefile.PL</varname>.  It’s implemented in <link
-xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/perl-modules/generic"><filename>pkgs/development/perl-modules/generic</filename></link>.</para>
-
-<para>Perl packages from CPAN are defined in <link
+ <title>Perl</title>
+
+ <para>
+  Nixpkgs provides a function <varname>buildPerlPackage</varname>, a generic
+  package builder function for any Perl package that has a standard
+  <varname>Makefile.PL</varname>. It’s implemented in
+  <link
+xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/perl-modules/generic"><filename>pkgs/development/perl-modules/generic</filename></link>.
+ </para>
+
+ <para>
+  Perl packages from CPAN are defined in
+  <link
 xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/top-level/perl-packages.nix"><filename>pkgs/top-level/perl-packages.nix</filename></link>,
-rather than <filename>pkgs/all-packages.nix</filename>.  Most Perl
-packages are so straight-forward to build that they are defined here
-directly, rather than having a separate function for each package
-called from <filename>perl-packages.nix</filename>.  However, more
-complicated packages should be put in a separate file, typically in
-<filename>pkgs/development/perl-modules</filename>.  Here is an
-example of the former:
-
+  rather than <filename>pkgs/all-packages.nix</filename>. Most Perl packages
+  are so straight-forward to build that they are defined here directly, rather
+  than having a separate function for each package called from
+  <filename>perl-packages.nix</filename>. However, more complicated packages
+  should be put in a separate file, typically in
+  <filename>pkgs/development/perl-modules</filename>. Here is an example of the
+  former:
 <programlisting>
 ClassC3 = buildPerlPackage rec {
   name = "Class-C3-0.21";
@@ -28,74 +31,72 @@ ClassC3 = buildPerlPackage rec {
   };
 };
 </programlisting>
-
-Note the use of <literal>mirror://cpan/</literal>, and the
-<literal>${name}</literal> in the URL definition to ensure that the
-name attribute is consistent with the source that we’re actually
-downloading.  Perl packages are made available in
-<filename>all-packages.nix</filename> through the variable
-<varname>perlPackages</varname>.  For instance, if you have a package
-that needs <varname>ClassC3</varname>, you would typically write
-
+  Note the use of <literal>mirror://cpan/</literal>, and the
+  <literal>${name}</literal> in the URL definition to ensure that the name
+  attribute is consistent with the source that we’re actually downloading.
+  Perl packages are made available in <filename>all-packages.nix</filename>
+  through the variable <varname>perlPackages</varname>. For instance, if you
+  have a package that needs <varname>ClassC3</varname>, you would typically
+  write
 <programlisting>
 foo = import ../path/to/foo.nix {
   inherit stdenv fetchurl ...;
   inherit (perlPackages) ClassC3;
 };
 </programlisting>
-
-in <filename>all-packages.nix</filename>.  You can test building a
-Perl package as follows:
-
+  in <filename>all-packages.nix</filename>. You can test building a Perl
+  package as follows:
 <screen>
 $ nix-build -A perlPackages.ClassC3
 </screen>
-
-<varname>buildPerlPackage</varname> adds <literal>perl-</literal> to
-the start of the name attribute, so the package above is actually
-called <literal>perl-Class-C3-0.21</literal>.  So to install it, you
-can say:
-
+  <varname>buildPerlPackage</varname> adds <literal>perl-</literal> to the
+  start of the name attribute, so the package above is actually called
+  <literal>perl-Class-C3-0.21</literal>. So to install it, you can say:
 <screen>
 $ nix-env -i perl-Class-C3
 </screen>
-
-(Of course you can also install using the attribute name:
-<literal>nix-env -i -A perlPackages.ClassC3</literal>.)</para>
-
-<para>So what does <varname>buildPerlPackage</varname> do?  It does
-the following:
-
-<orderedlist>
-
-  <listitem><para>In the configure phase, it calls <literal>perl
-  Makefile.PL</literal> to generate a Makefile.  You can set the
-  variable <varname>makeMakerFlags</varname> to pass flags to
-  <filename>Makefile.PL</filename></para></listitem>
-
-  <listitem><para>It adds the contents of the <envar>PERL5LIB</envar>
-  environment variable to <literal>#! .../bin/perl</literal> line of
-  Perl scripts as <literal>-I<replaceable>dir</replaceable></literal>
-  flags.  This ensures that a script can find its
-  dependencies.</para></listitem>
-
-  <listitem><para>In the fixup phase, it writes the propagated build
-  inputs (<varname>propagatedBuildInputs</varname>) to the file
-  <filename>$out/nix-support/propagated-user-env-packages</filename>.
-  <command>nix-env</command> recursively installs all packages listed
-  in this file when you install a package that has it.  This ensures
-  that a Perl package can find its dependencies.</para></listitem>
-
-</orderedlist>
-
-</para>
-
-<para><varname>buildPerlPackage</varname> is built on top of
-<varname>stdenv</varname>, so everything can be customised in the
-usual way.  For instance, the <literal>BerkeleyDB</literal> module has
-a <varname>preConfigure</varname> hook to generate a configuration
-file used by <filename>Makefile.PL</filename>:
-
+  (Of course you can also install using the attribute name: <literal>nix-env -i
+  -A perlPackages.ClassC3</literal>.)
+ </para>
+
+ <para>
+  So what does <varname>buildPerlPackage</varname> do? It does the following:
+  <orderedlist>
+   <listitem>
+    <para>
+     In the configure phase, it calls <literal>perl Makefile.PL</literal> to
+     generate a Makefile. You can set the variable
+     <varname>makeMakerFlags</varname> to pass flags to
+     <filename>Makefile.PL</filename>
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+     It adds the contents of the <envar>PERL5LIB</envar> environment variable
+     to <literal>#! .../bin/perl</literal> line of Perl scripts as
+     <literal>-I<replaceable>dir</replaceable></literal> flags. This ensures
+     that a script can find its dependencies.
+    </para>
+   </listitem>
+   <listitem>
+    <para>
+     In the fixup phase, it writes the propagated build inputs
+     (<varname>propagatedBuildInputs</varname>) to the file
+     <filename>$out/nix-support/propagated-user-env-packages</filename>.
+     <command>nix-env</command> recursively installs all packages listed in
+     this file when you install a package that has it. This ensures that a Perl
+     package can find its dependencies.
+    </para>
+   </listitem>
+  </orderedlist>
+ </para>
+
+ <para>
+  <varname>buildPerlPackage</varname> is built on top of
+  <varname>stdenv</varname>, so everything can be customised in the usual way.
+  For instance, the <literal>BerkeleyDB</literal> module has a
+  <varname>preConfigure</varname> hook to generate a configuration file used by
+  <filename>Makefile.PL</filename>:
 <programlisting>
 { buildPerlPackage, fetchurl, db }:
 
@@ -108,23 +109,20 @@ buildPerlPackage rec {
   };
 
   preConfigure = ''
-    echo "LIB = ${db}/lib" > config.in
-    echo "INCLUDE = ${db}/include" >> config.in
+    echo "LIB = ${db.out}/lib" > config.in
+    echo "INCLUDE = ${db.dev}/include" >> config.in
   '';
 }
 </programlisting>
-
-</para>
-
-<para>Dependencies on other Perl packages can be specified in the
-<varname>buildInputs</varname> and
-<varname>propagatedBuildInputs</varname> attributes.  If something is
-exclusively a build-time dependency, use
-<varname>buildInputs</varname>; if it’s (also) a runtime dependency,
-use <varname>propagatedBuildInputs</varname>.  For instance, this
-builds a Perl module that has runtime dependencies on a bunch of other
-modules:
-
+ </para>
+
+ <para>
+  Dependencies on other Perl packages can be specified in the
+  <varname>buildInputs</varname> and <varname>propagatedBuildInputs</varname>
+  attributes. If something is exclusively a build-time dependency, use
+  <varname>buildInputs</varname>; if it’s (also) a runtime dependency, use
+  <varname>propagatedBuildInputs</varname>. For instance, this builds a Perl
+  module that has runtime dependencies on a bunch of other modules:
 <programlisting>
 ClassC3Componentised = buildPerlPackage rec {
   name = "Class-C3-Componentised-1.0004";
@@ -137,24 +135,26 @@ ClassC3Componentised = buildPerlPackage rec {
   ];
 };
 </programlisting>
+ </para>
 
-</para>
-
-<section xml:id="ssec-generation-from-CPAN"><title>Generation from CPAN</title>
+ <section xml:id="ssec-generation-from-CPAN">
+  <title>Generation from CPAN</title>
 
-<para>Nix expressions for Perl packages can be generated (almost)
-automatically from CPAN.  This is done by the program
-<command>nix-generate-from-cpan</command>, which can be installed
-as follows:</para>
+  <para>
+   Nix expressions for Perl packages can be generated (almost) automatically
+   from CPAN. This is done by the program
+   <command>nix-generate-from-cpan</command>, which can be installed as
+   follows:
+  </para>
 
 <screen>
 $ nix-env -i nix-generate-from-cpan
 </screen>
 
-<para>This program takes a Perl module name, looks it up on CPAN,
-fetches and unpacks the corresponding package, and prints a Nix
-expression on standard output.  For example:
-
+  <para>
+   This program takes a Perl module name, looks it up on CPAN, fetches and
+   unpacks the corresponding package, and prints a Nix expression on standard
+   output. For example:
 <screen>
 $ nix-generate-from-cpan XML::Simple
   XMLSimple = buildPerlPackage rec {
@@ -170,26 +170,23 @@ $ nix-generate-from-cpan XML::Simple
     };
   };
 </screen>
-
-The output can be pasted into
-<filename>pkgs/top-level/perl-packages.nix</filename> or wherever else
-you need it.</para>
-
-</section>
-
-<section xml:id="ssec-perl-cross-compilation"><title>Cross-compiling modules</title>
-
-<para>Nixpkgs has experimental support for cross-compiling Perl
-modules. In many cases, it will just work out of the box, even for
-modules with native extensions. Sometimes, however, the Makefile.PL
-for a module may (indirectly) import a native module. In that case,
-you will need to make a stub for that module that will satisfy the
-Makefile.PL and install it into
-<filename>lib/perl5/site_perl/cross_perl/${perl.version}</filename>.
-See the <varname>postInstall</varname> for <varname>DBI</varname> for
-an example.</para>
-
-</section>
-
+   The output can be pasted into
+   <filename>pkgs/top-level/perl-packages.nix</filename> or wherever else you
+   need it.
+  </para>
+ </section>
+
+ <section xml:id="ssec-perl-cross-compilation">
+  <title>Cross-compiling modules</title>
+
+  <para>
+   Nixpkgs has experimental support for cross-compiling Perl modules. In many
+   cases, it will just work out of the box, even for modules with native
+   extensions. Sometimes, however, the Makefile.PL for a module may
+   (indirectly) import a native module. In that case, you will need to make a
+   stub for that module that will satisfy the Makefile.PL and install it into
+   <filename>lib/perl5/site_perl/cross_perl/${perl.version}</filename>. See the
+   <varname>postInstall</varname> for <varname>DBI</varname> for an example.
+  </para>
+ </section>
 </section>
-