2012-07-22 16 views
4

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

当我标记1.0版本,我想打一个自制配方下载从GitHub的压缩包,并建立它。 我想唯一的依赖是GHC

我会用runhaskell Setupconfigure/build/install(带前缀的/ usr /本地/库/ ...),而不是cabal命令,以避免因阴谋安装。

这一切都很好,直到我开始使用Hackage的软件包,例如大火建设者和艾森。我应该如何管理这个?

我不想强迫非Haskellers不得不下载整个哈斯克尔平台。理想情况下,人们应该能够让自制软件在安装GHC之前安装GHC,然后如果他们愿意,可以在之后删除GHC。如果我让哈斯克尔平台的依赖性和第一安装我的Haskell的依赖关系,通过小集团安装或类似的,

  1. ~/.cabal/文件夹的包将被抛在后面,即使后来他们
    brew uninstall haskell-platform
  2. 我可能以及只能通过Hackage并使其成为人员,即将大部分范围限制为Haskellers。

我看到Cabal(-install)+ Hackage是一个有用的开发工具和Haskellers,但不适合这个。

我应该下载我使用的软件包的来源,它包括在我的源代码树,将它添加到构建命令呢?或者我应该使用--package-db选项(找到here)?或者我的公式可以即时下载软件包的tar包并构建它?

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

+4

发布一个二进制文件不是更容易,因此非Haskeleers不需要构建它。 Haskell Wiki上提到了一个打包器(http://www.haskell.org/haskellwiki/Mac_OS_X#Shipping_Installable_Haskell_Applications)。Haskeller可以使用cabal从源代码构建。 – Mark 2012-07-22 20:46:21

+1

您提到的链接适用于应用程序包 - 我的程序是一个命令行工具。这会更容易,是的,但我真的很喜欢作为包管理器的自制软件,它喜欢从源代码构建所有东西(请参阅https://github.com/mxcl/homebrew/wiki中的“为什么要编译所有内容?”一节/常问问题)。你可以使用“瓶子”和自制软件,但这真的是需要几个小时才能建立的东西(比如Qt),而且你不能在任何地方托管二进制文件。 – mk12 2012-07-22 21:05:06

+1

但大多数用户没有自制软件,用户可以更容易地下载编译程序的简单二进制文件,而不是软件包管理器。如果您必须使用管理器,请尝试使用macports并将您的代码作为端口,然后macports将集中构建它,并且用户下载预先编译的二进制文件。 – Mark 2012-07-22 21:12:38

回答

1

在我看来,如果你决定使用的软件包管理器,你应该确保所有的依赖可以建成或以其他方式一应俱全。如果您只依赖GHC及其核心图书馆,则不需要整个平台搭建在一起。

但是,如果你想从源代码来构建(其中,IMO是在许多个好主意,但不是全部)的情况下,然后建立所有依赖的是你不得不忍受的东西。对于我们在HPC环境中使用的构建系统[1],我们也采用同样的方法来在我们的超级计算机上部署科学软件。但它确实是有代价的。引导这样的系统可能需要相当长的一段时间,因为您希望整个工具链和所有必需的库都存在。

事实上,在我们发言,我把支持我们的构建系统GHC和Haskell包,是的,依赖将在拉以及,如果需要的话。至少,我会确保我们可以部署cabal,以便我们的用户可以在他们的帐户上安装Haskell的东西,如果他们愿意的话。

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

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