All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.