Сбой сборки на Haskell / Stack / Nix, требующий pkg-config >= 0.9.0 и cairo >= 1.2.0, но последние версии - это pkg-config 0.29.2 и cairo 1.15.4

Я строю проект на Haskell, используя Stack и Nix и в зависимости от cairo Библиотека от Hackage.

Когда я строю проект, я получаю сообщение об ошибке: невозможно найти pkg-config >= 0.9.0 или же cairo >= 1.2.0, Тем не менее, последние версии в соответствии с их сайтами pkg-config 0.29.2 а также cairo-1.15.4 и это также отражено в менеджере пакетов Nix.

С другой стороны, в 2006 году была опубликована статья о выпуске Cairo 1.2.0, которая еще больше запутывает проблему.

Вопросы

  1. Почему ожидаемые версии так сильно отличаются от опубликованных версий на nixpkgs и pkg-config / cairo сайты?

  2. Какой совет вы должны получить cairo для сборки на macOS (лучший вариант: использование Nix для системных пакетов и Stack для пакетов на Haskell)

Действия по воспроизведению:

> stack new cairo-test simple && cd cairo-test

# Now, to get Cairo
> stack install cairo

cairo-0.13.3.1: configure ...
Process exited with code: ExitFailure 1
Configuring cairo-0.13.3.1...
setup: The program 'pkg-config' version >=0.9.0 is required but it could not be found.

# This version doesn't seem to exist (not on the pkg-config website, either).
> nix-env -qaP pkg-config
nixpkgs.pkgconfig          pkg-config-0.29.2
nixpkgs.pkgconfigUpstream  pkg-config-0.29.2

# However, if installed, a new error:
> nix-env -i pkg-config
installing ‘pkg-config-0.29.2’
building path(s) ‘/nix/store/m4ks2si7b78757c1rc43r0833pxkvjb3-user-environment’
created 102 symlinks in user environment
> stack install cairo
setup: The pkg-config package 'cairo' version >=1.2.0 is required but 
it could not be found.

# Again, this version doesn't seem to exist, either on the site on in `nixpkgs`
> nix-env -qaP cairo
nixpkgs.cairo  cairo-1.14.8

# Installing it anyway, to see what the next error is
> nix-env -i cairo
installing ‘cairo-1.14.8’
building path(s) ‘/nix/store/dcx0in96wcd7yd8q71y93jd5306vag8g-user-environment’
created 112 symlinks in user environment

# Get the same version error now that Cairo is installed
setup: The pkg-config package 'cairo' version >=1.2.0 is required but it could not be found.

2 ответа

Решение

Установив Homebrew, а затем Каир с brew install cairoЯ смог построить проект.

Тем не менее, это установил Cairo версии 1.14 - то же самое, что установил Nix! Когда я проверяю с brew info cairoЯ вижу больше информации:

cairo: stable 1.14.8 (bottled), devel 1.15.4, HEAD

==> Dependencies
Build: pkg-config ✘
Required: freetype ✔, fontconfig ✔, libpng ✔, pixman ✔, glib ✔

Я попытался установить эти зависимости с помощью Nix и удалить Homebrew. Не повезло - есть куча ошибок ссылок. И вот я переустановил Homebrew, и он снова работает.

Это не хорошее, чистое решение, которое я искал (пришлось установить внешний менеджер пакетов), но оно действительно решает проблему на данный момент.

Вопрос не в версии библиотеки, 1.14.8 больше, чем 1.2.0, Проблема в том, что файлы разработки cairo не связаны с вашей средой, то есть $PKG_CONFIG_PATH не установлен.

Три решения:

  1. Найдите каталог cairo-dev в /nix/storeи добавить его в PKG_CONFIG_PATH, Например,

     $ cairodev=$(nix-store --query --outputs $(nix-instantiate '<nixpkgs>' -A cairo) | grep dev$)
     $ export PKG_CONFIG_PATH=$cairodev:$PKG_CONFIG_PATH
    
  2. Запустить стек из оболочки nix, nix-shell -p pkgconfig cairo,

  3. Используйте поддержку стека nix, добавив следующее в stack.yml:

    nix:
      enable: true
      packages: [pkgconfig, cairo]
    
Другие вопросы по тегам