mk1*_*k12 6 macos homebrew haskell cabal haskell-platform
我正在我的Mac上编写Haskell程序(命令行可执行文件,而不是应用程序).我正在使用GitHub来托管git存储库和主页.我所做的<project>.cabal和Setup.hs文件,因为惊天动地可以很容易地构建,测试和生成文档.我也可能上传到Hackage,我不知道.
当我标记版本1.0时,我想制作一个Homebrew公式,从GitHub下载tarball并构建它.我希望唯一的依赖是GHC.
我将使用runhaskell Setup configure/ build/ install(前缀为/ usr/local/Cellar/...)而不是cabal命令来避免依赖cabal-install.
在我开始使用Hackage的软件包之前,这一切都很好,例如blaze-builder和aeson.我应该怎么做呢?
我不想强迫非Haskellers必须下载整个Haskell平台.理想情况下,人们应该能够让Homebrew在构建我的程序之前安装GHC,然后如果他们这样选择,请在之后删除GHC.如果我使Haskell平台成为依赖项并首先通过cabal-install或类似方法安装我的Haskell依赖项,
~/.cabal/带有包的文件夹将被遗忘,即使之后也是如此brew uninstall haskell-platformcabal install去做,即将大部分范围限制在Haskellers.我认为Cabal(-install)+ Hackage是开发和Haskellers的有用工具,但不适用于此.
我应该只下载我正在使用的软件包的源代码并将其包含在我的源代码树中,并将其添加到构建命令中吗?或者我应该使用--package-db选项(在这里找到)?或者我的公式可以动态下载包的tar包并构建它吗?
我看了一下cabal2arch(Arch wiki,GitHub repo),但我不确定它是如何处理依赖关系的,或者它是否正在做我不想做的事情.
小智 1
在我看来,如果您决定使用包管理器,您应该确保所有依赖项都可以构建或可以通过其他方式轻松使用。如果您仅依赖 GHC 及其核心库集,则无需同时构建整个平台。
但是,如果您希望从源代码构建(在我看来,在许多情况下,但不是全部),构建所有依赖项是一个好主意,那么您必须忍受构建所有依赖项。我们对在 HPC 环境中使用的构建系统 [1] 执行相同的操作,以便在超级计算机上部署科学软件。但这确实是有代价的。引导这样的系统可能需要相当长的时间,因为您希望整个工具链和所有必需的库都存在。
事实上,正如我们所说,我正在我们的构建系统中加入对 GHC 和 haskell 包的支持,是的,如果需要的话,依赖项也会被引入。至少,我将确保我们可以部署 cabal,以便我们的用户可以根据需要在他们的帐户上安装 Haskell 的东西。
TL;DR 添加对依赖项的支持。
[1] http://hpcugent.github.com/easybuild