8f3162f83f
Implements a hook, that checks whether all dependencies, as specified by the wheel manifest, are present in the current environment. Complains about missing packages, as well as version specifier mismatches.
251 lines
8.4 KiB
Nix
251 lines
8.4 KiB
Nix
self: dontUse: with self;
|
|
|
|
let
|
|
inherit (python) pythonOnBuildForHost;
|
|
pythonInterpreter = pythonOnBuildForHost.interpreter;
|
|
pythonSitePackages = python.sitePackages;
|
|
pythonCheckInterpreter = python.interpreter;
|
|
setuppy = ../run_setup.py;
|
|
in {
|
|
makePythonHook = args: pkgs.makeSetupHook ({passthru.provides.setupHook = true; } // args);
|
|
|
|
condaInstallHook = callPackage ({ makePythonHook, gnutar, lbzip2 }:
|
|
makePythonHook {
|
|
name = "conda-install-hook";
|
|
propagatedBuildInputs = [ gnutar lbzip2 ];
|
|
substitutions = {
|
|
inherit pythonSitePackages;
|
|
};
|
|
} ./conda-install-hook.sh) {};
|
|
|
|
condaUnpackHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "conda-unpack-hook";
|
|
propagatedBuildInputs = [];
|
|
} ./conda-unpack-hook.sh) {};
|
|
|
|
eggBuildHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "egg-build-hook.sh";
|
|
propagatedBuildInputs = [ ];
|
|
} ./egg-build-hook.sh) {};
|
|
|
|
eggInstallHook = callPackage ({ makePythonHook, setuptools }:
|
|
makePythonHook {
|
|
name = "egg-install-hook.sh";
|
|
propagatedBuildInputs = [ setuptools ];
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
};
|
|
} ./egg-install-hook.sh) {};
|
|
|
|
eggUnpackHook = callPackage ({ makePythonHook, }:
|
|
makePythonHook {
|
|
name = "egg-unpack-hook.sh";
|
|
propagatedBuildInputs = [ ];
|
|
} ./egg-unpack-hook.sh) {};
|
|
|
|
pipBuildHook = callPackage ({ makePythonHook, pip, wheel }:
|
|
makePythonHook {
|
|
name = "pip-build-hook.sh";
|
|
propagatedBuildInputs = [ pip wheel ];
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
};
|
|
} ./pip-build-hook.sh) {};
|
|
|
|
pypaBuildHook = callPackage ({ makePythonHook, build, wheel }:
|
|
makePythonHook {
|
|
name = "pypa-build-hook.sh";
|
|
propagatedBuildInputs = [ wheel ];
|
|
substitutions = {
|
|
inherit build;
|
|
};
|
|
# A test to ensure that this hook never propagates any of its dependencies
|
|
# into the build environment.
|
|
# This prevents false positive alerts raised by catchConflictsHook.
|
|
# Such conflicts don't happen within the standard nixpkgs python package
|
|
# set, but in downstream projects that build packages depending on other
|
|
# versions of this hook's dependencies.
|
|
passthru.tests = import ./pypa-build-hook-tests.nix {
|
|
inherit pythonOnBuildForHost runCommand;
|
|
};
|
|
} ./pypa-build-hook.sh) {
|
|
inherit (pythonOnBuildForHost.pkgs) build;
|
|
};
|
|
|
|
pipInstallHook = callPackage ({ makePythonHook, pip }:
|
|
makePythonHook {
|
|
name = "pip-install-hook";
|
|
propagatedBuildInputs = [ pip ];
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
};
|
|
} ./pip-install-hook.sh) {};
|
|
|
|
pypaInstallHook = callPackage ({ makePythonHook, installer }:
|
|
makePythonHook {
|
|
name = "pypa-install-hook";
|
|
propagatedBuildInputs = [ installer ];
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
};
|
|
} ./pypa-install-hook.sh) {
|
|
inherit (pythonOnBuildForHost.pkgs) installer;
|
|
};
|
|
|
|
pytestCheckHook = callPackage ({ makePythonHook, pytest }:
|
|
makePythonHook {
|
|
name = "pytest-check-hook";
|
|
propagatedBuildInputs = [ pytest ];
|
|
substitutions = {
|
|
inherit pythonCheckInterpreter;
|
|
};
|
|
} ./pytest-check-hook.sh) {};
|
|
|
|
pythonCatchConflictsHook = callPackage ({ makePythonHook, setuptools }:
|
|
makePythonHook {
|
|
name = "python-catch-conflicts-hook";
|
|
substitutions = let
|
|
useLegacyHook = lib.versionOlder python.pythonVersion "3.10";
|
|
in {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
catchConflicts = if useLegacyHook then
|
|
../catch_conflicts/catch_conflicts_py2.py
|
|
else
|
|
../catch_conflicts/catch_conflicts.py;
|
|
} // lib.optionalAttrs useLegacyHook {
|
|
inherit setuptools;
|
|
};
|
|
} ./python-catch-conflicts-hook.sh) {};
|
|
|
|
pythonImportsCheckHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "python-imports-check-hook.sh";
|
|
substitutions = {
|
|
inherit pythonCheckInterpreter pythonSitePackages;
|
|
};
|
|
} ./python-imports-check-hook.sh) {};
|
|
|
|
pythonNamespacesHook = callPackage ({ makePythonHook, buildPackages }:
|
|
makePythonHook {
|
|
name = "python-namespaces-hook.sh";
|
|
substitutions = {
|
|
inherit pythonSitePackages;
|
|
inherit (buildPackages) findutils;
|
|
};
|
|
} ./python-namespaces-hook.sh) {};
|
|
|
|
pythonOutputDistHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "python-output-dist-hook";
|
|
} ./python-output-dist-hook.sh ) {};
|
|
|
|
pythonRecompileBytecodeHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "python-recompile-bytecode-hook";
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
compileArgs = lib.concatStringsSep " " (["-q" "-f" "-i -"] ++ lib.optionals isPy3k ["-j $NIX_BUILD_CORES"]);
|
|
bytecodeName = if isPy3k then "__pycache__" else "*.pyc";
|
|
};
|
|
} ./python-recompile-bytecode-hook.sh ) {};
|
|
|
|
pythonRelaxDepsHook = callPackage ({ makePythonHook, wheel }:
|
|
makePythonHook {
|
|
name = "python-relax-deps-hook";
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages wheel;
|
|
};
|
|
} ./python-relax-deps-hook.sh) {};
|
|
|
|
pythonRemoveBinBytecodeHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "python-remove-bin-bytecode-hook";
|
|
} ./python-remove-bin-bytecode-hook.sh) {};
|
|
|
|
pythonRemoveTestsDirHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "python-remove-tests-dir-hook";
|
|
substitutions = {
|
|
inherit pythonSitePackages;
|
|
};
|
|
} ./python-remove-tests-dir-hook.sh) {};
|
|
|
|
pythonRuntimeDepsCheckHook = callPackage ({ makePythonHook, packaging }:
|
|
makePythonHook {
|
|
name = "python-runtime-deps-check-hook.sh";
|
|
propagatedBuildInputs = [ packaging ];
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages;
|
|
hook = ./python-runtime-deps-check-hook.py;
|
|
};
|
|
} ./python-runtime-deps-check-hook.sh) {};
|
|
|
|
setuptoolsBuildHook = callPackage ({ makePythonHook, setuptools, wheel }:
|
|
makePythonHook {
|
|
name = "setuptools-setup-hook";
|
|
propagatedBuildInputs = [ setuptools wheel ];
|
|
substitutions = {
|
|
inherit pythonInterpreter pythonSitePackages setuppy;
|
|
};
|
|
} ./setuptools-build-hook.sh) {};
|
|
|
|
setuptoolsCheckHook = callPackage ({ makePythonHook, setuptools }:
|
|
makePythonHook {
|
|
name = "setuptools-check-hook";
|
|
propagatedBuildInputs = [ setuptools ];
|
|
substitutions = {
|
|
inherit pythonCheckInterpreter setuppy;
|
|
};
|
|
} ./setuptools-check-hook.sh) {};
|
|
|
|
setuptoolsRustBuildHook = callPackage ({ makePythonHook, setuptools-rust }:
|
|
makePythonHook {
|
|
name = "setuptools-rust-setup-hook";
|
|
propagatedBuildInputs = [ setuptools-rust ];
|
|
substitutions = {
|
|
pyLibDir = "${python}/lib/${python.libPrefix}";
|
|
cargoBuildTarget = stdenv.hostPlatform.rust.rustcTargetSpec;
|
|
cargoLinkerVar = stdenv.hostPlatform.rust.cargoEnvVarTarget;
|
|
targetLinker = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
|
};
|
|
} ./setuptools-rust-hook.sh) {};
|
|
|
|
unittestCheckHook = callPackage ({ makePythonHook }:
|
|
makePythonHook {
|
|
name = "unittest-check-hook";
|
|
substitutions = {
|
|
inherit pythonCheckInterpreter;
|
|
};
|
|
} ./unittest-check-hook.sh) {};
|
|
|
|
venvShellHook = disabledIf (!isPy3k) (callPackage ({ makePythonHook, ensureNewerSourcesForZipFilesHook }:
|
|
makePythonHook {
|
|
name = "venv-shell-hook";
|
|
propagatedBuildInputs = [ ensureNewerSourcesForZipFilesHook ];
|
|
substitutions = {
|
|
inherit pythonInterpreter;
|
|
};
|
|
} ./venv-shell-hook.sh) {});
|
|
|
|
wheelUnpackHook = callPackage ({ makePythonHook, wheel }:
|
|
makePythonHook {
|
|
name = "wheel-unpack-hook.sh";
|
|
propagatedBuildInputs = [ wheel ];
|
|
} ./wheel-unpack-hook.sh) {};
|
|
|
|
wrapPython = callPackage ../wrap-python.nix {
|
|
inherit (pkgs.buildPackages) makeWrapper;
|
|
};
|
|
|
|
sphinxHook = callPackage ({ makePythonHook, installShellFiles }:
|
|
makePythonHook {
|
|
name = "python${python.pythonVersion}-sphinx-hook";
|
|
propagatedBuildInputs = [ pythonOnBuildForHost.pkgs.sphinx installShellFiles ];
|
|
substitutions = {
|
|
sphinxBuild = "${pythonOnBuildForHost.pkgs.sphinx}/bin/sphinx-build";
|
|
};
|
|
} ./sphinx-hook.sh) {};
|
|
}
|