2011-10-04 10 views

答えて

5

cabalvchk用途:たとえばhttp://hackage.haskell.org/package/cabalvchk-0.2

、パーセクのバージョンであることを確認するために> = 0.4、あなたが発行することができます:バージョン制約が満たされた場合に

$ cabalvchk parsec '>= 0.4' 

をリターンコードはゼロになりますそうでない場合は0ではない。バージョン制約は、キャバルが理解できるものであればどれでもかまいません。オプションの第3パラメータは、冗長出力を要求するために空白でなくてもよい。

+0

新しい依存関係を導入する必要がある場合でも、これは本当にクールです。 –

+0

ありがとう!長期的に私はカバールツールの人々にこの機能性をカバールに直接追加して依存関係を減らすことを要請することができますが、この追加の依存性はあなたの即時のニーズに必要となります。 –

3

おかげで、。特定のコマンドを実行するように要求することはできますか?もしそうなら、ghc-pkg latestが助けになるはずです。たとえば、ここに私のマシン上で実行がzlibパッケージのためです:

% ghc-pkg latest zlib 
zlib-0.5.3.1 
% ghc-pkg latest --global zlib 
zlib-0.5.3.1 
% ghc-pkg latest --user zlib 
ghc-pkg: cannot find package zlib 
zsh: exit 1  ghc-pkg latest --user zlib 

--globalは、システム全体のインストールに使用してはならない、とユーザー固有のインストールのためには全くのフラグ。 --userフラグは、ユーザーがパッケージのローカルインストールを持っているかどうか(グローバルパッケージを上書きできるかどうか)を確認する場合にのみ使用してください。

理由がない限り、私はconfigureのほうをcabalに捨てることをおすすめします。 cabalのために、ここに解決策は、あなたのプロジェクトのディレクトリにある最初のcabal initにあり、その後、あなたが作成しています.cabalファイルに次のような行をしていることを確認してください。それはので(

build-depends: zlib >= 0.5 

cabalツールチェーンは、Haskellのプロジェクトのための標準であります依存性追求を含む多くのことを自動化し、簡素化します)。他の依存関係がある場合はcabalconfigureを呼び出すよう依頼することもできます。これに関する詳細については、別の質問を開きます。

+0

答えをありがとう。私はすでにghc-pkgを使っていますが、私は '' version = x.y'が必要です。 'configure'を使う理由は、haskellスクリプトは主にpythonで書かれた大きなプログラムの一部であり、すべての依存関係はconfigureによってすでに管理されているからです。 –

0

ghc-pkg listを使用すると、パッケージのインストールされているバージョンのリストを昇順で取得できます。うまくいけば、このリストを検索して一致するものを探してください。 (私はconfigureでこれを行う方法を知らない、申し訳ありません)。

$ ghc-pkg list yesod 
/home/ahammar/.haskell/lib/ghc-7.0.2/package.conf.d 
/home/ahammar/.ghc/x86_64-linux-7.0.2/package.conf.d 
    yesod-0.8.2.1 
    yesod-0.9.1 
    yesod-0.9.2.2 
0

このような何か試してみてください:

# Find ghc-pkg, so we can do version checks 
AC_ARG_VAR([GHC_PKG], [Path to ghc-pkg]) 
AC_PATH_PROG([GHC_PKG], [ghc-pkg]) 
AS_IF([test -z "$GHC_PKG"], [AC_MSG_ERROR([Cannot find ghc-pkg.])]) 

# Check that the package actually exists 
AC_MSG_CHECKING([for Haskell package foo]) 
AS_IF([$GHC_PKG latest foo > /dev/null 2>&1], 
    [AC_MSG_RESULT([yes])], 
    [AC_MSG_RESULT([no]) 
AC_MSG_ERROR([Cannot find foo])]) 

# Check its version 
AC_MSG_CHECKING([if foo is new enough]) 
foo_ver=`$GHC_PKG latest foo | sed 's/^foo-//'` 
# At this point you have the version of foo and the minimum version you want. 
# The rest of the test is pretty easy to write, use cut and test to compare the 
# version numbers. If it's new enough, AC_MSG_RESULT([yes]). 
# If not, AC_MSG_RESULT([no]) and AC_MSG_ERROR([foo is not new enough.]) 
1

おそらく、より良い質問です:あなたがすべきか?特定のバージョン番号を確認することは、autoconfの世界での大きな議論の1つであり、議論の一般的な勝者はあなたがそれをしてはいけないと言っている側です。ハスケルの具体的な特徴は何ですか?それをテストしてください。簡単な例(haskellとは無関係)では、あなたのプログラムがinotifyを使用しているので、configuryが利用可能かどうかテストしたいとします。カーネルのバージョンが> 2.6.13であるかどうかだけでテストできますが、Joeがinotify機能でパッチを当てた2.4.xxバージョンでプログラムをビルドしようとすると、あなたのプログラムはそうではないことに本当に苛立ちます作業。

Haskell> x.yが利用可能かどうかは気にしません。代わりに、あなたがx.yで導入されたことを望むHaskellの特定の機能があります。その機能のテスト。

関連する問題