6

我正在我的 Mac 上用 Haskell 编写一个程序(命令行可执行文件,而不是应用程序)。我正在使用 GitHub 来托管 git 存储库和主页。我制作了<project>.cabalandSetup.hs文件,因为 Cabal 使构建、测试和生成文档变得容易。我也可能会上传到 Hackage,我不知道。

当我标记版本 1.0 时,我想制作一个 Homebrew 公式来从 GitHub 下载 tarball 并构建它。我希望唯一的依赖是 GHC

我将使用runhaskell Setup configure/ build/ install(前缀为 /usr/local/Cellar/...)而不是cabal避免依赖 cabal-install 的命令。

这一切都很好,直到我开始使用来自 Hackage 的包,例如 blaze-builder 和 aeson。我应该如何管理这个?

我不想强迫非 Haskell 用户下载整个 Haskell 平台。理想情况下,人们应该能够让 Homebrew 在构建我的程序之前安装 GHC,然后如果他们愿意,在之后删除 GHC。如果我将 Haskell 平台作为依赖项并首先通过 cabal-install 或类似方式安装我的 Haskell 依赖项,

  1. 包含包裹的~/.cabal/文件夹将被留下,即使之后它们
    brew uninstall haskell-platform
  2. 我还不如只经历 Hackage 并让人们cabal install成为它,即,将大部分范围限制在 Haskellers 上。

我认为 Cabal(-install) + Hackage 对开发和 Haskellers 来说是一个有用的工具,但不适合这个。

我是否应该只下载我正在使用的软件包的源代码并将其包含在我的源代码树中,并将其添加到构建命令中?或者我应该使用该--package-db选项(在此处找到)?或者我的公式可以即时下载软件包的压缩包并构建它吗?

我看了 cabal2arch 一点(Arch wikiGitHub repo),但我不确定它如何处理依赖关系,或者它是否只是在做我不想做的事情。

4

2 回答 2

1

在我看来,如果您决定使用包管理器,您应该确保所有依赖项都可以构建或以其他方式随时可用。如果您只依赖 GHC 及其核心库集,则不需要构建整个平台。

但是,如果您希望从源代码构建(在许多情况下,IMO 是一个好主意,但不是全部),那么构建所有依赖项是您必须忍受的。我们对我们在 HPC 环境中使用的构建系统 [1] 执行相同的操作,以便在我们的超级计算机上部署科学软件。但这确实是有代价的。引导这样的系统可能需要相当长的时间,因为您希望整个工具链和所有必需的库都存在。

事实上,正如我们所说,我正在为 GHC 和 haskell 包的构建系统提供支持,是的,如果需要,也会引入依赖项。至少,我会确保我们可以部署 cabal,以便我们的用户可以根据需要在他们的帐户上安装 Haskell 的东西。

TL;DR 添加对依赖项的支持。

[1] http://hpcugent.github.com/easybuild

于 2013-02-07T09:24:57.727 回答
0

Hledger是一个 Haskell 程序,只需使用 homebrew 即可安装。您可以在公式文件中查看此处:

https://github.com/Homebrew/homebrew-core/blob/master/Formula/hledger.rb

正如您在文件中看到的,它们是包含的一些依赖项ghccabal-install.

于 2018-02-05T18:55:27.317 回答