Cabal no la instalación de dependencias cuando se necesitan bibliotecas de perfiles?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Quiero compilar mi programa con perfiles, por lo corro:

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

Por lo tanto, el problema es, que a diferencia de comportamiento habitual de bienvenida de cábala, cábala no resuelve las dependencias e instalarlos cuando se necesitan bibliotecas de perfiles.

puedo trabajar alrededor de ella mediante la resolución de las dependencias manualmente (siguiendo los errores que aparecen después de un tiempo de compilación):

$ 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

Y luego repetir para mi próximo dependencia ..

¿Hay una mejor manera de hacer esto? es decir sí hacen Cabal hacer el trabajo por sí mismo como lo hace para las bibliotecas normales?

¿Fue útil?

Solución

He permitido library-profiling: True en mi archivo ~/.cabal/config. A partir de entonces, las nuevas instalaciones permitirán a los perfiles de forma automática.

Por desgracia que todavía significa que tuve que volver a instalar manualmente los paquetes antiguos ya instalados. Aunque, después de un tiempo de hacer esto manualmente, I ahora han vuelto a instalar la mayoría de los paquetes con seguimiento permitido ...

Otros consejos

A partir de un comentario de Tom Lokhorst:

  

Realmente espero que alguien va a venir junto con una respuesta mejor, uno que no me sería necesario volver a instalar la Plataforma Haskell completa manualmente la próxima vez.

Para los futuros visitantes:

La tarea de instalar las versiones de perfiles de todas las bibliotecas instaladas se ha convertido en menos de una tarea, cabal (cabal-install) ahora realiza un seguimiento de lo que se instaló usarlo en el archivo world en el directorio .cabal (en Linux, que se $HOME/.cabal, en Windows algo como C:\Users\%YOU%\AppData\Roaming\cabal\, en OSX ??).

Así que después de activar perfiles en el archivo config (en el mismo directorio), y la limpieza de base de paquetes de GHC (se puede encontrar la ubicación de la base de datos global y usuario por ghc-pkg list nonexisting; eliminar los paquetes Cabal-instalado desde la base de datos global con ghc-pkg unregister packagename si tiene alguno, renombrar o borrar toda la base de datos de usuario - esto es necesario porque el archivo world sólo controla los paquetes instalados de forma explícita, no sus dependencias), la instalación de todo con perfiles de apoyo debería funcionar de la siguiente manera:

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

En primer carrera con --dry-run para detectar problemas antes de que realmente volver a instalar nada. Si iba a volver a instalar los paquetes de arranque como process o directory, eso es una mala señal, si usted no sabe cómo manejarlo, pregunta en el canal de IRC #haskell, una de las listas de correo, o aquí para orientación. Si no logra encontrar un plan de instalación consistente debido a las nuevas versiones en hackage de algunos paquetes que son incompatibles entre sí, que por lo general pueden ser resueltos editando el archivo world y limitar las versiones permitidos de algunos paquetes.

Entonces, si usted es optimista de que nada va a romper mal,

$ cabal install --reinstall world

y tener una buena taza de té mientras está ocupado GHC compilación.

La respuesta de Daniel Fischer se ve bien, pero por alguna razón .cabal biblioteca de mi ~ / / mundo sólo contenía entradas para las bibliotecas instaladas directamente, y no de sus dependencias.

En su lugar, objeto de dumping a cabo una lista de todas las bibliotecas instaladas utilizando

$ ghc-pkg list > list

Esta lista las bibliotecas y localmente instalados en todo el sistema. Por lo tanto, he editado el archivo list para eliminar la primera parte (que contiene las bibliotecas de todo el sistema instalado), dejando sólo las líneas después de /home/<user>/.ghc/.... Por último, me encontré

$ cabal install --reinstall $(cat list) 

Esto funcionó para mí. Usted tal vez no debería --dry-run primero. A continuación, ir a hacer una taza de té. O hacer un pastel.

Para los visitantes 2016+: Sólo tiene que instalar ghc-prof

  

Debian Linux Systems:

     

sudo apt-get install ghc-prof

     

Arch Linux Systems:

     

sudo pacman -S ghc-prof

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top