fdc5ad1588
The configure step of the busybox package performs 'make oldconfig', which causes the .config file to be updated. Thus, the .config file is more recent than our stamp file .stamp_kconfig_fixup_done. On a subsequent build, our dependency rules would kick in, and run the config fixup again, thus kicking in the package's configure, build and install steps yet once more, that, ad infinitum. One solution is to modify kconfig-package to introduce an explicit touch of the .kconfig_fixup_config_done stamp file, as post-configure hook. Another solution, implemented by this patch, is to move the oldconfig call from the package's .mk file to the kconfig-package infrastructure and make sure it is done as part of the fixup commands. This way, the stamp file will only be touched once, after the full fixup (including oldconfig) and no endless rebuilds will occur. Reported-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Suggested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> Tested-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
78 lines
3.1 KiB
Makefile
78 lines
3.1 KiB
Makefile
################################################################################
|
|
# Kconfig package infrastructure
|
|
#
|
|
# This file implements an infrastructure that eases development of
|
|
# package .mk files for packages that use kconfig for configuration files.
|
|
# It is based on the generic-package infrastructure, and inherits all of its
|
|
# features.
|
|
#
|
|
# See the Buildroot documentation for details on the usage of this
|
|
# infrastructure.
|
|
#
|
|
################################################################################
|
|
|
|
################################################################################
|
|
# inner-kconfig-package -- generates the make targets needed to support a
|
|
# kconfig package
|
|
#
|
|
# argument 1 is the lowercase package name
|
|
# argument 2 is the uppercase package name, including a HOST_ prefix
|
|
# for host packages
|
|
# argument 3 is the uppercase package name, without the HOST_ prefix
|
|
# for host packages
|
|
# argument 4 is the type (target or host)
|
|
################################################################################
|
|
|
|
define inner-kconfig-package
|
|
|
|
# Call the generic package infrastructure to generate the necessary
|
|
# make targets.
|
|
# Note: this must be done _before_ attempting to use $$($(2)_DIR) in a
|
|
# dependency expression
|
|
$(call inner-generic-package,$(1),$(2),$(3),$(4))
|
|
|
|
# Default values
|
|
$(2)_KCONFIG_EDITORS ?= menuconfig
|
|
$(2)_KCONFIG_OPT ?=
|
|
$(2)_KCONFIG_FIXUP_CMDS ?=
|
|
|
|
# FOO_KCONFIG_FILE is required
|
|
ifndef $(2)_KCONFIG_FILE
|
|
$$(error Internal error: no value specified for $(2)_KCONFIG_FILE)
|
|
endif
|
|
|
|
# The .config file is obtained by copying it from the specified source
|
|
# configuration file, after the package has been patched.
|
|
$$($(2)_DIR)/.config: $$($(2)_KCONFIG_FILE) | $(1)-patch
|
|
$$(INSTALL) -m 0644 $$($(2)_KCONFIG_FILE) $$($(2)_DIR)/.config
|
|
|
|
# In order to get a usable, consistent configuration, some fixup may be needed.
|
|
# The exact rules are specified by the package .mk file.
|
|
$$($(2)_DIR)/.stamp_kconfig_fixup_done: $$($(2)_DIR)/.config
|
|
$$($(2)_KCONFIG_FIXUP_CMDS)
|
|
@yes "" | $$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_DIR) \
|
|
$$($(2)_KCONFIG_OPT) oldconfig
|
|
$$(Q)touch $$@
|
|
|
|
# Before running configure, the configuration file should be present and fixed
|
|
$$($(2)_TARGET_CONFIGURE): $$($(2)_DIR)/.stamp_kconfig_fixup_done
|
|
|
|
# Configuration editors (menuconfig, ...)
|
|
$$(addprefix $(1)-,$$($(2)_KCONFIG_EDITORS)): $$($(2)_DIR)/.stamp_kconfig_fixup_done
|
|
$$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_DIR) \
|
|
$$($(2)_KCONFIG_OPT) $$(subst $(1)-,,$$@)
|
|
rm -f $$($(2)_DIR)/.stamp_{kconfig_fixup_done,configured,built}
|
|
rm -f $$($(2)_DIR)/.stamp_{target,staging}_installed
|
|
|
|
# Target to copy back the configuration to the source configuration file
|
|
$(1)-update-config: $$($(2)_DIR)/.stamp_kconfig_fixup_done
|
|
cp -f $$($(2)_DIR)/.config $$($(2)_KCONFIG_FILE)
|
|
|
|
endef # inner-kconfig-package
|
|
|
|
################################################################################
|
|
# kconfig-package -- the target generator macro for kconfig packages
|
|
################################################################################
|
|
|
|
kconfig-package = $(call inner-kconfig-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
|