Messages in this thread Patch in this message | | | Date | Wed, 22 Mar 2000 15:25:46 +0000 | From | Andrew Morton <> | Subject | [patch] mkdep.c |
| |
If you build a kernel and then remove some source files, the next kernel build will silently succeed, using the existing .o files.
bix:/usr/src/linux> make bzImage bix:/usr/src/linux> rm kernel/sched.c kernel/dma.c kernel/fork.c ... bix:/usr/src/linux> make bzImage # This works!
The attached patch teaches mkdep.c to make 'filename.o' dependent upon 'filename.[Sc]'
-akpm---- linux-2.3.99-pre1/scripts/mkdep.c Fri Jan 14 13:03:58 2000 +++ linux.akpm/scripts/mkdep.c Thu Mar 23 02:15:33 2000 @@ -18,6 +18,10 @@ * the definition is inactivated, but I still used it. It turns out this * actually happens a few times in the kernel source. The simple way to * fix this problem is to remove this particular optimization. + * + * 2.3.99-pre1, Andrew Morton <andrewm@uow.edu.au> + * - Changed so that 'filename.o' depends upon 'filename.[cS]'. This is so that + * missing source files are noticed, rather than silently ignored. */ #include <ctype.h> @@ -47,6 +51,8 @@ }; +/* Current input file */ +static const char *g_filename; /* * This records all the configuration options seen. @@ -58,7 +64,16 @@ int size_config = 0; int len_config = 0; - +static void +do_depname(void) +{ + if (!hasdep) { + hasdep = 1; + printf("%s:", depname); + if (g_filename) + printf(" \\\n %s", g_filename); + } +} /* * Grow the configuration string to a desired length. @@ -193,10 +208,7 @@ if (access(path->buffer, F_OK) != 0) return; - if (!hasdep) { - hasdep = 1; - printf("%s:", depname); - } + do_depname(); printf(" \\\n %s", path->buffer); } @@ -227,10 +239,7 @@ define_config(pc, len); - if (!hasdep) { - hasdep = 1; - printf("%s: ", depname); - } + do_depname(); printf(" \\\n $(wildcard %s.h)", path_array[0].buffer); } @@ -513,7 +522,8 @@ hasdep = 0; clear_config(); state_machine(map, map+st.st_size); - if (hasdep) { + if (hasdep) + { puts(command); if (*command) define_precious(filename); @@ -549,11 +559,13 @@ while (--argc > 0) { const char * filename = *++argv; const char * command = __depname; + g_filename = 0; len = strlen(filename); memcpy(depname, filename, len+1); if (len > 2 && filename[len-2] == '.') { if (filename[len-1] == 'c' || filename[len-1] == 'S') { depname[len-1] = 'o'; + g_filename = filename; command = ""; } } | |