2014-11-06 8 views
12

Nehmen wir an, ich habe nicht das hscolour Programm installiert und ich Quick CheckWarum zwingt die Anwesenheit/Abwesenheit der HsColour-Binärdatei, die QuickCheck-Bibliothek neu zu kompilieren?

$ 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 

installieren Wenn ich Quick Check wieder installieren, ist es nicht neu kompiliert, das heißt, ich

die Linien nicht sehen
[ 1 of 15] Compiling Test.QuickCheck.Random 
... 
[15 of 15] Compiling Test.QuickCheck 

aber wenn ich HsColour aktuelle Version (1.20.3) installiere und ich QuickCheck erneut installiere, wird QuickCheck neu kompiliert.

Quick Check ist auch neu kompiliert, wenn

  1. I hscolour installieren,
  2. I Quick Check installieren,
  3. ich die hscolour binäre entfernt und
  4. I Quick Check installieren.

Getestet habe ich dieses Verhalten mit GHC 7.8.3, Cabal 1.20.0.2 und Kabalen installieren 1.20.0.3 und die Entwicklungsversionen von Cabal und Kabalen-install (mit https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4).

+0

Seltsam. Haben Sie die Bibliotheksdokumentation aktiviert? –

+0

Nein, ich habe diese Option nicht aktiviert. – asr

+0

Ich kann dieses Verhalten mit "cabal install --disable-documentation" in einer Sandbox duplizieren. Darüber hinaus kann ich dies auch mit einfachen alten "runhaskell Setup.lhs konfigurieren - users && runhaskell Setup.lhs" (so Aktivierung/Deaktivierung der Dokumentation kommt nicht wirklich hinein); Meine beste Vermutung ist, dass, weil sich die Konfiguration ändert, alles neu aufgebaut werden soll. – ivanm

Antwort

1

Ich bin kein Experte, aber ich glaube, Cabal konfiguriert alle Build-Tools, die er kennt und in der Lage ist zu finden. Beim Erstellen erstellt cabal cabal_macros.h Datei mit einem Makro zum Testen der Build-Tool-Version. Wenn die Erweiterung CPP aktiviert ist, ist die Datei überall enthalten und bei jeder Änderung in cabal_macros.h wird alles neu erstellt.

+0

Hinweis: Sie bekommen das Kopfgeld, weil Sie einen Anhaltspunkt zu haben scheinen und sich bemüht haben, und ich möchte nicht, dass das Kopfgeld verschwendet wird. Ich habe * keine Ahnung * wenn die Antwort richtig ist. – dfeuer

+0

Eine Möglichkeit zu testen: Holen Sie sich die 'cabal-macros.h' Datei, rekonfigurieren Sie, vergleichen Sie die neue vs alte und sehen Sie, ob das Ersetzen der neuen mit der alten noch eine Neuerstellung verursacht. – ivanm

+0

@ivanm das Ändern von 'cabal-macros.h' löst definitiv die Neukompilierung von Modulen mit' CPP' aus. Ich sehe das jeden Tag (und ich versuche, die CPP-Nutzung aus diesem Grund zu minimieren). Ich bin mir nicht sicher, warum cabal alle * Build-Tools konfiguriert. Wahrscheinlich gibt es einen Grund, aber ich kenne keinen. – Yuras