2011-10-04 9 views

Respuesta

5

Uso cabalvchk: http://hackage.haskell.org/package/cabalvchk-0.2

Por ejemplo, para verificar que la versión de parsec es> = 0,4, puede emitir:

$ cabalvchk parsec '>= 0.4' 

El código de retorno será cero si la restricción versión está satisfecho y no cero de lo contrario. La restricción de versión puede ser cualquier cosa que la élite comprenda. Un tercer parámetro opcional puede no estar en blanco para solicitar una salida detallada.

+0

Esto es realmente genial, incluso si eso significa que debo introducir una nueva dependencia. –

+0

Gracias! A más largo plazo, podría solicitar a la gente de la herramienta cabal que agregue esta funcionalidad directamente a cabal, lo que reduciría las dependencias, pero esta dependencia adicional sería necesaria para sus necesidades inmediatas. –

3

No sé mucho acerca de configure; ¿Puedes pedirle que ejecute un comando en particular? Si es así, entonces ghc-pkg latest debería ayudarlo. Por ejemplo, aquí hay una carrera en mi máquina para el paquete zlib:

% ghc-pkg latest zlib 
zlib-0.5.3.1 
% ghc-pkg latest --global zlib 
zlib-0.5.3.1 
% ghc-pkg latest --user zlib 
ghc-pkg: cannot find package zlib 
zsh: exit 1  ghc-pkg latest --user zlib 

El --global deben utilizarse para instalaciones de todo el sistema, y ​​sin pabellón para instalaciones específicas del usuario. El indicador --user solo se debe usar cuando desee verificar si un usuario tiene una instalación local de un paquete (que puede anular el global).

A menos que tenga un motivo para no hacerlo, le recomendamos abandonar configure a favor de cabal. Para cabal, la solución en este caso es la primera cabal init en el directorio del proyecto, a continuación, compruebe que tiene una línea como esta en el archivo .cabal que se crea:

build-depends: zlib >= 0.5 

La cadena de herramientas cabal es el estándar para proyectos Haskell (porque automatiza y simplifica muchas cosas, incluida la búsqueda de la dependencia). También puede solicitar cabal para invocar configure si hay otras dependencias. Abra una pregunta por separado si desea obtener más información al respecto.

+0

Gracias por la respuesta.Ya uso ghc-pkg, pero no sé de qué manera decir 'Necesito la versión> = x.y'. La razón para usar 'configure' es que los scripts de haskell son parte de un programa más grande escrito principalmente en python, y todas las dependencias ya se administran a través de configure. –

0

Usando ghc-pkg list, puede obtener una lista de las versiones instaladas de un paquete en orden ascendente. Es de esperar que puedas filtrar esta lista buscando una coincidencia. (No sé cómo hacer esto con configure, lo siento).

$ ghc-pkg list yesod 
/home/ahammar/.haskell/lib/ghc-7.0.2/package.conf.d 
/home/ahammar/.ghc/x86_64-linux-7.0.2/package.conf.d 
    yesod-0.8.2.1 
    yesod-0.9.1 
    yesod-0.9.2.2 
0

intentar algo como esto:

# Find ghc-pkg, so we can do version checks 
AC_ARG_VAR([GHC_PKG], [Path to ghc-pkg]) 
AC_PATH_PROG([GHC_PKG], [ghc-pkg]) 
AS_IF([test -z "$GHC_PKG"], [AC_MSG_ERROR([Cannot find ghc-pkg.])]) 

# Check that the package actually exists 
AC_MSG_CHECKING([for Haskell package foo]) 
AS_IF([$GHC_PKG latest foo > /dev/null 2>&1], 
    [AC_MSG_RESULT([yes])], 
    [AC_MSG_RESULT([no]) 
AC_MSG_ERROR([Cannot find foo])]) 

# Check its version 
AC_MSG_CHECKING([if foo is new enough]) 
foo_ver=`$GHC_PKG latest foo | sed 's/^foo-//'` 
# At this point you have the version of foo and the minimum version you want. 
# The rest of the test is pretty easy to write, use cut and test to compare the 
# version numbers. If it's new enough, AC_MSG_RESULT([yes]). 
# If not, AC_MSG_RESULT([no]) and AC_MSG_ERROR([foo is not new enough.]) 
1

Tal vez la mejor pregunta es: debe usted? La búsqueda de un número de versión específico es uno de los grandes argumentos en el mundo de autoconf, y el ganador general del debate es el lado que dice que nunca debes hacerlo. ¿Qué característica específica de Haskell necesitas? Prueba para eso Como ejemplo simple (no relacionado con Haskell), suponga que su programa utiliza inotify, por lo que desea que configury lo pruebe si está disponible. Podrías simplemente probar si la versión del kernel es> 2.6.13, pero cuando Joe intente construir tu programa en su versión 2.4.xx en la que ha parcheado la función de inotify, se irritará mucho de que tu programa no lo haga. trabajo.

No importa si Haskell> x.y está disponible. En cambio, hay alguna característica específica de Haskell que desea que se introdujo en x.y; prueba para esa característica.

Cuestiones relacionadas