All of lore.kernel.org
 help / color / mirror / Atom feed
From: Romain Naour <romain.naour@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH] pkg-generic: improve incorrectly used package detection
Date: Fri, 1 Jan 2016 17:49:08 +0100	[thread overview]
Message-ID: <5686AE04.7020703@gmail.com> (raw)
In-Reply-To: <1451606483-29096-1-git-send-email-yann.morin.1998@free.fr>

Hi Yann, All,

Le 01/01/2016 01:01, Yann E. MORIN a ?crit :
> From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> 
> Currently, the check that packages we build are indeed enabled is done
> at the time a package is configured.
> 
> This can come quite late in the build process, and does not provide
> direct knowledge of the real culprit for the incorrect dependency.
> 
> However, we can improve these two issues quite easily, albeit at the
> expense of a very slightly more complicated make code.
> 
> First, the check can not be done at the time we define the package, i.e.
> in the inner-generic-pacakge, because all its dependencies might have
> not been parsed yet, so we can't yet know whether it is enabled or not
> (because we can't match the package name of the dependency to its
> Kconfig variable yet).
> 
> But then, we know we have all packages definitions after we scanned the
> the bundled packages, kernel, bootloaders and toolchains, as well as the
> br2-external tree (if any).
> 
> So, at this location, we iterate through the list of enabled packages,
> and check that the packages they each depend on are indeed enabled.
> 
> This allows us to:
>  1- do the check very early, before any build action,
>  2- report on the exact offending package very easily.
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

While testing this patch with some packages enabled (efl + enlightenment), I get:

make[1]: execvp: /bin/sh: Liste d'arguments trop longue
package/pkg-generic.mk:200: recipe for target
'output/build/skeleton-undefined/.stamp_configured' failed

Any idea ?

Best regards,
Romain
> 
> ---
> Changes v2 -> v3:  (Yann)
>   - completely drop the reverse dependency list
>   - drop the pre-configure check
>   - make it Makefile code
>   - print the offending package
>   - drop Thomas' SoB, as I rewrote it entirely and completely
>     differently
> 
> Changes v1 -> v2:  (Yann)
>   - recursively scan the reverse list of dependencies to find all the
>     potential cuplrits, not only the first-level ones
> ---
>  Makefile               | 28 ++++++++++++++++++++++++++++
>  package/pkg-generic.mk | 14 --------------
>  2 files changed, 28 insertions(+), 14 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 71ace68..9139e81 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -434,6 +434,34 @@ include fs/common.mk
>  
>  include $(BR2_EXTERNAL)/external.mk
>  
> +# Now we are sure we have all the packages scanned and defined. We now
> +# check for each package in the list of enabled packages, that all its
> +# dependencies are indeed enabled.
> +#
> +# Only trigger the check for default builds. If the user forces building
> +# a package, even if not enabled in the configuration, we want to accept
> +# it.
> +#
> +ifeq ($(MAKECMDGOALS),)
> +
> +define CHECK_ONE_DEPENDENCY
> +ifeq ($$($(2)_TYPE),target)
> +ifeq ($$($(2)_IS_VIRTUAL),)
> +ifneq ($$($$($(2)_KCONFIG_VAR)),y)
> +$$(error $$($(2)_NAME) is in the dependency chain of $$($(1)_NAME) that \
> +has added it to its _DEPENDENCIES variable without selecting it or \
> +depending on it from Config.in)
> +endif
> +endif
> +endif
> +endef
> +
> +$(foreach pkg,$(call UPPERCASE,$(PACKAGES)),\
> +	$(foreach dep,$(call UPPERCASE,$($(pkg)_FINAL_ALL_DEPENDENCIES)),\
> +		$(eval $(call CHECK_ONE_DEPENDENCY,$(pkg),$(dep))$(sep))))
> +
> +endif
> +
>  dirs: $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
>  	$(HOST_DIR) $(BINARIES_DIR)
>  
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index 9e88423..1e024d3 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -182,20 +182,6 @@ $(foreach dir,$(call qstrip,$(BR2_GLOBAL_PATCH_DIR)),\
>  
>  # Configure
>  $(BUILD_DIR)/%/.stamp_configured:
> -# Only trigger the check for default builds. If the user forces
> -# building a package, even if not enabled in the configuration, we
> -# want to accept it.
> -ifeq ($(MAKECMDGOALS),)
> -	@if test "$($(PKG)_TYPE)" = "target" \
> -		-a "$($(PKG)_IS_VIRTUAL)" != "YES" \
> -		-a -z "$($($(PKG)_KCONFIG_VAR))" ; \
> -	then \
> -		echo "ERROR: $($(PKG)_NAME) is in the dependency chain of a package that has" ; \
> -		echo "added it to its _DEPENDENCIES variable (directly or indirectly)" ; \
> -		echo "without selecting it from Config.in." ; \
> -		exit 1 ; \
> -	fi
> -endif
>  	@$(call step_start,configure)
>  	@$(call MESSAGE,"Configuring")
>  	$(foreach hook,$($(PKG)_PRE_CONFIGURE_HOOKS),$(call $(hook))$(sep))
> 

  reply	other threads:[~2016-01-01 16:49 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-01  0:01 [Buildroot] [PATCH] pkg-generic: improve incorrectly used package detection Yann E. MORIN
2016-01-01 16:49 ` Romain Naour [this message]
2016-01-01 16:58   ` Yann E. MORIN
2016-01-01 17:01     ` Yann E. MORIN
2016-01-03 21:15 ` Peter Korsgaard
  -- strict thread matches above, loose matches on Subject: below --
2015-12-30 21:27 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=5686AE04.7020703@gmail.com \
    --to=romain.naour@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.