Dokumente & Links
Die Informationsquelle für den Start ist auf haskell.org
Man kann installieren durch:
- Verwenden des Haskell-Installationsprogramms "Platform".
- Haskell-Plattform GitHub README
- Systembezogene Angaben zur Verwendung (für Fedora im Grunde
dnf install haskell-platform
ist dies nicht das, was wir wollen, da dies lediglich die Installation der älteren Version bedeutet). - Eine Diskussion über "Plattform" bei Reddit.
- Mit Hilfe der Haskell „Stack“ Packager zur Verfügung gestellt von stackage.org ( „Stackage ist eine stabile Quelle der Haskell - Pakete ... Teil einer Initiative der kommerziellen Haskell - Gruppe“)
- Bauen Sie es selbst (und wir brauchen Haskell, um Haskell zu bauen)
- Die Anweisungen zum Erstellen und Portieren auf haskell.org sind von unschätzbarem Wert.
Außerdem:
- Auf der Glasgow Haskell Compiler-Seite finden Sie die neueste stabile Version sowie Distributionspakete für Fedora . Sie können hier auch direkt in den Dateibaum springen , um die neueste Version von ghc 7.10.x zu erhalten
- Fedora-Pakete werden von der Fedora Haskell SIG verwaltet, die auch eine Seite über das Verpacken von Haskell-Projekten enthält .
So...
Wir werden den Glasgow Haskell Compiler ghc
mit dem Haskell-Platform- Installationsprogramm erstellen .
Einige Bibliotheken reparieren
Wir müssen das vorkompilierte, neueste Cabal
Paket-Tool anstelle des Systems verwenden Cabal
. Leider kommt es nur in 32-Bit.
Sie können ein vorhandenes deinstallieren Cabal
(wir setzen das später PATH
auf das Neue Cabal
, daher ist dies nicht unbedingt erforderlich).
# as root dnf erase cabal-install cabal-install-static ghc-Cabal-devel
Auf einem 64-Bit-System benötigen wir 32-Bit-Versionen von Bibliotheken für die neuen Cabal
:
# as root dnf install glibc.i686 zlib.i686 gmp-devel.i686 gmp.i686
Zum Kompilieren ghc
benötigen wir 64-Bit gmp-devel
:
# as root dnf install gmp-devel.x86_64
Stellen Sie sicher, dass sowohl 32-Bit als auch 64-Bit installiert sind:
rpm --query gmp-devel > gmp-devel-6.0.0-9.fc22.i686 > gmp-devel-6.0.0-9.fc22.x86_64
Das vorkompilierte ghc
für CentOS, das wir später herunterladen werden, wird irgendwann gesucht libgmp.3
, also brauchen wir einen Symlink:
# as root cd /usr/lib64 ln -s libgmp.so.10.2.0 libgmp.so.3
Installieren Sie zusätzliche Pakete
Es wird Beschwerden über fehlende Z-Bibliotheken und 3D-Bibliotheken geben. So:
# as root dnf install zlib-devel dnf install freeglut freeglut-devel
Und vielleicht:
# as root dnf install ncurses-devel libffi-devel
"libffi" (fremde Funktionsschnittstelle) erscheint interessant.
Wie auch immer, du brauchst make
(GNU make):
# as root dnf install make
Fügen Sie einen speziellen Benutzer hinzu, der den Erstellungsprozess ausführen wird
Wir werden als Benutzer bauen builder
, nicht als root
:
# as root useradd builder
Fügen Sie alt hinzu, ghc
das als Fedora 22-Paket geliefert wird
Wir brauchen das ghc
, was mit Fedora 22 kommt, um die Kompilierung zu starten. Laut der Platform
Readme, ghc
hat> 7.4 sein (Fedora hat ghc
7.8.4).
# as root dnf install ghc
Dies zieht 55 Pakete an, auch libffi-devel
wenn es noch nicht da war.
Du brauchst ausserdem:
# as root dnf install ghc-split
Oder Sie erhalten den Fehler:
> cabal: At least the following dependencies are missing: > hastache >=0.6.0, shake >=0.14, split -any, text -any
Fügen Sie einen neuen vorkompilierten hinzu Cabal
Wie erwähnt. Sie müssen die vorkompilierte Version installieren Cabal
, um die ältere Version von Fedora 22 zu ersetzen.
Die Verwendung von Cabal
1.18.1.0, die im Lieferumfang von Fedora enthalten ist, führt schließlich zu einem Fehler:
> ghc: ghc no longer supports single-file style package databases > (dist/package.conf.inplace) use 'ghc-pkg init' to create the > database with the correct format.
Benutzer werden builder
:
su - builder
Holen Sie sich das Neue Cabal
von der Cabal-Download-Seite, aber wie oben erwähnt, kommt es derzeit nur in 32-Bit.
# as builder cd wget https://www.haskell.org/cabal/release/cabal-install-1.22.0.0/cabal-1.22.0.0-i386-unknown-linux.tar.gz # 3.84 MiB; just contains the "cabal" binary tar xzf cabal-1.22.0.0-i386-unknown-linux.tar.gz mkdir cabalbin mv cabal cabalbin/
Fügen Sie eine vorkompilierte Version hinzu ghc
Wir benötigen eine vorgefertigte "bindist" (vorkompiliert ghc
) zur Kompilierung, die als Argument an die Haskell übergeben wird Platform
.
Die neueste Version finden Sie hier - nehmen Sie die "CentOS".
# as builder cd wget http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-x86_64-unknown-linux-centos66.tar.bz2
Der 131,82-MiB-Tarball muss nicht dekomprimiert oder entpackt werden.
Melodie Platform
Überprüfen der README :
Wenn Sie ein Posix-ähnliches System (Linux oder BSD) erstellen, können Sie die Befehlszeilenoption --prefix hinzufügen, um anzugeben, wo auf dem Zielsystem der Baum der zu erstellenden Objekte platziert wird. Der Standardwert ist "/ usr / local / haskell". Das Build wird ein weiteres Verzeichnis unter dem Namen "ghc-xyz-arch" enthalten, und alles wird dort installiert.
... also stimmen wir nichts ab, denn es /usr/local/haskell
klingt genau so, wie wir es wollen.
Und auch:
Durch Hinzufügen von -j [n] zum Build-Aufruf können Sie auf mehrere Kerne gleichzeitig bauen.
Es hat dies versucht, aber es scheint nicht zu funktionieren ...
Erhalten Platform
Klon Platform
von github in ein „.sav“ Verzeichnis. Dies ist erforderlich, da die Kompilierung möglicherweise fehlschlägt. In diesem Fall möchten Sie einfach nur das, was getan wurde, wegblasen und von vorne beginnen:
# as builder cd git clone https://github.com/haskell/haskell-platform mv haskell-platform haskell-platform.sav
Korrigieren Sie den PFAD des Benutzers builder
! Irgendwann muss das neueste, kompilierte ghc
verwendet werden, anstatt das mit dem System mitgelieferte!
builder
Bearbeiten Sie als Benutzer Ihr ~/.bash_profile
und fügen Sie Folgendes hinzu:
PATH=$HOME/cabalbin/:$HOME/haskell-platform/build/ghc-bindist/local/bin/:$PATH:$HOME/.local/bin:$HOME/bin
Wie zuvor eingerichtet $HOME/cabalbin
enthält ein frisches Cabal
und zu einem bestimmten Zeitpunkt $HOME/haskell-platform/build/ghc-bindist/local/bin/
das Neueste ghc
.
Abmelden / Anmelden, um den neuen PFAD zu verwenden.
Bauen
Beginnen Sie jetzt mit dem Aufbau
# as builder cd /bin/rm -rf haskell-platform cp -a haskell-platform.sav haskell-platform cd haskell-platform ./platform.sh ../ghc-7.10.2-x86_64-unknown-linux-centos66.tar.bz2
Dieser Build sollte tatsächlich erfolgreich sein, kann jedoch auf einem nicht langsamen Computer etwa 20 Minuten dauern. Dann siehst du:
> To install this build: > 1) copy build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz to the target machine > 2) untar it (creates files in the working directory) > 3) as root, run the script ./install-haskell-platform.sh > Build completed in 22:54m > # tar (for build/product/hp-usr-local.tar.gz) > # cp (for build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz) > # tar (for build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz)
Installieren
Gehen Sie wie oben beschrieben vor
# as root cp ~builder/haskell-platform/build/product/haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz ~ cd tar xzf haskell-platform-7.10.2-a-unknown-posix-x86_64.tar.gz ./install-haskell-platform.sh
Sie sehen:
> Unpacking ./hp-usr-local.tar.gz to /... > Running /usr/local/haskell/ghc-7.10.2-x86_64/bin/activate-hs ... > > Haskell set to: > GHC /usr/local/haskell/ghc-7.10.2-x86_64 > Haddocks file:///usr/local/haskell/ghc-7.10.2-x86_64/doc/frames.html > Other doc file:///usr/local/haskell/ghc-7.10.2-x86_64/share/doc/ghc/html/index.html > > Symlinks for command line tools (ghc, cabal, etc..) added to: > /usr/local/bin
Symlinks wurden installiert für /usr/local/bin/
:
> activate-hs -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/activate-hs > alex -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/alex > cabal -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/cabal > ghc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc > ghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-7.10.2 > ghci -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghci > ghci-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghci-7.10.2 > ghc-pkg -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-pkg > ghc-pkg-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/ghc-pkg-7.10.2 > haddock -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/haddock > haddock-ghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/haddock-ghc-7.10.2 > happy -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/happy > hp2ps -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hp2ps > hpc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hpc > hsc2hs -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/hsc2hs > HsColour -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/HsColour > runghc -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runghc > runghc-7.10.2 -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runghc-7.10.2 > runhaskell -> /usr/local/haskell/ghc-7.10.2-x86_64/bin/runhaskell
Prinzipiell wir die Beseitigung der vorhandenen Pakete bekommen kann ghc
(der Befehl unten nur funktioniert, wenn Sie geben -y
auf die dnf erase
)
rpm --query --all | grep -e '^ghc-' | xargs dnf erase
Führen Sie Test Suite aus
Es ist eine gute Idee, die Testsuite auszuführen.
In der Tat treffe ich gerade einige Fehler ...
Diese werden in GHC Trac nach Hause gehen
Allgemeine Anweisungen finden Sie unter " Laufende Tests " auf haskell.org.
Um Tests auszuführen, muss die Quelle der Testsuite von dieser Seite "über der" Quellstruktur installiert werden, die vom Build erstellt wurde:
# as builder cd # the '..' below is not a typo! cd ./haskell-platform/build/ghc-bindist/ghc-7.10.2/.. wget http://downloads.haskell.org/~ghc/7.10.2/ghc-7.10.2-testsuite.tar.bz2 bunzip2 ghc-7.10.2-testsuite.tar.bz2 tar xf ghc-7.10.2-testsuite.tar
Sie können zusätzliche Kabalenpakete installieren, um bestimmte Tests auszuführen. Einige wurden möglicherweise bereits installiert. Lauf:
# as builder ## To install hmatrix you will probably have to perform, as root: ## dnf install blas-devel lapack-devel # Linear systems, matrix decompositions, and other numerical computations cabal install hmatrix # Monad classes using functional dependencies cabal install mtl # This package provides a library for parallel programming. cabal install parallel # Parsec is designed as an industrial-strength parser library. cabal install parsec # various primitive memory-related operations cabal install primitive # library for random testing of program properties. cabal install QuickCheck # provides a basic random number generation library cabal install random # one module layer over regex-posix to replace Text.Regex cabal install regex-compat # the generics system described in the "Scrap Your Boilerplate" papers cabal install syb # A UTF8 layer for Strings cabal install utf8-string # An efficient implementation of Int-indexed arrays cabal install vector
Ausführen cabal info $PACKAGE
, um Paketinformationen abzurufen. Die Paketkonfiguration geht an ~/.ghc/x86_64-linux-7.10.2/package.conf.d/
, der Paketinhalt geht an ~/.cabal/lib/x86_64-linux-ghc-7.10.2/$PACKAGE
.
Dann starten Tests . Wir werden die Ausgabe aufzeichnen ~/test_output.txt
:
# as builder cd cd ./haskell-platform/build/ghc-bindist/ghc-7.10.2 make test 2>&1 | tee ~/test_output.txt
Nach einiger Zeit erhalten Sie eine Ausgabe:
> Unexpected results from: > TEST="T9203 T9961 parsing001 T9675 T6048" > > OVERALL SUMMARY for test run started at Mon Oct 26 17:52:52 2015 CET > 0:33:17 spent to go through > 4142 total tests, which gave rise to > 15728 test cases, of which > 11883 were skipped > > 45 had missing libraries > 3754 expected passes > 41 expected failures > > 0 caused framework failures > 0 unexpected passes > 0 unexpected failures > 5 unexpected stat failures > > Unexpected stat failures: > perf/compiler T6048 [stat not good enough] (optasm) > perf/compiler T9675 [stat not good enough] (optasm) > perf/compiler T9961 [stat not good enough] (normal) > perf/compiler parsing001 [stat too good] (normal) > perf/should_run T9203 [stat too good] (normal)