2011-12-27 7 views
8

que estoy tratando de subir mi primer paquete de Hackage (yay!), Y tengo este error:Haskell: Prueba de un paquete con varias versiones de base para Hackage

The dependency 'build-depends: base' does not specify an upper bound on the version number. Each major release of the 'base' package changes the API in various ways and most packages will need some changes to compile with it. The recommended practise is to specify an upper bound on the version of the 'base' package. This ensures your package will continue to build when a new major version of the 'base' package is released. If you are not sure what upper bound to use then use the next major version. For example if you have tested your package with 'base' version 2 and 3 then use 'build-depends: base >= 2 && < 4'.

que parece como un perfectamente aceptable razón para rechazar mi paquete

¿Hay una buena herramienta para probar mi paquete contra varias versiones de base para que pueda ver cuáles son los límites (en lugar de solo adivinar)? Lo mejor que se me ocurre es el uso de algunas secuencias de comandos shell para hacer algo como:

% for v in $BASE_VERSIONS 
do 
    cabal install base-$v &&\ 
    cabal configure --enable-tests &&\ 
    cabal build &&\ 
    cabal test && echo "$v ok" || echo "$v fail" 
done 

pero siento que debe haber algo mejor.

Respuesta

9

¡Esta es una muy mala idea! Debe no base de actualización o any other packages that come with GHC (los que tienen - en la columna de etiquetas), o todo se romperá horriblemente.

La única manera de probar con una versión anterior de la base es instalar un GHC antiguo y probar con eso. Sugeriría simplemente intentarlo en 7.0.4 y 7.2.2; Apoyar versiones anteriores es probablemente una pérdida de tiempo en estos días.

En caso de error, solo especifique base >= VERSION && < 5, donde VERSION es la versión que tiene su GHC. O base == 4.* y espero lo mejor :)

Con toda seriedad, la API de la base realmente no cambia demasiado, por lo que es poco probable que tenga muchos problemas con esto.

Para probar su programa con varias versiones de paquetes en general sin molestar a su repositorio principal ~/.cabal, recomiendo encarecidamente cabal-dev; algo así como

$ cabal-dev install 'pkg==VERSION' 
$ cabal-dev install 
$ cabal-dev test 

debería hacerlo.

Por cierto, puede hacer cabal check para recibir advertencias sobre problemas como este antes de cargar su paquete en Hackage.

Cuestiones relacionadas