Если вам нужно быстрое исправление, должно работать следующее:
{ nixpkgs ? import (builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/d42ef371c9b1b532400b0f2820885e575f4f1617.tar.gz";
sha256 = "0irb4zb6hdgaah238244jk2xf63xfb20xy3plb1194pd4xbgdr3r";
}) {}
, ghc ? nixpkgs.ghc
}:
with nixpkgs;
haskell.lib.buildStackProject {
name ="TesteYesod";
src = ./.;
buildInputs = [ postgresql ];
inherit ghc;
}
В чем проблема?Кажется, что в текущем выпуске 18.09, buildStackProject
не работает.Несуществующее сообщение об ошибке вызвано слегка сбойным скриптом preConfigure
, который содержит следующее:
addStackArgsHook = ''
for pkg in ''${pkgsHostHost[@]} ''${pkgsHostBuild[@]} ''${pkgsHostTarget[@]}
do
[ -d "$pkg/lib" ] && \
export STACK_IN_NIX_EXTRA_ARGS+=" --extra-lib-dirs=$pkg/lib"
[ -d "$pkg/include" ] && \
export STACK_IN_NIX_EXTRA_ARGS+=" --extra-include-dirs=$pkg/include"
done
'';
В вашем случае stack
- последняя зависимость, которая будет обработана в цикле (ивозможно, во всех вызовах buildStackProject
в 18.09, я не уверен), но он не содержит директории /lib
или /include
, поэтому код выхода, с которым выходит скрипт preConfigure
, равен 1
, и поэтомувесь процесс сборки завершается.Это просто из-за сокращения &&
, оно работало бы, если бы было правильное if
.
Однако оно уже исправлено в master
(https://github.com/NixOS/nixpkgs/pull/53618),, поэтому просто используйте более новуюnixpkgs должен решить эту проблему.Пиннинг nixpkgs - это то, что вы хотите сделать в любом случае, если вы хотите использовать гарантии репликации Nix в полной мере, так как вы не можете знать, что используете один и тот же коммит nixpkgs, поэтому вы можете использовать разные версиисистемных пакетов.
(Если вы хотите узнать, как я отлаживал это - казалось, проблема была в шаге preConfigure
, поэтому я взглянул на код в generic-stack-builder.nix
, увидел, что preConfigure
был перезаписан, скопировал код оттуда в default.nix
и добавил set -x
вверху. Это показало мне проблему выше, и побудило меня взглянуть на этот файл в мастере, чтобы увидеть, если не былоизменения с 18.09. Другим обходным решением может быть простое добавление true
к сценарию preConfigure
, если это не было уже исправлено в master
, но в этом не было необходимости.)
(Кроме того, я 'мы открыли https://github.com/NixOS/nixpkgs/issues/55548, чтобы перенести исправление на 18.09.)