Kompilieren Sie den Glasgow Haskell Compiler auf Fedora 22

3176
David Tonhofer

Daher möchte ich "GHC 7.8.4-45", das mit Fedora 22 (mit freundlicher Genehmigung der Fedora Haskell SIG ) geliefert wird, auf GHC 7.10.2 (die neueste Version) aktualisieren.

Wie geht das einfach?

1
Fedora 24 ist immer noch auf GHC 7.8.4 ... [genauer] (https://fedoraproject.org/wiki/Haskell_Platform): _ "F24 wird mit haskell-platform-2014.2 (ghc-7.8.4) ausgeliefert .... F25 wird voraussichtlich mit der Hash-Plattform-7.10.3 (ghc-7.10.3) versendet. "_ David Tonhofer vor 8 Jahren 0
Vorteilhafterweise können neuere Versionen über [die Fedora Haskell SIG-Seite] (https://fedoraproject.org/wiki/Haskell_SIG) abgerufen werden. Am unteren Rand ist das aufgelistet, was "Haskell coprs" genannt wird ("copr" scheint also das Continuous Build System zu sein?). Es gibt ein [copr for 7.10.3] (https://copr.fedorainfracloud.org/coprs/petersen/ghc-7.10.3/), das von [petersen] (https://copr.fedorainfracloud.org/coprs) erstellt wurde / petersen /) ". Das Copr-Repository wird mit `dnf copr enable petersen / ghc-7.10.3` aktiviert. Wie installiere ich diese aktualisierte Version? David Tonhofer vor 8 Jahren 0
Gehen Sie wie folgt vor: 1) Aktivieren Sie "` dnf copr enable petersen / ghc-7.10.3 '. 2) Entfernen Sie rekursiv alle Pakete, die für das Fedora-Paket `haskell-platform' eingezogen wurden. Verwenden Sie dazu` dnf '(anstelle von `rpm', was nicht der Fall ist.) diese Option nicht zur Verfügung stellen): "` dnf erase haskell-platform '"3) Fügen Sie Pakete hinzu, die sich später als nützlich erweisen könnten:" `dnf install ncurses-c ++ - libs freeglut-devel`" usw. 4) Einfach ausführen " `dnf install ghc` '.` dnf` holt den neuesten ghc aus dem Repository `petersen-ghc-7.10.3` und zieht eventuelle Abhängigkeiten aus dem Fedora-Repo (da dieser aktiviert bleibt), in meinem Fall` ncurses-devel `etc. 5) Win! David Tonhofer vor 8 Jahren 0
[Fedora 25 kommt mit GHC 7.10.3] (https://docs.fedoraproject.org/en-US/Fedora/25/html/Release_Notes/sect-Release_Notes-Changes_for_Developers.html) James Brock vor 7 Jahren 0

1 Antwort auf die Frage

1
David Tonhofer

Dokumente & Links

Die Informationsquelle für den Start ist auf haskell.org

Man kann installieren durch:

Außerdem:

So...

Wir werden den Glasgow Haskell Compiler ghcmit dem Haskell-Platform- Installationsprogramm erstellen .

Einige Bibliotheken reparieren

Wir müssen das vorkompilierte, neueste CabalPaket-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 PATHauf 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 ghcbenö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 ghcfü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, ghcdas als Fedora 22-Paket geliefert wird

Wir brauchen das ghc, was mit Fedora 22 kommt, um die Kompilierung zu starten. Laut der Platform Readme, ghchat> 7.4 sein (Fedora hat ghc7.8.4).

# as root dnf install ghc 

Dies zieht 55 Pakete an, auch libffi-develwenn 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 Cabal1.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 Cabalvon 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/haskellklingt 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 Platformvon 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 ghcverwendet werden, anstatt das mit dem System mitgelieferte!

builderBearbeiten Sie als Benutzer Ihr ~/.bash_profileund 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/cabalbinenthält ein frisches Cabalund 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 -yauf 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) 
Hier meine eigene Antwort annehmen. Diese Frage trifft sicher auf Gleichgültigkeit ... David Tonhofer vor 8 Jahren 0