2011-10-04 2 views

답변

5

사용 cabalvchk : 버전 제약 조건이 만족되는 경우

$ cabalvchk parsec '>= 0.4' 

리턴 코드는 0이됩니다 : http://hackage.haskell.org/package/cabalvchk-0.2

예를 들어, 당신은 실행할 수 파섹의 버전이> = 0.4가 있는지 확인하기 위해 그렇지 않으면 0이 아닙니다. 버전 제한은 캐럴이 이해할 수있는 모든 것일 수 있습니다. 선택적인 세 x 째 매개 변수는 공 i이 아니 어서 자세한 출력을 요청할 수 있습니다.

+0

새로운 의존성을 도입해야한다는 의미 일지라도 이것은 참으로 멋지다. –

+0

감사! 오랫동안 필자는 Cabal 도구 사용자에게 종속성을 줄이는이 기능을 직접 Cabal에 추가하도록 요청할 수 있었지만,이 추가 종속성은 즉각적인 필요성에 필요할 것입니다. –

3

; 특정 명령을 실행하도록 요청할 수 있습니까? 그렇다면 ghc-pkg latest가 도움이 될 것입니다.

% 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는 전체 시스템 설치에 사용되어야하며, 사용자 별 설치에 전혀 플래그 : 예를 들어, 여기에 zlib 패키지 내 컴퓨터에서 실행입니다. --user 플래그는 사용자가 패키지를 로컬로 설치했는지 (전역 패키지를 무시할 수 있는지) 여부를 확인하려는 경우에만 사용해야합니다.

이유가없는 한 configure 번을 cabal으로 설정하는 것이 좋습니다. cabal를 들어,이 솔루션은 여기에 당신이 만들어지는 .cabal 파일과 같은 라인이 있는지 확인, 프로젝트의 디렉토리에 처음 cabal init이다 : (

build-depends: zlib >= 0.5 

cabal 툴체인은 하스켈 프로젝트에 대한 표준이 그것 때문에 의존성 추적 (dependency-chasing)을 포함하여 많은 것들을 자동화하고 단순화합니다. 다른 종속성이있는 경우 cabalconfigure을 호출하도록 요청할 수도 있습니다. 이에 대한 자세한 정보가 필요하면 별도의 질문을 엽니 다.

+0

답해 주셔서 감사합니다.나는 이미 ghc-pkg를 사용하고 있지만'나는 버전이 필요합니다 = x.y'라고하는 방법을 모르겠습니다. 'configure'를 사용하는 이유는 haskell 스크립트가 주로 파이썬으로 작성된 더 큰 프로그램의 일부이며, 모든 의존성은 이미 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 세계에서 위대한 논의 중 하나이며, 토론의 일반적인 승자는 당신이 그것을해서는 안된다는 측면입니다. 하스켈의 특징은 무엇입니까? 그걸 시험해 봐. 간단한 예제 (haskell과는 무관 함)로 프로그램이 inotify를 사용한다고 가정하고 configury가 사용 가능한지 테스트하려고합니다. 커널 버전이> 2.6.13인지 테스트 할 수 있습니다.하지만 Joe가 inotify 기능을 패치 한 2.4.xx 버전에서 프로그램을 빌드하려고하면 Joe는 프로그램이 실행되지 않을 것이라는 사실에 정말로 짜증을냅니다. 작업.

Haskell> x.y를 사용할 수 있는지 상관하지 않습니다. 대신, x.y에서 소개 된 하스켈의 특정 기능이 있습니다. 해당 기능을 테스트하십시오.

관련 문제