2010-04-17 1 views
2

Я пытаюсь написать программу Haskell, которая требует вывода внешних программ (таких как lame, mp3 encoder). Хотя декларация зависимости от библиотеки легко в кабале, как можно объявить зависимость от исполняемого файла?Как я могу заставить Cabal искать внешние программы?

ответ

2

В настоящее время нельзя добавить зависимость в файле .cabal для внешних исполняемых файлов, отличных от списка известных инструментов сборки (см. Сборку: alex например).

Однако вы можете указать тип сборки: Настроить, а затем использовать отдельный скрипт configure для поиска любых дополнительных двоичных файлов (например, скрипт configure на основе autoconf отлично подходит и может использоваться для установки констант в вашем источник).

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

Например, hmp3 охотится на mpg321 с

 mmpg <- findExecutable (MPG321 :: String) 

, где mpg321 это имя программы, определяемой с помощью опции ./configure. Для получения дополнительной информации см пикши:

http://hackage.haskell.org/packages/archive/directory/latest/doc/html/System-Directory.html#v:findExecutable

+0

ли Cabal предложить что-нибудь вроде «пост-установки крюк», который позволил бы, например, попытаться установить mp3 кодировщик в то время, что пакет Кабал является установлен, а не построен? –

+0

Вы можете добавить крючки в Setup.hs для сценария любой фазы, но в идеале установка внешних программ будет оставлена ​​в системе пакетов (.deb или .rpm и т. Д.), Которые знают, как находить и строить не-Haskell-зависимости , –