2011-10-04 24 views

cevap

5

Kullanım cabalvchk: sürüm kısıtı memnun olup olmadığını

$ cabalvchk parsec '>= 0.4' 

dönüş kodu sıfır olacaktır: http://hackage.haskell.org/package/cabalvchk-0.2

Örneğin, ihraç edebileceği, Parsec sürümü> = 0.4 olduğunu doğrulamak için ve sıfırdan farklı. Sürüm kısıtlaması, kabalenin anlayabileceği herhangi bir şey olabilir. İsteğe bağlı üçüncü parametre, ayrıntılı çıktı almak için boş bırakılamaz.

+0

Bu gerçekten harika, çünkü yeni bir bağımlılık getirmem gerekiyor demektir. –

+0

Teşekkürler! Uzun vadede, kabile aracı milletine bu işlevselliği doğrudan bağımlılıklara indirgeyecek şekilde cabal olarak eklemek için dilek verebilirim, ancak bu ek bağımlılık acil ihtiyaçlarınız için gerekli olacaktır. –

3

; Belirli bir komutu çalıştırmasını ister misiniz? Eğer öyleyse, ghc-pkg latest size yardımcı olmalıdır.

% 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 sistem genelinde kurulumlar için kullanılmalıdır ve kullanıcıya özgü yüklemeler için hiçbir bayrak: Örneğin, burada zlib paket için benim makinede bir çalışma bu. --user bayrağının yalnızca bir kullanıcının yerel bir paket yüklemesi olup olmadığını (global olanı geçersiz kılabilir) kontrol etmek istediğinizde kullanılması gerekir.

Yapmamanız için bir nedeniniz olmadıkça, configure'u cabal lehine öneriyorum. cabal için çözüm burada o zaman yarattı .cabal dosyada böyle bir çizgi var olmadığını kontrol projenizin dizininde ilk cabal init şudur: (

build-depends: zlib >= 0.5 

cabal araç zinciri Haskell projeleri için standarttır bunun nedeni bağımlılık-kovalama da dahil olmak üzere birçok şeyi otomatikleştirir ve kolaylaştırır. Başka bağımlılıklar varsa, cabal numaralı telefonu da configure numaralı telefonu çağırmasını isteyebilirsiniz. Bununla ilgili daha fazla bilgi edinmek isterseniz ayrı bir soru açın.

+0

Cevabınız için teşekkürler.Ben zaten ghc-pkg kullanıyorum, ama '' x.y' sürümüne ihtiyacım var '' demenin bir yolunu bilmiyorum. 'Configure'i kullanmanın nedeni, haskell betiklerinin çoğunlukla python'da yazılmış daha büyük bir programın bir parçası olmasıdır ve tüm bağımlılıklar zaten yapılandırılarak yönetilmektedir. –

0

ghc-pkg list'u kullanarak, bir paketin yüklü sürümlerinin listesini artan sırada alabilirsiniz. Bu listeyi bir eşleşme arayanlara göre filtreleyebilmeliydiniz. (Bunu configure ile nasıl yapacağımı bilmiyorum). Böyle

$ 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

deneyin şey:

# 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

Belki daha iyi bir soru şudur: ki? Belirli bir sürüm numarasını kontrol etmek, autoconf dünyasındaki en büyük argümanlardan biridir ve tartışmanın genel galibi, asla yapmamanız gerektiğini söyleyen taraftır. Haskell'in hangi özelliklerine ihtiyacınız var? Bunun için test et. Basit bir örnek olarak (haskell ile ilgisi yok), programınızın inotify'ı kullandığını varsayın, böylece yapılandırmanın kullanılabilir olup olmadığını test etmesini istiyorsunuz. Eğer çekirdek versiyonunun> 2.6.13 olduğunu test edebilirdiniz, ama Joe programınızı 2.4.xx versiyonunda inotify yeteneğine yatırarak çalıştığında çalıştığında, programınızın olmayacağı konusunda gerçekten rahatsızlık duyacak. iş.

Haskell> x.y mevcut ise umurunda değilsiniz. Bunun yerine, Haskell'in x.y'de tanıtılmasını istediğiniz belirli bir özelliği var; Bu özellik için test edin.

İlgili konular