2015-02-04 2 views
10

. Исходное дерево для happy содержит AttrGrammarParser.ly и Parser.ly. Источник данных на alex содержит Scan.x. Тем не менее, насколько я могу сказать, чтобы составить happy, нам нужно преобразовать .ly файлы в .lhs файлы, используя ... happy, и для того, чтобы компилировать alex нам нужно преобразовать .x файлы в .hs файлы, используя ... alex.Каким образом Счастливые и Алекс загружают себя?

Похоже, что здесь требуется некоторая перезагрузка, чтобы скомпилировать любой инструмент.

Файлы Setup.lhs для каждого проекта содержат некоторое расширение шаблона, но, насколько я могу судить, не делайте ничего, в частности, для самонастройки.

Как и где выполняется самонастройка?

ответ

10

Я вижу, что вы смотрите на исходное дерево репозиториев darcs для этих пакетов на darcs.haskell.org. Если вы посмотрите на фактических тарболлах на Hackage, вы увидите что-то немного по-другому:

https://hackage.haskell.org/package/alex-3.1.4/src/dist/build/alex/alex-tmp/

https://hackage.haskell.org/package/happy-1.19.5/src/dist/build/happy/happy-tmp/

Поэтому в основном строят артефакты, необходимые поставляются с тарболом Hackage. Затем Cabal просто использует артефакты сборки во время процесса сборки, тем самым избегая необходимости начальной загрузки. Cabal также знает, как сохранить такие артефакты сборки, когда вы запускаете cabal sdist для своих собственных пакетов, которые вы хотите не зависеть от счастливого или alex, но в последнее время я проверил, что это не хорошо взаимодействует с песочницами, fwiw.

Кстати, Алекс и счастливым развития переехал в GitHub:

https://github.com/simonmar/alex/

https://github.com/simonmar/happy/

+0

Ах ок. Кто-то дал мне исходный мяч для платформы haskell, и версия, которую они схватили, по какой-то причине не имела генерируемых источников. Мне было интересно, почему это не строится на моей системе, и теперь я знаю. – rampion