Le Perl utilisé doit être au minimum 5.8.2 et être compilé avec les options usethreads , useithreads et usemultiplicity. Pour le vérifier taper: perl –V:uses.+
En théorie il suffit de 4 commandes pour installer mod_perl
perl Makefile.PL MP_AP_PREFIX=\Path\to\Apache2.2.xMalheureusement il y a quelques bugs…
nmake
nmake test
nmake install
1) Première étape, premier bug
Télécharger les sources de mod_perl 2.0.x ici : http://apache.org/dist/perl/
Assurez vous d’avoir le Perl et le bin de msvc dans le PATH puis, depuis la racine des sources de mod_perl, tapez ces 3 commandes:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat"
set MP_USE_MY_EXTUTILS_EMBED=1
perl Makefile.PL MP_AP_PREFIX=\Path\to\Apache2.2.x
Premier problèmes; Vous n’avez pas la librairie apxs.
Il propose de la télécharger, mais l’url est invalide.
Install apxs now? [yes]
Download of http://perl.apache.org/dist/win32-bin/apxs_win32.tar.gz failed
La bonne url est: https://archive.apache.org/dist/perl/win32-bin/apxs_win32.tar.gz
Il faut éditer le fichier build\win32_fetch_apxs et remplacer
my $remote = 'http://perl.apache.org/dist/win32-bin/' . $file;
par
my $remote = 'https://archive.apache.org/dist/perl/win32-bin/' . $file;
Cette fois le commande perl Makefile.PL MP_AP_PREFIX=\Path\to\Apache2.2.x doit aboutir.
2) Deuxième étape (compilation), deuxième bug
L'étape suivante consiste à exécuter (toujours depuis la racine des sources de mod_perl)
nmakeMais ça ne marche pas car on obtient :
'C:\Program' is not recognized as an internal or external command, operable program or batch file.
NMAKE : fatal error U1077: 'cd' : return code '0x1'
Stop.
Il faudrait éditer le fichier Makefile et ajouter les quotes au path de MAKE.
MAKE = “C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\nmake.exe”
mais ce bug est dans tous les Makefile des sous répertoires. Au total cela en fait plus de 60 !
La solution que j’utilise est d'éditer le module \Perl\lib\ActivePerl\Config.pm et d’ajouter des quotes autour de $prog
for (@make) {Mais en ajoutant ces quotes on rend une expression régulière invalide. Il faut éditer \Perl\lib\ExtUtils\MM_Win32.pm et corriger la fonction is_make_type() en supprimant le $ de la fin de l’expression régulière
if (my $prog = _find_prog($_)) {
$_[0] = $OVERRIDE{$key} = "\"$prog\"";
sub is_make_type {Avec ces 2 modifs on peut exécuter nmake sans avoir d'erreurs.
my($self, $type) = @_;
return !! ($self->make =~ /\b$type(?:\.exe)?$/);
}
3) Troisième étape (tests), troisième bug
nmake testLe daemon httpd.exe va être exécuté, certains tests ne sont pas exécutés s’il manque des dépendances mais certains vont échouer (en tout cas avec la version mod_perl 2.0.8) !
t/api/err_headers_out.t (Wstat: 0 Tests: 6 Failed: 3)
Failed tests: 2-3, 5
Files=1, Tests=6, 2
Result: FAIL
Failed 1/1 test programs. 3/6 subtests failed.
Solution: Dans le fichier t\api\err_headers_out.t il faut remplacer à deux endroits:
if defined HTTP::Headers->VERSION and HTTP::Headers->VERSION==6.00;
par
if defined HTTP::Headers->VERSION and HTTP::Headers->VERSION>=6.00;
Avec ces 2 modifs on peut exécuter nmake test sans avoir d'erreurs.
4) Dernière étape
nmake installet ça marche (enfin) !