não Cabal instalação de dependências quando precisar de bibliotecas de perfil?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu quero compilar meu programa com profiling, então eu executar:

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

Então, o problema é, que o comportamento de boas-vindas habitual da cabala ao contrário, cabala não resolver as dependências e instalá-los quando precisar de bibliotecas de perfil.

Eu posso trabalhar em torno dele, resolvendo as dependências manualmente (seguindo erros que aparecem depois de um tempo de compilação):

$ 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

E, em seguida, repita para o meu próximo dependência ..

Existe uma maneira melhor de fazer isso? ou seja fazem Cabal fazer o trabalho por conta própria como faz para bibliotecas normais?

Foi útil?

Solução

Eu habilitado library-profiling: True no meu arquivo ~/.cabal/config. A partir de então, quaisquer novas instalações permitirão automaticamente profiling.

Infelizmente isso ainda significa que eu tinha que reinstalar manualmente para os antigos pacotes já instalados. Embora, depois de um tempo de fazer isso manualmente, eu agora ter a maioria dos pacotes reinstalado com perfis ativada ...

Outras dicas

A partir de um comentário por Tom Lokhorst:

Eu espero que alguém vai vir junto com uma resposta melhor, que não exigiria me para reinstalar o Plataforma Haskell completa manualmente próxima vez.

Para os futuros visitantes:

A tarefa de instalar versões de perfis de todas as bibliotecas instaladas tornou-se menos de uma tarefa, cabal (cabal-install) agora mantém o controle do que foi instalado usando-o no arquivo world no diretório .cabal (no Linux, que seria $HOME/.cabal, no Windows algo como C:\Users\%YOU%\AppData\Roaming\cabal\, em OSX ??).

Assim, após a ativação de perfis no arquivo config (no mesmo diretório), e limpar banco de dados de pacotes do GHC (você pode encontrar os locais do db global e usuário por ghc-pkg list nonexisting; remover os pacotes instalados-cabal do banco de dados global com ghc-pkg unregister packagename se você tiver qualquer, renomear ou apagar toda a db usuário - isto é necessário porque o arquivo world apenas as faixas pacotes explicitamente instaladas, não suas dependências), a instalação de tudo com perfil de suporte deve funcionar da seguinte forma:

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

Primeiro correr com --dry-run para verificar problemas antes de realmente reinstalar qualquer coisa. Se fosse reinstalar pacotes de inicialização como process ou directory, isso é um mau sinal, se você não sabe como lidar com isso, pergunte no canal IRC #haskell, uma das listas de discussão, ou aqui para orientação. Se não conseguir encontrar um consistente instalar plano devido a novas versões sobre hackage de alguns pacotes que são incompatíveis uns com os outros, que normalmente pode ser resolvido editando o arquivo world e restringindo versões permitidas de alguns pacotes.

Então, se você está otimista de que nada vai mal quebrar,

$ cabal install --reinstall world

e ter um bom pote de chá enquanto GHC está ocupado compilação.

A resposta de Daniel Fischer parece ser bom, mas por alguma razão a minha biblioteca ~ / .cabal / mundo só continha entradas para bibliotecas instalado diretamente, e não suas dependências.

Em vez disso, eu despejei uma lista de todas as bibliotecas instaladas usando

$ ghc-pkg list > list

Isto lista as bibliotecas instaladas em todo o sistema e localmente. Portanto, eu editado o arquivo list para remover a primeira parte (contendo bibliotecas instaladas em todo o sistema), deixando apenas as linhas após /home/<user>/.ghc/.... Finalmente, eu corri

$ cabal install --reinstall $(cat list) 

Isso funcionou para mim. Você deve talvez fazer --dry-run primeiro. Então vá fazer um pote de chá. Ou fazer um bolo.

Para os visitantes 2016+: Basta instalar ghc-prof

Sistemas Linux Debian:

sudo apt-get install ghc-prof

Sistemas Linux Arch:

sudo pacman -S ghc-prof

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top