nix: ссылка на один локальный пакет perl из другого - PullRequest
1 голос
/ 26 июня 2019

Я пытаюсь создать локальный пакет 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-Plus, perl-Getopt-Plus, perl-Getopt-Plus-0.99. Я также пытался удалить дефис из установки Getopt-Plus, чтобы он стал GetoptPlus; он, конечно, прекрасно устанавливается, но похоже, не помогает эта проблема.

Если я запускаю nix repl, установка p = import <nixpkgs> {}; тогда он ясно представляет p.GetoptPlusp.Finance) как действительный вывод.

Мои вопросы:

  1. Какое правильное имя использовать, чтобы Финансы зависели от Гетопт-Плюс; и
  2. Должен ли я использовать здесь buildInputs или spreadatedBuildInputs? Мне неясно, в чем разница.

Спасибо за любую помощь.

1 Ответ

2 голосов
/ 30 июня 2019

Добавление оверлея, указывающего на GetoptPlus, делает его доступным в nixpkgs, и моя проблема решена:

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