找不到glpk和pcre(NIXOS)

时间:2016-03-03 22:28:04

标签: nix nixos nixpkgs

我正在尝试在我的NixOS中构建自己的nix-shell环境。我有2个.nix文件,default.nix和shell.nix,这里有配置:

default.nix:

{ stdenv, haskellngPackages}:

let
  env = haskellngPackages (p: with p; [
        aeson
        bytestring
        conduit
        snap
        ghcjs
        text
        wai
        warp
        yaml
        haskell.packages.lts-4_01.ghc
        ]);

in
  stdenv.mkDerivation {
  name = "RiziLab";

buildInputs = [
  glpk
  pcre
  env
];

    STACK_IN_NIX_EXTRA_ARGS
       = " --extra-lib-dirs=${glpk}/lib"
       + " --extra-include-dirs=${pglpk}/include"
       + " --extra-lib-dirs=${pcre}/lib"
       + " --extra-include-dirs=${pcre}/include"
    ;
}

shell.nix:

{ pkgs ? (import <nixpkgs> {} ) }:

(import ./default.nix) {
  stdenv  = pkgs.stdenv;
  haskellngPackages = pkgs.haskellngPackages;
}

但是当我执行nix-shell时,我收到了这个错误:

error: undefined variable ‘glpk’
根据我的理解,default.nix只是一个由shell.nix,cmiiw调用的函数。问题是:

  1. 我的代码中是否有错误?
  2. 我使用了{nixpkgs ? (import <nixpkgs> {} ) }{pkgs ? (import <nixpkgs> {})},但仍然遇到了同样的错误,这两个之间有什么不同吗?
  3. 可以排除ghcwithPackages吗?

1 个答案:

答案 0 :(得分:0)

glpk未在default.nix中定义是问题所在 glpk路径为pkgs.glpk,但pkgs范围内没有default.nixglpk未作为参数传递给该功能。

此外,不需要有2个单独的文件,可以将整个文件分组到一个文件中:

{ nixpkgs ? import <nixpkgs> {}, compiler ? "lts-4_1" }:
let
  inherit (nixpkgs) pkgs;
  ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (ps: with ps; [
          aeson
          bytestring
          conduit
          snap
          # ghcjs # not a package but a compiler
          text
          wai
          warp
          yaml
        ]);
in
pkgs.stdenv.mkDerivation {
  name = "RiziLab";
  buildInputs = with pkgs; [ ghc glpk pcre ];
  shellHook = "eval $(egrep ^export ${ghc}/bin/ghc)";
  STACK_IN_NIX_EXTRA_ARGS = with pkgs; 
      " --extra-lib-dirs=${glpk}/lib"
    + " --extra-include-dirs=${glpk}/include"
    + " --extra-lib-dirs=${pcre}/lib"
    + " --extra-include-dirs=${pcre}/include"
  ;
}

您可以在Nixpkgs manual中了解有关在nix中使用haskell的更多信息。