aboutsummaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorGravatar Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com>2012-02-08 17:22:20 +0100
committerGravatar Peter Korsgaard <jacmet@sunsite.dk>2012-02-09 22:59:21 +0100
commitfd10b42ab8db0cd5d2f3c9076d54244c6e0e60a8 (patch)
treeb3a8b79de79bc23d14a69c401d77eb5bacee1f95 /support
parent1bbf39bd733007f2bda799622147924008a5d44c (diff)
downloadbuildroot-fd10b42ab8db0cd5d2f3c9076d54244c6e0e60a8.tar.gz
buildroot-fd10b42ab8db0cd5d2f3c9076d54244c6e0e60a8.tar.bz2
dependencies: build a host-tar if no suitable tar can be found
Some toolchains, like the one built with buildroot itself, use hardlinks (for example to link between the c++ and g++ binary). Unpacking such a toolchain with the --strip-components options does not work correctly if the system tar is too old (<1.17). Even recent releases of RedHat/CentOS still ship with tar 1.15. This patch checks for a suitable tar version (tar 1.17+) on the host system, and adds host-tar to the host dependencies if none can be found. host-tar is download and extracted as cpio.gz instead of tar.gz, to prevent chicken-egg problem. Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> v4 Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'support')
-rw-r--r--support/dependencies/check-host-tar.mk9
-rwxr-xr-xsupport/dependencies/check-host-tar.sh35
2 files changed, 44 insertions, 0 deletions
diff --git a/support/dependencies/check-host-tar.mk b/support/dependencies/check-host-tar.mk
new file mode 100644
index 0000000000..010bde7a51
--- /dev/null
+++ b/support/dependencies/check-host-tar.mk
@@ -0,0 +1,9 @@
+TAR ?= tar
+
+ifeq (,$(call suitable-host-package,tar,$(TAR)))
+ DEPENDENCIES_HOST_PREREQ += host-tar
+ TAR = $(HOST_DIR)/usr/bin/tar
+endif
+
+# Since TAR is at least 1.17, it will certainly support --strip-components
+TAR_STRIP_COMPONENTS = --strip-components
diff --git a/support/dependencies/check-host-tar.sh b/support/dependencies/check-host-tar.sh
new file mode 100755
index 0000000000..2cfc2b3cc2
--- /dev/null
+++ b/support/dependencies/check-host-tar.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+candidate="$1"
+
+tar=`which $candidate`
+if [ ! -x "$tar" ]; then
+ tar=`which tar`
+ if [ ! -x "$tar" ]; then
+ # echo nothing: no suitable tar found
+ exit 1
+ fi
+fi
+
+# Output of 'tar --version' examples:
+# tar (GNU tar) 1.15.1
+# tar (GNU tar) 1.25
+version=`$tar --version | head -n 1 | sed 's/^.*\s\([0-9]\+\.\S\+\).*$/\1/'`
+major=`echo "$version" | cut -d. -f1`
+minor=`echo "$version" | cut -d. -f2`
+bugfix=`echo "$version" | cut -d. -f3`
+
+# Minimal version = 1.17 (previous versions do not correctly unpack archives
+# containing hard-links if the --strip-components option is used).
+major_min=1
+minor_min=17
+if [ $major -gt $major_min ]; then
+ echo $tar
+else
+ if [ $major -eq $major_min -a $minor -ge $minor_min ]; then
+ echo $tar
+ else
+ # echo nothing: no suitable tar found
+ exit 1
+ fi
+fi