diff options
| -rwxr-xr-x | support/scripts/apply-patches.sh | 48 | 
1 files changed, 32 insertions, 16 deletions
diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh index 3d655f144..1f632aa88 100755 --- a/support/scripts/apply-patches.sh +++ b/support/scripts/apply-patches.sh @@ -26,12 +26,10 @@ fi  find ${builddir}/ '(' -name '*.rej' -o -name '.*.rej' ')' -print0 | \      xargs -0 -r rm -f -for i in `cd ${patchdir}; ls -d ${patchpattern} 2> /dev/null` ; do  -    apply="patch -g0 -p1 -E -d" -    uncomp_parm="" -    if [ -d "${patchdir}/$i" ] ; then -	echo "${patchdir}/$i skipped" -    else case "$i" in +function apply_patch { +    path=$1 +    patch=$2 +    case "$patch" in  	*.gz)  	type="gzip"; uncomp="gunzip -dc"; ;;   	*.bz) @@ -42,22 +40,40 @@ for i in `cd ${patchdir}; ls -d ${patchpattern} 2> /dev/null` ; do  	type="zip"; uncomp="unzip -d"; ;;   	*.Z)  	type="compress"; uncomp="uncompress -c"; ;;  -	*.tgz) -	type="tar gzip"; uncomp="gunzip -dc"; apply="tar xvf - -C"; ;;  -	*.tar) -	type="tar"; uncomp="cat"; apply="tar xvf - -C"; ;;   	*)  	type="plaintext"; uncomp="cat"; ;;  -    esac fi +    esac      echo "" -    echo "Applying ${i} using ${type}: "  -	echo ${i} >> ${builddir}/.applied_patches_list -    ${uncomp} "${patchdir}/${i}" ${uncomp_parm} | ${apply} "${builddir}" +    echo "Applying $patch using ${type}: " +	echo $patch >> ${builddir}/.applied_patches_list +    ${uncomp} "${path}/$patch" | patch -g0 -p1 -E -d "${builddir}"      if [ $? != 0 ] ; then -        echo "Patch failed!  Please fix $i!" +        echo "Patch failed!  Please fix ${patch}!"  	exit 1      fi -done +} + +function scan_patchdir { +    path=$1 +    shift 1 +    patches=${@-*} + +    for i in `cd $path; ls -d $patches 2> /dev/null` ; do +        if [ -d "${path}/$i" ] ; then +            echo "${path}/$i skipped" +        elif echo "$i" | grep -q -E "\.tar(\..*)?$|\.tbz2?$|\.tgz$" ; then +            unpackedarchivedir="$builddir/.patches-$(basename $i)-unpacked" +            rm -rf "$unpackedarchivedir" 2> /dev/null +            mkdir "$unpackedarchivedir" +            tar -C "$unpackedarchivedir" --strip-components=1 -xaf "${path}/$i" +            scan_patchdir "$unpackedarchivedir" +        else +            apply_patch "$path" "$i" || exit 1 +        fi +    done +} + +scan_patchdir $patchdir $patchpattern  # Check for rejects...  if [ "`find $builddir/ '(' -name '*.rej' -o -name '.*.rej' ')' -print`" ] ; then  | 
