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
# Prefer full-blown tar over buybox's version
ifeq ($(BR2_PACKAGE_BUSYBOX),y)
TAR_DEPENDENCIES += busybox
+HOST_TAR_DEPENDENCIES =
endif
$(eval $(call AUTOTARGETS))
+
+# host-tar: use cpio.gz instead of tar.gz to prevent chicken-egg problem
+# of needing tar to build tar.
+HOST_TAR_SOURCE = tar-$(TAR_VERSION).cpio.gz
+define HOST_TAR_EXTRACT_CMDS
+ mkdir -p $(@D)
+ cd $(@D) && \
+ $(INFLATE.gz) $(DL_DIR)/$(HOST_TAR_SOURCE) | cpio -i
+ mv $(@D)/tar-$(TAR_VERSION)/* $(@D)
+ rmdir $(@D)/tar-$(TAR_VERSION)
+endef
+$(eval $(call AUTOTARGETS,host))
--- /dev/null
+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
--- /dev/null
+#!/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