Почему наличие/отсутствие бинарных HsColour вынуждает перекомпилировать библиотеку QuickCheck?

Предположим, что у меня нет установленной программы HsColour, и я устанавливаю 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

Если я снова установил QuickCheck, он не перекомпилирован, то есть я не вижу строки

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

но если я устанавливаю текущую версию HsColour (1.20.3) и снова устанавливаю QuickCheck, QuickCheck перекомпилируется.

QuickCheck также перекомпилируется, если

  • Я устанавливаю HsColour,
  • Я устанавливаю QuickCheck,
  • Я удалил двоичный код HsColour и
  • Я устанавливаю QuickCheck.

Я протестировал это поведение с помощью GHC 7.8.3, Cabal 1.20.0.2 и cabal-install 1.20.0.3, а также версий разработки Cabal и cabal-install (используя https://github.com/haskell/cabal/commit/5ef7d84bb25cc5d53ad124978922f2c96bedb7d4).

Ответ 1

Я не эксперт, но я считаю, что cabal настраивает все инструменты сборки, которые он знает и может найти. При создании cabal генерирует файл cabal_macros.h с макросом для проверки версии инструмента сборки. Если расширение CPP включено, то файл включен везде, и все будет восстановлено при любом изменении cabal_macros.h.