nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1# shellcheck shell=bash
2
3# Setup hook that modifies Python dependencies versions.
4#
5# Example usage in a derivation:
6#
7# { …, pythonPackages, … }:
8#
9# pythonPackages.buildPythonPackage {
10# …
11# nativeBuildInputs = [ pythonPackages.pythonRelaxDepsHook ];
12#
13# # This will relax the dependency restrictions
14# # e.g.: abc>1,<=2 -> abc
15# pythonRelaxDeps = [ "abc" ];
16# # This will relax all dependencies restrictions instead
17# # pythonRelaxDeps = true;
18# # This will remove the dependency
19# # e.g.: cde>1,<=2 -> <nothing>
20# pythonRemoveDeps = [ "cde" ];
21# # This will remove all dependencies from the project
22# # pythonRemoveDeps = true;
23# …
24# }
25
26_pythonRelaxDeps() {
27 local -r metadata_file="$1"
28
29 if [[ -z "${pythonRelaxDeps:-}" ]] || [[ "$pythonRelaxDeps" == 0 ]]; then
30 return
31 elif [[ "$pythonRelaxDeps" == 1 ]]; then
32 sed -i "$metadata_file" -r \
33 -e 's/(Requires-Dist: \S*) \(.*\)/\1/'
34 else
35 for dep in $pythonRelaxDeps; do
36 sed -i "$metadata_file" -r \
37 -e "s/(Requires-Dist: $dep) \(.*\)/\1/"
38 done
39 fi
40}
41
42_pythonRemoveDeps() {
43 local -r metadata_file="$1"
44
45 if [[ -z "${pythonRemoveDeps:-}" ]] || [[ "$pythonRemoveDeps" == 0 ]]; then
46 return
47 elif [[ "$pythonRemoveDeps" == 1 ]]; then
48 sed -i "$metadata_file" \
49 -e '/Requires-Dist:.*/d'
50 else
51 for dep in $pythonRemoveDeps; do
52 sed -i "$metadata_file" \
53 -e "/Requires-Dist: $dep/d"
54 done
55 fi
56
57}
58
59pythonRelaxDepsHook() {
60 pushd dist
61
62 local -r package="$pname-$version"
63 local -r unpack_dir="unpacked"
64 local -r metadata_file="$unpack_dir/$package/$package.dist-info/METADATA"
65 local -r wheel=$(echo "$package"*".whl")
66
67 @pythonInterpreter@ -m wheel unpack --dest "$unpack_dir" "$wheel"
68 rm -rf "$wheel"
69
70 _pythonRelaxDeps "$metadata_file"
71 _pythonRemoveDeps "$metadata_file"
72
73 if (( "${NIX_DEBUG:-0}" >= 1 )); then
74 echo "pythonRelaxDepsHook: resulting METADATA:"
75 cat "$unpack_dir/$package/$package.dist-info/METADATA"
76 fi
77
78 @pythonInterpreter@ -m wheel pack "$unpack_dir/$package"
79
80 popd
81}
82
83postBuild+=" pythonRelaxDepsHook"