2016-06-14 2 views
1

J'ai créé un paquet cabal qui utilise un type de construction personnalisé. Dans Setup.hs je déclenche un hook postCopy avec lequel j'ai l'intention de faire des IO. Dans le corps du déclencheur, j'utilise putStrLn pour sortir une ligne.cabal install supprime la sortie

Lorsque le package est cabal install, la sortie est enregistrée dans un fichier texte au lieu d'être affichée sur la console. Un peu plus de perspicacité: Je pense que le problème se rapporte à tous les déclencheurs, non seulement postCopy, et cabal install. Parce que si, par exemple, j'ai un déclencheur postConf (exécutant certains IO) et exécuter cabal configure, l'IO fonctionnera comme prévu. Mais quand je fais cabal install je vais avoir le même problème pour le déclencheur postConf ainsi.

Existe-t-il un moyen d'afficher la sortie du déclencheur dans stdout?

>cabal --version 
cabal-install version 1.22.6.0 
using version 1.22.5.0 of the Cabal library 
+0

Pourquoi voulez-vous faire cela? Il existe peut-être une autre approche qui répond à vos préoccupations. –

Répondre

1

Pour autant que je peux dire, lors des installations cabal exécute Setup.hs à la fois stdout et stderr redirigé vers un fichier. Il y a deux raisons à cela:

  1. Pour enregistrer l'installer sortie dans les ~/.cabal/logs/...
  2. répertoire
  3. Ainsi, il peut exécuter des installations parallèles et la sortie des travaux simultanés ne se mélangé à l'autre

vous pouvez utiliser l'option --build-log de dire cabale où écrire la consignation des informations, par exemple:

cabal install --build-log /tmp/foo 

de plus, si vous utilisez un l Unix/Linux système IKE, vous pouvez écrire à un appareil comme /dev/tty et obtenir une sortie de retour au terminal de l'utilisateur (s'il y en a un.) Par exemple:

import Distribution.Simple 
import System.IO 

main = do 
    putStrLn "=== I am here in Setup.hs" 
    withFile "/dev/tty" AppendMode $ \h -> do 
    hPutStrLn h "--- writing to /dev/tty" 
    defaultMain 

Bien sûr, cela est un code spécifique à l'OS, et il pourrait causer des problèmes pour les autres utilisateurs s'ils n'utilisent pas le même système d'exploitation que vous.

1

Si vous demandez explicitement une construction à un seul thread, cabal enverra sa sortie à stdout. Utilisez

cabal install -j1 

pour faire cette demande.