summaryrefslogtreecommitdiff
path: root/binary.nix
diff options
context:
space:
mode:
Diffstat (limited to 'binary.nix')
-rw-r--r--binary.nix129
1 files changed, 129 insertions, 0 deletions
diff --git a/binary.nix b/binary.nix
new file mode 100644
index 00000000..e20e5033
--- /dev/null
+++ b/binary.nix
@@ -0,0 +1,129 @@
+{ lib
+, stdenv
+, pkg-config
+, attr
+, libuuid
+, libsodium
+, keyutils
+
+, liburcu
+, zlib
+, libaio
+, udev
+, zstd
+, lz4
+
+, python39
+, python39Packages
+, docutils
+, nixosTests
+
+, versionString ? "0.1"
+, doCheck ? true
+, inShell ? false
+, debugMode ? inShell
+
+, testWithValgrind ? true
+, valgrind
+
+, fuseSupport ? false
+, fuse3 ? null }:
+
+assert fuseSupport -> fuse3 != null;
+assert testWithValgrind -> valgrind != null;
+stdenv.mkDerivation {
+ pname = "bcachefs-bin";
+
+ version = "v0.1-flake-${versionString}";
+ VERSION = "v0.1-flake-${versionString}";
+
+ src = (lib.cleanSource (builtins.path { name = "bcachefs-tools-src"; path = ./. ;} ));
+
+ postPatch = "patchShebangs --build doc/macro2rst.py";
+
+ propagatedNativeBuildInputs = [
+ # used to find dependencies
+ ## see ./INSTALL
+ pkg-config
+ ];
+
+ propagatedBuildInputs = [
+ # bcachefs explicit dependencies
+ ## see ./INSTALL
+ libaio
+
+ # libblkid
+ keyutils # libkeyutils
+ lz4 # liblz4
+
+ libsodium
+ liburcu
+ libuuid
+ zstd # libzstd
+ zlib # zlib1g
+
+ # unspecified dependencies
+ attr
+ udev
+ ];
+
+ buildInputs = [
+ # documentation depenedencies
+ docutils
+ python39Packages.pygments
+ ] ++ (lib.optional fuseSupport fuse3)
+ ++ (lib.optional testWithValgrind valgrind);
+
+ makeFlags = [
+ "PREFIX=${placeholder "out"}"
+ ] ++ lib.optional debugMode "EXTRA_CFLAGS=-ggdb";
+
+ installFlags = [
+ "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
+ ];
+
+ doCheck = doCheck; # needs bcachefs module loaded on builder
+
+ checkInputs = [
+ python39Packages.pytest
+ python39Packages.pytest-xdist
+ ] ++ lib.optional testWithValgrind valgrind;
+
+ checkFlags = [
+ "BCACHEFS_TEST_USE_VALGRIND=${if testWithValgrind then "yes" else "no"}"
+ # cannot escape spaces within make flags, quotes are stripped
+ "PYTEST_CMD=pytest" # "PYTEST_ARGS='-n4 --version'"
+ ];
+
+ preCheck =
+ ''
+ makeFlagsArray+=(PYTEST_ARGS="--verbose -n2")
+ '' +
+ lib.optionalString fuseSupport ''
+ rm tests/test_fuse.py
+ '';
+
+ dontStrip = debugMode;
+ passthru = {
+ bcachefs_revision = let
+ file = builtins.readFile ./.bcachefs_revision;
+ removeLineFeeds = str: lib.lists.foldr (lib.strings.removeSuffix) str ["\r" "\n"];
+ in removeLineFeeds file;
+
+ tests = {
+ smoke-test = nixosTests.bcachefs;
+ };
+ };
+
+ enableParallelBuilding = true;
+ meta = with lib; {
+ description = "Userspace tools for bcachefs";
+ homepage = http://bcachefs.org;
+ license = licenses.gpl2;
+ platforms = platforms.linux;
+ maintainers =
+ [ "Kent Overstreet <kent.overstreet@gmail.com>"
+ ];
+
+ };
+}