python-package-install.sh (1846B)
1 #!/bin/sh 2 3 process_filespec() { 4 local src_dir="$1" 5 local dst_dir="$2" 6 local filespec="$3" 7 echo "$filespec" | ( 8 IFS='|' 9 while read fop fspec fperm; do 10 local fop=`echo "$fop" | tr -d ' \t\n'` 11 if [ "$fop" = "+" ]; then 12 if [ ! -e "${src_dir}${fspec}" ]; then 13 echo "File not found '${src_dir}${fspec}'" 14 exit 1 15 fi 16 dpath=`dirname "$fspec"` 17 if [ -z "$fperm" ]; then 18 dperm=`stat -c "%a" ${src_dir}${dpath}` 19 fi 20 mkdir -p -m$dperm ${dst_dir}${dpath} 21 echo "copying: '$fspec'" 22 cp -fpR ${src_dir}${fspec} ${dst_dir}${dpath}/ 23 if [ -n "$fperm" ]; then 24 chmod -R $fperm ${dst_dir}${fspec} 25 fi 26 elif [ "$fop" = "-" ]; then 27 echo "removing: '$fspec'" 28 rm -fR ${dst_dir}${fspec} 29 elif [ "$fop" = "=" ]; then 30 echo "setting permissions: '$fperm' on '$fspec'" 31 chmod -R $fperm ${dst_dir}${fspec} 32 fi 33 done 34 ) 35 } 36 37 src_dir="$1" 38 dst_dir="$2" 39 python="$3" 40 mode="$4" 41 filespec="$5" 42 43 process_filespec "$src_dir" "$dst_dir" "$filespec" || { 44 echo "process filespec error-ed" 45 exit 1 46 } 47 48 if [ "$mode" == "sources" ] ; then 49 # Copy only python source files 50 find $dst_dir -not -name "*\.py" | xargs rm -f 51 # Delete empty folders (if the case) 52 find $dst_dir/usr -type d | xargs rmdir &> /dev/null 53 rmdir $dst_dir/usr &> /dev/null 54 exit 0 55 fi 56 57 # XXX [So that you won't goof as I did] 58 # Note: Yes, I tried to use the -O & -OO flags here. 59 # However the generated byte-codes were not portable. 60 # So, we just stuck to un-optimized byte-codes, 61 # which is still way better/faster than running 62 # Python sources all the time. 63 $python -m compileall -d '/' $dst_dir || { 64 echo "python -m compileall err-ed" 65 exit 1 66 } 67 # Delete source files and pyc [ un-optimized bytecode files ] 68 # We may want to make this optimization thing configurable later, but not sure atm 69 find $dst_dir -name "*\.py" | xargs rm -f 70