如何发布*nix项目?

13
所以,我写了一个小程序,可以分析日语文本并给用户提供有关其中汉字使用情况的各种统计信息,我想把这个程序发布到世界上。问题是,我不知道如何创建“发布”。
我知道*nix系统通常会将可执行文件(或符号链接)放在/usr/bin之类的位置,并且构建脚本通常会自动将它们放在那里,但事实证明我用Haskell写了这个东西。
“那就用cabal!”你会说。好吧,我本来也会用,但我的程序有很多数据文件需要读取,当然程序需要知道这些文件在哪里。通过使用cabal,可执行文件是否不会被扔到某个奇怪的项目文件路径中,例如:

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

目前,我通过在可执行文件的源目录中运行它,并且它正在"./data"中查找数据文件。

是否有一种典型的安装路径格式,以便我可以事先告诉我的程序在源代码中要查找数据的位置?

我的最终目标是将其打包成一个Arch Linux软件包。 有人能帮我入门吗?

对于好奇心强的人,git repo在此处。 预先感谢您所提供的任何帮助。

2个回答

12

在Cabal项目中引用数据文件的便携方式是在您的.cabal文件中的data-files属性中命名它们。

Cabal将生成一个名为Paths_packagename的模块,该模块定义了一个函数

getDataFileName :: FilePath -> IO FilePath

你的代码可以使用它来确定数据文件安装的位置。

参见:从软件包代码访问数据文件


所以毕竟 Cabal 是正确的选择。 - Colin Woodbury
5
@fosskers:您可能还希望查看Hackage上可用的各种工具,用于从Cabal软件包创建特定于发行版的软件包,例如cabal2arch - hammar

9
请查看现有的Haskell项目,例如Gitit如何打包Arch Linux,特别是PKGBUILD。
您还可以下载gitit tarball,查看如何在gitit.cabal文件中使用data-files:指令。
我不会阅读Haskell,但从我对源代码的理解来看,文件Paths_gigit.hs(可以在此处找到)由cabal生成,因此您只需要担心相对路径。 然后,只需导入它并使用getDataFileName函数即可。
打包Arch:

cabal打包:

通用打包:


5
谢谢。我将爬上最近的山峰,在山顶冥想,直到我理解如何使用PKGBUILD中的data-files参数为止。 - Colin Woodbury
此外,“data-files”在“gitit.cabal”文件中,而不是在PKGBUILD中。 - brice
1
你也可以看一下haskell-pandoc PKGBUILD。 pandoc(同一作者)可能会简单一些。如果您正在寻求更广泛的可用性,请注意,pandoc源代码包括一个用于制作常规os x安装程序的脚本 https://github.com/jgm/pandoc/blob/master/make_osx_package.sh ,甚至有一个用于Windows的脚本; 二进制文件最终在这里 http://code.google.com/p/pandoc/downloads/list ;它们将所有内容放在合适的位置,并具有正确的路径,不需要用户获取ghc等副产品。 - applicative
应用程序员,干杯。我还注意到了Archlinux维基上的Haskell软件包指南。他们也以Pandoc为例。 - brice
在 PKGBUILD 后应该有一个 "and"... 这是打字错误,不是我的理解错误 ;) - Colin Woodbury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接