shell.nix
今、私が作業しているプロジェクトの基本を書く方法を理解しました。私は次のようなものがあります:
{ pkgs ? import <nixpkgs> {} }:
pkgs.mkShell {
nativeBuildInputs = with pkgs; [
cmake
boost
eigen
];
}
ただし、このプロジェクトは他のパッケージcln
にも依存しているため、gitリポジトリからソースコードをダウンロードし、いくつかの特別なフラグを使用してコンパイルする必要があります。このパッケージはautoconf
いくつかのオプションを有効/無効にするだけです。私はこれを達成する方法がわかりませんshell.nix
。以下は、さまざまなGoogle検索でまとめた現在の試みです。うまくいかず、問題を解決する方法(またはヘルプを検索する方法)がわかりません。
with import <nixpkgs> {};
stdenv.mkDerivation { # this line causes an error
name = "cln-m1";
src = fetchurl {
url = "https://www.ginac.de/CLN/cln-1.3.6.tar.bz2";
}; # I also want to pass some flags to "configure" here
}
pkgs.mkShell {
nativeBuildInputs = with pkgs; [
cmake
boost
eigen
cln-m1 # this is the customized package I want to add
];
}
stdenv.mkDerivation...
このコードは、次の行でエラーが発生するため機能しません。
エラー:関数ではなくコレクションを呼び出そうとしています。
私はこの問題を修正し、スクリプトをビルドする前にいくつかのフラグをスクリプトに渡し、カスタムconfigure
フラグcln
(cln
)cln-m1
をこのシェルの依存関係として使用できるようにしたいと思います。
ベストアンサー1
まあ、それは基本的な関数型プログラミングのようなものです。
with import <nixpkgs> {};
let
cln-m1 = stdenv.mkDerivation { # this line causes an error
name = "cln-m1";
src = fetchurl {
url = "https://www.ginac.de/CLN/cln-1.3.6.tar.bz2";
}; # I also want to pass some flags to "configure" here
};
in pkgs.mkShell {
nativeBuildInputs = with pkgs; [
cmake
boost
eigen
cln-m1 # this is the customized package I want to add
];
}