Pregunta ¿Por qué cpanm falla en distribuciones sin makefiles adecuados donde cpan -i tiene éxito?


Estoy en Strawberry Perl en Windows 7 de 64 bits. cpanm falla así para muchos paquetes en cpan:

$ cpanm Getopt::Long::Descriptive
Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-0.097.tar.gz ... OK
Configuring Getopt-Long-Descriptive-0.097 ... N/A
! The distribution doesn't have a proper Makefile.PL/Build.PL See C:\Users\me\.cpanm\work\1399608810.1056\build.log for details.

Todavía, cpan -i Getopt::Long::Descriptive tiene éxito ¿Alguna idea de por qué?


EDITAR (salida de build.log)

cpanm (App::cpanminus) 1.7001 on perl 5.018002 built for MSWin32-x64-multi-thread
Work directory is C:\Users\me/.cpanm/work/1399608810.1056
You have make C:\strawberry\c\bin\dmake.exe
You have LWP 6.05
You have C:\dev\tools\UnxUtils\usr\local\wbin\tar.exe, C:\dev\tools\UnxUtils\usr\local\wbin\gzip.exe and C:\dev\tools\UnxUtils\usr\local\wbin\bzip2.exe
You have C:\dev\tools\UnxUtils\usr\local\wbin\unzip.exe
Searching Getopt::Long::Descriptive on cpanmetadb ...
--> Working on Getopt::Long::Descriptive
Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-0.097.tar.gz
-> OK
Unpacking Getopt-Long-Descriptive-0.097.tar.gz
Entering Getopt-Long-Descriptive-0.097
META.yml/json not found. Creating skeleton for it.
Configuring Getopt-Long-Descriptive-0.097
-> N/A
-> FAIL The distribution doesn't have a proper Makefile.PL/Build.PL See C:\Users\me\.cpanm\work\1399608810.1056\build.log for details.

EDITAR (problema de desembalaje)

¡Fascinante, parece que los archivos están desempacados, pero nunca aparecen en el disco!

C:\Users\me>cpanm -v --look Getopt::Long::Descriptive
cpanm (App::cpanminus) 1.5018 on perl 5.016002 built for MSWin32-x64-multi-thread
Work directory is C:\Users\me/.cpanm/work/1399909160.7264
You have make C:\strawberry\c\bin\dmake.exe
You have LWP 6.04
You have C:\UnxUtils\usr\local\wbin\tar.exe, C:\UnxUtils\usr\local\wbin\gzip.exe and C:\UnxUtils\usr\local\wbin\bzip2.exe
You have C:\UnxUtils\usr\local\wbin\unzip.exe
Searching Getopt::Long::Descriptive on cpanmetadb ...
--> Working on Getopt::Long::Descriptive
Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Getopt-Long-Descriptive-0.097.tar.gz ... OK
Unpacking Getopt-Long-Descriptive-0.097.tar.gz
Getopt-Long-Descriptive-0.097
README
Changes
LICENSE
dist.ini
META.yml
MANIFEST
META.json
Makefile.PL
t
descriptive.t
shortcircuit.t
release
pod-syntax.t
000-report-versions-tiny.t
Long
Descriptive.pm
changes_has_content.t
Descriptive
Opts.pm
Usage.pm
Entering Getopt-Long-Descriptive-0.097
Entering C:/Users/me/.cpanm/work/1399909160.7264/Getopt-Long-Descriptive-0.097 with C:\Windows\system32\cmd.exe
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\me\.cpanm\work\1399909160.7264\Getopt-Long-Descriptive-0.097>dir
 Volume in drive C is OS
 Volume Serial Number is 008E-DBB0

 Directory of C:\Users\me\.cpanm\work\1399909160.7264\Getopt-Long-Descriptive-0.097

05/12/2014  11:39 AM    <DIR>          .
05/12/2014  11:39 AM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  48,360,112,128 bytes free

EDITAR (archivos encontrados, hasta un nivel)

C:\Users\me\.cpanm\work\1399909160.7264\Getopt-Long-Descriptive-0.097>cd ..

C:\Users\me\.cpanm\work\1399909160.7264>ls
000-report-versions-tiny.t            Makefile.PL
Changes                               Opts.pm
Descriptive                           README
Descriptive.pm                        Usage.pm
Getopt-Long-Descriptive-0.097         changes_has_content.t
Getopt-Long-Descriptive-0.097.tar.gz  descriptive.t
LICENSE                               dist.ini
Long                                  pod-syntax.t
MANIFEST                              release
META.json                             shortcircuit.t
META.yml                              t

1


origen


Eso es raro, porque Getopt :: Long :: Versión descriptiva 0.097 hace contener un Makefile.PL. ¿Puedes inspeccionar el registro de construcción apuntado por el mensaje de error? - Edward
Agregué la información de build.log. Nota: el directorio Getopt-Long-Descriptivo-0.097 en .cpanm \ work \ 1399608810.1056 está vacío. Supongo que cpanm eliminó los contenidos después de una instalación fallida. Los otros paquetes que instalé con esta ejecución no tienen directorios vacíos. - Chris Betti
Asi que build.log tampoco es muy útil ... Parece que algo salió mal al desempaquetar el dist. ¿Sabías que puedes correr cpanm --look Getopt::Long::Descriptive para hacer que cpam descomprima el dist por ti? Cambiará al directorio donde desempaquetó el dist, para que pueda ejecutar perl Makefile.PL, make y todas esas cosas de forma manual. - Edward
En cuanto a --look output: cuando ejecuto wget, gunzip y tar a mano, los archivos se descomprimen bien. - Chris Betti
Busqué en mi disco duro y encontré los archivos. No fueron desempaquetados en el subdirectorio en el que el padre esperaba que estuvieran. En su lugar, fueron desempaquetados en el directorio anterior. Me pregunto si este es un requisito de cpan que falta el paquete, o si cpanm podría ser un poco mejor para detectar archivos en la raíz del archivo. - Chris Betti


Respuestas:


Resulta que UnxUtils tar tuvo la culpa en este caso. No estoy seguro de cómo Getopt::Long::Descriptive se creó el archivo, pero el alquitrán UnxUtils aplana el contenido cuando se desempaqueta.

Por otro lado, el alquitrán GnuWin32 maneja bien el archivo.


0