2014-11-06 15 views
12

Supponiamo Non ho il programma HsColour installato e installo QuickCheckPerché la presenza/assenza delle forze binarie HsColour ricompila la libreria QuickCheck?

$ cd /tmp/ 
$ cabal get QuickCheck 
$ cd QuickCheck 
$ cabal install 
... 
[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 
... 
Installed QuickCheck-2.7.6 

Se installo di nuovo QuickCheck, non è ricompilato, vale a dire, non vedo le linee

[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 

ma se installo la versione corrente di HsColour (1.20.3) e installo nuovamente QuickCheck, QuickCheck viene ricompilato.

QuickCheck è anche ricompilata se

  1. installa HsColour,
  2. installa QuickCheck,
  3. ho rimosso il HsColour binario e
  4. installo QuickCheck.

Ho testato questo comportamento con GHC 7.8.3, Cabal 1.20.0.2 e cabala-installare 1.20.0.3, e le versioni di sviluppo di Cabal e cabala-install (utilizzando https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4).

+0

Strano. Hai libreria-documentazione attivata? –

+0

No, non ho questa opzione attivata. – asr

+0

Posso duplicare questo comportamento con "cabal install --disable-documentation" all'interno di una sandbox. Inoltre, posso anche duplicarlo con un semplice vecchio "runhaskell Setup.lhs configura --user && runhaskell Setup.lhs" (quindi l'abilitazione/disabilitazione della documentazione in realtà non avviene); la mia ipotesi migliore è che, poiché la configurazione cambia, vuole ricostruire tutto. – ivanm

risposta

1

Non sono un esperto, ma credo che Cabal configura tutti gli strumenti di creazione di cui è a conoscenza e che è in grado di trovare. Durante la costruzione, la cabala genera il file cabal_macros.h con una macro per testare la versione dello strumento di compilazione. Se l'estensione CPP è abilitata, il file è incluso ovunque, e tutto viene ricreato su qualsiasi modifica in cabal_macros.h.

+0

Nota: stai ricevendo la taglia perché sembri avere qualche indizio e hai fatto uno sforzo, e non vorrei che la generosità andasse sprecata. Non ho * idea * se la risposta è effettivamente corretta. – dfeuer

+0

Un modo per testare: ottenere il file 'cabal-macros.h', riconfigurare, diffare il nuovo vs vecchio e vedere se sostituire il nuovo con quello vecchio causa ancora una ricostruzione. – ivanm

+0

@ivanm cambiando 'cabal-macros.h' avvia definitivamente la ricompilazione dei moduli con abilita' CPP'. Lo vedo tutti i giorni (e provo a minimizzare l'uso di 'CPP' per quel motivo.) Non sono sicuro del perché la cabale configuri * tutti * gli strumenti di compilazione. Probabilmente c'è un motivo, ma non ne conosco uno. – Yuras