2020-04-22 09:28:58 +00:00
|
|
|
let
|
2020-05-19 09:46:48 +00:00
|
|
|
pkgs = import (import ./mach_nix/nix/nixpkgs-src.nix) { config = {}; overlays = []; };
|
2020-04-22 09:28:58 +00:00
|
|
|
python = import ./mach_nix/nix/python.nix { inherit pkgs; };
|
2020-05-19 09:46:48 +00:00
|
|
|
python_deps = (builtins.attrValues (import ./mach_nix/nix/python-deps.nix { inherit python; fetchurl = pkgs.fetchurl; }));
|
2020-08-09 13:24:12 +00:00
|
|
|
mergeOverrides = with pkgs.lib; foldr composeExtensions (self: super: { });
|
2020-05-19 09:46:48 +00:00
|
|
|
autoPatchelfHook = import ./mach_nix/nix/auto_patchelf_hook.nix {inherit (pkgs) fetchurl makeSetupHook writeText;};
|
2020-04-22 09:28:58 +00:00
|
|
|
in
|
2020-04-24 10:35:42 +00:00
|
|
|
rec {
|
2020-05-19 09:46:48 +00:00
|
|
|
# the mach-nix cmdline tool derivation
|
2020-04-24 10:35:42 +00:00
|
|
|
mach-nix = python.pkgs.buildPythonPackage rec {
|
|
|
|
pname = "mach-nix";
|
|
|
|
version = builtins.readFile ./mach_nix/VERSION;
|
|
|
|
name = "${pname}-${version}";
|
|
|
|
src = ./.;
|
|
|
|
propagatedBuildInputs = python_deps;
|
|
|
|
doCheck = false;
|
|
|
|
};
|
|
|
|
|
2020-05-19 09:46:48 +00:00
|
|
|
inherit mergeOverrides;
|
2020-04-24 10:35:42 +00:00
|
|
|
|
2020-05-19 09:46:48 +00:00
|
|
|
# User might want to access it to choose python version
|
|
|
|
nixpkgs = pkgs;
|
|
|
|
|
|
|
|
# call this to generate a nix expression which contains the python overrides
|
|
|
|
machNixFile = args: import ./mach_nix/nix/mach.nix args;
|
|
|
|
|
|
|
|
# Returns `overrides` and `select_pkgs` which satisfy your requirements
|
2020-07-03 11:03:10 +00:00
|
|
|
machNix = args:
|
2020-08-09 13:24:12 +00:00
|
|
|
let
|
|
|
|
result = import "${machNixFile args}/share/mach_nix_file.nix";
|
|
|
|
manylinux =
|
|
|
|
if pkgs.stdenv.hostPlatform.system == "x86_64-darwin" then
|
|
|
|
[]
|
|
|
|
else
|
|
|
|
pkgs.pythonManylinuxPackages.manylinux1;
|
2020-07-03 11:03:10 +00:00
|
|
|
in {
|
2020-08-09 13:24:12 +00:00
|
|
|
overrides = result.overrides manylinux autoPatchelfHook;
|
2020-07-03 11:03:10 +00:00
|
|
|
select_pkgs = result.select_pkgs;
|
|
|
|
};
|
2020-04-24 10:35:42 +00:00
|
|
|
|
|
|
|
# call this to use the python environment with nix-shell
|
|
|
|
mkPythonShell = args: (mkPython args).env;
|
2020-05-19 09:46:48 +00:00
|
|
|
|
2020-07-03 11:03:10 +00:00
|
|
|
# equivalent to buildPythonPackage of nixpkgs
|
|
|
|
buildPythonPackage = _buildPython "buildPythonPackage";
|
|
|
|
|
|
|
|
# equivalent to buildPythonApplication of nixpkgs
|
|
|
|
buildPythonApplication = _buildPython "buildPythonApplication";
|
|
|
|
|
|
|
|
_buildPython = func: args@{
|
|
|
|
requirements, # content from a requirements.txt file
|
|
|
|
disable_checks ? true, # Disable tests wherever possible to decrease build time.
|
|
|
|
overrides_pre ? [], # list of pythonOverrides to apply before the machnix overrides
|
|
|
|
overrides_post ? [], # list of pythonOverrides to apply after the machnix overrides
|
2020-08-09 13:24:12 +00:00
|
|
|
pkgs ? nixpkgs, # pass custom nixpkgs.
|
2020-07-03 11:03:10 +00:00
|
|
|
providers ? {}, # define provider preferences
|
|
|
|
pypi_deps_db_commit ? builtins.readFile ./mach_nix/nix/PYPI_DEPS_DB_COMMIT, # python dependency DB version
|
|
|
|
pypi_deps_db_sha256 ? builtins.readFile ./mach_nix/nix/PYPI_DEPS_DB_SHA256,
|
2020-08-09 13:24:12 +00:00
|
|
|
python ? pkgs.python3, # select custom python to base overrides onto. Should be from nixpkgs >= 20.03
|
2020-07-03 11:03:10 +00:00
|
|
|
_provider_defaults ? with builtins; fromTOML (readFile ./mach_nix/provider_defaults.toml),
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
py = python.override { packageOverrides = mergeOverrides overrides_pre; };
|
|
|
|
result = machNix {
|
|
|
|
inherit requirements disable_checks providers pypi_deps_db_commit pypi_deps_db_sha256 _provider_defaults;
|
2020-08-09 13:24:12 +00:00
|
|
|
overrides = overrides_pre;
|
2020-07-03 11:03:10 +00:00
|
|
|
python = py;
|
|
|
|
};
|
|
|
|
py_final = python.override { packageOverrides = mergeOverrides (
|
2020-08-17 11:16:56 +00:00
|
|
|
overrides_pre ++ [ result.overrides ] ++ overrides_post
|
|
|
|
);};
|
|
|
|
pass_args = removeAttrs args (builtins.attrNames ({
|
|
|
|
inherit requirements disable_checks overrides_pre overrides_post pkgs providers
|
|
|
|
pypi_deps_db_commit pypi_deps_db_sha256 python _provider_defaults;
|
|
|
|
}));
|
2020-07-03 11:03:10 +00:00
|
|
|
in
|
|
|
|
py_final.pkgs."${func}" ( pass_args // {
|
|
|
|
propagatedBuildInputs = result.select_pkgs py_final.pkgs;
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2020-05-19 09:46:48 +00:00
|
|
|
# (High level API) generates a python environment with minimal user effort
|
|
|
|
mkPython =
|
|
|
|
{
|
|
|
|
requirements, # content from a requirements.txt file
|
|
|
|
disable_checks ? true, # Disable tests wherever possible to decrease build time.
|
|
|
|
overrides_pre ? [], # list of pythonOverrides to apply before the machnix overrides
|
|
|
|
overrides_post ? [], # list of pythonOverrides to apply after the machnix overrides
|
2020-08-09 13:24:12 +00:00
|
|
|
pkgs ? nixpkgs, # pass custom nixpkgs.
|
2020-05-19 09:46:48 +00:00
|
|
|
providers ? {}, # define provider preferences
|
|
|
|
pypi_deps_db_commit ? builtins.readFile ./mach_nix/nix/PYPI_DEPS_DB_COMMIT, # python dependency DB version
|
|
|
|
pypi_deps_db_sha256 ? builtins.readFile ./mach_nix/nix/PYPI_DEPS_DB_SHA256,
|
2020-08-09 13:24:12 +00:00
|
|
|
python ? pkgs.python3, # select custom python to base overrides onto. Should be from nixpkgs >= 20.03
|
2020-05-19 09:46:48 +00:00
|
|
|
_provider_defaults ? with builtins; fromTOML (readFile ./mach_nix/provider_defaults.toml)
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
py = python.override { packageOverrides = mergeOverrides overrides_pre; };
|
|
|
|
result = machNix {
|
|
|
|
inherit requirements disable_checks providers pypi_deps_db_commit pypi_deps_db_sha256 _provider_defaults;
|
2020-08-09 13:24:12 +00:00
|
|
|
overrides = overrides_pre;
|
2020-05-19 09:46:48 +00:00
|
|
|
python = py;
|
|
|
|
};
|
|
|
|
py_final = python.override { packageOverrides = mergeOverrides (
|
2020-07-03 11:03:10 +00:00
|
|
|
overrides_pre ++ [ result.overrides ] ++ overrides_post
|
2020-05-19 09:46:48 +00:00
|
|
|
);};
|
|
|
|
in
|
|
|
|
py_final.withPackages (ps: result.select_pkgs ps)
|
|
|
|
;
|
2020-04-24 10:35:42 +00:00
|
|
|
}
|