【问题标题】:Haskell / Stack / Nix build fails, requiring pkg-config >= 0.9.0 and cairo >= 1.2.0, but latest versions are pkg-config 0.29.2 and cairo 1.15.4Haskell / Stack / Nix 构建失败,需要 pkg-config >= 0.9.0 和 cairo >= 1.2.0,但最新版本是 pkg-config 0.29.2 和 cairo 1.15.4
【发布时间】:2017-06-01 17:49:00
【问题描述】:

我正在使用 Stack 和 Nix 构建一个 Haskell 项目,并依赖于 Hackage 的 cairo 库。

当我构建项目时,我收到一个错误:找不到pkg-config >= 0.9.0cairo >= 1.2.0。但是,根据他们的网站,最新版本是 pkg-config 0.29.2cairo-1.15.4,这也反映在 Nix 包管理器中。

另一方面,有 this article from 2006 announcing the release of Cairo 1.2.0,这进一步混淆了这个问题。

问题

  1. 为什么预期版本与nixpkgspkg-config / cairo 网站上的已发布版本有如此大的差异?

  2. 对于在 macOS 上构建,你有什么建议可以得到 cairo(最好的情况:将 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.

【问题讨论】:

  • 我远不是使用 Nix 进行 Haskell 开发的专家,但通常要在 Nix 中使用库包,您必须打开一个 nix-shell:nix-shell -p pkg-config cairo

标签: haskell cairo haskell-stack nix nixpkgs


【解决方案1】:

问题不是库版本,1.14.8 大于 1.2.0。问题是 cairo 开发文件没有链接到你的环境中,也就是说,$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. 使用堆栈的 nix 支持,将以下内容添加到 stack.yml:

    nix:
      enable: true
      packages: [pkgconfig, cairo]
    

【讨论】:

    【解决方案2】:

    通过安装 Homebrew,然后使用 brew install cairo 安装 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,它又可以工作了。

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

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多