summary refs log tree commit diff
path: root/pkgs/build-support/setup-hooks/make-wrapper.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/build-support/setup-hooks/make-wrapper.sh')
-rw-r--r--pkgs/build-support/setup-hooks/make-wrapper.sh102
1 files changed, 102 insertions, 0 deletions
diff --git a/pkgs/build-support/setup-hooks/make-wrapper.sh b/pkgs/build-support/setup-hooks/make-wrapper.sh
new file mode 100644
index 000000000000..41f2a59246d1
--- /dev/null
+++ b/pkgs/build-support/setup-hooks/make-wrapper.sh
@@ -0,0 +1,102 @@
+makeWrapper() {
+    local original=$1
+    local wrapper=$2
+    local params varName value command separator n fileNames
+    local flagsBefore flags
+
+    mkdir -p "$(dirname $wrapper)"
+
+    echo "#! $SHELL -e" > $wrapper
+
+    params=("$@")
+    for ((n = 2; n < ${#params[*]}; n += 1)); do
+        p=${params[$n]}
+
+        if test "$p" = "--set"; then
+            varName=${params[$((n + 1))]}
+            value=${params[$((n + 2))]}
+            n=$((n + 2))
+            echo "export $varName=$value" >> $wrapper
+        fi
+
+        if test "$p" = "--run"; then
+            command=${params[$((n + 1))]}
+            n=$((n + 1))
+            echo "$command" >> $wrapper
+        fi
+
+        if test "$p" = "--suffix" -o "$p" = "--prefix"; then
+            varName=${params[$((n + 1))]}
+            separator=${params[$((n + 2))]}
+            value=${params[$((n + 3))]}
+            n=$((n + 3))
+            if test -n "$value"; then
+                if test "$p" = "--suffix"; then
+                    echo "export $varName=\$$varName\${$varName:+$separator}$value" >> $wrapper
+                else
+                    echo "export $varName=$value\${$varName:+$separator}\$$varName" >> $wrapper
+                fi
+            fi
+        fi
+
+        if test "$p" = "--suffix-each"; then
+            varName=${params[$((n + 1))]}
+            separator=${params[$((n + 2))]}
+            values=${params[$((n + 3))]}
+            n=$((n + 3))
+            for value in $values; do
+                echo "export $varName=\$$varName\${$varName:+$separator}$value" >> $wrapper
+            done
+        fi
+
+        if test "$p" = "--suffix-contents" -o "$p" = "--prefix-contents"; then
+            varName=${params[$((n + 1))]}
+            separator=${params[$((n + 2))]}
+            fileNames=${params[$((n + 3))]}
+            n=$((n + 3))
+            for fileName in $fileNames; do
+                if test "$p" = "--suffix-contents"; then
+                    echo "export $varName=\$$varName\${$varName:+$separator}$(cat $fileName)" >> $wrapper
+                else
+                    echo "export $varName=$(cat $fileName)\${$varName:+$separator}\$$varName" >> $wrapper
+                fi
+            done
+        fi
+
+        if test "$p" = "--add-flags"; then
+            flags=${params[$((n + 1))]}
+            n=$((n + 1))
+            flagsBefore="$flagsBefore $flags"
+        fi
+    done
+
+    # Note: extraFlagsArray is an array containing additional flags
+    # that may be set by --run actions.
+    echo exec "$original" $flagsBefore '"${extraFlagsArray[@]}"' '"$@"' >> $wrapper
+    
+    chmod +x $wrapper
+}
+
+addSuffix() {
+    suffix=$1
+    shift
+    for name in "$@"; do
+        echo "$name$suffix"
+    done
+}
+
+filterExisting() {
+    for fn in "$@"; do
+        if test -e "$fn"; then
+            echo "$fn"
+        fi
+    done
+}
+
+# Syntax: wrapProgram <PROGRAM> <MAKE-WRAPPER FLAGS...>
+wrapProgram() {
+    local prog="$1"
+    local hidden="$(dirname "$prog")/.$(basename "$prog")"-wrapped
+    mv $prog $hidden
+    makeWrapper $hidden $prog "$@"
+}