From: Arnout Vandecappelle <arnout@mind.be>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 04/13 v2] core/legal-info: ensure legal-info works in off-line mode
Date: Thu, 17 Dec 2015 00:19:00 +0100 [thread overview]
Message-ID: <5671F164.3080504@mind.be> (raw)
In-Reply-To: <82f1af6280a8c913d3df331813dec4376fda2fb5.1450031251.git.yann.morin.1998@free.fr>
On 13-12-15 19:35, Yann E. MORIN wrote:
> Almost all packages which are saved for legal-info have their source
> archives downloaded as part of 'make source', which makes an off-line
> build completely possible [0].
>
> However, for the pre-configured external toolchains, the source tarball
> is different, as the main tarball is a binary package. And that source
> tarball is only downloaded during the legal-info phase, which makes it
> inconvenient for full off-line builds.
>
> We fix that in two steps:
>
> - first, we move the declaration of _ACTUAL_SOURCE_TARBALL and _SITE
> earlier in the pkg-generic.mk file, so we get those definitions at
> the time we define the -source and -all-source rules;
I don't see why this is needed: they are first use at exactly the place where
they were originally defined.
That said, these definitions fit much better where you put them now (just after
the handling of _SOURCE), so keep it this way. Could be a seperate patch but not
really required for me.
>
> - second, we add a new rule, $(1)-legal-source which only
> $(1)-all-source depends on, so that we only download it for a
> top-level 'make source', not as part of the standard download
> mechanism (i.e. only what is really needed to build).
>
> This way, we can do a complete [0] off-line build and are still able to
> generate legal-info, while at the same time we do not incur any download
> overhead during a simple build.
>
> Also, we previously downloaded the _ACTUAL_SOURCE_TARBALL when it was
> not empty.
I haven't tested, but according to me this code already did the right thing:
ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
$$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
endif
It is true, however, that the original code didn't handle the case where a
package explicitly declares ACTUAL_SOURCE_TARBALL to be empty.
> However, since _ACTUAL_SOURCE_TARBALL default to the value of
> _SOURCE, it can not be empty when _SOURCE is not. Thus, we'd get a
> spurious report of a missing hash for the tarball, since it was not in
> a standard package rule (configure, build, install..) and thus would
> miss the PKG and PKGDIR variables to find the .hash file.
>
> We fix that in this commit as well, by:
>
> - setting PKG and PKGDIR just for the -legal-source rule;
Have we still not gotten rid of PKGDIR? How silly...
>
> - only downloading _ACTUAL_SOURCE_TARBALL if it is not empty *and* not
> the same as _SOURCE (to avoid a second report about the hash).
>
> [0] Save for nodejs which invarriably wants to download stuff at build
> time. Sigh... :-( Fixing that is work for another time...
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Luca Ceresoli <luca@lucaceresoli.net>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Cc: Peter Korsgaard <jacmet@uclibc.org>
>
> ---
> Changes v1 -> v2:
> - drop the 'redistribute == ignore', it does not exist yet
> ---
> package/pkg-generic.mk | 36 ++++++++++++++++++++++++++----------
> 1 file changed, 26 insertions(+), 10 deletions(-)
>
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index e69c970..832045e 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -428,6 +428,14 @@ ifndef $(2)_SOURCE
> endif
> endif
>
> +# If FOO_ACTUAL_SOURCE_TARBALL is explicitly defined, it means FOO_SOURCE is
> +# indeed a binary (e.g. external toolchain) and FOO_ACTUAL_SOURCE_TARBALL/_SITE
> +# point to the actual sources tarball. Use the actual sources for legal-info.
> +# For most packages the FOO_SITE/FOO_SOURCE pair points to real source code,
> +# so these are the defaults for FOO_ACTUAL_*.
> +$(2)_ACTUAL_SOURCE_TARBALL ?= $$($(2)_SOURCE)
> +$(2)_ACTUAL_SOURCE_SITE ?= $$(call qstrip,$$($(2)_SITE))
This is not really related to this patch (it was like that in the original),
but why do we qstrip here?
> +
> ifndef $(2)_PATCH
> ifdef $(3)_PATCH
> $(2)_PATCH = $$($(3)_PATCH)
> @@ -627,6 +635,10 @@ $(1)-depends: $$($(2)_FINAL_DEPENDENCIES)
>
> $(1)-source: $$($(2)_TARGET_SOURCE)
>
> +$(1)-all-source: $(1)-legal-source
> +
> +$(1)-legal-source: $(1)-source
As noted by Luca, we're missing a -legal-info -> legal-source dependency here.
> +
> $(1)-source-check:
> $$(foreach p,$$($(2)_ALL_DOWNLOADS),$$(call SOURCE_CHECK,$$(p))$$(sep))
>
> @@ -764,13 +776,19 @@ endif
> endif
> endif
>
> -# If FOO_ACTUAL_SOURCE_TARBALL is explicitly defined, it means FOO_SOURCE is
> -# indeed a binary (e.g. external toolchain) and FOO_ACTUAL_SOURCE_TARBALL/_SITE
> -# point to the actual sources tarball. Use the actual sources for legal-info.
> -# For most packages the FOO_SITE/FOO_SOURCE pair points to real source code,
> -# so these are the defaults for FOO_ACTUAL_*.
> -$(2)_ACTUAL_SOURCE_TARBALL ?= $$($(2)_SOURCE)
> -$(2)_ACTUAL_SOURCE_SITE ?= $$(call qstrip,$$($(2)_SITE))
> +# Download actual sources if they differ from the extracted sources
> +# (e.g. for external toolchains)
> +#
> +# We need to provide PKG and PKGDIR, because there's no .stamp file for
> +# the legal-info step.
> +$(1)-legal-source: PKG=$(2)
> +$(1)-legal-source: PKGDIR=$(pkgdir)
> +$(1)-legal-source:
> +ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),)
> +ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
> + $$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
Actually we should have the same kind of logic here as in _ALL_DOWNLOADS, to
allow for multiple ACTUAL_SOURCE_TARBALLs and different SITEs. And that would
also remove the need for the ACTUAL_SOURCE_SITE. And if we use a foreach, it
would remove the need to check for an empty TARBALL. But of course, all that is
not for this patch :-)
> +endif # actuall sources != sources
> +endif # actuall source != ""
>
> # legal-info: produce legally relevant info.
> $(1)-legal-info:
> @@ -802,9 +820,6 @@ else
> # Other packages
>
> ifeq ($$($(2)_REDISTRIBUTE),YES)
> -ifneq ($$($(2)_ACTUAL_SOURCE_TARBALL),$$($(2)_SOURCE))
> - $$(call DOWNLOAD,$$($(2)_ACTUAL_SOURCE_SITE)/$$($(2)_ACTUAL_SOURCE_TARBALL))
> -endif
> # Copy the source tarball
> $$(Q)$$(call hardlink-copy,\
> $$(DL_DIR)/$$($(2)_ACTUAL_SOURCE_TARBALL),\
> @@ -907,6 +922,7 @@ endif
> $(1)-show-depends \
> $(1)-show-version \
> $(1)-source \
> + $(1)-legal-source \
The rest of .PHONY is kept alphabetically ordered...
Regards,
Arnout
> $(1)-source-check
>
> ifeq ($$(patsubst %/,ERROR,$$($(2)_SITE)),ERROR)
>
--
Arnout Vandecappelle arnout at mind be
Senior Embedded Software Architect +32-16-286500
Essensium/Mind http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
next prev parent reply other threads:[~2015-12-16 23:19 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-13 18:35 [Buildroot] [PATCH 0/13 v2] legal-info improvements and completeness (branch yem/legal-2) Yann E. MORIN
2015-12-13 18:35 ` [Buildroot] [PATCH 01/13 v2] core/legal-info: update the legal-info report header Yann E. MORIN
2015-12-16 22:20 ` Arnout Vandecappelle
2015-12-13 18:35 ` [Buildroot] [PATCH 02/13 v2] core/pkg-utils: add macro to hardlink-or-copy Yann E. MORIN
2015-12-16 22:21 ` Arnout Vandecappelle
2015-12-13 18:35 ` [Buildroot] [PATCH 03/13 v2] core/legal-info: use the macro to install source archives Yann E. MORIN
2015-12-16 22:23 ` Arnout Vandecappelle
2015-12-13 18:35 ` [Buildroot] [PATCH 04/13 v2] core/legal-info: ensure legal-info works in off-line mode Yann E. MORIN
2015-12-16 11:30 ` Luca Ceresoli
2015-12-16 22:47 ` Luca Ceresoli
2015-12-16 23:05 ` Yann E. MORIN
2015-12-16 23:09 ` Arnout Vandecappelle
2015-12-16 23:13 ` Yann E. MORIN
2015-12-16 23:19 ` Arnout Vandecappelle [this message]
2015-12-18 22:11 ` Yann E. MORIN
2015-12-18 22:30 ` Yann E. MORIN
2015-12-13 18:35 ` [Buildroot] [PATCH 05/13 v2] core/pkg-generic: add variable to store the package rawname-version Yann E. MORIN
2015-12-16 12:07 ` Luca Ceresoli
2015-12-16 23:44 ` Arnout Vandecappelle
2015-12-13 18:35 ` [Buildroot] [PATCH 06/13 v2] core/legal-info: install source archives in their own sub-dir Yann E. MORIN
2015-12-16 23:56 ` Arnout Vandecappelle
2015-12-18 22:53 ` Yann E. MORIN
2015-12-19 0:02 ` Arnout Vandecappelle
2015-12-13 18:35 ` [Buildroot] [PATCH 07/13 v2] core/legal-info: add package version to license directory Yann E. MORIN
2015-12-16 14:21 ` Luca Ceresoli
2015-12-13 18:35 ` [Buildroot] [PATCH 08/13 v2] core/apply-patches: store full path of applied patches Yann E. MORIN
2015-12-17 10:44 ` Luca Ceresoli
2015-12-13 18:35 ` [Buildroot] [PATCH 09/13 v2] core/legal-info: also save patches Yann E. MORIN
2015-12-17 10:45 ` Luca Ceresoli
2015-12-18 23:07 ` Yann E. MORIN
2015-12-13 18:35 ` [Buildroot] [PATCH 10/13 v2] core/legal-info: also save extra downloads Yann E. MORIN
2015-12-17 10:57 ` Luca Ceresoli
2015-12-13 18:35 ` [Buildroot] [PATCH 11/13 v2] core/legal-info: generate a hash of all saved files Yann E. MORIN
2015-12-13 18:35 ` [Buildroot] [PATCH 12/13 v2] core/legal-info: allow ignoring packages from the legal-info Yann E. MORIN
2015-12-13 18:35 ` [Buildroot] [PATCH 13/13 v2] core/pkg-virtual: ignore from legal-info output Yann E. MORIN
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5671F164.3080504@mind.be \
--to=arnout@mind.be \
--cc=buildroot@busybox.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox