mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-27 00:21:07 +00:00
137 lines
5.2 KiB
Nix
137 lines
5.2 KiB
Nix
let
|
|
# sources.nix contains information about which versions of some of our
|
|
# dependencies we should use. since we use it to pin nixpkgs and the PyPI
|
|
# package database, roughly all the rest of our dependencies are *also*
|
|
# pinned - indirectly.
|
|
#
|
|
# sources.nix is managed using a tool called `niv`. as an example, to
|
|
# update to the most recent version of nixpkgs from the 21.11 maintenance
|
|
# release, in the top-level tahoe-lafs checkout directory you run:
|
|
#
|
|
# niv update nixpkgs-21.11
|
|
#
|
|
# or, to update the PyPI package database -- which is necessary to make any
|
|
# newly released packages visible -- you likewise run:
|
|
#
|
|
# niv update pypi-deps-db
|
|
#
|
|
# niv also supports chosing a specific revision, following a different
|
|
# branch, etc. find complete documentation for the tool at
|
|
# https://github.com/nmattia/niv
|
|
sources = import nix/sources.nix;
|
|
in
|
|
{
|
|
pkgsVersion ? "nixpkgs-21.11" # a string which chooses a nixpkgs from the
|
|
# niv-managed sources data
|
|
|
|
, pkgs ? import sources.${pkgsVersion} { } # nixpkgs itself
|
|
|
|
, pypiData ? sources.pypi-deps-db # the pypi package database snapshot to use
|
|
# for dependency resolution
|
|
|
|
, pythonVersion ? "python37" # a string choosing the python derivation from
|
|
# nixpkgs to target
|
|
|
|
, extras ? [ "tor" "i2p" ] # a list of strings identifying tahoe-lafs extras,
|
|
# the dependencies of which the resulting package
|
|
# will also depend on. Include all of the runtime
|
|
# extras by default because the incremental cost of
|
|
# including them is a lot smaller than the cost of
|
|
# re-building the whole thing to add them.
|
|
|
|
, mach-nix ? import sources.mach-nix { # the mach-nix package to use to build
|
|
# the tahoe-lafs package
|
|
inherit pkgs pypiData;
|
|
python = pythonVersion;
|
|
}
|
|
}:
|
|
# The project name, version, and most other metadata are automatically
|
|
# extracted from the source. Some requirements are not properly extracted
|
|
# and those cases are handled below. The version can only be extracted if
|
|
# `setup.py update_version` has been run (this is not at all ideal but it
|
|
# seems difficult to fix) - so for now just be sure to run that first.
|
|
mach-nix.buildPythonPackage rec {
|
|
# Define the location of the Tahoe-LAFS source to be packaged. We can't
|
|
src = pkgs.lib.cleanSourceWith {
|
|
# Define our own filter because we need to keep the whole `.git` directory
|
|
# for setuptools-scm. :/
|
|
filter = name: type:
|
|
let baseName = baseNameOf (toString name);
|
|
in ! (
|
|
baseName == "__pycache__" ||
|
|
baseName == ".hypothesis" ||
|
|
baseName == ".tox" ||
|
|
baseName == ".mypy_cache" ||
|
|
pkgs.lib.hasPrefix "_trial_temp" baseName ||
|
|
pkgs.lib.hasSuffix ".pyc" baseName ||
|
|
pkgs.lib.hasSuffix ".pyo" baseName ||
|
|
pkgs.lib.hasSuffix "~" baseName ||
|
|
type == "symlink" ||
|
|
type == "unknown"
|
|
);
|
|
src = ./.;
|
|
};
|
|
|
|
# The name and most other metadata can be discovered from the package
|
|
# metadata files. However, setuptools-scm is too tricky for mach-nix so we
|
|
# have to duplicate the version information here.
|
|
version = "1.18.1.post1";
|
|
|
|
pythonImportsCheck = [ "allmydata" ];
|
|
|
|
# This is really a check but I can't get checks to run. I think mach-nix
|
|
# works hard to disable them.
|
|
#
|
|
# Check that the nix and Python package metadata are roughly in agreement
|
|
# regarding the version information.
|
|
postInstall = ''
|
|
python -c "
|
|
from allmydata import __version__ as v
|
|
w = '${version}'
|
|
print(v)
|
|
print(w)
|
|
raise SystemExit(v.split('.')[:3] != w.split('.')[:3])
|
|
"
|
|
'';
|
|
|
|
nativeBuildInputs = [
|
|
pkgs.git
|
|
];
|
|
|
|
# Select whichever package extras were requested.
|
|
inherit extras;
|
|
|
|
# Define some extra requirements that mach-nix does not automatically detect
|
|
# from inspection of the source. We typically don't need to put version
|
|
# constraints on any of these requirements. The pypi-deps-db we're
|
|
# operating with makes dependency resolution deterministic so as long as it
|
|
# works once it will always work. It could be that in the future we update
|
|
# pypi-deps-db and an incompatibility arises - in which case it would make
|
|
# sense to apply some version constraints here.
|
|
requirementsExtra = ''
|
|
# mach-nix does not yet support pyproject.toml which means it misses any
|
|
# build-time requirements of our dependencies which are declared in such a
|
|
# file. Tell it about them here.
|
|
setuptools_rust
|
|
setuptools_scm
|
|
'';
|
|
|
|
# Specify where mach-nix should find packages for our Python dependencies.
|
|
# There are some reasonable defaults so we only need to specify certain
|
|
# packages where the default configuration runs into some issue.
|
|
providers = {
|
|
};
|
|
|
|
# Define certain overrides to the way Python dependencies are built.
|
|
_ = {
|
|
# Remove a click-default-group patch for a test suite problem which no
|
|
# longer applies because the project apparently no longer has a test suite
|
|
# in its source distribution.
|
|
click-default-group.patches = [];
|
|
};
|
|
|
|
passthru.meta.mach-nix = {
|
|
inherit providers _;
|
|
};
|
|
}
|