From 577dd4b3e5d4861c31824d920fa170ba3a585f63 Mon Sep 17 00:00:00 2001
From: Richard Purdie <richard.purdie@linuxfoundation.org>
Date: Mon, 21 Feb 2011 16:29:43 +0000
Subject: tar-replacement-native: Add a target to replace the default tar

tar < 1.24 has symlink issues where extracting a tar archive containing a symlink
to a directory where that symlink already exists will cause the symlink to be
dereferenced. If that target doesn't exist tar can fail with a permissions error.

Since we need to be able to do this for packages containing symlinks like
xorg-minimal-fonts and eglibc, we have to ensure a tar 1.25 is available early
in the build process.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/recipes-extended/tar/tar-replacement-native_1.25.bb |  5 +++++
 meta/recipes-extended/tar/tar.inc                        | 11 +++++++++--
 scripts/bitbake                                          |  4 ++--
 3 files changed, 16 insertions(+), 4 deletions(-)
 create mode 100644 meta/recipes-extended/tar/tar-replacement-native_1.25.bb

diff --git a/meta/recipes-extended/tar/tar-replacement-native_1.25.bb b/meta/recipes-extended/tar/tar-replacement-native_1.25.bb
new file mode 100644
index 000000000..2ec55483c
--- /dev/null
+++ b/meta/recipes-extended/tar/tar-replacement-native_1.25.bb
@@ -0,0 +1,5 @@
+require tar_${PV}.bb
+
+inherit native
+
+BPN = "tar"
diff --git a/meta/recipes-extended/tar/tar.inc b/meta/recipes-extended/tar/tar.inc
index 5246efc5a..f83fb4601 100644
--- a/meta/recipes-extended/tar/tar.inc
+++ b/meta/recipes-extended/tar/tar.inc
@@ -8,11 +8,18 @@ SRC_URI = "${GNU_MIRROR}/tar/tar-${PV}.tar.bz2"
 
 inherit autotools gettext
 
+EXTRAINSTALL = "do_install_extra"
+EXTRAINSTALL_virtclass-native = ""
+
 do_install () {
     autotools_do_install
     install -d ${D}${base_bindir}
-    mv ${D}${bindir}/tar ${D}${base_bindir}/tar.${PN}
-    mv ${D}${libexecdir}/rmt ${D}${libexecdir}/rmt.${PN}
+    ${EXTRAINSTALL}
+}
+
+do_install_extra () {
+    mv ${D}${bindir}/tar ${D}${base_bindir}/tar.${PN} \
+    mv ${D}${libexecdir}/rmt ${D}${libexecdir}/rmt.${PN} 
 }
 
 pkg_postinst_${PN} () {
diff --git a/scripts/bitbake b/scripts/bitbake
index f40bd2826..cad4dbe1b 100755
--- a/scripts/bitbake
+++ b/scripts/bitbake
@@ -15,7 +15,7 @@ done
 buildpseudo="1"
 if [ $needpseudo = "1" ] && [ -e "$BUILDDIR/pseudodone" ]; then
     PSEUDOBINDIR=`cat $BUILDDIR/pseudodone`
-    if [ -e "$PSEUDOBINDIR/pseudo" ]; then
+    if [ -e "$PSEUDOBINDIR/pseudo" -a -e "$PSEUDOBINDIR/tar" ]; then
         buildpseudo="0"
     fi
 fi
@@ -27,7 +27,7 @@ OLDPATH=$PATH
 export PATH=`echo $PATH | sed s#[^:]*/scripts:##`
 if [ $buildpseudo = "1" ]; then
     echo "Pseudo is not present but is required, building this first before the main build"
-    bitbake pseudo-native -c populate_sysroot
+    bitbake pseudo-native tar-replacement-native -c populate_sysroot
     ret=$?
     if [ "$ret" != "0" ]; then
         exit 1
-- 
cgit v1.2.3