2010-10-22 16 views
5

Me gustaría factorizar algunas de las cosas en Crypt::SSLeay 's Makefile.PL en un par de clases separadas. Estas clases solo serían utilizadas por Makefile.PL. Como tal, yo los quiero¿Cuál es la forma correcta de agregar un módulo de utilidad a una distribución de CPAN?

  1. de no ser indexados por el indexador PAUSA
  2. no necesita ser instalado como parte del módulo.

¿Debo simplemente ponerlos en inc de la manera Module::Install? ¿A qué más debería prestarle atención?

+0

Esto suena como un momento ideal para convertir a Dist :: Zilla y luego poner su nueva funcionalidad en un plugin dzil. – Ether

+1

@Ether * Suspiro * tienes razón. Tristemente, siento que nunca podré * entender * 'Dist :: Zilla' mucho menos usarlo correctamente. –

+0

OK, entonces surgió otra pregunta: http://stackoverflow.com/questions/4000837/where-can-i-find-a-concise-guide-to-converting-an-existing-cpan-module-to -use-dis –

Respuesta

4

PAUSE busca un parámetro no_index en el archivo META.yml (especificaciones: v1.4, v2). El valor por defecto META.yml que hace ExtUtils::MakeMaker contiene

no_index: 
    directory: 
     - t 
     - inc 

pero se puede añadir más datos a ella si desea

package: 
     - Some::Package::Used::For::Building::But::Not::To::Be::Installed 
    file: 
     - a-file/with/a/package/statement/that-should-be/ignored.pm 
2

En realidad, hay dos problemas aquí. Una es evitar que PAUSE indexe los módulos adicionales en su distribución para que no aparezcan en el 02paquetes, y cómo no engañar a un usuario para que los instale.

La respuesta pausa es una combinación de la solución adecuada, el material no_index, y el viejo folclore de falsificar cabo mldistwatch. PAUSE quiere descubrir qué paquetes están en su distribución. Busca el package en la misma línea que un espacio de nombres. Si no está en la misma línea, PAUSE pasa por encima. Por lo tanto, se verá en algunos módulos antiguos "ocultos" líneas como:

package # separate lines get past PAUSE 
     Some::Helper::Module; 

Si te gusta mirar detrás de la cortina, el código correspondiente es PAUSE::mldistwatch::filter_pms() en (la PAUSE github repo).

El otro problema es no instalar cosas adicionales que están en la distribución. La indexación no tiene nada que ver con eso. Los archivos de compilación mueven muchas cosas a blib (la biblioteca de compilación) para prepararlas para la instalación. Todo lo que termina allí se instala. El truco está en no dejar que el constructor ponga sus módulos de ayuda allí. Por lo general, esto no es un problema siempre que no los coloque en el nivel superior de su distribución o en el directorio lib.

Cuestiones relacionadas