diff options
author | Alyssa Ross <hi@alyssa.is> | 2021-08-04 10:43:07 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2021-08-04 10:43:07 +0000 |
commit | 62614cbef7da005c1eda8c9400160f6bcd6546b8 (patch) | |
tree | c2630f69080637987b68acb1ee8676d2681fe304 /pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix | |
parent | d9c82ed3044c72cecf01c6ea042489d30914577c (diff) | |
parent | e24069138dfec3ef94f211f1da005bb5395adc11 (diff) | |
download | nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.gz nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.bz2 nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.lz nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.xz nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.tar.zst nixpkgs-62614cbef7da005c1eda8c9400160f6bcd6546b8.zip |
Merge branch 'nixpkgs-update' into master
Diffstat (limited to 'pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix')
-rw-r--r-- | pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix | 1271 |
1 files changed, 1084 insertions, 187 deletions
diff --git a/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix b/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix index 202261ecdb9..58a634ee86c 100644 --- a/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix +++ b/pkgs/development/tools/poetry2nix/poetry2nix/overrides.nix @@ -8,53 +8,129 @@ self: super: { automat = super.automat.overridePythonAttrs ( old: rec { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.m2r ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.m2r ]; } ); + aiohttp-swagger3 = super.aiohttp-swagger3.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + ansible = super.ansible.overridePythonAttrs ( + old: { + + prePatch = pkgs.python.pkgs.ansible.prePatch or ""; + + postInstall = pkgs.python.pkgs.ansible.postInstall or ""; + + # Inputs copied from nixpkgs as ansible doesn't specify it's dependencies + # in a correct manner. + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ + self.pycrypto + self.paramiko + self.jinja2 + self.pyyaml + self.httplib2 + self.six + self.netaddr + self.dnspython + self.jmespath + self.dopy + self.ncclient + ]; + } + ); + + ansible-lint = super.ansible-lint.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ]; + preBuild = '' + export HOME=$(mktemp -d) + ''; + } + ); + + anyio = super.anyio.overridePythonAttrs (old: { + postPatch = '' + substituteInPlace setup.py --replace 'setup()' 'setup(version="${old.version}")' + ''; + }); + astroid = super.astroid.overridePythonAttrs ( old: rec { - buildInputs = old.buildInputs ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; doCheck = false; } ); av = super.av.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ - pkgs.pkgconfig + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + pkgs.pkg-config ]; - buildInputs = old.buildInputs ++ [ pkgs.ffmpeg_4 ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.ffmpeg_4 ]; } ); bcrypt = super.bcrypt.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ pkgs.libffi ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libffi ]; + } + ); + + cairocffi = super.cairocffi.overridePythonAttrs ( + old: { + inherit (pkgs.python3.pkgs.cairocffi) patches; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + cairosvg = super.cairosvg.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + celery = super.celery.overridePythonAttrs (old: { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ]; + }); + + cssselect2 = super.cssselect2.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; } ); cffi = # cffi is bundled with pypy - if self.python.implementation == "pypy" then null else ( + if self.python.implementation == "pypy" then null else + ( super.cffi.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ pkgs.libffi ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libffi ]; } ) ); cftime = super.cftime.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ self.cython ]; } ); + colour = super.colour.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.d2to1 ]; + } + ); + configparser = super.configparser.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ self.toml ]; @@ -66,7 +142,41 @@ self: super: cryptography = super.cryptography.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ pkgs.openssl ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) + ++ lib.optional (lib.versionAtLeast old.version "3.4") [ self.setuptools-rust ] + ++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) self.python.pythonForBuild.pkgs.cffi; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openssl ]; + } // lib.optionalAttrs (lib.versionAtLeast old.version "3.4" && lib.versionOlder old.version "3.5") { + CRYPTOGRAPHY_DONT_BUILD_RUST = "1"; + } + ); + + daphne = super.daphne.overridePythonAttrs (old: { + postPatch = '' + substituteInPlace setup.py --replace 'setup_requires=["pytest-runner"],' "" + ''; + }); + + datadog-lambda = super.datadog-lambda.overridePythonAttrs (old: { + postPatch = '' + substituteInPlace setup.py --replace "setuptools==" "setuptools>=" + ''; + buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools ]; + }); + + dcli = super.dcli.overridePythonAttrs (old: { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ]; + }); + + ddtrace = super.ddtrace.overridePythonAttrs (old: { + buildInputs = (old.buildInputs or [ ]) ++ + (pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.darwin.IOKit ]) ++ [ self.cython ]; + }); + + dictdiffer = super.dictdiffer.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ]; } ); @@ -74,7 +184,7 @@ self: super: super.django.overridePythonAttrs ( old: { propagatedNativeBuildInputs = (old.propagatedNativeBuildInputs or [ ]) - ++ [ pkgs.gettext ]; + ++ [ pkgs.gettext self.pytest-runner ]; } ) ); @@ -89,6 +199,36 @@ self: super: } ); + django-cors-headers = super.django-cors-headers.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + django-hijack = super.django-hijack.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + django-prometheus = super.django-prometheus.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + django-rosetta = super.django-rosetta.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + django-stubs-ext = super.django-stubs-ext.overridePythonAttrs ( + old: { + prePatch = (old.prePatch or "") + "touch ../LICENSE.txt"; + } + ); + dlib = super.dlib.overridePythonAttrs ( old: { # Parallel building enabled @@ -97,17 +237,45 @@ self: super: enableParallelBuilding = true; dontUseCmakeConfigure = true; - nativeBuildInputs = old.nativeBuildInputs ++ pkgs.dlib.nativeBuildInputs; - buildInputs = old.buildInputs ++ pkgs.dlib.buildInputs; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ pkgs.dlib.nativeBuildInputs; + buildInputs = (old.buildInputs or [ ]) ++ pkgs.dlib.buildInputs; } ); # Environment markers are not always included (depending on how a dep was defined) enum34 = if self.pythonAtLeast "3.4" then null else super.enum34; + eth-hash = super.eth-hash.overridePythonAttrs { + preConfigure = '' + substituteInPlace setup.py --replace \'setuptools-markdown\' "" + ''; + }; + + eth-keyfile = super.eth-keyfile.overridePythonAttrs { + preConfigure = '' + substituteInPlace setup.py --replace \'setuptools-markdown\' "" + ''; + }; + + eth-keys = super.eth-keys.overridePythonAttrs { + preConfigure = '' + substituteInPlace setup.py --replace \'setuptools-markdown\' "" + ''; + }; + + # remove eth-hash dependency because eth-hash also depends on eth-utils causing a cycle. + eth-utils = super.eth-utils.overridePythonAttrs (old: { + propagatedBuildInputs = + builtins.filter (i: i.pname != "eth-hash") old.propagatedBuildInputs; + preConfigure = '' + ${old.preConfigure or ""} + sed -i '/eth-hash/d' setup.py + ''; + }); + faker = super.faker.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; doCheck = false; } ); @@ -122,34 +290,118 @@ self: super: } ); + fastecdsa = super.fastecdsa.overridePythonAttrs (old: { + buildInputs = old.buildInputs ++ [ pkgs.gmp.dev ]; + }); + fastparquet = super.fastparquet.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + fiona = super.fiona.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.gdal_2 ]; + nativeBuildInputs = [ + pkgs.gdal_2 # for gdal-config + ]; + } + ); + + gdal = super.gdal.overridePythonAttrs ( + old: { + preBuild = (old.preBuild or "") + '' + substituteInPlace setup.cfg \ + --replace "../../apps/gdal-config" '${pkgs.gdal}/bin/gdal-config' + ''; } ); grandalf = super.grandalf.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; doCheck = false; } ); + grpcio = super.grpcio.overridePythonAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.cython pkgs.pkg-config ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.c-ares pkgs.openssl pkgs.zlib ]; + + outputs = [ "out" "dev" ]; + + GRPC_BUILD_WITH_BORING_SSL_ASM = ""; + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL = 1; + GRPC_PYTHON_BUILD_SYSTEM_ZLIB = 1; + GRPC_PYTHON_BUILD_SYSTEM_CARES = 1; + DISABLE_LIBC_COMPATIBILITY = 1; + }); + + grpcio-tools = super.grpcio-tools.overridePythonAttrs (old: { + outputs = [ "out" "dev" ]; + }); + + h3 = super.h3.overridePythonAttrs ( + old: { + preBuild = (old.preBuild or "") + '' + substituteInPlace h3/h3.py \ + --replace "'{}/{}'.format(_dirname, libh3_path)" '"${pkgs.h3}/lib/libh3${pkgs.stdenv.hostPlatform.extensions.sharedLibrary}"' + ''; + } + ); + h5py = super.h5py.overridePythonAttrs ( old: - if old.format != "wheel" then rec { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.pkgconfig ]; - buildInputs = old.buildInputs ++ [ pkgs.hdf5 self.pkgconfig self.cython ]; - configure_flags = "--hdf5=${pkgs.hdf5}"; - postConfigure = '' - ${self.python.executable} setup.py configure ${configure_flags} + if old.format != "wheel" then + ( + let + mpi = pkgs.hdf5.mpi; + mpiSupport = pkgs.hdf5.mpiSupport; + in + { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ]; + buildInputs = + (old.buildInputs or [ ]) + ++ [ pkgs.hdf5 self.pkgconfig self.cython ] + ++ lib.optional mpiSupport mpi + ; + propagatedBuildInputs = + (old.propagatedBuildInputs or [ ]) + ++ lib.optionals mpiSupport [ self.mpi4py self.openssh ] + ; + preBuild = if mpiSupport then "export CC=${mpi}/bin/mpicc" else ""; + HDF5_DIR = "${pkgs.hdf5}"; + HDF5_MPI = if mpiSupport then "ON" else "OFF"; + # avoid strict pinning of numpy + postPatch = '' + substituteInPlace setup.py \ + --replace "numpy ==" "numpy >=" + ''; + pythonImportsCheck = [ "h5py" ]; + } + ) else old + ); + + hid = super.hid.overridePythonAttrs ( + old: { + postPatch = '' + found= + for name in libhidapi-hidraw libhidapi-libusb libhidapi-iohidmanager libhidapi; do + full_path=${pkgs.hidapi.out}/lib/$name${pkgs.stdenv.hostPlatform.extensions.sharedLibrary} + if test -f $full_path; then + found=t + sed -i -e "s|'$name\..*'|'$full_path'|" hid/__init__.py + fi + done + test -n "$found" || { echo "ERROR: No known libraries found in ${pkgs.hidapi.out}/lib, please update/fix this build expression."; exit 1; } ''; - } else old + } ); horovod = super.horovod.overridePythonAttrs ( old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ pkgs.openmpi ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.mpi ]; } ); @@ -158,7 +410,7 @@ self: super: patchPhase = '' substituteInPlace setup.py \ --replace "/usr/include/openjpeg-2.3" \ - "${pkgs.openjpeg.dev}/include/openjpeg-2.3" + "${pkgs.openjpeg.dev}/include/${pkgs.openjpeg.dev.incDir} substituteInPlace setup.py \ --replace "/usr/include/jxrlib" \ "$out/include/libjxr" @@ -179,7 +431,7 @@ self: super: ''; - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ # Commented out packages are declared required, but not actually # needed to build. They are not yet packaged for nixpkgs. # bitshuffle @@ -213,7 +465,10 @@ self: super: # importlib-metadata has an incomplete dependency specification importlib-metadata = super.importlib-metadata.overridePythonAttrs ( old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ lib.optional self.python.isPy2 self.pathlib2; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ lib.optional self.python.isPy2 self.pathlib2; + + # disable the removal of pyproject.toml, required because of setuptools_scm + dontPreferSetupPy = true; } ); @@ -225,10 +480,52 @@ self: super: isort = super.isort.overridePythonAttrs ( old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.setuptools ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ]; + } + ); + + jaraco-functools = super.jaraco-functools.overridePythonAttrs ( + old: { + # required for the extra "toml" dependency in setuptools_scm[toml] + buildInputs = (old.buildInputs or [ ]) ++ [ + self.toml + ]; + # disable the removal of pyproject.toml, required because of setuptools_scm + dontPreferSetupPy = true; + } + ); + + jira = super.jira.overridePythonAttrs ( + old: { + inherit (pkgs.python3Packages.jira) patches; + buildInputs = (old.buildInputs or [ ]) ++ [ + self.pytest-runner + self.cryptography + self.pyjwt + ]; + } + ); + + jsondiff = super.jsondiff.overridePythonAttrs ( + old: { + preBuild = (old.preBuild or "") + '' + substituteInPlace setup.py \ + --replace "'jsondiff=jsondiff.cli:main_deprecated'," "" + ''; } ); + jsonpickle = super.jsonpickle.overridePythonAttrs ( + old: { + dontPreferSetupPy = true; + } + ); + + jsonslicer = super.jsonslicer.overridePythonAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkgconfig ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.yajl ]; + }); + jupyter = super.jupyter.overridePythonAttrs ( old: rec { # jupyter is a meta-package. Everything relevant comes from the @@ -238,9 +535,20 @@ self: super: } ); + keyring = super.keyring.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ + self.toml + ]; + postPatch = '' + substituteInPlace setup.py --replace 'setuptools.setup()' 'setuptools.setup(version="${old.version}")' + ''; + } + ); + kiwisolver = super.kiwisolver.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ self.cppy ]; } @@ -248,20 +556,20 @@ self: super: lap = super.lap.overridePythonAttrs ( old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.numpy ]; } ); libvirt-python = super.libvirt-python.overridePythonAttrs ({ nativeBuildInputs ? [ ], ... }: { - nativeBuildInputs = nativeBuildInputs ++ [ pkgs.pkgconfig ]; + nativeBuildInputs = nativeBuildInputs ++ [ pkgs.pkg-config ]; propagatedBuildInputs = [ pkgs.libvirt ]; }); llvmlite = super.llvmlite.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.llvm ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.llvm ]; # Disable static linking # https://github.com/numba/llvmlite/issues/93 @@ -276,7 +584,7 @@ self: super: export LLVM_CONFIG=${pkgs.llvm}/bin/llvm-config ''; - __impureHostDeps = pkgs.stdenv.lib.optionals pkgs.stdenv.isDarwin [ "/usr/lib/libm.dylib" ]; + __impureHostDeps = lib.optionals pkgs.stdenv.isDarwin [ "/usr/lib/libm.dylib" ]; passthru = old.passthru // { llvm = pkgs.llvm; }; } @@ -284,14 +592,14 @@ self: super: lockfile = super.lockfile.overridePythonAttrs ( old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.pbr ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.pbr ]; } ); lxml = super.lxml.overridePythonAttrs ( old: { - nativeBuildInputs = with pkgs; old.nativeBuildInputs ++ [ pkgconfig libxml2.dev libxslt.dev ]; - buildInputs = with pkgs; old.buildInputs ++ [ libxml2 libxslt ]; + nativeBuildInputs = with pkgs; (old.nativeBuildInputs or [ ]) ++ [ pkg-config libxml2.dev libxslt.dev ] ++ lib.optionals stdenv.isDarwin [ xcodebuild ]; + buildInputs = with pkgs; (old.buildInputs or [ ]) ++ [ libxml2 libxslt ]; } ); @@ -312,25 +620,36 @@ self: super: inherit (pkgs.darwin.apple_sdk.frameworks) Cocoa; in { - NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.isDarwin "-I${pkgs.libcxx}/include/c++/v1"; + NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${pkgs.libcxx}/include/c++/v1"; XDG_RUNTIME_DIR = "/tmp"; - buildInputs = old.buildInputs + buildInputs = (old.buildInputs or [ ]) ++ lib.optional enableGhostscript pkgs.ghostscript ++ lib.optional stdenv.isDarwin [ Cocoa ]; - nativeBuildInputs = old.nativeBuildInputs ++ [ - pkgs.pkgconfig + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + pkgs.pkg-config ]; - propagatedBuildInputs = old.propagatedBuildInputs ++ [ + postPatch = '' + cat > setup.cfg <<EOF + [libs] + system_freetype = True + '' + lib.optionalString stdenv.isDarwin '' + # LTO not working in darwin stdenv, see NixOS/nixpkgs/pull/19312 + enable_lto = false + '' + '' + EOF + ''; + + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.libpng pkgs.freetype ] - ++ stdenv.lib.optionals enableGtk3 [ pkgs.cairo self.pycairo pkgs.gtk3 pkgs.gobject-introspection self.pygobject3 ] - ++ stdenv.lib.optionals enableTk [ pkgs.tcl pkgs.tk self.tkinter pkgs.libX11 ] - ++ stdenv.lib.optionals enableQt [ self.pyqt5 ] + ++ lib.optionals enableGtk3 [ pkgs.cairo self.pycairo pkgs.gtk3 pkgs.gobject-introspection self.pygobject3 ] + ++ lib.optionals enableTk [ pkgs.tcl pkgs.tk self.tkinter pkgs.libX11 ] + ++ lib.optionals enableQt [ self.pyqt5 ] ; inherit (super.matplotlib) patches; @@ -344,26 +663,106 @@ self: super: mccabe = super.mccabe.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; doCheck = false; } ); mip = super.mip.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.autoPatchelfHook ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.autoPatchelfHook ]; - buildInputs = old.buildInputs ++ [ pkgs.zlib self.cppy ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.zlib self.cppy ]; + } + ); + + molecule = + if lib.versionOlder super.molecule.version "3.0.0" then + (super.molecule.overridePythonAttrs ( + old: { + patches = (old.patches or [ ]) ++ [ + # Fix build with more recent setuptools versions + (pkgs.fetchpatch { + url = "https://github.com/ansible-community/molecule/commit/c9fee498646a702c77b5aecf6497cff324acd056.patch"; + sha256 = "1g1n45izdz0a3c9akgxx14zhdw6c3dkb48j8pq64n82fa6ndl1b7"; + excludes = [ "pyproject.toml" ]; + }) + ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ]; + } + )) else + super.molecule.overridePythonAttrs (old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.setuptools-scm-git-archive ]; + }); + + mongomock = super.mongomock.overridePythonAttrs (oa: { + buildInputs = oa.buildInputs ++ [ self.pbr ]; + }); + + moto = super.moto.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ + [ self.sshpubkeys ]; + } + ); + + mpi4py = super.mpi4py.overridePythonAttrs ( + old: + let + cfg = pkgs.writeTextFile { + name = "mpi.cfg"; + text = ( + lib.generators.toINI + { } + { + mpi = { + mpicc = "${pkgs.mpi.outPath}/bin/mpicc"; + }; + } + ); + }; + in + { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.mpi ]; + enableParallelBuilding = true; + preBuild = '' + ln -sf ${cfg} mpi.cfg + ''; + } + ); + + multiaddr = super.multiaddr.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + munch = super.munch.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pbr ]; + } + ); + + mypy = super.mypy.overridePythonAttrs ( + old: { + MYPY_USE_MYPYC = pkgs.stdenv.buildPlatform.is64bit; + } + ); + + mysqlclient = super.mysqlclient.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.libmysqlclient ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libmysqlclient ]; } ); netcdf4 = super.netcdf4.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ self.cython ]; - propagatedBuildInputs = old.propagatedBuildInputs ++ [ + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.zlib pkgs.netcdf pkgs.hdf5 @@ -389,21 +788,22 @@ self: super: name = "site.cfg"; text = ( lib.generators.toINI - { } { - ${blasImplementation} = { - include_dirs = "${blas}/include"; - library_dirs = "${blas}/lib"; - } // lib.optionalAttrs (blasImplementation == "mkl") { - mkl_libs = "mkl_rt"; - lapack_libs = ""; - }; - } + { } + { + ${blasImplementation} = { + include_dirs = "${blas}/include"; + library_dirs = "${blas}/lib"; + } // lib.optionalAttrs (blasImplementation == "mkl") { + mkl_libs = "mkl_rt"; + lapack_libs = ""; + }; + } ); }; in { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.gfortran ]; - buildInputs = old.buildInputs ++ [ blas self.cython ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.gfortran ]; + buildInputs = (old.buildInputs or [ ]) ++ [ blas self.cython ]; enableParallelBuilding = true; preBuild = '' ln -s ${cfg} site.cfg @@ -417,14 +817,27 @@ self: super: openexr = super.openexr.overridePythonAttrs ( old: rec { - buildInputs = old.buildInputs ++ [ pkgs.openexr pkgs.ilmbase ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openexr pkgs.ilmbase ]; NIX_CFLAGS_COMPILE = [ "-I${pkgs.openexr.dev}/include/OpenEXR" "-I${pkgs.ilmbase.dev}/include/OpenEXR" ]; } ); + osqp = super.osqp.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.cmake ]; + dontUseCmakeConfigure = true; + } + ); + parsel = super.parsel.overridePythonAttrs ( old: rec { - nativeBuildInputs = old.nativeBuildInputs ++ [ self.pytest-runner ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + pdal = super.pdal.overridePythonAttrs ( + old: { + PDAL_CONFIG = "${pkgs.pdal}/bin/pdal-config"; } ); @@ -435,8 +848,8 @@ self: super: withMysql = old.passthru.withMysql or false; in { - buildInputs = old.buildInputs ++ [ self.cython pkgs.sqlite ]; - propagatedBuildInputs = old.propagatedBuildInputs + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.sqlite ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ lib.optional withPostgres self.psycopg2 ++ lib.optional withMysql self.mysql-connector; } @@ -444,79 +857,136 @@ self: super: pillow = super.pillow.overridePythonAttrs ( old: { - nativeBuildInputs = [ pkgs.pkgconfig ] ++ old.nativeBuildInputs; - buildInputs = with pkgs; [ freetype libjpeg zlib libtiff libwebp tcl lcms2 ] ++ old.buildInputs; + nativeBuildInputs = [ pkgs.pkg-config self.pytest-runner ] ++ (old.nativeBuildInputs or [ ]); + buildInputs = with pkgs; [ freetype libjpeg zlib libtiff libwebp tcl lcms2 ] ++ (old.buildInputs or [ ]); + } + ); + + # Work around https://github.com/nix-community/poetry2nix/issues/244 + # where git deps are not picked up as they should + pip = + if lib.versionAtLeast super.pip.version "20.3" then + super.pip.overridePythonAttrs + (old: + let + pname = "pip"; + version = "20.2.4"; + in + { + name = pname + "-" + version; + inherit version; + src = pkgs.fetchFromGitHub { + owner = "pypa"; + repo = pname; + rev = version; + sha256 = "eMVV4ftgV71HLQsSeaOchYlfaJVgzNrwUynn3SA1/Do="; + name = "${pname}-${version}-source"; + }; + }) else super.pip; + + poetry-core = super.poetry-core.overridePythonAttrs (old: { + # "Vendor" dependencies (for build-system support) + postPatch = '' + echo "import sys" >> poetry/__init__.py + for path in $propagatedBuildInputs; do + echo "sys.path.insert(0, \"$path\")" >> poetry/__init__.py + done + ''; + + # Propagating dependencies leads to issues downstream + # We've already patched poetry to prefer "vendored" dependencies + postFixup = '' + rm $out/nix-support/propagated-build-inputs + ''; + }); + + portend = super.portend.overridePythonAttrs ( + old: { + # required for the extra "toml" dependency in setuptools_scm[toml] + buildInputs = (old.buildInputs or [ ]) ++ [ + self.toml + ]; + # disable the removal of pyproject.toml, required because of setuptools_scm + dontPreferSetupPy = true; } ); psycopg2 = super.psycopg2.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.postgresql ]; + buildInputs = (old.buildInputs or [ ]) + ++ lib.optional stdenv.isDarwin pkgs.openssl; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.postgresql ]; } ); psycopg2-binary = super.psycopg2-binary.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.postgresql ]; + buildInputs = (old.buildInputs or [ ]) + ++ lib.optional stdenv.isDarwin pkgs.openssl; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.postgresql ]; } ); pyarrow = - if lib.versionAtLeast super.pyarrow.version "0.16.0" then super.pyarrow.overridePythonAttrs ( - old: - let - parseMinor = drv: lib.concatStringsSep "." (lib.take 2 (lib.splitVersion drv.version)); - - # Starting with nixpkgs revision f149c7030a7, pyarrow takes "python3" as an argument - # instead of "python". Below we inspect function arguments to maintain compatibilitiy. - _arrow-cpp = pkgs.arrow-cpp.override ( - builtins.intersectAttrs - (lib.functionArgs pkgs.arrow-cpp.override) { python = self.python; python3 = self.python; } - ); + if lib.versionAtLeast super.pyarrow.version "0.16.0" then + super.pyarrow.overridePythonAttrs + ( + old: + let + parseMinor = drv: lib.concatStringsSep "." (lib.take 2 (lib.splitVersion drv.version)); + + # Starting with nixpkgs revision f149c7030a7, pyarrow takes "python3" as an argument + # instead of "python". Below we inspect function arguments to maintain compatibilitiy. + _arrow-cpp = pkgs.arrow-cpp.override ( + builtins.intersectAttrs + (lib.functionArgs pkgs.arrow-cpp.override) + { python = self.python; python3 = self.python; } + ); + + ARROW_HOME = _arrow-cpp; + arrowCppVersion = parseMinor pkgs.arrow-cpp; + pyArrowVersion = parseMinor super.pyarrow; + errorMessage = "arrow-cpp version (${arrowCppVersion}) mismatches pyarrow version (${pyArrowVersion})"; + in + if arrowCppVersion != pyArrowVersion then throw errorMessage else { - ARROW_HOME = _arrow-cpp; - arrowCppVersion = parseMinor pkgs.arrow-cpp; - pyArrowVersion = parseMinor super.pyarrow; - errorMessage = "arrow-cpp version (${arrowCppVersion}) mismatches pyarrow version (${pyArrowVersion})"; - in - if arrowCppVersion != pyArrowVersion then throw errorMessage else { - - nativeBuildInputs = old.nativeBuildInputs ++ [ - self.cython - pkgs.pkgconfig - pkgs.cmake - ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + self.cython + pkgs.pkg-config + pkgs.cmake + ]; - preBuild = '' - export PYARROW_PARALLEL=$NIX_BUILD_CORES - ''; + preBuild = '' + export PYARROW_PARALLEL=$NIX_BUILD_CORES + ''; - PARQUET_HOME = _arrow-cpp; - inherit ARROW_HOME; + PARQUET_HOME = _arrow-cpp; + inherit ARROW_HOME; - buildInputs = old.buildInputs ++ [ - pkgs.arrow-cpp - ]; + buildInputs = (old.buildInputs or [ ]) ++ [ + pkgs.arrow-cpp + ]; - PYARROW_BUILD_TYPE = "release"; - PYARROW_WITH_PARQUET = true; - PYARROW_CMAKE_OPTIONS = [ - "-DCMAKE_INSTALL_RPATH=${ARROW_HOME}/lib" + PYARROW_BUILD_TYPE = "release"; + PYARROW_WITH_PARQUET = true; + PYARROW_CMAKE_OPTIONS = [ + "-DCMAKE_INSTALL_RPATH=${ARROW_HOME}/lib" - # This doesn't use setup hook to call cmake so we need to workaround #54606 - # ourselves - "-DCMAKE_POLICY_DEFAULT_CMP0025=NEW" - ]; + # This doesn't use setup hook to call cmake so we need to workaround #54606 + # ourselves + "-DCMAKE_POLICY_DEFAULT_CMP0025=NEW" + ]; - dontUseCmakeConfigure = true; - } - ) else super.pyarrow.overridePythonAttrs ( - old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ - self.cython - ]; - } - ); + dontUseCmakeConfigure = true; + } + ) else + super.pyarrow.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + self.cython + ]; + } + ); pycairo = ( drv: ( @@ -528,13 +998,13 @@ self: super: ).overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.meson pkgs.ninja - pkgs.pkgconfig + pkgs.pkg-config ]; - propagatedBuildInputs = old.propagatedBuildInputs ++ [ + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.cairo pkgs.xlibsWrapper ]; @@ -547,13 +1017,18 @@ self: super: pycocotools = super.pycocotools.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ self.cython self.numpy ]; } ); + pyfuse3 = super.pyfuse3.overridePythonAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.fuse3 ]; + }); + pygame = super.pygame.overridePythonAttrs ( old: rec { nativeBuildInputs = [ @@ -576,47 +1051,84 @@ self: super: # Tests fail because of no audio device and display. doCheck = false; preConfigure = '' - sed \ - -e "s/origincdirs = .*/origincdirs = []/" \ - -e "s/origlibdirs = .*/origlibdirs = []/" \ - -e "/'\/lib\/i386-linux-gnu', '\/lib\/x86_64-linux-gnu']/d" \ - -e "/\/include\/smpeg/d" \ - -i buildconfig/config_unix.py - ${lib.concatMapStrings (dep: '' - sed \ - -e "/origincdirs =/a\ origincdirs += ['${lib.getDev dep}/include']" \ - -e "/origlibdirs =/a\ origlibdirs += ['${lib.getLib dep}/lib']" \ - -i buildconfig/config_unix.py - '') buildInputs - } - LOCALBASE=/ ${self.python.interpreter} buildconfig/config.py + sed \ + -e "s/origincdirs = .*/origincdirs = []/" \ + -e "s/origlibdirs = .*/origlibdirs = []/" \ + -e "/'\/lib\/i386-linux-gnu', '\/lib\/x86_64-linux-gnu']/d" \ + -e "/\/include\/smpeg/d" \ + -i buildconfig/config_unix.py + ${lib.concatMapStrings + (dep: '' + sed \ + -e "/origincdirs =/a\ origincdirs += ['${lib.getDev dep}/include']" \ + -e "/origlibdirs =/a\ origlibdirs += ['${lib.getLib dep}/lib']" \ + -i buildconfig/config_unix.py + '') + buildInputs + } + LOCALBASE=/ ${self.python.interpreter} buildconfig/config.py ''; } ); + pygeos = super.pygeos.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.geos ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.geos ]; + } + ); + pygobject = super.pygobject.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.pkgconfig ]; - buildInputs = old.buildInputs ++ [ pkgs.glib pkgs.gobject-introspection ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.glib pkgs.gobject-introspection ]; } ); pylint = super.pylint.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; doCheck = false; } ); pyopenssl = super.pyopenssl.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ pkgs.openssl ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openssl ]; + } + ); + + pyproj = super.pyproj.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ + [ self.cython ]; + PROJ_DIR = "${pkgs.proj}"; + PROJ_LIBDIR = "${pkgs.proj}/lib"; + PROJ_INCDIR = "${pkgs.proj.dev}/include"; + } + ); + + pyproject-flake8 = super.pyproject-flake8.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.flit-core ]; + } + ); + + pytezos = super.pytezos.override (old: { + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libsodium ]; + }); + + python-bugzilla = super.python-bugzilla.overridePythonAttrs ( + old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + self.docutils + ]; } ); python-ldap = super.python-ldap.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ pkgs.openldap pkgs.cyrus_sasl ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.openldap pkgs.cyrus_sasl ]; } ); @@ -638,8 +1150,10 @@ self: super: old: { format = "other"; - nativeBuildInputs = old.nativeBuildInputs ++ [ - pkgs.pkgconfig + dontWrapQtApps = true; + + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + pkgs.pkg-config pkgs.qt5.qmake pkgs.xorg.lndir pkgs.qt5.qtbase @@ -655,7 +1169,7 @@ self: super: ++ lib.optional withWebSockets pkgs.qt5.qtwebsockets ; - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.dbus pkgs.qt5.qtbase pkgs.qt5.qtsvg @@ -738,33 +1252,90 @@ self: super: pytest = super.pytest.overridePythonAttrs ( old: { + # Fixes https://github.com/pytest-dev/pytest/issues/7891 + postPatch = old.postPatch or "" + '' + sed -i '/\[metadata\]/aversion = ${old.version}' setup.cfg + ''; doCheck = false; } ); - pytest-runner = super.pytest-runner or super.pytestrunner; + pytest-django = super.pytest-django.overridePythonAttrs ( + old: { + postPatch = '' + substituteInPlace setup.py --replace "'pytest>=3.6'," "" + substituteInPlace setup.py --replace "'pytest>=3.6'" "" + ''; + } + ); + + pytest-pylint = super.pytest-pylint.overridePythonAttrs ( + old: { + buildInputs = [ self.pytest-runner ]; + } + ); + + # pytest-splinter seems to put a .marker file in an empty directory + # presumably so it's tracked by and can be installed with MANIFEST.in, see + # https://github.com/pytest-dev/pytest-splinter/commit/a48eeef662f66ff9d3772af618748e73211a186b + # + # This directory then gets used as an empty initial profile directory and is + # zipped up. But if the .marker file is in the Nix store, it has the + # creation date of 1970, and Zip doesn't work with such old files, so it + # fails at runtime! + # + # We fix this here by just removing the file after the installation + # + # The error you get without this is: + # + # E ValueError: ZIP does not support timestamps before 1980 + # /nix/store/55b9ip7xkpimaccw9pa0vacy5q94f5xa-python3-3.7.6/lib/python3.7/zipfile.py:357: ValueError + pytest-splinter = super.pytest-splinter.overrideAttrs (old: { + postInstall = old.postInstall or "" + '' + rm $out/${super.python.sitePackages}/pytest_splinter/profiles/firefox/.marker + ''; + }); python-jose = super.python-jose.overridePythonAttrs ( old: { - postPath = '' - substituteInPlace setup.py --replace "'pytest-runner'," "" - substituteInPlace setup.py --replace "'pytest-runner'" "" - ''; + buildInputs = [ self.pytest-runner ]; + } + ); + + python-snappy = super.python-snappy.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.snappy ]; + } + ); + + ffmpeg-python = super.ffmpeg-python.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; } ); python-prctl = super.python-prctl.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.libcap ]; } ); + pyusb = super.pyusb.overridePythonAttrs ( + old: { + postPatch = '' + libusb=${pkgs.libusb1.out}/lib/libusb-1.0${pkgs.stdenv.hostPlatform.extensions.sharedLibrary} + test -f $libusb || { echo "ERROR: $libusb doesn't exist, please update/fix this build expression."; exit 1; } + sed -i -e "s|find_library=None|find_library=lambda _:\"$libusb\"|" usb/backend/libusb1.py + ''; + } + ); + pyzmq = super.pyzmq.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.pkgconfig ]; - propagatedBuildInputs = old.propagatedBuildInputs ++ [ pkgs.zeromq ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ pkgs.zeromq ]; } ); @@ -786,13 +1357,13 @@ self: super: pandas = super.pandas.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ self.cython ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.cython ]; } ); panel = super.panel.overridePythonAttrs ( old: { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.nodejs ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.nodejs ]; } ); @@ -807,14 +1378,34 @@ self: super: } ); + rlp = super.rlp.overridePythonAttrs { + preConfigure = '' + substituteInPlace setup.py --replace \'setuptools-markdown\' "" + ''; + }; + + + rmfuse = super.rmfuse.overridePythonAttrs (old: { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.setuptools ]; + }); + + rtree = super.rtree.overridePythonAttrs (old: { + propagatedNativeBuildInputs = (old.propagatedNativeBuildInputs or [ ]) ++ [ pkgs.libspatialindex ]; + postPatch = '' + substituteInPlace rtree/finder.py --replace \ + "find_library('spatialindex_c')" \ + "'${pkgs.libspatialindex}/lib/libspatialindex_c${pkgs.stdenv.hostPlatform.extensions.sharedLibrary}'" + ''; + }); + scipy = super.scipy.overridePythonAttrs ( old: if old.format != "wheel" then { - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.gfortran ]; - propagatedBuildInputs = old.propagatedBuildInputs ++ [ self.pybind11 ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.gfortran ]; + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.pybind11 ]; setupPyBuildFlags = [ "--fcompiler='gnu95'" ]; enableParallelBuilding = true; - buildInputs = old.buildInputs ++ [ self.numpy.blas ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.numpy.blas ]; preConfigure = '' sed -i '0,/from numpy.distutils.core/s//import setuptools;from numpy.distutils.core/' setup.py export NPY_NUM_BUILD_JOBS=$NIX_BUILD_CORES @@ -827,14 +1418,14 @@ self: super: scikit-learn = super.scikit-learn.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.gfortran pkgs.glibcLocales ] ++ lib.optionals stdenv.cc.isClang [ pkgs.llvmPackages.openmp ]; - nativeBuildInputs = old.nativeBuildInputs ++ [ + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.cython ]; @@ -842,27 +1433,50 @@ self: super: } ); + secp256k1 = super.secp256k1.overridePythonAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkgconfig pkgs.autoconf pkgs.automake pkgs.libtool ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + doCheck = false; + # Local setuptools versions like "x.y.post0" confuse an internal check + postPatch = '' + substituteInPlace setup.py \ + --replace 'setuptools_version.' '"${self.setuptools.version}".' + ''; + }); + shapely = super.shapely.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ [ pkgs.geos self.cython ]; + buildInputs = (old.buildInputs or [ ]) ++ [ pkgs.geos self.cython ]; inherit (pkgs.python3.pkgs.shapely) patches GEOS_LIBRARY_PATH; } ); shellingham = - if lib.versionAtLeast super.shellingham.version "1.3.2" then ( - super.shellingham.overridePythonAttrs ( - old: { - format = "pyproject"; - } - ) - ) else super.shellingham; + if lib.versionAtLeast super.shellingham.version "1.3.2" then + ( + super.shellingham.overridePythonAttrs ( + old: { + format = "pyproject"; + } + ) + ) else super.shellingham; tables = super.tables.overridePythonAttrs ( old: { HDF5_DIR = "${pkgs.hdf5}"; - nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.pkgconfig ]; - propagatedBuildInputs = old.nativeBuildInputs ++ [ pkgs.hdf5 self.numpy self.numexpr ]; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.pkg-config ]; + propagatedBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ pkgs.hdf5 self.numpy self.numexpr ]; + } + ); + + tempora = super.tempora.overridePythonAttrs ( + old: { + # required for the extra "toml" dependency in setuptools_scm[toml] + buildInputs = (old.buildInputs or [ ]) ++ [ + self.toml + ]; + # disable the removal of pyproject.toml, required because of setuptools_scm + dontPreferSetupPy = true; } ); @@ -882,9 +1496,95 @@ self: super: } ); + tinycss2 = super.tinycss2.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; + } + ); + + # The tokenizers build requires a complex rust setup (cf. nixpkgs override) + # + # Instead of providing a full source build, we use a wheel to keep + # the complexity manageable for now. + tokenizers = super.tokenizers.override { + preferWheel = true; + }; + + torch = lib.makeOverridable + ({ enableCuda ? false + , cudatoolkit ? pkgs.cudatoolkit_10_1 + , pkg ? super.torch + }: pkg.overrideAttrs (old: + { + preConfigure = + if (!enableCuda) then '' + export USE_CUDA=0 + '' else '' + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${cudatoolkit}/targets/x86_64-linux/lib" + ''; + preFixup = lib.optionalString (!enableCuda) '' + # For some reason pytorch retains a reference to libcuda even if it + # is explicitly disabled with USE_CUDA=0. + find $out -name "*.so" -exec ${pkgs.patchelf}/bin/patchelf --remove-needed libcuda.so.1 {} \; + ''; + buildInputs = + (old.buildInputs or [ ]) + ++ [ self.typing-extensions ] + ++ lib.optionals enableCuda [ + pkgs.linuxPackages.nvidia_x11 + pkgs.nccl.dev + pkgs.nccl.out + ]; + propagatedBuildInputs = [ + self.numpy + self.future + self.typing-extensions + ]; + }) + ) + { }; + + torchvision = lib.makeOverridable + ({ enableCuda ? false + , cudatoolkit ? pkgs.cudatoolkit_10_1 + , pkg ? super.torchvision + }: pkg.overrideAttrs (old: { + + # without that autoPatchelfHook will fail because cudatoolkit is not in LD_LIBRARY_PATH + autoPatchelfIgnoreMissingDeps = true; + buildInputs = (old.buildInputs or [ ]) + ++ [ self.torch ] + ++ lib.optionals enableCuda [ + cudatoolkit + ]; + preConfigure = + if (enableCuda) then '' + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${self.torch}/${self.python.sitePackages}/torch/lib:${lib.makeLibraryPath [ cudatoolkit "${cudatoolkit}" ]}" + '' else '' + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${self.torch}/${self.python.sitePackages}/torch/lib" + ''; + })) + { }; + + typeguard = super.typeguard.overridePythonAttrs (old: { + postPatch = '' + substituteInPlace setup.py \ + --replace 'setup()' 'setup(version="${old.version}")' + ''; + }); + + typed_ast = super.typed-ast.overridePythonAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + self.pytest-runner + ]; + }); + + # nix uses a dash, poetry uses an underscore + typing_extensions = super.typing_extensions or self.typing-extensions; + urwidtrees = super.urwidtrees.overridePythonAttrs ( old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.urwid ]; } @@ -898,30 +1598,73 @@ self: super: } ); + vispy = super.vispy.overrideAttrs ( + old: { + inherit (pkgs.python3.pkgs.vispy) patches; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + self.cython + self.setuptools-scm-git-archive + ]; + } + ); + uvloop = super.uvloop.overridePythonAttrs ( old: { - buildInputs = old.buildInputs ++ lib.optionals stdenv.isDarwin [ + buildInputs = (old.buildInputs or [ ]) ++ lib.optionals stdenv.isDarwin [ pkgs.darwin.apple_sdk.frameworks.ApplicationServices pkgs.darwin.apple_sdk.frameworks.CoreServices ]; } ); + # Stop infinite recursion by using bootstrapped pkg from nixpkgs - wheel = ( - pkgs.python3.pkgs.override { + bootstrapped-pip = super.bootstrapped-pip.override { + wheel = (pkgs.python3.pkgs.override { python = self.python; - } - ).wheel.overridePythonAttrs ( - old: - if old.format == "other" then old else { - inherit (super.wheel) pname name version src; + }).wheel; + }; + + weasyprint = super.weasyprint.overridePythonAttrs ( + old: { + inherit (pkgs.python3.pkgs.weasyprint) patches; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ self.pytest-runner ]; + buildInputs = (old.buildInputs or [ ]) ++ [ self.pytest-runner ]; } ); - zipp = - ( - if lib.versionAtLeast super.zipp.version "2.0.0" then ( + web3 = super.web3.overridePythonAttrs { + preConfigure = '' + substituteInPlace setup.py --replace \'setuptools-markdown\' "" + ''; + }; + + wheel = + let + isWheel = super.wheel.src.isWheel or false; + # If "wheel" is a pre-built binary wheel + wheelPackage = super.buildPythonPackage { + inherit (super.wheel) pname name version src; + inherit (pkgs.python3.pkgs.wheel) meta; + format = "wheel"; + }; + # If "wheel" is built from source + sourcePackage = (( + pkgs.python3.pkgs.override { + python = self.python; + } + ).wheel.override { + inherit (self) buildPythonPackage bootstrapped-pip setuptools; + }).overrideAttrs (old: { + inherit (super.wheel) pname name version src; + }); + in + if isWheel then wheelPackage else sourcePackage; + + zipp = if super.zipp == null then null else + ( + if lib.versionAtLeast super.zipp.version "2.0.0" then + ( super.zipp.overridePythonAttrs ( old: { prePatch = '' @@ -932,12 +1675,166 @@ self: super: } ) ) else super.zipp - ).overridePythonAttrs ( - old: { - propagatedBuildInputs = old.propagatedBuildInputs ++ [ - self.toml - ]; - } - ); + ).overridePythonAttrs ( + old: { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ + self.toml + ]; + } + ); + + credis = super.credis.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.cython ]; + } + ); + + hashids = super.hashids.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ [ self.flit-core ]; + } + ); + + packaging = super.packaging.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ + # From 20.5 until 20.7, packaging used flit for packaging (heh) + # See https://github.com/pypa/packaging/pull/352 and https://github.com/pypa/packaging/pull/367 + lib.optional (lib.versionAtLeast old.version "20.5" && lib.versionOlder old.version "20.8") [ self.flit-core ]; + } + ); + + psutil = super.psutil.overridePythonAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) ++ + lib.optional stdenv.isDarwin pkgs.darwin.apple_sdk.frameworks.IOKit; + } + ); + + sentencepiece = super.sentencepiece.overridePythonAttrs ( + old: { + dontUseCmakeConfigure = true; + nativeBuildInputs = (old.nativeBuildInputs or [ ]) ++ [ + pkgs.pkg-config + pkgs.cmake + pkgs.gperftools + ]; + buildInputs = (old.buildInputs or [ ]) ++ [ + pkgs.sentencepiece + ]; + } + ); + + sentence-transformers = super.sentence-transformers.overridePythonAttrs ( + old: { + buildInputs = + (old.buildInputs or [ ]) + ++ [ self.typing-extensions ]; + } + ); + + supervisor = super.supervisor.overridePythonAttrs ( + old: { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ + self.meld3 + self.setuptools + ]; + } + ); + + cytoolz = super.cytoolz.overridePythonAttrs ( + old: { + propagatedBuildInputs = (old.propagatedBuildInputs or [ ]) ++ [ self.toolz ]; + } + ); + + # For some reason the toml dependency of tqdm declared here: + # https://github.com/tqdm/tqdm/blob/67130a23646ae672836b971e1086b6ae4c77d930/pyproject.toml#L2 + # is not translated correctly to a nix dependency. + tqdm = super.tqdm.overrideAttrs ( + old: { + buildInputs = [ super.toml ] ++ (old.buildInputs or [ ]); + } + ); + + watchdog = super.watchdog.overrideAttrs ( + old: { + buildInputs = (old.buildInputs or [ ]) + ++ pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.darwin.apple_sdk.frameworks.CoreServices; + } + ); + + # pyee cannot find `vcversioner` and other "setup requirements", so it tries to + # download them from the internet, which only works when nix sandboxing is disabled. + # Additionally, since pyee uses vcversioner to specify its version, we need to do this + # manually specify its version. + pyee = super.pyee.overrideAttrs ( + old: { + postPatch = old.postPatch or "" + '' + sed -i setup.py \ + -e '/setup_requires/,/],/d' \ + -e 's/vcversioner={},/version="${old.version}",/' + ''; + } + ); + + # nixpkgs has setuptools_scm 4.1.2 + # but newrelic has a seemingly unnecessary version constraint for <4 + # So we patch that out + newrelic = super.newrelic.overridePythonAttrs ( + old: { + postPatch = old.postPatch or "" + '' + substituteInPlace setup.py --replace '"setuptools_scm>=3.2,<4"' '"setuptools_scm"' + ''; + } + ); + + wxpython = super.wxpython.overridePythonAttrs (old: + let + localPython = self.python.withPackages (ps: with ps; [ + setuptools + numpy + six + ]); + in + { + DOXYGEN = "${pkgs.doxygen}/bin/doxygen"; + + nativeBuildInputs = with pkgs; [ + which + doxygen + gtk3 + pkg-config + autoPatchelfHook + ] ++ (old.nativeBuildInputs or [ ]); + + buildInputs = with pkgs; [ + gtk3 + webkitgtk + ncurses + SDL2 + xorg.libXinerama + xorg.libSM + xorg.libXxf86vm + xorg.libXtst + xorg.xorgproto + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + libGLU + libGL + libglvnd + mesa + ] ++ old.buildInputs; + + buildPhase = '' + ${localPython.interpreter} build.py -v build_wx + ${localPython.interpreter} build.py -v dox etg --nodoc sip + ${localPython.interpreter} build.py -v build_py + ''; + + installPhase = '' + ${localPython.interpreter} setup.py install --skip-build --prefix=$out + ''; + }); } |