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