Я пытаюсь написать программу Haskell, которая требует вывода внешних программ (таких как lame, mp3 encoder). Хотя декларация зависимости от библиотеки легко в кабале, как можно объявить зависимость от исполняемого файла?Как я могу заставить Cabal искать внешние программы?
ответ
В настоящее время нельзя добавить зависимость в файле .cabal для внешних исполняемых файлов, отличных от списка известных инструментов сборки (см. Сборку: alex например).
Однако вы можете указать тип сборки: Настроить, а затем использовать отдельный скрипт configure для поиска любых дополнительных двоичных файлов (например, скрипт configure на основе autoconf отлично подходит и может использоваться для установки констант в вашем источник).
Обратите внимание, что поиск зависимостей во время выполнения, такой как хромовый кодер, во время компиляции может быть плохой идеей, так как среды сборки и запуска различны во многих системах пакетов. Лучше всего было бы динамически искать требуемые двоичные файлы при запуске программы.
Например, hmp3 охотится на mpg321 с
mmpg <- findExecutable (MPG321 :: String)
, где mpg321 это имя программы, определяемой с помощью опции ./configure. Для получения дополнительной информации см пикши:
ли Cabal предложить что-нибудь вроде «пост-установки крюк», который позволил бы, например, попытаться установить mp3 кодировщик в то время, что пакет Кабал является установлен, а не построен? –
Вы можете добавить крючки в Setup.hs для сценария любой фазы, но в идеале установка внешних программ будет оставлена в системе пакетов (.deb или .rpm и т. Д.), Которые знают, как находить и строить не-Haskell-зависимости , –