summary refs log tree commit diff
path: root/pkgs/development/python-modules/generic/wrap.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/generic/wrap.sh')
-rw-r--r--pkgs/development/python-modules/generic/wrap.sh47
1 files changed, 47 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/generic/wrap.sh b/pkgs/development/python-modules/generic/wrap.sh
new file mode 100644
index 000000000000..65f3229ca7c4
--- /dev/null
+++ b/pkgs/development/python-modules/generic/wrap.sh
@@ -0,0 +1,47 @@
+wrapPythonPrograms() {
+    wrapPythonProgramsIn $out "$out $pythonPath"
+}
+
+wrapPythonProgramsIn() {
+    local dir="$1"
+    local pythonPath="$2"
+    local python="$(type -p python)"
+    local i
+
+    declare -A pythonPathsSeen=()
+    program_PYTHONPATH=
+    program_PATH=
+    for i in $pythonPath; do
+        _addToPythonPath $i
+    done
+
+    for i in $(find "$dir" -type f -perm +0100); do
+
+        # Rewrite "#! .../env python" to "#! /nix/store/.../python".
+        if head -n1 "$i" | grep -q '#!.*/env.*python'; then
+            sed -i "$i" -e "1 s^.*/env[ ]*python^#! $python^"
+        fi
+        
+        if head -n1 "$i" | grep -q /python; then
+            echo "wrapping \`$i'..."
+            wrapProgram "$i" \
+                --prefix PYTHONPATH ":" $program_PYTHONPATH \
+                --prefix PATH ":" $program_PATH
+        fi
+    done
+}
+
+_addToPythonPath() {
+    local dir="$1"
+    if [ -n "${pythonPathsSeen[$dir]}" ]; then return; fi
+    pythonPathsSeen[$dir]=1
+    addToSearchPath program_PYTHONPATH $dir/lib/@libPrefix@/site-packages
+    addToSearchPath program_PATH $dir/bin
+    local prop="$dir/nix-support/propagated-build-native-inputs"
+    if [ -e $prop ]; then
+        local i
+        for i in $(cat $prop); do
+            _addToPythonPath $i
+        done
+    fi
+}