1. mkDerivation which is used when the source is without setup.py and not a wheel 2. buildPythonPackage which is used as before and calls mkDerivationwip/yesman
parent
725c37b4d3
commit
3e05cce97c
@ -0,0 +1,87 @@ |
||||
/* Generic builder for Python packages that come without a setup.py. */ |
||||
|
||||
{ lib |
||||
, python |
||||
, wrapPython |
||||
, setuptools |
||||
, unzip |
||||
, ensureNewerSourcesHook |
||||
}: |
||||
|
||||
{ name |
||||
|
||||
# by default prefix `name` e.g. "python3.3-${name}" |
||||
, namePrefix ? python.libPrefix + "-" |
||||
|
||||
, buildInputs ? [] |
||||
|
||||
# propagate build dependencies so in case we have A -> B -> C, |
||||
# C can import package A propagated by B |
||||
, propagatedBuildInputs ? [] |
||||
|
||||
# DEPRECATED: use propagatedBuildInputs |
||||
, pythonPath ? [] |
||||
|
||||
# used to disable derivation, useful for specific python versions |
||||
, disabled ? false |
||||
|
||||
# Raise an error if two packages are installed with the same name |
||||
, catchConflicts ? true |
||||
|
||||
# Additional arguments to pass to the makeWrapper function, which wraps |
||||
# generated binaries. |
||||
, makeWrapperArgs ? [] |
||||
|
||||
, meta ? {} |
||||
|
||||
, passthru ? {} |
||||
|
||||
, ... } @ attrs: |
||||
|
||||
|
||||
# Keep extra attributes from `attrs`, e.g., `patchPhase', etc. |
||||
if disabled |
||||
then throw "${name} not supported for interpreter ${python.executable}" |
||||
else |
||||
|
||||
python.stdenv.mkDerivation (builtins.removeAttrs attrs ["disabled"] // { |
||||
|
||||
name = namePrefix + name; |
||||
|
||||
inherit pythonPath; |
||||
|
||||
buildInputs = [ wrapPython ] ++ buildInputs ++ pythonPath |
||||
++ [ (ensureNewerSourcesHook { year = "1980"; }) ] |
||||
++ (lib.optional (lib.hasSuffix "zip" attrs.src.name or "") unzip); |
||||
|
||||
# propagate python/setuptools to active setup-hook in nix-shell |
||||
propagatedBuildInputs = propagatedBuildInputs ++ [ python setuptools ]; |
||||
|
||||
# Python packages don't have a checkPhase, only an installCheckPhase |
||||
doCheck = false; |
||||
doInstallCheck = attrs.doCheck or false; |
||||
|
||||
postFixup = attrs.postFixup or '' |
||||
wrapPythonPrograms |
||||
'' + lib.optionalString catchConflicts '' |
||||
# check if we have two packages with the same name in closure and fail |
||||
# this shouldn't happen, something went wrong with dependencies specs |
||||
${python.interpreter} ${./catch_conflicts.py} |
||||
''; |
||||
|
||||
passthru = { |
||||
inherit python; # The python interpreter |
||||
} // passthru; |
||||
|
||||
meta = with lib.maintainers; { |
||||
# default to python's platforms |
||||
platforms = python.meta.platforms; |
||||
} // meta // { |
||||
# add extra maintainer(s) to every package |
||||
maintainers = (meta.maintainers or []) ++ [ chaoflow domenkozar ]; |
||||
# a marker for release utilities to discover python packages |
||||
isBuildPythonPackage = python.meta.platforms; |
||||
}; |
||||
}) |
||||
|
||||
|
Loading…
Reference in new issue