[Buildroot] [PATCH v4 3/3] core/pkg-kconfig: Use oldnoconfig when possible

Romain Izard romain.izard.pro at gmail.com
Tue Apr 19 09:11:46 UTC 2016


Hi Yann,

2016-04-18 23:08 GMT+02:00 Yann E. MORIN <yann.morin.1998 at free.fr>:
> Romain, All,
>
> On 2016-04-18 11:23 +0200, Romain Izard spake thusly:
>
>> +# 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 \
>         $$($(2)_KCONFIG_MAKE) olddefconfig || exit 1; \
>     elif [ -n "`$$($(2)_KCONFIG_MAKE) -pqn .DEFAULT |grep -E '^oldnoconfig'`" ]; then \
>         $$($(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.

I see the idea, but the specific implementation is not working: the
kernel's Makefile targets are dynamic, and the targets we want to check
are only present when the target we try to build matches %config.

I will try to find a syntax that works for all projects that use the
kconfig-package infrastructure.

Best regards,
-- 
Romain Izard



More information about the buildroot mailing list