|
@@ -60,18 +60,44 @@ $$($(2)_KCONFIG_FILE) $$($(2)_KCONFIG_FRAGMENT_FILES): | $(1)-patch
|
|
|
$(2)_KCONFIG_MAKE = \
|
|
|
$$($(2)_MAKE_ENV) $$(MAKE) -C $$($(2)_DIR) $$($(2)_KCONFIG_OPTS)
|
|
|
|
|
|
+# $(2)_KCONFIG_MAKE may already rely on shell expansion. As the $() syntax
|
|
|
+# of the shell conflicts with Make's own syntax, this means that backticks
|
|
|
+# are used with those shell constructs. Unfortunately, the backtick syntax
|
|
|
+# does not nest, and we need to use Make instead of the shell to handle
|
|
|
+# conditions.
|
|
|
+
|
|
|
+# A recursively expanded variable is necessary, to be sure that the shell
|
|
|
+# command is called when the rule is processed during the build and not
|
|
|
+# when the rule is created when parsing all packages.
|
|
|
+$(2)_KCONFIG_RULES = \
|
|
|
+ $$(shell $$($(2)_KCONFIG_MAKE) -pn config 2>/dev/null | \
|
|
|
+ sed 's/^\([_0-9a-zA-Z]*config\):.*/\1/ p; d')
|
|
|
+
|
|
|
+# 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
|
|
|
+ $$(if $$(filter olddefconfig,$$($(2)_KCONFIG_RULES)),
|
|
|
+ $$(Q)$$($(2)_KCONFIG_MAKE) olddefconfig,
|
|
|
+ $$(if $$(filter oldnoconfig,$$($(2)_KCONFIG_RULES)),
|
|
|
+ $$(Q)$$($(2)_KCONFIG_MAKE) oldnoconfig,
|
|
|
+ $$(Q)(yes "" | $$($(2)_KCONFIG_MAKE) oldconfig)))
|
|
|
+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 +108,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
|
|
|
|