On Friday 24 October 2008 12:45:04 Rafael J. Wysocki wrote:
This should reproduce it (whether or not it's a use-case we care about is
another matter). First, make sure your include/asm symlink has been removed,
then execute the following sequence:
git reset --hard v2.6.27 ; git clean -d -f
git status ("Nothing to commit")
cp /path/to/config .config
make oldconfig prepare
git clean -d -f ; git reset --hard
git status ("Nothing to commit")
Observe at this point that include/asm is valid and points to include/asm-x86,
despite the clean and reset (I guess this file is being ignored). Now:
git reset --hard v2.6.28-rc1 (Or whatever other method you might choose)
git clean -d -f (Removes include/asm-x86)
Observe at this point that include/asm is now invalid, and still points to the
removed include/asm-x86 directory.
cp /path/to/config .config
make oldconfig prepare
Should fail at this point:
scripts/kconfig/conf -o arch/x86/Kconfig
#
# configuration written to .config
#
scripts/kconfig/conf -s arch/x86/Kconfig
CHK include/linux/version.h
UPD include/linux/version.h
CHK include/linux/utsrelease.h
UPD include/linux/utsrelease.h
CC kernel/bounds.s
GEN include/linux/bounds.h
CC arch/x86/kernel/asm-offsets.s
GEN include/asm/asm-offsets.h
/bin/sh: include/asm/asm-offsets.h: No such file or directory
make[2]: *** [include/asm/asm-offsets.h] Error 1
make[1]: *** [prepare0] Error 2
make: *** [prepare] Error 2
Can you confirm?
I checked out Makefile and I believe it occurs because the current checks only
make sure a symlink exists, and if it does exist that its target matches up
with the selected architecture. It doesn't actually check the destination of
the symlink is valid.
I'd suggest that it should do that too, and if the destination doesn't exist,
re-write the symlink when it does "mkdir include/asm-x86" further down, but
I'm not a kbuild expert.
--
Cheers,
Alistair.
--