mirror of
https://github.com/nix-community/dream2nix.git
synced 2024-12-23 14:31:55 +03:00
129 lines
3.1 KiB
Nix
129 lines
3.1 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
dream2nix,
|
|
...
|
|
}: let
|
|
l = lib // builtins;
|
|
cfg = config.pip;
|
|
python = config.deps.python;
|
|
metadata = config.lock.content.fetchPipMetadata;
|
|
|
|
writers = import ../../../pkgs/writers {
|
|
inherit lib;
|
|
inherit
|
|
(config.deps)
|
|
bash
|
|
coreutils
|
|
gawk
|
|
path
|
|
writeScript
|
|
writeScriptBin
|
|
;
|
|
};
|
|
|
|
drvs =
|
|
l.mapAttrs (
|
|
name: info:
|
|
buildDependency {
|
|
inherit name;
|
|
inherit (info) version;
|
|
}
|
|
)
|
|
metadata.sources;
|
|
|
|
buildDependency = {
|
|
name,
|
|
version,
|
|
}: {config, ...}: {
|
|
imports = [
|
|
commonModule
|
|
../nixpkgs-overrides
|
|
];
|
|
config = {
|
|
inherit name version;
|
|
# deps.python cannot be defined in commonModule as this would trigger an
|
|
# infinite recursion.
|
|
deps = {inherit python;};
|
|
};
|
|
};
|
|
|
|
commonModule = {config, ...}: {
|
|
imports = [
|
|
dream2nix.modules.drv-parts.mkDerivation
|
|
../buildPythonPackage
|
|
];
|
|
config = {
|
|
deps = {nixpkgs, ...}:
|
|
l.mapAttrs (_: l.mkDefault) {
|
|
inherit
|
|
(nixpkgs)
|
|
autoPatchelfHook
|
|
bash
|
|
coreutils
|
|
gawk
|
|
path
|
|
stdenv
|
|
writeScript
|
|
writeScriptBin
|
|
;
|
|
inherit (nixpkgs.pythonManylinuxPackages) manylinux1;
|
|
};
|
|
buildPythonPackage = {
|
|
format = l.mkDefault (
|
|
if l.hasSuffix ".whl" config.mkDerivation.src
|
|
then "wheel"
|
|
else "setuptools"
|
|
);
|
|
};
|
|
mkDerivation = {
|
|
src = l.mkDefault (l.fetchurl {inherit (metadata.sources.${config.name}) url sha256;});
|
|
doCheck = l.mkDefault false;
|
|
|
|
nativeBuildInputs =
|
|
l.optionals config.deps.stdenv.isLinux [config.deps.autoPatchelfHook];
|
|
buildInputs =
|
|
l.optionals config.deps.stdenv.isLinux [config.deps.manylinux1];
|
|
propagatedBuildInputs = let
|
|
depsByExtra = extra: metadata.targets.${extra}.${config.name} or [];
|
|
defaultDeps = metadata.targets.default.${config.name} or [];
|
|
deps = defaultDeps ++ (l.concatLists (l.map depsByExtra cfg.buildExtras));
|
|
in
|
|
l.map (name: cfg.drvs.${name}.public.out) deps;
|
|
};
|
|
};
|
|
};
|
|
in {
|
|
imports = [
|
|
commonModule
|
|
./interface.nix
|
|
../lock
|
|
];
|
|
|
|
config = {
|
|
deps = {nixpkgs, ...}:
|
|
l.mapAttrs (_: l.mkDefault) {
|
|
fetchPipMetadataScript = nixpkgs.callPackage ../../../pkgs/fetchPipMetadata {
|
|
inherit (cfg) pypiSnapshotDate pipFlags pipVersion requirementsList requirementsFiles nativeBuildInputs;
|
|
inherit (config.deps) writePureShellScript python nix git;
|
|
};
|
|
setuptools = config.deps.python.pkgs.setuptools;
|
|
inherit (nixpkgs) git;
|
|
inherit (writers) writePureShellScript;
|
|
};
|
|
|
|
# Keep package metadata fetched by Pip in our lockfile
|
|
lock.fields.fetchPipMetadata = {
|
|
script = config.deps.fetchPipMetadataScript;
|
|
};
|
|
|
|
pip = {
|
|
drvs = drvs;
|
|
};
|
|
|
|
mkDerivation = {
|
|
dontStrip = l.mkDefault true;
|
|
};
|
|
};
|
|
}
|