Haskell/Stack / Nix构建失败,需要pkg-config >= 0.9.0和Cairo >= 1.2.0,但最新版本是pkg-config 0.29.2和cairo 1.1



我正在使用堆栈和nix构建一个haskell项目,并取决于hackage的 cairo库。

当我构建项目时,我会发现一个错误:找不到pkg-config >= 0.9.0cairo >= 1.2.0。但是,根据其网站的最新版本是pkg-config 0.29.2cairo-1.15.4,这也反映在Nix Package Manager中。

另一方面,有2006年的本文宣布发行开罗1.2.0,这进一步使问题感到困惑。

问题

  1. 为什么预期版本与nixpkgspkg-config/cairo网站上发布的版本如此大不相同?

  2. 您必须在MacOS上获得cairo的建议(最佳情况方案:使用NIX用于系统软件包,而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.

问题不是库版本,1.14.8大于1.2.0。问题是开罗开发文件没有链接到您的环境中,也就是说,$PKG_CONFIG_PATH未设置。

三个解决方案:

  1. /nix/store中找到Cairo-Dev目录,然后将其添加到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 shell内部的堆叠堆栈, nix-shell -p pkgconfig cairo

  3. 通过将以下内容添加到stack.yml

    ,请使用Stack的Nix支持
    nix:
      enable: true
      packages: [pkgconfig, cairo]
    

通过安装Homebrew,然后使用brew install 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安装这些依赖项,并卸载自制。没有运气 - 有很多链接错误。因此,我重新安装了自制酿酒厂,然后又可以工作。

这不是我正在寻找的不错,干净的解决方案(必须安装外部包装管理器(,但现在确实解决了问题。

最新更新