5

¿Qué es una alternativa a las autotools en el mundo de Haskell? Quiero poder elegir entre diferentes configuraciones del mismo código fuente. Por ejemplo, hay al menos dos implementaciones de MD5 en Haskell: Data.Digest.OpenSSL.MD5 y Data.Digest.Pure.MD5. Me gustaría escribir el código de tal manera que pueda averiguar qué biblioteca ya está instalada y no requirió la instalación del otro.¿Cómo puedo administrar múltiples configuraciones de un solo programa Haskell?

En C Puedo usar Autotools/Scons/CMake + cpp. En Python puedo capturar ImportError. ¿Qué herramientas debo usar en Haskell?

+0

Gracias, Norman, este es el mejor título – sastanin

Respuesta

14

En Haskell utiliza configuraciones Cabal. En el directorio de nivel superior de su proyecto, coloca un archivo con la extensión .cabal, por ejemplo, <yourprojectname>.cabal. Los contenidos son aproximadamente:

Name:    myfancypackage 
Version:    0.0 
Description:   myfancypackage 
License:    BSD3 
License-file:  LICENSE 
Author:    John Doe 
Maintainer:   [email protected] 
Build-Type:   Simple 
Cabal-Version:  >=1.4 

Flag pure-haskell-md5 
    Description: Choose the purely Haskell MD5 implementation 
    Default: False 

Executable haq 
    Main-is:   Haq.hs 
    Build-Depends:  base-4.* 
    if flag(pure-haskell-md5) 
    Build-Depends: pureMD5-0.2.* 
    else 
    Build-Depends: hopenssl-1.1.* 

El Cabal documentation tiene más detalles, en particular la sección que Configurations.

+0

Gracias! Esta es exactamente la respuesta que estaba buscando. Además, entiendo, tengo que usar CC-Options y cpp. ¿Derecho? – sastanin

+1

Correcto, se llama 'CPP-options',' CC' es el compilador de C. También tiene que ir a compilar su proyecto usando cabal. Eche un vistazo al archivo Makefile y .cabal de uno de mis proyectos: [Scion] (http://github.com/nominolo/scion/tree/master). Además, debe agregar {- # LANGUAGE CPP # -} a los archivos relevantes. – nominolo

+0

Gracias. Ahora es mucho más claro. – sastanin

2

Como dice nominolo, Cabal es la herramienta para usar. En particular, la sintaxis de 'configuraciones'

Cuestiones relacionadas