Создание выражения Haskell nix из GitHub завершается неудачно при передаче необязательного аргумента сборки - PullRequest
1 голос
/ 11 февраля 2020

Проблема. Я строю выражение nix godot-haskell из его GitHub repo , которое

  • Имеет / требует git подмодулей для правильной компиляции
  • Принимает необязательный аргумент сборки godot-api, который я хотел бы использовать

Если я вручную клонирую этот репозиторий (рекурсивно через git clone --recursive), а затем

let 
  # ...
  godot-haskell = haskellPackages.callPackage /local/path/to/default.nix { api-json = godot-api; };
  # ...
in 
  # ...

тогда все отлично работает! Но если вместо этого я попытаюсь сделать это не локально:

godot-haskell-nix = "${fetchFromGitHub {
  fetchSubmodules = true;
  owner = "SimulaVR";
  repo = "godot-haskell";
  rev =  "df592f8e12647ed58d7ba6da4cf40a382d83725e";
  sha256 = "05wp8lzj2xqwkif8hw9l4byw0dfm3y3jaccsvjif4izfwycj91r8";
  }}/default.nix";

godot-haskell = haskellPackages.callPackage godot-haskell-nix { api-json = godot-api; };  # <- With the `api-json` build argument

, тогда я получу

error: anonymous function at /nix/store/xnf67r119iazf828ixny8wjyzl01hwsg-source/default.nix:1:1 called with unexpected argument 'api-json', at /nix/store/7knlwgidnagqrckm5h051i4rxjf3l68z-nixpkgs-20.03pre211220.1144ee55385/nixpkgs/pkgs/development/haskell-modules/make-package-set.nix:87:27
(use '--show-trace' to show detailed location information)

Вопрос: Почему это работает нормально, когда выполняется локально, но вдруг произойдет сбой при использовании fetchFromGitHub? Как обойти эту ошибку?

1 Ответ

1 голос
/ 12 февраля 2020

cat /nix/store/xnf67r119iazf828ixny8wjyzl01hwsg-source/default.nix показывает:

{ mkDerivation, aeson, ansi-wl-pprint, base, bytestring, c2hs
, casing, colour, containers, hpack, lens, linear, mtl, parsec
, parsers, stdenv, stm, template-haskell, text
, unordered-containers, vector
}:

mkDerivation {
  pname = "godot-haskell";
  version = "3.1.0.0";
  src = ./.;
  libraryHaskellDepends = [
    aeson ansi-wl-pprint base bytestring casing colour containers lens
    linear mtl parsec parsers stm template-haskell text
    unordered-containers vector
  ];
  libraryToolDepends = [ c2hs hpack ];
  doHaddock = false;
  preConfigure = "hpack";
  homepage = "https://github.com/KaneTW/godot-haskell#readme";
  description = "Haskell bindings for the Godot game engine API";
  license = stdenv.lib.licenses.bsd3;
}

Нет api-json аргумент! Таким образом, разница не в том, как nix оценивает локальные файлы по сравнению с fetchFromGitHub, разница в том, что они не одинаковы!

Конечно, я посмотрел ревизию df592f8e12647ed58d7ba6da4cf40a382d83725e этого репо. Это последний коммит на ветке master. Однако ссылка, указанная в вашем вопросе, ведет на ветку simula, которая включает в себя коммиты, которые еще не дошли до master.

Попробуйте использовать rev = "45f15cf95e5a7228bed0739e020d4c404c3af49e"; (вам придется обновить ну и ха sh конечно же).

...