пятница, 5 ноября 2010 г.

Haskell Platform 2010.2.0.0 и Cabal под Windows XP

Давеча столкнулся с интересной проблемой обновления пакетов в Haskell Platform 2010.2.0.0 (от июля 2010 года) под Windows XP. Изучал пример, в котором для перекодировки символов использовался модуль Encoding. Из коробки данный модель не входит в состав библиотек, поставляемых c Haskell Platform 2010.2.0.0.

Качать пакеты можно с http://hackage.haskell.org - хранилища различных пакетов модулей для хаскеля. Можно пробовать либо устанавливать пакеты вручную, либо использовать идущий вместе с хаскелем Cabal - средство для автоматической установки пакетов. Конечно, более интересным показался второй вариант. Тут же наткнулся на первые грабли.


Cabal версии 1.8.0.2 при любой попытке закачать tar.gz файл с вышеуказанного сервера выдавал сообщение об ошибке: "cabal: Codec.Compression.Zlib: incorrect header check".
Погуглив на данную тему, понял, что проблема в том, что по пути передачи файла имеется какой-то прокси-сервер, который добавляет заголовок ответа, указывающий, что файл gzip-жатый, и при приеме данный файл автоматически распаковывается, таким образом, не проходя проверку корректности в хаскелевом скрипте.

Как вариант предлагалось обновить Cabal до версии 1.10. Обновить через установку Darcs (распределенная система контроля версий). Сам Darcs (такой же обычный пакет, как и Cabal) имеет кучу зависимостей (в районе 15 модулей). При любой попытке обновить которые возникает та же самая ошибка. В общем, замкнутый круг (No escape! :))

Рассказал об этой ситуации в jabber-конференции haskell@conference.jabber.ru.
Тамошний модератор, имеющий ник adept (спасибо тебе, добрый человек), достаточно терпеливо отнесся к моим томлениям и мукам, и в итоге передал мне готовые пакеты новой версии Cabal (1.10) и требующегося для его нормальной работы cabal-install.

После сборки и установки их по месту:
===
>ghc --make setup.hs
>setup configure
>setup build
>setup install
===
cabal был успешно обновлен.

Но это оказалось не все. Новым cabal-ом пакеты стали успешно закачиваться на локальную машину, но вот сами пакеты то устанавливались корректно, то нет.
Авторы у всех пакетов разные, и, видимо, не все проверяют их корректную установку под всем возможными осями. Во всяком случае, внимание Windows XP уделяется если не в самую последнюю очередь, то достаточно близко к этой позиции. Так, например, злополучный encoding мне установить не удалось, ибо при попытке выполнить
"cabal install encoding" у меня появлялось сообщение о том, что не найден заголовочный файл langinfo.h. И действительно, в исходниках скачанного пакета такого файла не было. По слухам, он входит в состав библиотек и заголовочных файлов C++ компиляторов Linux.
Я поискал у себя на винте файл с таким именем, но так и не нашел (даже полагал, что
получится найти его в комплекте идущего вместе с Haskell Platform 2010.2.0.0 MinGW C++, но не судьба).

В итоге, попробовал скачать этот файл из первого источника, что встретился в инете - каких-то исходников для Solaris. Он потянул еще несколько .h за собой.
Их я тоже подцепил. И вроде бы encoding у меня собралась.

Но после этого, когда я уже было загрузил ghci c подставленным в командную строку
именем тестируемого test.hs и обрадовался, что ошибок при загрузке нет, выполнить
его мне не удалось, так как при попытке выполнения появилось сообшение о какой-то
ошибке в regex-posix-0.94.2. Тут ситуация достаточно интересная, так как когда я установил новый regex-posix-0.94.4, система всё равно продолжала ссылаться на regex-posix-0.94.2. Не помогло даже выполнение "ghc-pkg unregister regex-posix-0.94.2".
То есть, пакет, вроде бы, удалялся, но вот при сборке использовался он именно этой версии.

На этой печальной ноте я пока закончил свои неудачные эксперименты с обновлением пакетов в Haskell Platform 2010.2.0.0. Слегка утомился, если честно :)
Надеюсь, что когда-нибудь у меня опять появится желание этим заниматься.

Комментариев нет:

Отправить комментарий