Почему наличие / отсутствие бинарного файла 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 также перекомпилируется, если

  1. Устанавливаю HsColour,
  2. Я устанавливаю QuickCheck,
  3. Я удалил двоичный файл HsColour и
  4. Устанавливаю 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).


person asr    schedule 06.11.2014    source источник
comment
Странный. У вас включена библиотека-документация?   -  person Daniel Wagner    schedule 07.11.2014
comment
Нет, у меня эта опция не включена.   -  person asr    schedule 07.11.2014
comment
Я могу продублировать это поведение с помощью cabal install --disable-documentation в песочнице. Более того, я также могу продублировать это с помощью простого старого runhaskell Setup.lhs configure --user && runhaskell Setup.lhs (так что включение / отключение документации на самом деле не входит); я предполагаю, что из-за изменения конфигурации он хочет все перестроить.   -  person ivanm    schedule 18.11.2014


Ответы (1)


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

person Yuras    schedule 18.11.2014
comment
Примечание: вы получаете награду, потому что, кажется, у вас есть какая-то подсказка и вы приложили усилия, и я бы не хотел, чтобы награда была потрачена впустую. Я понятия не имею, правильный ли ответ. - person dfeuer; 18.11.2014
comment
Один из способов проверить: получить файл cabal-macros.h, переконфигурировать, сравнить новое и старое и посмотреть, вызывает ли замена нового на старый по-прежнему перестройку. - person ivanm; 19.11.2014
comment
@ivanm изменение cabal-macros.h определенно запускает перекомпиляцию модулей с CPP включениями. Я вижу это каждый день (и по этой причине стараюсь свести к минимуму CPP использование.) Я не уверен, почему Cabal настраивает все инструменты сборки. Наверное, причина есть, но я ее не знаю. - person Yuras; 19.11.2014