Bien utiliser MakeMaker

La création de modules perl est grandement facilitée par l'utilisation de h2xs. Leur installation est aussi simplifiée par l'utilisation de MakeMaker... encore faut-il l'utiliser correctement!

J'ai récemment créer un module perl. Je lui ai adjoint deux scripts qui utilisent ce module. Ils font partie intérgrante du module. Je désire les installer dans un endroit particulier, par exemple /usr/loca/scripts/. Pour cela rien de plus simple je modifie le script Makefile.PL. Supposons que je continue mon pseudo module XML::Tools. Je lui ajoutes un script transform.pl que je veux installer en même temps que le module.

Les variables de Makefile.PL à utiliser sont EXE_FILES et INSTALLSCRIPT qui contiennent respectivement les fichiers (scripts) à installer et le répertoire d'installation. J'ai donc modifié le script Makefile.PL ainsi:

use 5.004;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
    NAME              => 'XML::Tools',
    VERSION_FROM      => 'lib/XML/Tools.pm', # finds $VERSION
    PREREQ_PM         => {}, # e.g., Module::Name => 1.1
    ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
    (ABSTRACT_FROM  => 'lib/XML/Tools.pm', # retrieve abstract from module
    AUTHOR         => 'Nicolas >nikrou77@gmail.com<') : ()),
    EXE_FILES => [qw!transform.pl!],
    INSTALLSCRIPT => "/usr/local/scripts/",
);

Cela semble pas mal mais en y regardant de plus près et surtout en testant, le script n'est pas installé dans /usr/loca/scripts/. En fait la solution est dans la documentation qu'il aurait fallu que je lise avant de m'arracher le peu de cheveux qu'ils me restent! Il faut ajouter le paramètre INSTALLDIRS dans le Makefile.PL et le positionner à perl car il est par défaut à site ce qui provoque l'installation des scripts au même endroit que le module. Le script Makefile.PL modifié ressemble à ça:

use 5.004;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
    NAME              => 'XML::Tools',
    VERSION_FROM      => 'lib/XML/Tools.pm', # finds $VERSION
    PREREQ_PM         => {}, # e.g., Module::Name => 1.1
    ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
    (ABSTRACT_FROM  => 'lib/XML/Tools.pm', # retrieve abstract from module
    AUTHOR         => 'Nicolas >nikrou77@gmail.com<') : ()),
    EXE_FILES => [qw!transform.pl!],
    INSTALLSCRIPT => "/usr/local/scripts/",
    INSTALLDIRS => "perl"
);

Haut de page