mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-07-27 05:06:39 +00:00
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>
This commit is contained in:
parent
1bbf39bd73
commit
fd10b42ab8
@ -299,18 +299,6 @@ define DOWNLOAD
|
|||||||
exit 1
|
exit 1
|
||||||
endef
|
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
|
# Needed for the foreach loops to loop over the list of hooks, so that
|
||||||
# each hook call is properly separated by a newline.
|
# each hook call is properly separated by a newline.
|
||||||
define sep
|
define sep
|
||||||
|
@ -10,6 +10,19 @@ TAR_SITE = $(BR2_GNU_MIRROR)/tar
|
|||||||
# Prefer full-blown tar over buybox's version
|
# Prefer full-blown tar over buybox's version
|
||||||
ifeq ($(BR2_PACKAGE_BUSYBOX),y)
|
ifeq ($(BR2_PACKAGE_BUSYBOX),y)
|
||||||
TAR_DEPENDENCIES += busybox
|
TAR_DEPENDENCIES += busybox
|
||||||
|
HOST_TAR_DEPENDENCIES =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(eval $(call AUTOTARGETS))
|
$(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))
|
||||||
|
9
support/dependencies/check-host-tar.mk
Normal file
9
support/dependencies/check-host-tar.mk
Normal file
@ -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
|
35
support/dependencies/check-host-tar.sh
Executable file
35
support/dependencies/check-host-tar.sh
Executable file
@ -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
|
Loading…
x
Reference in New Issue
Block a user