core/pkg-kconfig: do not override @D
authorYann E. MORIN <yann.morin.1998@free.fr>
Wed, 22 Jul 2015 14:58:52 +0000 (16:58 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 22 Jul 2015 15:25:11 +0000 (17:25 +0200)
commit273031ca02459efa430bf2b8ff3ca0dd9232d99a
tree061da389ec4fd8f27118afe42fc13cb379cd4cf6
parent76a964be7192601f1f2b356ae322b5d0891a3ef9
core/pkg-kconfig: do not override @D

Currently, we override @D for the kconfig configurators, so the fixup
commands can use $(@D); otherwise @D would be simply '.' because it is
not a real file in the package build dir.

However, this breaks the soon-to-be-introduced linux-backports package,
which needs to have a dependency on the linux package to be configured.

The underlying reason is that @D is an automatic variable that is always
set by make to the directory part of the target of the rule. However,
automatic variables loose their "automatic" property when they are
manually set.

Furthermore, a variable that is defined for a rule is inherited by all
dependencies of that rule, so our manually-set @D is inherited all the
way down the dependency chain of linux-backports, down to the linux' own
.config rule, which is thus run with @D pointing to linux-backports'
build dir, not linux'.

Fix that by using a "static pattern rule", redirecting the configurators
to an intermediate stamp-like file which path is in the package build
dir, so we get a valid @D from the onset, without having to manually
fiddle with it.

Thanks to Arnout for suggesting that in the first place. Sorry I did
reject it as "too complex" when it was in fact the best solution.

Suggested-by: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Arnout Vandecappelle <arnout@mind.be>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/pkg-kconfig.mk