【问题标题】:Distributing a Haskell program on Homebrew在 Homebrew 上分发 Haskell 程序
【发布时间】:2012-07-21 04:10:29
【问题描述】:

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

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

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

这一切都很好,直到我开始使用来自 Hackage 的包,例如火焰制造者和艾森。我应该如何处理?

我不想强迫非 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 选项(找到here)?或者我的公式是否可以即时下载软件包的 tarball 并构建它?

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

【问题讨论】:

  • 分发二进制文件不是更容易,这样非 Haskeleer 就不需要构建它。 Haskell wikiHaskellers 上提到了一个打包器,可以使用 cabal 从源代码构建。
  • 您提到的链接是针对应用程序包的——我的程序是一个命令行工具。是的,这会更容易,但我真的很喜欢 homebrew 作为包管理器,它喜欢从源代码构建所有内容(请参阅github.com/mxcl/homebrew/wiki/FAQ 中的“你为什么要编译所有内容?”部分)。您可以将“瓶子”与自制软件一起使用,但这确实适用于需要数小时才能构建的东西(例如 Qt),而且您不能在任何地方托管二进制文件。
  • 但是大多数用户没有自制软件,而且用户下载编译程序的简单二进制文件肯定比包管理器更容易。如果您必须使用管理器,请尝试使用 macports 并将您的代码设置为端口,然后 macports 将集中构建它,用户下载预构建的二进制文件。
  • 我不太喜欢 macports,如果我分发二进制文件,我不知道我会在哪里托管它。我只是想为使用自制软件的人提供一个方便的单线,而我这样做的唯一障碍是弄清楚如何处理 hackage 依赖项。这与其说是一个实际的分发问题,不如说是,我该如何做这个具体的事情?
  • 有没有办法为blaze-builder、aeson等制作自制公式并将它们添加为依赖项?

标签: macos haskell homebrew cabal haskell-platform


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    Hledger 是一个 Haskell 程序,只需使用自制软件即可安装。 您可以在公式文件中查看这里:

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

    正如您在文件中看到的,它们是一些依赖项,包括 ghc 和 cabal-install。

    【讨论】:

      猜你喜欢
      • 2015-05-16
      • 2012-07-20
      • 2018-08-07
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      相关资源
      最近更新 更多