Каковы лучшие практики для управления соответствующими пакетами Cabal? - PullRequest
5 голосов
/ 13 апреля 2010

Я работаю над библиотекой оптимизации на основе потоков данных, написанной на Haskell. Теперь представляется вероятным, что библиотеку придется разделить на две части:

  • A core piece с минимальными зависимостями сборки; назовите это hoopl-core.

  • A full piece, назовите его hoopl, что может иметь дополнительные зависимости от таких пакетов, как prettyprinter, QuickCheck и т. Д.

Идея состоит в том, что компилятор Glasgow Haskell будет зависеть только от hoopl-core, так что не составит труда запустить компилятор. Другие компиляторы получат дополнительные плюсы в hoopl. Пакет hoopl будет зависеть от hoopl-core.

Инструменты пакетов Debian могут создавать несколько пакетов из одного дерева исходных текстов. К сожалению, Cabal еще не достиг такого уровня сложности . Но должны быть другие разработчики библиотек или приложений, у которых есть похожие проблемы (например, один пакет для базовой библиотеки, другой для интерфейса командной строки, другой для интерфейса GUI).

Каковы современные рекомендации по созданию и управлению несколькими связанными пакетами Haskell с использованием Cabal?

Ответы [ 2 ]

3 голосов
/ 04 июля 2010

Я бы поместил два пакета в отдельные подкаталоги и получил бы Makefile с чем-то вроде этого:

.PHONY: all hoopl hoop-core
all : hoopl

hoopl : hoopl-core
       cd hoopl && cabal build && cabal register --inplace

hoopl-core
       cd hoopl-core && cabal build && cabal register --inplace

это предполагает, что вы загрузили процесс, сначала собрав ядро ​​hoopl и зарегистрировав его (--inplace), а затем собрав hoopl. Вы можете автоматизировать больше, используя Makefile.

Как вы знаете, когда мы хотели подобную функциональность для GHC, мы вместо этого написали нашу собственную систему сборки ;-) Я не рекомендую этого. Технически я полагаю, что было бы возможно извлечь из системы сборки GHC требуемые части и сделать фреймворк многократного использования, хотя ...

2 голосов
/ 13 апреля 2010

Поместите два пакета в отдельные подкаталоги репозитория управления исходным кодом и используйте два отдельных файла cabal.

Убедитесь, что вы используете операцию перемещения вашей системы управления источниками при перемещении файлов, чтобы она правильно отслеживала историю.

...