at 16.09-beta 114 lines 3.4 kB view raw
1makeWrapper() { 2 local original=$1 3 local wrapper=$2 4 local params varName value command separator n fileNames 5 local argv0 flagsBefore flags 6 7 mkdir -p "$(dirname $wrapper)" 8 9 echo "#! $SHELL -e" > $wrapper 10 11 params=("$@") 12 for ((n = 2; n < ${#params[*]}; n += 1)); do 13 p=${params[$n]} 14 15 if test "$p" = "--set"; then 16 varName=${params[$((n + 1))]} 17 value=${params[$((n + 2))]} 18 n=$((n + 2)) 19 echo "export $varName=\"$value\"" >> $wrapper 20 fi 21 22 if test "$p" = "--unset"; then 23 varName=${params[$((n + 1))]} 24 n=$((n + 1)) 25 echo "unset $varName" >> "$wrapper" 26 fi 27 28 if test "$p" = "--run"; then 29 command=${params[$((n + 1))]} 30 n=$((n + 1)) 31 echo "$command" >> $wrapper 32 fi 33 34 if test "$p" = "--suffix" -o "$p" = "--prefix"; then 35 varName=${params[$((n + 1))]} 36 separator=${params[$((n + 2))]} 37 value=${params[$((n + 3))]} 38 n=$((n + 3)) 39 if test -n "$value"; then 40 if test "$p" = "--suffix"; then 41 echo "export $varName=\$$varName\${$varName:+$separator}$value" >> $wrapper 42 else 43 echo "export $varName=$value\${$varName:+$separator}\$$varName" >> $wrapper 44 fi 45 fi 46 fi 47 48 if test "$p" = "--suffix-each"; then 49 varName=${params[$((n + 1))]} 50 separator=${params[$((n + 2))]} 51 values=${params[$((n + 3))]} 52 n=$((n + 3)) 53 for value in $values; do 54 echo "export $varName=\$$varName\${$varName:+$separator}$value" >> $wrapper 55 done 56 fi 57 58 if test "$p" = "--suffix-contents" -o "$p" = "--prefix-contents"; then 59 varName=${params[$((n + 1))]} 60 separator=${params[$((n + 2))]} 61 fileNames=${params[$((n + 3))]} 62 n=$((n + 3)) 63 for fileName in $fileNames; do 64 if test "$p" = "--suffix-contents"; then 65 echo "export $varName=\$$varName\${$varName:+$separator}$(cat $fileName)" >> $wrapper 66 else 67 echo "export $varName=$(cat $fileName)\${$varName:+$separator}\$$varName" >> $wrapper 68 fi 69 done 70 fi 71 72 if test "$p" = "--add-flags"; then 73 flags=${params[$((n + 1))]} 74 n=$((n + 1)) 75 flagsBefore="$flagsBefore $flags" 76 fi 77 78 if test "$p" = "--argv0"; then 79 argv0=${params[$((n + 1))]} 80 n=$((n + 1)) 81 fi 82 done 83 84 # Note: extraFlagsArray is an array containing additional flags 85 # that may be set by --run actions. 86 echo exec ${argv0:+-a $argv0} "$original" \ 87 $flagsBefore '"${extraFlagsArray[@]}"' '"$@"' >> $wrapper 88 89 chmod +x $wrapper 90} 91 92addSuffix() { 93 suffix=$1 94 shift 95 for name in "$@"; do 96 echo "$name$suffix" 97 done 98} 99 100filterExisting() { 101 for fn in "$@"; do 102 if test -e "$fn"; then 103 echo "$fn" 104 fi 105 done 106} 107 108# Syntax: wrapProgram <PROGRAM> <MAKE-WRAPPER FLAGS...> 109wrapProgram() { 110 local prog="$1" 111 local hidden="$(dirname "$prog")/.$(basename "$prog")"-wrapped 112 mv $prog $hidden 113 makeWrapper $hidden $prog --argv0 '"$0"' "$@" 114}