Cabal ne pas installer les dépendances lorsqu'ils ont besoin de bibliothèques de profilage?

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

  •  19-09-2019
  •  | 
  •  

Question

Je veux compiler mon programme avec le profilage, donc je lance:

$ 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'?
...

Alors, le problème est que, contrairement à un comportement habituel de bienvenue cabale, cabale ne résout pas les dépendances et les installer en ayant besoin des bibliothèques de profilage.

Je peux travailler autour d'elle en réglant les dépendances manuellement (en suivant les erreurs qui apparaissent après un certain temps de compilation):

$ 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

Et puis répéter pour ma prochaine dépendance ..

Y at-il une meilleure façon de le faire? i.e. ne font cabale faire le travail lui-même comme pour les bibliothèques normales?

Était-ce utile?

La solution

J'ai activé library-profiling: True dans mon fichier ~/.cabal/config. A partir de là, les nouvelles installations permettront automatiquement le profilage.

Malheureusement, cela signifie encore que je devais réinstaller manuellement pour les anciens paquets déjà installés. Bien que, après un certain temps de le faire manuellement, I maintenant ont la plupart des paquets avec le profilage réinstallées ... activé

Autres conseils

D'un commentaire par Tom Lokhorst:

  

J'espère que quelqu'un va venir avec une meilleure réponse, qui ne me obliger à réinstaller la complète Haskell manuellement la plate-forme la prochaine fois.

Pour les futurs visiteurs:

La tâche d'installer les versions de profilage de toutes les bibliothèques installées est devenue moins d'une corvée, cabal (cabal-install) garde maintenant une trace de ce qui a été installé à l'aide dans le fichier world dans le répertoire .cabal (sous Linux, qui serait $HOME/.cabal, sous Windows quelque chose comme C:\Users\%YOU%\AppData\Roaming\cabal\, sur Mac OS X ??).

après avoir activé le profilage dans le fichier config (dans le même répertoire), et l'effacement de la base de données de package de GHC (vous pouvez trouver les emplacements de la db globale et l'utilisateur par ghc-pkg list nonexisting, retirer les paquets installés cabale de la base de données mondiale avec ghc-pkg unregister packagename si vous avez, renommer ou supprimer le db utilisateur entier - cela est nécessaire car le fichier world ne suit que les paquets installés explicitement, pas leurs dépendances), tout installer avec le soutien de profilage devrait fonctionner comme suit:

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

Exécuter d'abord avec --dry-run pour vérifier les problèmes avant de réinstaller quoi que ce soit. S'il réinstaller des paquets d'amorçage comme process ou directory, c'est un mauvais signe, si vous ne savez pas comment gérer, demandez sur le canal IRC #haskell, l'une des listes de diffusion, ou ici à titre indicatif. Si elle ne parvient pas à trouver un plan cohérent d'installation en raison de nouvelles versions sur hackage de certains paquets qui sont incompatibles les uns avec les autres, qui peuvent généralement être résolus en éditant le fichier world et contraignant versions autorisées de certains paquets.

Alors, si vous êtes optimiste que rien ne va mal briser,

$ cabal install --reinstall world

et un joli pot de thé tout en GHC est occupé compilation.

La réponse de Daniel Fischer semble bon, mais pour une raison quelconque mon ~ / .cabal / bibliothèque mondiale ne contient que des entrées pour les bibliothèques installées directement, et non leurs dépendances.

Au lieu de cela, je déversée une liste de toutes les bibliothèques installées en utilisant

$ ghc-pkg list > list

Cette liste les bibliothèques installées système et localement. Par conséquent, je modifié le fichier list pour enlever la première partie (contenant les bibliothèques installées à l'échelle du système) ne laissant que les lignes après /home/<user>/.ghc/.... Enfin, je courais

$ cabal install --reinstall $(cat list) 

Cela a fonctionné pour moi. Vous devriez peut-être ne --dry-run premier. Ensuite, allez faire un pot de thé. Ou faire cuire un gâteau.

Pour les visiteurs 2016+: Il suffit d'installer ghc-prof

  

Debian Linux Systems:

     

sudo apt-get install ghc-prof

     

Arch Linux Systems:

     

sudo pacman -S ghc-prof

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top