繁体   English   中英

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

[英]cabal: how to automatically update the build-depends field in the .cabal file?

有没有办法自动更新.cabal文件中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.1build-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

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

现代cabal-install有两个工具用于帮助管理依赖项的边界。 首先是gen-bounds ,它根据当前安装的版本规范建议包的正确版本范围。 第二个是outdated ,它列出了cabal文件中的依赖项,其中hackage存在较新的版本。 两者都记录在cabal手册中: https//www.haskell.org/cabal/users-guide/developing-packages.html#generating-dependency-version-bounds

一个可能的替代方案是使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM