Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v4 3/3] core/pkg-kconfig: Use oldnoconfig when possible
Date: Mon, 18 Apr 2016 23:16:54 +0200	[thread overview]
Message-ID: <20160418211654.GF3495@free.fr> (raw)
In-Reply-To: <20160418210802.GE3495@free.fr>

Romain, All,

On 2016-04-18 23:08 +0200, Yann E. MORIN spake thusly:
> On 2016-04-18 11:23 +0200, Romain Izard spake thusly:
> > Using 'yes "" | make oldconfig' to regenerate a .config file from an
> > existing defconfig does not work reliably in all cases. Specifically, it
> > does not work well with tristate choice entries.
> > 
> > The correct way to do it is to use 'make olddefconfig', but this target
> > is not supported in projects that use an old version of kconfig. As
> > most projects do not use tristate entries, there is no need for them to
> > upgrade.
> > 
> > 'oldnoconfig' is an alias for 'olddefconfig', but it also is the only
> > name for this target between Linux versions 2.6.36 and 3.6.
> > 
> > Try to use 'oldnoconfig' by default, using 'oldconfig' as a fallback
> > 
> > Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
> > Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>
> 
> Usually, reviewd-by tags are staged after the signed-off-by tag, as in a
> temporal mark: first signed-off-by, then reviewed.
> 
> > ---
> > Changelog:
> > v1: New patch
> > v2: Use oldnoconfig instead of olddefconfig
> >     Fix silent mode
> >     Change the pattern in both places where it is used
> >     Use a macro to avoid redundancy
> > v3: Do not use $(call ...)
> >     Use the $(2)_KCONFIG_MAKE variable
> > v4: No change
> > 
> >  package/pkg-kconfig.mk | 18 ++++++++++++++----
> >  1 file changed, 14 insertions(+), 4 deletions(-)
> > 
> > diff --git a/package/pkg-kconfig.mk b/package/pkg-kconfig.mk
> > index 4033915..e04cfd5 100644
> > --- a/package/pkg-kconfig.mk
> > +++ b/package/pkg-kconfig.mk
> > @@ -60,18 +60,28 @@ $$($(2)_KCONFIG_FILE) $$($(2)_KCONFIG_FRAGMENT_FILES): | $(1)-patch
> >  $(2)_KCONFIG_MAKE = \
> >  	$$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_DIR) $$($(2)_KCONFIG_OPTS)
> >  
> > +# The correct way to regenerate a .config file is to use 'make olddefconfig'.
> > +# For historical reasons, the target name is 'oldnoconfig' between Linux kernel
> > +# versions 2.6.36 and 3.6, and remains as an alias in later versions.
> > +# In older versions, and in some other projects that use kconfig, the target is
> > +# not supported at all, and we use 'yes "" | make oldconfig' as a fallback
> > +# only, as this can fail in complex cases.
> > +define $(2)_REGEN_DOT_CONFIG
> > +	$$(Q)$$($(2)_KCONFIG_MAKE) oldnoconfig || \
> > +		(yes "" | $$($(2)_KCONFIG_MAKE) oldconfig)
> 
> What I don't much like here, is that we conflate two things:
>   - a non-zero return code because of a missing oldnoconfig,
>   - a non-zero return code because of an error found by olnoconfig.
> 
> What I would have loved however, would be a way to detect whether
> oldnoconfig (better, olddefconfig) was supported before calling it.
> Maybe something along the lines of:
> 
>     if [ -n "`$$($(2)_KCONFIG_MAKE) -pqn .DEFAULT 2>/dev/null |grep -E '^olddefconfig'`" ]; then \

Hmmm, incomplete (missing colon). Should have been:

    ... |grep -E '^olddefconfig:' >/dev/null

>         $$($(2)_KCONFIG_MAKE) olddefconfig || exit 1; \
>     elif [ -n "`$$($(2)_KCONFIG_MAKE) -pqn .DEFAULT |grep -E '^oldnoconfig'`" ]; then \

Ditto, with oldnoconfig...

Regards,
Yann E. MORIN.

>         $$($(2)_KCONFIG_MAKE) oldnoconfig || exit 1; \
>     else
>         (yes "" | $$($(2)_KCONFIG_MAKE) oldconfig) || exit 1; \
>     fi
>         
> Yes, this is more code, less compact, but it is more systematic. At the
> very least, it would not fallback to the yes|oldconfig trick in case
> old{def,no}config do exist but fail, which we do want to catch.
> 
> BTW, the make trick above is highly (as in: almost identical) from the
> bash-autocompletion package.
> 
> Regards,
> Yann E. MORIN.
> 
> > +endef
> > +
> >  # The specified source configuration file and any additional configuration file
> >  # fragments are merged together to .config, after the package has been patched.
> >  # Since the file could be a defconfig file it needs to be expanded to a
> > -# full .config first. We use 'make oldconfig' because this can be safely
> > -# done even when the package does not support defconfigs.
> > +# full .config first.
> >  $$($(2)_DIR)/.config: $$($(2)_KCONFIG_FILE) $$($(2)_KCONFIG_FRAGMENT_FILES)
> >  	$$(Q)$$(if $$($(2)_KCONFIG_DEFCONFIG), \
> >  		$$($(2)_KCONFIG_MAKE) $$($(2)_KCONFIG_DEFCONFIG), \
> >  		cp $$($(2)_KCONFIG_FILE) $$(@))
> >  	$$(Q)support/kconfig/merge_config.sh -m -O $$(@D) \
> >  		$$(@) $$($(2)_KCONFIG_FRAGMENT_FILES)
> > -	$$(Q)yes "" | $$($(2)_KCONFIG_MAKE) oldconfig
> > +	$$($(2)_REGEN_DOT_CONFIG)
> >  
> >  # If _KCONFIG_FILE or _KCONFIG_FRAGMENT_FILES exists, this dependency is
> >  # already implied, but if we only have a _KCONFIG_DEFCONFIG we have to add
> > @@ -82,7 +92,7 @@ $$($(2)_DIR)/.config: | $(1)-patch
> >  # The exact rules are specified by the package .mk file.
> >  define $(2)_FIXUP_DOT_CONFIG
> >  	$$($(2)_KCONFIG_FIXUP_CMDS)
> > -	$$(Q)yes "" | $$($(2)_KCONFIG_MAKE) oldconfig
> > +	$$($(2)_REGEN_DOT_CONFIG)
> >  	$$(Q)touch $$($(2)_DIR)/.stamp_kconfig_fixup_done
> >  endef
> >  
> > -- 
> > 2.5.0
> > 
> 
> -- 
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2016-04-18 21:16 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-18  9:23 [Buildroot] [PATCH v4 0/3] core/pkg-kconfig: Fix .config generation Romain Izard
2016-04-18  9:23 ` [Buildroot] [PATCH v4 1/3] core/pkg-kconfig: Factorize make commands Romain Izard
2016-04-18 20:32   ` Yann E. MORIN
2016-04-18 21:17   ` Thomas Petazzoni
2016-04-18  9:23 ` [Buildroot] [PATCH v4 2/3] core/pkg-kconfig: Do not use $(call ...) without parameters Romain Izard
2016-04-18 20:33   ` Yann E. MORIN
2016-04-18 21:17   ` Thomas Petazzoni
2016-04-18  9:23 ` [Buildroot] [PATCH v4 3/3] core/pkg-kconfig: Use oldnoconfig when possible Romain Izard
2016-04-18 21:08   ` Yann E. MORIN
2016-04-18 21:16     ` Yann E. MORIN [this message]
2016-04-19  9:11     ` Romain Izard
2016-04-19 17:40       ` Yann E. MORIN
2016-04-19 17:58         ` Yann E. MORIN
2016-04-20  7:14           ` Romain Izard

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=20160418211654.GF3495@free.fr \
    --to=yann.morin.1998@free.fr \
    --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