nix:引用另一个本地perl软件包

时间:2019-06-26 19:08:24

标签: perl nix nixos

我正在尝试构建一个使用另一个作为依赖项的本地perl软件包。

有问题的依存关系是Getopt-Plus;它是使用以下nix表达式安装的:

{ fetchurl, perlPackages }:

perlPackages.buildPerlModule rec {
  version = "0.99";
  name = "Getopt-Plus";

  src = fetchurl {
    url = "mirror://cpan/authors/id/F/FL/FLUFFY/${name}-${version}.tar.gz";
    sha256 = "0vsr4d0myv98aqbs7rc5rvqdpfz1vg1w7b5wyn4i6lmycp1wxxqk";
  };

  buildInputs = [ ];
  propagatedBuildInputs = with perlPackages; [ ];

  doCheck = false;
}

安装成功就可以了,如下所示:

$ nix-env -q | grep Getopt
perl5.28.2-Getopt-Plus-0.99

现在,我有一个本地软件包,令人兴奋地称为Finance,它使用Getopt-Plus。因此,这是一个假定的nix表达式:

{ nixpkgs }:

with nixpkgs;
with perlPackages;
buildPerlModule rec {
  version = "1.01";
  name = "Finance";

  src = fetchurl {
    url = "http://localhost:8888/${name}-${version}-002.tar.gz";
    sha256 = "0fib0rbzx8519imsw9jrfl805r6lrl6qzbnhipxxix5scar913r7";
  };

  buildInputs = [ ];
  propagatedBuildInputs = [ "Getopt-Plus" ];

  doCheck = false;
}

与覆盖文件一起,以允许引用本地定义的包(通过self):

self: super: {
  Finance = import ../pkgs/Finance/default.nix { nixpkgs = self; };
}

我的问题是,如何引用Getopt-Plus;我尝试的所有操作都会导致出现build input Getopt-Plus does not exist形式的错误。

我尝试使用带双引号和不带双引号(不带引号会导致“未定义的变量”错误;很明显,它认为Getopt-Plus会是一个变量,我想是因为有连字符);我已经尝试过perl5.28.2-Getopt-Plus-0.99的“已安装”名称;我已经尝试过对它们进行其他修改(例如,perl5.28.2-Getopt-Plusperl-Getopt-Plusperl-Getopt-Plus-0.99。我还尝试从Getopt-Plus安装中删除连字符,使其成为GetoptPlus;它将安装当然可以,但它本身并不能解决这个问题。

如果我启动了nix repl,请设置p = import <nixpkgs> {};那么它显然将p.GetoptPlus(和p.Finance)表示为有效派生。

我的问题是:

  1. 用于使Finance依赖Getopt-Plus的正确名称是什么;和
  2. 我应该在这里使用buildInputs还是propagatedBuildInputs吗?我不清楚两者之间的区别。

谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

添加指向GetoptPlus的叠加层使其可以在nixpkgs中使用,并且我的问题已解决:

self: super: {
  Getopt-Plus = import ../pkgs/Getopt-Plus/default.nix { nixpkgs = self; };
}