5

Qual è un'alternativa agli autotools nel mondo Haskell? Voglio essere in grado di scegliere tra diverse configurazioni dello stesso codice sorgente.Come posso gestire più configurazioni di un singolo programma Haskell?

Ad esempio, in Haskell esistono almeno due implementazioni di MD5: Data.Digest.OpenSSL.MD5 e Data.Digest.Pure.MD5. Mi piacerebbe scrivere codice in modo tale da poter capire quale libreria è già installata e non ha bisogno di installare l'altra.

In C Posso utilizzare Autotools/Scons/CMake + cpp. In Python posso prendere ImportError. Quali strumenti dovrei usare in Haskell?

+0

Grazie, Norman, questo è il titolo migliore – sastanin

risposta

14

In Haskell si usano le configurazioni della Cabala. Nella directory di primo livello del progetto, hai inserito un file con l'estensione .cabal, ad esempio <yourprojectname>.cabal. I contenuti sono più o meno:

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.* 

Il Cabal documentation ha più dettagli, in particolare la sezione sulla Configurations.

+0

Grazie! Questa è esattamente la risposta che stavo cercando.Per quanto ho capito, devo usare CC-Options e cpp., giusto? – sastanin

+1

A destra, si chiama 'CPP-options',' CC' è il compilatore C. Devi anche costruire il tuo progetto usando cabal. Dai un'occhiata al file Makefile e .cabal da uno dei miei progetti: [Scion] (http://github.com/nominolo/scion/tree/master) Inoltre, è necessario aggiungere {- # LANGUAGE CPP # -} ai file rilevanti: – nominolo

+0

Grazie, ora è molto più chiaro. – sastanin

2

Come dice il nominolo, Cabal è lo strumento da utilizzare. In particolare, la sintassi delle "configurazioni"

Problemi correlati