diff options
author | Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com> | 2012-02-08 17:22:20 +0100 |
---|---|---|
committer | Peter Korsgaard <jacmet@sunsite.dk> | 2012-02-09 22:59:21 +0100 |
commit | fd10b42ab8db0cd5d2f3c9076d54244c6e0e60a8 (patch) | |
tree | b3a8b79de79bc23d14a69c401d77eb5bacee1f95 /support/dependencies | |
parent | 1bbf39bd733007f2bda799622147924008a5d44c (diff) | |
download | buildroot-novena-fd10b42ab8db0cd5d2f3c9076d54244c6e0e60a8.tar.gz buildroot-novena-fd10b42ab8db0cd5d2f3c9076d54244c6e0e60a8.zip |
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/dependencies')
-rw-r--r-- | support/dependencies/check-host-tar.mk | 9 | ||||
-rwxr-xr-x | support/dependencies/check-host-tar.sh | 35 |
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 000000000..010bde7a5 --- /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 000000000..2cfc2b3cc --- /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 |