2011-08-21 6 views
5

Cuando compila Perl desde el origen, tiene la opción de ejecutar make test antes de instalar Perl en su destino final.probando perl una vez instalado

¿Es posible hacer el equivalente a make test después de instalar perl?

Tenga en cuenta que no tendré la fuente original. Lo que me gustaría hacer es descargar el archivo tar de origen para la misma versión de Perl que he instalado y luego ejecutar las pruebas (desde el archivo tar de origen) contra el Perl instalado.

Posible/imposible? ¿Facil dificil? ¿Cómo voy a hacer esto?

Respuesta

1

Puede comenzar leyendo el archivo t/TEST en el código fuente de Perl.

Aviso lo siguiente:

  1. Utiliza "# ./ Perl!", Como el que ella-bang

  2. A continuación, en torno a la línea 142, que hace un cambiar al directorio del t.

Como punto de partida se puede modificar ese momento ella-bang para que apunte a su ejecutable perl instalado, y copiar el contenido del directorio 't' en el directorio de paquetes base de Perl (o al revés) .

Así es como lo comenzaría.

Otra forma es hacer una lista de todos los archivos instalados cuando ejecute make install (haga que instale perl en un directorio temporal y luego haga un ls -lR en ese directorio para generar la lista) y luego copie esos archivos desde el perl instalado en su directorio fuente perl.

El uso de un sistema de control de versiones (git, por ejemplo) puede ayudar mucho aquí para que pueda retroceder fácilmente a las versiones prístinas de los archivos que haya sobrescrito en el camino.

+0

haven; 't probado esto todavía, pero supongo que primero tengo que hacer un 'Configure' y' make' ... hmmmm .... – ErikR

2
  • Posible.
  • Difícil.
  • No vale la pena.

Ejecutar las pruebas con el Perl instalado en lugar del Perl recién creado requeriría que comprenda cómo convencer al sistema de prueba para que ignore toda la construcción que no ha hecho y continúe con la prueba utilizando el instalado Perl. No podría decir 'hacer prueba' porque lo primero que le gustaría hacer es crear Perl. En realidad, más al punto, no podrías decir 'make test' porque no tendrías un makefile.

¿Por qué quieres hacer esto? Si no confías en el sistema Perl, no lo uses. Cree su propio, pruébelo e instálelo en su ubicación en lugar de la ubicación de un sistema. Lo hago la mayor parte del tiempo; No me arriesgo a romper el Perl del sistema al modificarlo y usar el mío. Por supuesto, tengo 5.10.0, 5.10.1, 5.12.1, 5.14.0 y 5.14.1 construidos (por mí) para que juegue. Por lo general, tengo al menos una versión 5.8.x también, pero no en esta máquina en este momento.

Además, recuerde que las personas que instalan un sistema Perl están en su sano juicio. Ejecutan las pruebas y no instalan Perl a menos que todas las pruebas pasen (o sustancialmente todas pasen).

+0

Es por eso que me pregunto si tienes que hacer un 'Configure' y 'make' primero. Luego, engaña al arnés de prueba para que use tu perl en lugar del perl recién construido. En cuanto a por qué alguien querría hacer esto, supongamos que obtiene un tar-ball de un perl ya instalado. Después de desempacarlo, me gustaría poder probarlo. Tengo mis razones :-) – ErikR

+0

Tendría que ejecutar Configurar para obtener un archivo MAKE. Si ejecutó 'make test' sin haber ejecutado 'make' primero, entonces 'make test' ejecutará el 'plain make' por usted, por lo que terminaría con una compilación del software antes de ejecutar cualquier prueba. Además, tendrías que trabajar bastante duro para evitar probar los módulos en el área de construcción y probar los módulos instalados. Está subvirtiendo para qué se diseñó el conjunto de pruebas de Perl. Supongo que podrías intentar copiar el código instalado sobre la compilación, pero incluso eso no es trivial, especialmente si el diseño no es estándar. –

+0

Creo que tendrías que hacer lo contrario de 'make install' con tu Perl instalado. Esto puede ser arbitrariamente complejo o incluso imposible. – musiKk

2

posible, sólo un poco difícil (sin Configure o make necesario), que puede resultar útil:

El esquema de prueba en la distribución de cargas fuente de todo lo que fuera del directorio lib` directorio /path/to/src/distribution/lib'. The key to running your existing perl installation against this test suite is to put all of the install libraries into this. Esto se puede hacer con algo como:

cd /path/to/src/distribution 
mv lib lib-original 
mkdir lib 
/path/to/installed/perl -e 'system qq{cp -prv "$_/." lib/}' \ 
     -e 'for "lib-original",grep /../,reverse(@INC)' 

(es probable que haya una más robusta de comandos que utiliza perl-MFile::Copy, pero esto de una sola línea rápido y sucio-me consiguió que iba). Usamos reverse @INC para que las bibliotecas del frente @INC sobrescriban las bibliotecas posteriores y no al revés. La cláusula grep /../,... nos impide copiar . en lib, lo que probablemente no sea útil.

Encontré algunas pruebas que usan rutas codificadas a perl, psed y s2p en el directorio fuente. Querrá asegurarse de que estos archivos existen y que las pruebas se dirigen a las versiones instaladas de estos programas.

rm -f perl t/perl psed t/psed x2p/s2p 
ln -s /path/to/installed/perl perl 
ln -s /path/to/installed/perl t/perl 
ln -s /path/to/installed/psed psed 
ln -s /path/to/installed/psed t/psed 
ln -s /path/to/installed/s2p x2p/s2p 

Ahora utilice el normal Unix y lenguaje para el funcionamiento de un conjunto de pruebas Perl:

cd t 
/path/to/installed/perl -MExtUtils::Command::MM \ 
     -e 'test_harness(0,"../lib")' */*.t 

Algunas pruebas pueden ser explícita sobre cómo probar la integridad del proceso de acumulación de fuente, por lo que algunos fallos son de esperar.

(este proceso probado en v5.14.0, v5.8.9, v5.10.1)

Actualización: aún más difícil. Hay muchos otros directorios t dentro de una distribución fuente típica. Es probable que también quiere probar:

cd /path/to/source/distribution 

for dir in */*/ 
do 
     if [ -d $dir/t ] ; then 
      pushd $dir 
      echo Testing $dir 
      /path/to/installed/perl -MExtUtils::Command::MM \ 
        -e 'test_harness(0,"../../lib","lib")' t/*.t 
      popd 
     fi 
done 

Muchas de estas pruebas está probando explícitamente la integridad de la estructura, por lo que puede esperar muchas de estas pruebas a fallar.

Cuestiones relacionadas