Как вы выпускаете проект * nix?

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

Я понимаю, что * nix-системы часто помещают исполняемые файлы (или символические ссылки) в такие места, как /usr/bin, и что скрипты сборки часто помещают их там автоматически, но, оказывается, я пошел и написал это в Haskell.

Тогда просто используйте cabal!

... Я слышал, вы говорите. Ну, я бы, кроме того, что моя программа имеет большое количество файлов данных, которые она считывает, и, конечно, программа должна знать, где эти файлы. Используя cabal, не будет ли исполняемый файл не брошен в какой-то странный путь к файлу проекта a la:

/usr/share/haskell/cabal/morecabal-1.0.4/myproject-1.3.4.1.a/thisisridiculous/

В настоящий момент я запускаю исполняемый файл из его исходного каталога и ищет файлы данных в "./data". Существует ли типичный формат путей установки, чтобы я мог заранее сказать свою программу в источнике, где искать данные?

Моя конечная цель - сделать это пакетом Arch Linux. Может ли кто-нибудь помочь мне начать?

Для любопытных здесь существует git repo. Заранее благодарим за любую помощь, которую вы можете дать.

Ответ 1

Посмотрите, как существующий проект Haskell, например Gitit, упакован для Arch linux. В частности, PKGBUILD.

Вы также можете скачать Gitit tarball и посмотреть, как использовать директиву data-files: в файле gitit.cabal.

Я не читаю Haskell, но из того, что я понимаю из источника, файл Paths_gigit.hs (который можно найти здесь. ) генерируется cabal, так что вам нужно только беспокоиться об относительных путях. Затем это просто вопрос импорта и использования функции getDataFileName.

Упаковка для Arch:

Упаковка для кабины:

Упаковка для обоих:

  • Пакет Haskell guidelines в вики Archlinux

Ответ 2

Портативный способ привязки файлов данных в проекте Cabal должен называть их в свойстве data-files в вашем файле .cabal.

Cabal будет генерировать модуль под названием Paths_packagename, который определяет функцию

getDataFileName :: FilePath -> IO FilePath

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

Смотрите: Доступ к файлам данных из кода пакета