Как проверить версии пакета haskell в ./configure? - PullRequest
8 голосов
/ 04 октября 2011

как мне настроить configure для проверки version >= x.y данного пакета на Haskell?

Спасибо,

Ответы [ 5 ]

5 голосов
/ 11 октября 2011

Используйте cabalvchk: http://hackage.haskell.org/package/cabalvchk-0.2

Например, чтобы проверить, что версия parsec>> 0,4, вы можете ввести:

$ cabalvchk parsec '>= 0.4'

Код возврата будет нулевым, еслиограничение версии выполняется и ненулевое в противном случае.Ограничением версии может быть все, что понимает Кабала.Необязательный третий параметр может быть непустым для запроса подробного вывода.

3 голосов
/ 04 октября 2011

Я не знаю много о configure; Вы можете попросить его выполнить определенную команду? Если так, то 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 (потому что он автоматизирует и упрощает многие вещи, включая поиск зависимостей). Вы также можете попросить cabal вызвать configure, если есть другие зависимости. Если вам нужна дополнительная информация, откройте отдельный вопрос.

1 голос
/ 10 октября 2011

Возможно, лучший вопрос: а вы?Проверка на конкретный номер версии - один из лучших аргументов в мире autoconf, и главным победителем в дискуссии является сторона, которая говорит, что вы никогда не должны этого делать.Какая особенность Haskell вам нужна?Тест на это.В качестве простого примера (не связанного с haskell), предположим, что ваша программа использует inotify, поэтому вы хотите, чтобы конфигурация проверила, доступна ли она.Вы можете просто проверить, является ли версия ядра> 2.6.13, но затем, когда Джо попытается собрать вашу программу на своей версии 2.4.xx, в которой он исправил возможность inotify, он будет действительно раздражен тем, что ваша программа не будетработа.

Вам все равно, доступен ли Haskell> xy.Вместо этого есть некоторая особенность Haskell, которую вы хотите, которая была представлена ​​в xy;тест для этой функции.

0 голосов
/ 09 октября 2011

Попробуйте что-то вроде этого:

# 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.])
0 голосов
/ 04 октября 2011

Используя 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
...