* [Buildroot] [PATCH 0 of 2 v2] Introduce suitable-extractor and add host-xzcat dependency
@ 2013-08-01 20:55 Thomas De Schampheleire
2013-08-01 20:55 ` [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function Thomas De Schampheleire
2013-08-01 20:55 ` [Buildroot] [PATCH 2 of 2 v2] xzcat: treat as host prerequisite and build if needed Thomas De Schampheleire
0 siblings, 2 replies; 7+ messages in thread
From: Thomas De Schampheleire @ 2013-08-01 20:55 UTC (permalink / raw)
To: buildroot
v2: update based on Thomas Petazzoni's comments.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function
2013-08-01 20:55 [Buildroot] [PATCH 0 of 2 v2] Introduce suitable-extractor and add host-xzcat dependency Thomas De Schampheleire
@ 2013-08-01 20:55 ` Thomas De Schampheleire
2013-08-02 8:28 ` Thomas Petazzoni
2013-08-01 20:55 ` [Buildroot] [PATCH 2 of 2 v2] xzcat: treat as host prerequisite and build if needed Thomas De Schampheleire
1 sibling, 1 reply; 7+ messages in thread
From: Thomas De Schampheleire @ 2013-08-01 20:55 UTC (permalink / raw)
To: buildroot
In order to simplify determining the right extractor tool for a given
file type, this patch introduces a make function 'suitable-extractor'.
Its usage is $(call suitable-extractor,filename), and it returns the
path to the suitable extractor.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
---
(v2): new patch in series
Note: one remaining direct usage of the INFLATE variables is in
package/pkg-generic.mk, but it's in the inner block where dollar signs
are thrown around your ears. I'm not sure if it's possible to use the
function there...
package/lsof/lsof.mk | 2 +-
package/perl/perl.mk | 2 +-
package/pkg-generic.mk | 2 +-
package/pkg-utils.mk | 2 ++
package/tar/tar.mk | 2 +-
toolchain/toolchain-external/ext-tool.mk | 6 +++---
6 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/package/lsof/lsof.mk b/package/lsof/lsof.mk
--- a/package/lsof/lsof.mk
+++ b/package/lsof/lsof.mk
@@ -41,7 +41,7 @@ endif
# The .tar.bz2 contains another .tar, which contains the source code.
define LSOF_EXTRACT_CMDS
- $(INFLATE.bz2) $(DL_DIR)/$(LSOF_SOURCE) | \
+ $(call suitable-extractor,$(LSOF_SOURCE)) $(DL_DIR)/$(LSOF_SOURCE) | \
$(TAR) -O $(TAR_OPTIONS) - lsof_$(LSOF_VERSION)/lsof_$(LSOF_VERSION)_src.tar | \
$(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $(LSOF_DIR) $(TAR_OPTIONS) -
endef
diff --git a/package/perl/perl.mk b/package/perl/perl.mk
--- a/package/perl/perl.mk
+++ b/package/perl/perl.mk
@@ -30,7 +30,7 @@ endef
PERL_POST_DOWNLOAD_HOOKS += PERL_CROSS_DOWNLOAD
define PERL_CROSS_EXTRACT
- $(INFLATE$(suffix $(PERL_CROSS_SOURCE))) $(DL_DIR)/$(PERL_CROSS_SOURCE) | \
+ $(call suitable-extractor,$(PERL_CROSS_SOURCE)) $(DL_DIR)/$(PERL_CROSS_SOURCE) | \
$(TAR) $(TAR_STRIP_COMPONENTS)=1 -C $(@D) $(TAR_OPTIONS) -
endef
PERL_POST_EXTRACT_HOOKS += PERL_CROSS_EXTRACT
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -539,7 +539,7 @@ else ifeq ($$($(2)_SITE_METHOD),hg)
DL_TOOLS_DEPENDENCIES += hg
endif # SITE_METHOD
-DL_TOOLS_DEPENDENCIES += $(firstword $(INFLATE$(suffix $($(2)_SOURCE))))
+DL_TOOLS_DEPENDENCIES += $(call suitable-extractor,$($(2)_SOURCE))
endif # $(2)_KCONFIG_VAR
endef # inner-generic-package
diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
--- a/package/pkg-utils.mk
+++ b/package/pkg-utils.mk
@@ -62,6 +62,8 @@ INFLATE.tbz2 = $(BZCAT)
INFLATE.tgz = $(ZCAT)
INFLATE.xz = $(XZCAT)
INFLATE.tar = cat
+# suitable-extractor(filename): returns extractor based on suffix
+suitable-extractor = $(firstword $(INFLATE$(suffix $(1))))
# MESSAGE Macro -- display a message in bold type
MESSAGE = echo "$(TERM_BOLD)>>> $($(PKG)_NAME) $($(PKG)_VERSION) $(1)$(TERM_RESET)"
diff --git a/package/tar/tar.mk b/package/tar/tar.mk
--- a/package/tar/tar.mk
+++ b/package/tar/tar.mk
@@ -23,7 +23,7 @@ HOST_TAR_SOURCE = tar-$(TAR_VERSION).cpi
define HOST_TAR_EXTRACT_CMDS
mkdir -p $(@D)
cd $(@D) && \
- $(INFLATE.gz) $(DL_DIR)/$(HOST_TAR_SOURCE) | cpio -i
+ $(call suitable-extractor,$(HOST_TAR_SOURCE)) $(DL_DIR)/$(HOST_TAR_SOURCE) | cpio -i
mv $(@D)/tar-$(TAR_VERSION)/* $(@D)
rmdir $(@D)/tar-$(TAR_VERSION)
endef
diff --git a/toolchain/toolchain-external/ext-tool.mk b/toolchain/toolchain-external/ext-tool.mk
--- a/toolchain/toolchain-external/ext-tool.mk
+++ b/toolchain/toolchain-external/ext-tool.mk
@@ -337,9 +337,9 @@ ifeq ($(BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_
$(TOOLCHAIN_EXTERNAL_DIR)/.extracted: $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_1) $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_2)
mkdir -p $(@D)
- $(INFLATE$(suffix $(TOOLCHAIN_EXTERNAL_SOURCE_1))) $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_1) | \
+ $(call suitable-extractor,$(TOOLCHAIN_EXTERNAL_SOURCE_1)) $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_1) | \
$(TAR) $(TAR_STRIP_COMPONENTS)=3 --hard-dereference -C $(@D) $(TAR_OPTIONS) -
- $(INFLATE$(suffix $(TOOLCHAIN_EXTERNAL_SOURCE_2))) $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_2) | \
+ $(call suitable-extractor,$(TOOLCHAIN_EXTERNAL_SOURCE_2)) $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE_2) | \
$(TAR) $(TAR_STRIP_COMPONENTS)=3 --hard-dereference -C $(@D) $(TAR_OPTIONS) -
$(Q)touch $@
else
@@ -349,7 +349,7 @@ else
$(TOOLCHAIN_EXTERNAL_DIR)/.extracted: $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_SOURCE)
mkdir -p $(@D)
- $(INFLATE$(suffix $(TOOLCHAIN_EXTERNAL_SOURCE))) $^ | \
+ $(call suitable-extractor,$(TOOLCHAIN_EXTERNAL_SOURCE)) $^ | \
$(TAR) $(TAR_STRIP_COMPONENTS)=1 --exclude='usr/lib/locale/*' -C $(@D) $(TAR_OPTIONS) -
$(TOOLCHAIN_EXTERNAL_FIXUP_CMDS)
$(Q)touch $@
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH 2 of 2 v2] xzcat: treat as host prerequisite and build if needed
2013-08-01 20:55 [Buildroot] [PATCH 0 of 2 v2] Introduce suitable-extractor and add host-xzcat dependency Thomas De Schampheleire
2013-08-01 20:55 ` [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function Thomas De Schampheleire
@ 2013-08-01 20:55 ` Thomas De Schampheleire
1 sibling, 0 replies; 7+ messages in thread
From: Thomas De Schampheleire @ 2013-08-01 20:55 UTC (permalink / raw)
To: buildroot
If xzcat is not present on the host system, buildroot bails out early asking
the developer to install it (xzcat is now a DL_TOOLS_DEPENDENCY)
Conversely, when BR2_TARGET_ROOTFS_CPIO_XZ is enabled, then host-xz is a
build dependency, and no manual action is required from the developer.
Because the second approach is nicer, also build host-xz when xzcat is not
available, using the host-prerequisite and suitable-host-pkg mechanisms,
already used for tar.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
---
v2: avoid filtering out xzcat from DL_TOOLS_DEPENDENCIES (comment ThomasP)
package/pkg-generic.mk | 4 ++++
support/dependencies/check-host-xzcat.mk | 7 +++++++
support/dependencies/check-host-xzcat.sh | 14 ++++++++++++++
3 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
--- a/package/pkg-generic.mk
+++ b/package/pkg-generic.mk
@@ -539,7 +539,11 @@ else ifeq ($$($(2)_SITE_METHOD),hg)
DL_TOOLS_DEPENDENCIES += hg
endif # SITE_METHOD
+# Do not add xzcat to the list of required dependencies, as it gets
+# built automatically if it isn't found.
+ifneq ($(call suitable-extractor,$($(2)_SOURCE)),$(XZCAT))
DL_TOOLS_DEPENDENCIES += $(call suitable-extractor,$($(2)_SOURCE))
+endif
endif # $(2)_KCONFIG_VAR
endef # inner-generic-package
diff --git a/support/dependencies/check-host-xzcat.mk b/support/dependencies/check-host-xzcat.mk
new file mode 100644
--- /dev/null
+++ b/support/dependencies/check-host-xzcat.mk
@@ -0,0 +1,7 @@
+# XZCAT is taken from BR2_XZCAT (defaults to 'xzcat') (see Makefile)
+# If it is not present, build our own host-xzcat
+
+ifeq (,$(call suitable-host-package,xzcat,$(XZCAT)))
+ DEPENDENCIES_HOST_PREREQ += host-xz
+ XZCAT = $(HOST_DIR)/usr/bin/xzcat
+endif
diff --git a/support/dependencies/check-host-xzcat.sh b/support/dependencies/check-host-xzcat.sh
new file mode 100755
--- /dev/null
+++ b/support/dependencies/check-host-xzcat.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+candidate="$1"
+
+xzcat=`which $candidate 2>/dev/null`
+if [ ! -x "$xzcat" ]; then
+ xzcat=`which xzcat 2>/dev/null`
+ if [ ! -x "$xzcat" ]; then
+ # echo nothing: no suitable xzcat found
+ exit 1
+ fi
+fi
+
+echo $xzcat
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function
2013-08-01 20:55 ` [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function Thomas De Schampheleire
@ 2013-08-02 8:28 ` Thomas Petazzoni
2013-08-02 8:50 ` Thomas De Schampheleire
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2013-08-02 8:28 UTC (permalink / raw)
To: buildroot
Dear Thomas De Schampheleire,
On Thu, 01 Aug 2013 22:55:47 +0200, Thomas De Schampheleire wrote:
> diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
> --- a/package/pkg-utils.mk
> +++ b/package/pkg-utils.mk
> @@ -62,6 +62,8 @@ INFLATE.tbz2 = $(BZCAT)
> INFLATE.tgz = $(ZCAT)
> INFLATE.xz = $(XZCAT)
> INFLATE.tar = cat
> +# suitable-extractor(filename): returns extractor based on suffix
> +suitable-extractor = $(firstword $(INFLATE$(suffix $(1))))
Do you know why we need this $(firstword ...) call here? In all places
in was using directly $(INFLATE$(...)), except in the package
infrastructure where it was doing this firstword additional call.
It was added by Peter in 2c6390a5d0c01420879e9f23bc89afb19976da4a.
Ideas?
Thomas
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function
2013-08-02 8:28 ` Thomas Petazzoni
@ 2013-08-02 8:50 ` Thomas De Schampheleire
2013-08-02 8:56 ` Thomas Petazzoni
0 siblings, 1 reply; 7+ messages in thread
From: Thomas De Schampheleire @ 2013-08-02 8:50 UTC (permalink / raw)
To: buildroot
On Fri, Aug 2, 2013 at 10:28 AM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Thomas De Schampheleire,
>
> On Thu, 01 Aug 2013 22:55:47 +0200, Thomas De Schampheleire wrote:
>
>> diff --git a/package/pkg-utils.mk b/package/pkg-utils.mk
>> --- a/package/pkg-utils.mk
>> +++ b/package/pkg-utils.mk
>> @@ -62,6 +62,8 @@ INFLATE.tbz2 = $(BZCAT)
>> INFLATE.tgz = $(ZCAT)
>> INFLATE.xz = $(XZCAT)
>> INFLATE.tar = cat
>> +# suitable-extractor(filename): returns extractor based on suffix
>> +suitable-extractor = $(firstword $(INFLATE$(suffix $(1))))
>
> Do you know why we need this $(firstword ...) call here? In all places
> in was using directly $(INFLATE$(...)), except in the package
> infrastructure where it was doing this firstword additional call.
>
> It was added by Peter in 2c6390a5d0c01420879e9f23bc89afb19976da4a.
It wasn't clear to me when I sent the patch, but I figured it didn't hurt.
But now I think I know: the inflate targets originate from the
.config, and users can add extra arguments there. In fact, the default
for $(ZCAT) is:
BR2_ZCAT="gzip -d -c"
To check the dependency, we only want to check for 'gzip', but to do
the actual inflate, we shouldn't use 'firstword'. So, the patch is
wrong, and I will fix it :)
Thanks for highlighting this!
Best regards,
Thomas
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function
2013-08-02 8:50 ` Thomas De Schampheleire
@ 2013-08-02 8:56 ` Thomas Petazzoni
2013-08-02 9:02 ` Thomas De Schampheleire
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2013-08-02 8:56 UTC (permalink / raw)
To: buildroot
Dear Thomas De Schampheleire,
On Fri, 2 Aug 2013 10:50:44 +0200, Thomas De Schampheleire wrote:
> > Do you know why we need this $(firstword ...) call here? In all places
> > in was using directly $(INFLATE$(...)), except in the package
> > infrastructure where it was doing this firstword additional call.
> >
> > It was added by Peter in 2c6390a5d0c01420879e9f23bc89afb19976da4a.
>
> It wasn't clear to me when I sent the patch, but I figured it didn't hurt.
> But now I think I know: the inflate targets originate from the
> .config, and users can add extra arguments there. In fact, the default
> for $(ZCAT) is:
> BR2_ZCAT="gzip -d -c"
>
> To check the dependency, we only want to check for 'gzip', but to do
> the actual inflate, we shouldn't use 'firstword'. So, the patch is
> wrong, and I will fix it :)
Ok, makes sense to me now. Indeed this makes the patch wrong :)
Are you annoyed if I integrate this in -next ? I want to release -rc1
today, and I think this kind of stuff is a little bit too sensitive to
be merged now. From your quick feedback on those patches, I have the
feeling that you wanted it in 2013.08, so I don't want to ruin your
hope, but I believe it's a bit too late now. What do you think?
Best regards,
Thomas
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function
2013-08-02 8:56 ` Thomas Petazzoni
@ 2013-08-02 9:02 ` Thomas De Schampheleire
0 siblings, 0 replies; 7+ messages in thread
From: Thomas De Schampheleire @ 2013-08-02 9:02 UTC (permalink / raw)
To: buildroot
Hi Thomas,
On Fri, Aug 2, 2013 at 10:56 AM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> Dear Thomas De Schampheleire,
>
> On Fri, 2 Aug 2013 10:50:44 +0200, Thomas De Schampheleire wrote:
>
>> > Do you know why we need this $(firstword ...) call here? In all places
>> > in was using directly $(INFLATE$(...)), except in the package
>> > infrastructure where it was doing this firstword additional call.
>> >
>> > It was added by Peter in 2c6390a5d0c01420879e9f23bc89afb19976da4a.
>>
>> It wasn't clear to me when I sent the patch, but I figured it didn't hurt.
>> But now I think I know: the inflate targets originate from the
>> .config, and users can add extra arguments there. In fact, the default
>> for $(ZCAT) is:
>> BR2_ZCAT="gzip -d -c"
>>
>> To check the dependency, we only want to check for 'gzip', but to do
>> the actual inflate, we shouldn't use 'firstword'. So, the patch is
>> wrong, and I will fix it :)
>
> Ok, makes sense to me now. Indeed this makes the patch wrong :)
>
> Are you annoyed if I integrate this in -next ? I want to release -rc1
> today, and I think this kind of stuff is a little bit too sensitive to
> be merged now. From your quick feedback on those patches, I have the
> feeling that you wanted it in 2013.08, so I don't want to ruin your
> hope, but I believe it's a bit too late now. What do you think?
>
It's always nice if patches make it to the upcoming release and not
the one after that :)
But I understand that it's not critical and could have side-effects we
didn't think of, so no problem to put it in -next. I won't hate you
for it ;)
Best regards,
Thomas
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-08-02 9:02 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-01 20:55 [Buildroot] [PATCH 0 of 2 v2] Introduce suitable-extractor and add host-xzcat dependency Thomas De Schampheleire
2013-08-01 20:55 ` [Buildroot] [PATCH 1 of 2 v2] infra: introduce suitable-extractor helper function Thomas De Schampheleire
2013-08-02 8:28 ` Thomas Petazzoni
2013-08-02 8:50 ` Thomas De Schampheleire
2013-08-02 8:56 ` Thomas Petazzoni
2013-08-02 9:02 ` Thomas De Schampheleire
2013-08-01 20:55 ` [Buildroot] [PATCH 2 of 2 v2] xzcat: treat as host prerequisite and build if needed Thomas De Schampheleire
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox