2015-05-14 2 views
19

Есть ли способ автоматически обновить поле в зависимости от размера в .cabal-file? Например, если мы начнем со следующего .cabal файла:cabal: как автоматически обновить поле, зависящее от сборки, в файле .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-режим делает это для меня, но я не знаю общего решения. –

+0

@ReinHenrichs Я думаю, что код для упомянутой вами функции - это [haskell-mode в github, поиск defun haskell-cabal-section-add-build-dependency] (https://github.com/haskell/haskell- режим/блоб/7100354a16a0502ed1730d1dfd1e3b9776969041/Haskell-cabal.el). Интересно, сделали ли вкладчики кабалы что-то подобное. –

+4

Автоматически? На основании чего? Неужели вы не хотите, чтобы ВСЕ ваши установленные пакеты в вашей сборке зависели? – Cubic

ответ

2

В современном cabal-install есть два инструмента для помощи в управлении границами зависимостей. Первый - gen-bounds, который предлагает подходящие диапазоны версий для пакетов на основе спецификаций версий, установленных в настоящее время. Второй - outdated, в котором перечислены зависимости в файле cabal, для которых существуют более новые версии на hackage. Оба описаны в руководстве междусобойчик: https://www.haskell.org/cabal/users-guide/developing-packages.html#generating-dependency-version-bounds

0

Возможной альтернативой является использование hpack, YAML, губку и JQ:

Вам понадобится hpack файл package.yaml.

Например, чтобы добавить aeson как зависимость:

cp package.yaml package.yaml.backup && (yaml2json package.yaml | jq '.dependencies += ["aeson"]' | json2yaml | sponge package.yaml) && hpack 

 Смежные вопросы

  • Нет связанных вопросов^_^