5

Was ist eine Alternative zu Autotools in Haskell? Ich möchte in der Lage sein, zwischen verschiedenen Konfigurationen desselben Quellcodes zu wählen.Wie kann ich mehrere Konfigurationen eines einzelnen Haskell-Programms verwalten?

Zum Beispiel gibt es in Haskell mindestens zwei Implementierungen von MD5: Data.Digest.OpenSSL.MD5 und Data.Digest.Pure.MD5. Ich möchte Code so schreiben, dass er herausfinden kann, welche Bibliothek bereits installiert ist und nicht die andere installieren muss.

In C kann ich Autotools/Scons/CMake + cpp verwenden. In Python kann ich ImportError fangen. Welche Tools sollte ich in Haskell verwenden?

+0

Danke, Norman, das ist der bessere Titel. – sastanin

Antwort

14

In Haskell verwenden Sie Cabal-Konfigurationen. In Ihrem Projektverzeichnis der obersten Ebene legen Sie eine Datei mit der Erweiterung .cabal, z. B. <yourprojectname>.cabal, ab. Die Inhalte sind in etwa:

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

Die Cabal documentation hat weitere Details, insbesondere den Abschnitt über Configurations.

+0

Danke! Das ist genau die Antwort, die ich gesucht habe. Sowie ich verstehe, muss ich CC-Optionen und verwenden cpp. Richtig? – sastanin

+1

Richtig, es heißt "CPP-Optionen", "CC" ist der C-Compiler. Sie müssen auch Ihr Projekt mit cabal bauen. Werfen Sie einen Blick auf die Makefile und. Cabal-Datei von einem meiner Projekte: [Scion] (http://github.com/nominolo/scion/tree/master). Außerdem müssen Sie {- # LANGUAGE CPP # -} zu den relevanten Dateien hinzufügen. – nominolo

+0

Danke, jetzt ist es viel klarer. – sastanin

2

Wie nominololo sagt, ist Cabal das Werkzeug zu verwenden. Vor allem die "Konfigurationen" -Syntax.