From: Ludovic Desroches Date: Wed, 14 Mar 2012 15:33:56 +0000 (+0100) Subject: apply-patches.sh: change archive management X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4f9e82da2a7d30f7e9e39238a3a2f0bd021a7be4;p=buildroot.git apply-patches.sh: change archive management The way archives were managed was incorrect because the uncompressed archives were sent directly to the patch command. It means that alphabetical patch order was not respected. Signed-off-by: Ludovic Desroches Tested-by: Ludovic Desroches with an armadeus_apf9328_defconfig build Acked-by: Thomas Petazzoni Tested-by: Thomas Petazzoni Signed-off-by: Peter Korsgaard --- diff --git a/support/scripts/apply-patches.sh b/support/scripts/apply-patches.sh index 3d655f144a..1f632aa88b 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