aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2006-11-27 04:25:34 +0000
committerFelix Fietkau <nbd@openwrt.org>2006-11-27 04:25:34 +0000
commite18ccccffd9c3ada0297e732669d6278aaa816c6 (patch)
treefeba8f12ecf70a0ebc7f38cb26cdcb0c2b49b6ec /include
parent52e3598376671160bb3387ce32a9c0d92f5cef64 (diff)
downloadmaster-187ad058-e18ccccffd9c3ada0297e732669d6278aaa816c6.tar.gz
master-187ad058-e18ccccffd9c3ada0297e732669d6278aaa816c6.tar.bz2
master-187ad058-e18ccccffd9c3ada0297e732669d6278aaa816c6.zip
trap chmod errors in tar unpack on bsd - modes like 02755 fail
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@5656 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'include')
-rw-r--r--include/shell.sh15
-rw-r--r--include/unpack.mk5
2 files changed, 19 insertions, 1 deletions
diff --git a/include/shell.sh b/include/shell.sh
index 6ee0cf6030..1e60692b97 100644
--- a/include/shell.sh
+++ b/include/shell.sh
@@ -13,3 +13,18 @@ isset() {
eval "var=\"\${$1}\""
[ -n "$var" ]
}
+
+trapret() {(
+ local retvals="$1"; shift
+ local cmd="$1"; shift
+ for retval in $(echo $retvals); do
+ local trap_$retval=1
+ done
+ "$cmd" "$@" || {
+ local retval="$?"
+ eval "trapped=\${trap_$retval}"
+ [ -n "$trapped" ] || {
+ return $retval
+ }
+ }
+)}
diff --git a/include/unpack.mk b/include/unpack.mk
index e56f624152..051846bd2f 100644
--- a/include/unpack.mk
+++ b/include/unpack.mk
@@ -1,9 +1,12 @@
ifeq ($(strip $(PKG_UNPACK)),)
+ ifneq ($(HOST_OS),Linux)
+ TAR := trapret 2 $(PKG_UNPACK) $(TAR)
+ endif
ifneq ($(strip $(PKG_CAT)),)
# use existing PKG_CAT
PKG_UNPACK:=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | $(TAR) -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS)
ifeq ($(PKG_CAT),unzip)
- PKG_UNPACK=unzip -d $(PKG_BUILD_DIR) $(DL_DIR)/$(PKG_SOURCE)
+ PKG_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)