| From stable-bounces@linux.kernel.org Sun Apr 1 11:41:56 2007 |
| From: Jan Beulich <jbeulich@novell.com> |
| Date: Sun, 1 Apr 2007 20:41:26 +0200 |
| Subject: kbuild: fix dependency generation |
| To: Oleg Verych <olecom@flower.upol.cz> |
| Cc: Andrew Morton <akpm@osdl.org>, Linus Torvalds <torvalds@osdl.org>, stable@kernel.org, Jan Beulich <jbeulich@novell.com> |
| Message-ID: <20070401184126.GA10113@uranus.ravnborg.org> |
| Content-Disposition: inline |
| |
| From: Jan Beulich <jbeulich@novell.com> |
| |
| Commit 2e3646e51b2d6415549b310655df63e7e0d7a080 changed the way |
| the split config tree is built, but failed to also adjust fixdep |
| accordingly - if changing a config option from or to m, files |
| referencing the respective CONFIG_..._MODULE (but not the |
| corresponding CONFIG_...) didn't get rebuilt. |
| |
| The problem is that trisate symbol are represent with three |
| different symbols: |
| SYMBOL=n => no symbol defined |
| SYMBOL=y => CONFIG_SYMBOL defined to '1' |
| SYMBOL=m => CONFIG_SYMBOL_MODULE defined to '1' |
| |
| But conf_split_config do not distingush between the =y and =m case, |
| so only the =y case is honoured. |
| This is fixed in fixdep so when a CONFIG symbol with |
| _MODULE is found we skip that part and only look |
| for the CONFIG_SYMBOL version. |
| |
| Signed-off-by: Jan Beulich <jbeulich@novell.com> |
| Signed-off-by: Sam Ravnborg <sam@ravnborg.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| scripts/basic/fixdep.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| --- a/scripts/basic/fixdep.c |
| +++ b/scripts/basic/fixdep.c |
| @@ -28,9 +28,11 @@ |
| * the dependency on linux/autoconf.h by a dependency on every config |
| * option which is mentioned in any of the listed prequisites. |
| * |
| - * To be exact, split-include populates a tree in include/config/, |
| - * e.g. include/config/his/driver.h, which contains the #define/#undef |
| - * for the CONFIG_HIS_DRIVER option. |
| + * kconfig populates a tree in include/config/ with an empty file |
| + * for each config symbol and when the configuration is updated |
| + * the files representing changed config options are touched |
| + * which then let make pick up the changes and the files that use |
| + * the config symbols are rebuilt. |
| * |
| * So if the user changes his CONFIG_HIS_DRIVER option, only the objects |
| * which depend on "include/linux/config/his/driver.h" will be rebuilt, |
| @@ -245,6 +247,8 @@ void parse_config_file(char *map, size_t |
| continue; |
| |
| found: |
| + if (!memcmp(q - 7, "_MODULE", 7)) |
| + q -= 7; |
| use_config(p+7, q-p-7); |
| } |
| } |