diff mbox series

[1/2] package: add support for extracting zstd archives

Message ID 20240408013859.732937-2-matt.stav.taylor@gmail.com
State New
Headers show
Series Add bcachefs-tools package | expand

Commit Message

Matt Staveley-Taylor April 8, 2024, 1:38 a.m. UTC
Teach the generic package handling code how to extract zstd (.tar.zst)
archives. When zstd is not installed on the host, host-zstd gets built
automatically.

Signed-off-by: Matt Staveley-Taylor <matt.stav.taylor@gmail.com>
---
 Config.in                               |  7 +++++++
 Makefile                                |  1 +
 package/pkg-utils.mk                    |  2 ++
 support/dependencies/check-host-zstd.mk |  4 ++++
 support/dependencies/check-host-zstd.sh | 14 ++++++++++++++
 5 files changed, 28 insertions(+)
 create mode 100644 support/dependencies/check-host-zstd.mk
 create mode 100755 support/dependencies/check-host-zstd.sh
diff mbox series

Patch

diff --git a/Config.in b/Config.in
index e4f58f3f66..13514b78c9 100644
--- a/Config.in
+++ b/Config.in
@@ -173,6 +173,13 @@  config BR2_LZCAT
 	  Command to be used to extract a lzip'ed file to stdout.
 	  Default is "lzip -d -c"
 
+config BR2_ZSTDCAT
+	string "zstdcat command"
+	default "zstdcat"
+	help
+	  Command to be used to extract a zstd'ed file to stdout.
+	  Default is "zstdcat"
+
 config BR2_TAR_OPTIONS
 	string "Tar options"
 	default ""
diff --git a/Makefile b/Makefile
index d1caec63b5..a9840abe95 100644
--- a/Makefile
+++ b/Makefile
@@ -444,6 +444,7 @@  ZCAT := $(call qstrip,$(BR2_ZCAT))
 BZCAT := $(call qstrip,$(BR2_BZCAT))
 XZCAT := $(call qstrip,$(BR2_XZCAT))
 LZCAT := $(call qstrip,$(BR2_LZCAT))
+ZSTDCAT := $(call qstrip,$(BR2_ZSTDCAT))
 TAR_OPTIONS = $(call qstrip,$(BR2_TAR_OPTIONS)) -xf
 
 ifeq ($(BR2_PER_PACKAGE_DIRECTORIES),y)
diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
index 6181ae7a99..5cc44c8b5c 100644
--- a/package/pkg-utils.mk
+++ b/package/pkg-utils.mk
@@ -59,6 +59,7 @@  INFLATE.tbz  = $(BZCAT)
 INFLATE.tbz2 = $(BZCAT)
 INFLATE.tgz  = $(ZCAT)
 INFLATE.xz   = $(XZCAT)
+INFLATE.zst  = $(ZSTDCAT)
 INFLATE.tar  = cat
 # suitable-extractor(filename): returns extractor based on suffix
 suitable-extractor = $(INFLATE$(suffix $(1)))
@@ -66,6 +67,7 @@  suitable-extractor = $(INFLATE$(suffix $(1)))
 EXTRACTOR_PKG_DEPENDENCY.lzma = $(BR2_XZCAT_HOST_DEPENDENCY)
 EXTRACTOR_PKG_DEPENDENCY.xz   = $(BR2_XZCAT_HOST_DEPENDENCY)
 EXTRACTOR_PKG_DEPENDENCY.lz   = $(BR2_LZIP_HOST_DEPENDENCY)
+EXTRACTOR_PKG_DEPENDENCY.zst  = $(BR2_ZSTD_HOST_DEPENDENCY)
 
 # extractor-pkg-dependency(filename): returns a Buildroot package
 # dependency needed to extract file based on suffix
diff --git a/support/dependencies/check-host-zstd.mk b/support/dependencies/check-host-zstd.mk
new file mode 100644
index 0000000000..fa595ef201
--- /dev/null
+++ b/support/dependencies/check-host-zstd.mk
@@ -0,0 +1,4 @@ 
+ifeq (,$(call suitable-host-package,zstd,$(ZSTDCAT)))
+BR2_ZSTD_HOST_DEPENDENCY = host-zstd
+ZSTDCAT = $(HOST_DIR)/bin/zstdcat
+endif
diff --git a/support/dependencies/check-host-zstd.sh b/support/dependencies/check-host-zstd.sh
new file mode 100755
index 0000000000..81602497ff
--- /dev/null
+++ b/support/dependencies/check-host-zstd.sh
@@ -0,0 +1,14 @@ 
+#!/bin/sh
+
+candidate="$1"
+
+zstdcat=`which $candidate 2>/dev/null`
+if [ ! -x "$zstdcat" ]; then
+	zstdcat=`which zstdcat 2>/dev/null`
+	if [ ! -x "$zstdcat" ]; then
+		# echo nothing: no suitable zstdcat found
+		exit 1
+	fi
+fi
+
+echo $zstdcat