Cabal:如何自动更新.cabal文件中的build-depends字段?

21

有没有一种方法可以自动更新.cabal-file中的build-depends字段?例如,如果我们从以下.cabal文件开始:

name:           HUnit
version:        1.1.1
synopsis:       A unit testing framework for Haskell
homepage:       http://hunit.sourceforge.net/
category:       Testing
author:         Dean Herington
license:        BSD3
license-file:   LICENSE
cabal-version:  >= 1.10
build-type:     Simple

library
  build-depends:      base >= 2 && < 4
  exposed-modules:    Test.HUnit.Base, Test.HUnit.Lang,
                      Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit
  default-extensions: CPP

那么,安装一个软件包:

cabal install warp

现在,我需要将warp >=3.0 && <3.1添加到build-depends字段中,以使文件如下所示:

name:           HUnit
version:        1.1.1
synopsis:       A unit testing framework for Haskell
homepage:       http://hunit.sourceforge.net/
category:       Testing
author:         Dean Herington
license:        BSD3
license-file:   LICENSE
cabal-version:  >= 1.10
build-type:     Simple

library
  build-depends:      base >= 2 && < 4, warp >=3.0 && <3.1
  exposed-modules:    Test.HUnit.Base, Test.HUnit.Lang,
                      Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit
  default-extensions: CPP

我的问题是:如何自动更新此文件?


2
emacs haskell-mode 可以为我完成这个操作,但是我不知道是否有通用的解决方案。 - Rein Henrichs
@ReinHenrichs 我认为你提到的功能的代码是这个haskell-mode在github上,搜索defun haskell-cabal-section-add-build-dependency。我想知道cabal的贡献者是否做了类似的事情。 - Marcus Vinícius Monteiro
4
自动化?基于什么?你肯定不想在构建依赖中包含所有已安装的软件包,对吧? - Cubic
1
它们可能是手动添加的。您可以在GitHub上查看该文件的历史记录:https://github.com/yesodweb/yesod/commits/master/yesod-core/yesod-core.cabal - Taylor Fausak
2
另外值得注意的是,Cab(Cabal的包装器)没有这个功能。不过已经有一个相关的问题了。 - Taylor Fausak
显示剩余3条评论
2个回答

4

0
一个可能的替代方案是使用hpack、yaml、sponge和jq:
您需要hpack package.yaml文件。
例如,要将aeson添加为依赖项:
cp package.yaml package.yaml.backup && (yaml2json package.yaml | jq '.dependencies += ["aeson"]' | json2yaml | sponge package.yaml ) && hpack

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