From 0d9ddef0e843133bd0cebdbfe141486fee4a6db8 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Sat, 14 Oct 2006 00:40:27 +0000
Subject: [PATCH] move common unpacking code to unpack.mk, replace zcat with
 $(ZCAT) for systems that use gzcat instead

SVN-Revision: 5070
---
 include/host-build.mk |  8 ++------
 include/host.mk       |  3 +++
 include/package.mk    |  8 ++------
 include/unpack.mk     | 15 +++++++++++++++
 4 files changed, 22 insertions(+), 12 deletions(-)
 create mode 100644 include/unpack.mk

diff --git a/include/host-build.mk b/include/host-build.mk
index a1287da475..858eee5318 100644
--- a/include/host-build.mk
+++ b/include/host-build.mk
@@ -6,13 +6,9 @@
 #
 
 include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/unpack.mk
 
-ifneq ($(strip $(PKG_CAT)),)
-  ifeq ($(PKG_CAT),unzip)
-    UNPACK=unzip -d $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE)
-  else
-    UNPACK=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | tar -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) -
-  endif
+ifneq ($(strip $(UNPACK)),)
   define Build/Prepare/Default
   	$(UNPACK)
 	@if [ -d ./patches ]; then \
diff --git a/include/host.mk b/include/host.mk
index 11522184b7..6c0dcd6699 100644
--- a/include/host.mk
+++ b/include/host.mk
@@ -28,5 +28,8 @@ $(TOPDIR)/.host.mk: $(INCLUDE_DIR)/host.mk
 		if $$TAR --version 2>&1 | grep 'GNU' >/dev/null; then \
 			echo "TAR_WILDCARDS:=--wildcards" >> $@; \
 		fi; \
+		ZCAT=`which gzcat`; \
+		[ -n "$$ZCAT" -a -x "$$ZCAT" ] || ZCAT=`which zcat`; \
+		echo "ZCAT:=$$ZCAT" >> $@; \
 	)
 
diff --git a/include/package.mk b/include/package.mk
index 5a9ba861af..fc1b7802f9 100644
--- a/include/package.mk
+++ b/include/package.mk
@@ -12,6 +12,7 @@ endif
 
 include $(INCLUDE_DIR)/prereq.mk
 include $(INCLUDE_DIR)/host.mk
+include $(INCLUDE_DIR)/unpack.mk
 
 define shvar
 V_$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
@@ -269,12 +270,7 @@ define BuildPackage
   endif
 endef
 
-ifneq ($(strip $(PKG_CAT)),)
-  ifeq ($(PKG_CAT),unzip)
-    UNPACK=unzip -d $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE)
-  else
-    UNPACK=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | tar -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) -
-  endif
+ifneq ($(strip $(PKG_UNPACK)),)
   define Build/Prepare/Default
   	$(UNPACK)
 	@if [ -d ./patches ]; then \
diff --git a/include/unpack.mk b/include/unpack.mk
new file mode 100644
index 0000000000..6449981c1b
--- /dev/null
+++ b/include/unpack.mk
@@ -0,0 +1,15 @@
+ifeq ($(strip $(PKG_UNPACK)),)
+  ifneq ($(strip $(PKG_CAT)),)
+    # use existing PKG_CAT
+    UNPACK:=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | tar -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) -
+    ifeq ($(PKG_CAT),unzip)
+      UNPACK=unzip -d $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE)
+    endif
+    # replace zcat with $(ZCAT), because some system have it as gzcat
+    ifeq ($(PKG_CAT),zcat)
+      UNPACK:=$(ZCAT) $(DL_DIR)/$(PKG_SOURCE) | tar -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) -
+    endif
+  else
+    # try to autodetect file type
+  endif
+endif
-- 
2.30.2