From: Arnout Vandecappelle <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 3 of 5 RFC] dependencies: build a host-tar if no suitable tar can be found
Date: Tue, 15 Nov 2011 23:31:39 +0000 [thread overview]
Message-ID: <201111152331.39741.arnout@mind.be> (raw)
In-Reply-To: <bd9622b6331d3350b82e.1320911668@devws108>
On Thursday 10 November 2011 19:31:58 Thomas De Schampheleire wrote:
> 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.
>
> TAR is redefined to HOST_TAR, except when extracting host-tar (this is a
> chicken-and-egg problem), so that all packages use the host-tar if no suitable
> tar was found.
>
> Along with this patch, the definition of TAR_STRIP_COMPONENTS was moved to
> check-host-tar.mk.
Since tar >= 1.17 is required, this can be removed.
>
> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
>
> ---
> package/Makefile.package.in | 12 ------------
> package/tar/tar.mk | 4 ++++
> toolchain/dependencies/check-host-tar.mk | 24 ++++++++++++++++++++++++
> toolchain/dependencies/check-host-tar.sh | 29 +++++++++++++++++++++++++++++
> 4 files changed, 57 insertions(+), 12 deletions(-)
>
> diff --git a/package/Makefile.package.in b/package/Makefile.package.in
> --- a/package/Makefile.package.in
> +++ b/package/Makefile.package.in
> @@ -235,18 +235,6 @@ define DOWNLOAD
> exit 1
> endef
>
> -# Utility programs used to build packages
> -TAR ?= tar
> -
> -# Automatically detect tar --strip-path/components option
> -TAR_STRIP_COMPONENTS := \
> - $(shell $(TAR) --help | grep strip-path > /dev/null ; \
> - if test $$? = 0 ; then \
> - echo '--strip-path' ; \
> - else \
> - echo '--strip-components' ; \
> - fi)
> -
> # Needed for the foreach loops to loop over the list of hooks, so that
> # each hook call is properly separated by a newline.
> define sep
> diff --git a/package/tar/tar.mk b/package/tar/tar.mk
> --- a/package/tar/tar.mk
> +++ b/package/tar/tar.mk
> @@ -8,3 +8,7 @@ TAR_VERSION = 1.26
> TAR_SITE = $(BR2_GNU_MIRROR)/tar
>
> $(eval $(call AUTOTARGETS))
> +
> +TAR := $(SYSTEM_TAR) # We need a real tar to extract tar
Here you still need the TAR_STRIP_COMPONENTS, because SYSTEM_TAR
may be < 1.15.
> +$(eval $(call AUTOTARGETS,host))
> +TAR := $(HOST_TAR)
> diff --git a/toolchain/dependencies/check-host-tar.mk b/toolchain/dependencies/check-host-tar.mk
> new file mode 100644
> --- /dev/null
> +++ b/toolchain/dependencies/check-host-tar.mk
> @@ -0,0 +1,24 @@
> +TAR ?= tar
> +SYSTEM_TAR := $(TAR)
Add a comment why this has to be :=, e.g.
# TAR will be overridden again when tar itself is extracted, so we must
# finalize the value of SYSTEM_TAR.
> +
> +ifneq (,$(call suitable-host-package,tar))
> + HOST_TAR := $(TAR)
I would write
HOST_TAR = $(SYSTEM_TAR)
(no := is needed in that case).
> +
> + # Automatically detect tar --strip-path/components option
> + # --strip-path was renamed to --strip-components in tar 1.15
> + TAR_STRIP_COMPONENTS := \
> + $(shell $(TAR) --help | grep strip-path > /dev/null ; \
> + if test $$? = 0 ; then \
> + echo '--strip-path' ; \
> + else \
> + echo '--strip-components' ; \
> + fi)
> +
> +else
> + DEPENDENCIES_HOST_PREREQ += host-tar
> + HOST_TAR := $(HOST_DIR)/usr/bin/tar
> + TAR_STRIP_COMPONENTS := --strip-components
= is fine for these two assignments.
> +
> +endif
> +
> +TAR := $(HOST_TAR)
Also here = should be OK.
> diff --git a/toolchain/dependencies/check-host-tar.sh b/toolchain/dependencies/check-host-tar.sh
> new file mode 100755
> --- /dev/null
> +++ b/toolchain/dependencies/check-host-tar.sh
> @@ -0,0 +1,29 @@
> +#!/bin/sh
> +
> +tar=`which tar`
> +if [ -z "$tar" ]; then
> + return
> +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
> + false
> + # echo nothing: no suitable tar found
> + fi
> +fi
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
>
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286540
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 31BB CF53 8660 6F88 345D 54CC A836 5879 20D7 CF43
next prev parent reply other threads:[~2011-11-15 23:31 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-10 19:31 [Buildroot] [PATCH 0 of 5 RFC] dependencies: some improvements Thomas De Schampheleire
2011-11-10 19:31 ` [Buildroot] [PATCH 1 of 5 RFC] dependencies: check core dependencies before anything else Thomas De Schampheleire
2011-11-15 22:43 ` Arnout Vandecappelle
2011-11-17 22:20 ` Peter Korsgaard
2011-11-10 19:31 ` [Buildroot] [PATCH 2 of 5 RFC] dependencies: add function suitable-host-package Thomas De Schampheleire
2011-11-15 23:22 ` Arnout Vandecappelle
2011-11-10 19:31 ` [Buildroot] [PATCH 3 of 5 RFC] dependencies: build a host-tar if no suitable tar can be found Thomas De Schampheleire
2011-11-15 23:31 ` Arnout Vandecappelle [this message]
2011-11-10 19:32 ` [Buildroot] [PATCH 4 of 5 RFC] dependencies: remove unused lzma checking scripts Thomas De Schampheleire
2011-11-15 22:57 ` Arnout Vandecappelle
2011-11-17 22:20 ` Peter Korsgaard
2011-11-10 19:32 ` [Buildroot] [PATCH 5 of 5 RFC] dirs and dependencies should be executed before every package Thomas De Schampheleire
2011-11-15 23:52 ` Arnout Vandecappelle
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201111152331.39741.arnout@mind.be \
--to=arnout@mind.be \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox