Cabal keine Abhängigkeiten zu installieren, wenn Profilierungs Bibliotheken benötigen?

StackOverflow https://stackoverflow.com/questions/1704421

  •  19-09-2019
  •  | 
  •  

Frage

Ich möchte mein Programm mit einer Profilierung kompilieren, so dass ich laufen:

$ cabal configure --enable-executable-profiling
...
$ cabal build
...
    Could not find module 'Graphics.UI.GLUT':
      Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'?
...
$ # indeed I have not installed the prof libs for GLUT, so..
$ cabal install -p GLUT --reinstall
...
    Could not find module 'Graphics.Rendering.OpenGL':
      Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'?
...

Also, das Problem ist, dass im Gegensatz zu üblichen willkommen Verhalten der Kabalen, Kabale löst nicht die Abhängigkeiten und sie installieren, wenn Profilierungs Bibliotheken benötigen.

Ich kann manuell durch Auflösen der Abhängigkeiten es umgehen (durch Fehler folgen, die nach einer gewissen Zeit der Erstellung angezeigt):

$ cabal install -p OpenGLRaw --reinstall
$ cabal install -p StateVar --reinstall
$ cabal install -p Tensor --reinstall
$ cabal install -p ObjectName --reinstall
$ cabal install -p GLURaw --reinstall
$ cabal install -p OpenGL --reinstall
$ cabal install -p GLUT --reinstall

Und dann wiederholen Sie für meine nächste Abhängigkeit ..

Gibt es einen besseren Weg, dies zu tun? d.h do Kabalen die Arbeit an seiner eigenen machen tun, wie es für den normalen Bibliotheken tut?

War es hilfreich?

Lösung

Ich habe library-profiling: True in meiner ~/.cabal/config Datei aktiviert. Von nun an werden alle neuen Installationen automatisch Profilierung ermöglichen.

Leider, dass noch bedeutet, dass ich musste manuell für die alten Pakete neu installieren bereits installiert. Obwohl nach einer Weile dies manuell zu tun, I jetzt haben die meisten Pakete mit einer Profilierung neu installiert aktiviert ...

Andere Tipps

Aus einem Kommentar von Tom Lokhorst:

  

ich hoffe, jemand wird mit einer besseren Antwort kommen, eine, die mich nicht erfordern würde den kompletten Haskell Platform manuell beim nächsten Mal neu zu installieren.

Für zukünftige Besucher:

Die Aufgabe Profilierungs Versionen aller installierten Bibliotheken der Installation weniger mühsam geworden ist, hält cabal (cabal-install) jetzt verfolgen, was installiert wurde es in der world Datei im .cabal Verzeichnis mit (unter Linux, die auf Windows etwas $HOME/.cabal, würde wie C:\Users\%YOU%\AppData\Roaming\cabal\, auf OSX ??).

So nach Profilierung in config Datei ermöglicht (im gleichen Verzeichnis) und Clearing GHC der Paketdatenbank (Sie die Standorte des globalen und Benutzer db pro ghc-pkg list nonexisting finden, entfernen Sie die Kabalen-installierten Pakete aus der globalen Datenbank mit ghc-pkg unregister packagename wenn Sie welche haben, umbenennen oder den gesamten Anwender db löscht - dies ist notwendig, weil die world Datei nur explizit installierten Pakete verfolgt, nicht ihre Abhängigkeiten), alle Installation mit Unterstützung Profilierung sollte funktionieren wie folgt:

$ cabal install --reinstall world --dry-run

Erster Lauf mit --dry-run für Probleme zu überprüfen, bevor sie tatsächlich etwas neu zu installieren. Wenn es würde Boot-Pakete wie process oder directory neu zu installieren, ist das ein schlechtes Zeichen, wenn Sie nicht wissen, wie sie damit umgehen, stellt auf dem #haskell IRC-Kanal, einer der Mailinglisten oder hier zur Orientierung. Wenn es sich um eine konsistente finden kann Plan installieren aufgrund neuer Versionen auf Hackage einiger Pakete, die miteinander unvereinbar sind, die in der Regel gelöst werden können durch Editieren der Datei world und Zwangs zulässigen Versionen einiger Pakete.

Dann, wenn Sie sind optimistisch, dass nichts schlecht brechen,

$ cabal install --reinstall world

und einen schönen Kanne Tee haben während des GHC beschäftigt Compilierung ist.

Daniel Fischers Antwort sieht gut aus, aber aus irgendeinem Grund meine ~ / .cabal / Weltbibliothek nur enthalten Einträge für Bibliotheken direkt installiert, und nicht deren Abhängigkeiten.

Stattdessen abgeladen ich eine Liste aller installierten Bibliotheken aus mit

$ ghc-pkg list > list

Hier werden die Bibliotheken installiert systemweit und lokal. Daher bearbeiten ich die list Datei, um den ersten Teil (die Bibliotheken installiert systemweit) so dass nur die Linien nach /home/<user>/.ghc/... zu entfernen. Schließlich lief ich

$ cabal install --reinstall $(cat list) 

Das funktionierte für mich. Sie sollten vielleicht zuerst tun --dry-run. Dann gehen Sie eine Kanne Tee machen. Oder einen Kuchen backen.

Für Besucher 2016+: Just ghc-prof installieren

  

Debian Linux-Systeme:

     

sudo apt-get install ghc-prof

     

Arch Linux-Systeme:

     

sudo pacman -S ghc-prof

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top