From 0901b3e195834269902b0979b49b9772c447ed08 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Wed, 11 Apr 2018 12:02:06 -0400 Subject: Add setupcfg2nix and supporting infrastructure --- pkgs/build-support/build-setupcfg/default.nix | 23 +++++++++++++++++++++++ pkgs/development/tools/setupcfg2nix/default.nix | 19 +++++++++++++++++++ pkgs/development/tools/setupcfg2nix/info.nix | 7 +++++++ pkgs/top-level/all-packages.nix | 2 ++ pkgs/top-level/python-packages.nix | 4 ++++ 5 files changed, 55 insertions(+) create mode 100644 pkgs/build-support/build-setupcfg/default.nix create mode 100644 pkgs/development/tools/setupcfg2nix/default.nix create mode 100644 pkgs/development/tools/setupcfg2nix/info.nix (limited to 'pkgs') diff --git a/pkgs/build-support/build-setupcfg/default.nix b/pkgs/build-support/build-setupcfg/default.nix new file mode 100644 index 000000000000..62dda59f1d52 --- /dev/null +++ b/pkgs/build-support/build-setupcfg/default.nix @@ -0,0 +1,23 @@ +# Build a python package from info made available by setupcfg2nix. +# +# * src: The source of the package. +# * info: The package information generated by setupcfg2nix. +# * meta: Standard nixpkgs metadata. +# * application: Whether this package is a python library or an +# application which happens to be written in python. +pythonPackages: { src, info, meta ? {}, application ? false }: let + build = if application + then pythonPackages.buildPythonApplication + else pythonPackages.buildPythonPackage; +in build { + inherit (info) pname version; + + inherit src meta; + + nativeBuildInputs = map (p: pythonPackages.${p}) ( + (info.setup_requires or []) ++ + (info.tests_require or [])); + + propagatedBuildInputs = map (p: pythonPackages.${p}) + (info.install_requires or []); +} diff --git a/pkgs/development/tools/setupcfg2nix/default.nix b/pkgs/development/tools/setupcfg2nix/default.nix new file mode 100644 index 000000000000..5d1f015e8052 --- /dev/null +++ b/pkgs/development/tools/setupcfg2nix/default.nix @@ -0,0 +1,19 @@ +{ buildSetupcfg, fetchFromGitHub, lib }: + +buildSetupcfg rec { + info = import ./info.nix; + src = fetchFromGitHub { + owner = "target"; + repo = "setupcfg2nix"; + rev = info.version; + sha256 = "1zn9njpzwhwikrirgjlyz6ys3xr8gq61ry8blmnpscqvhsdhxcs6"; + }; + application = true; + meta = { + description = "Generate nix expressions from setup.cfg for a python package."; + homepage = https://github.com/target/setupcfg2nix; + license = lib.licenses.mit; + platforms = lib.platforms.all; + maintainers = [ lib.maintainers.shlevy ]; + }; +} diff --git a/pkgs/development/tools/setupcfg2nix/info.nix b/pkgs/development/tools/setupcfg2nix/info.nix new file mode 100644 index 000000000000..b0d5873ed63c --- /dev/null +++ b/pkgs/development/tools/setupcfg2nix/info.nix @@ -0,0 +1,7 @@ +{ + pname = ''setupcfg2nix''; + version = ''1.1.0''; + install_requires = [ + ''setuptools'' + ]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ba19ba5f21d0..422561d768a4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7230,6 +7230,8 @@ with pkgs; pythonPackages = python3Packages; }; + setupcfg2nix = python3Packages.callPackage ../development/tools/setupcfg2nix {}; + # These pyside tools do not provide any Python modules and are meant to be here. # See ../development/python-modules/pyside/default.nix for details. pysideApiextractor = callPackage ../development/python-modules/pyside/apiextractor.nix { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d7657ffc359d..80b1e63ecb87 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -66,6 +66,9 @@ let toPythonModule = x: x; # Application does not provide modules. })); + # See build-setupcfg/default.nix for documentation. + buildSetupcfg = import ../build-support/build-setupcfg self; + graphiteVersion = "1.0.2"; fetchPypi = makeOverridable( {format ? "setuptools", ... } @attrs: @@ -133,6 +136,7 @@ in { inherit fetchPypi callPackage; inherit hasPythonModule requiredPythonModules makePythonPath disabledIf; inherit toPythonModule toPythonApplication; + inherit buildSetupcfg; # helpers -- cgit 1.4.1