forked from mirrors/linux
		
	kbuild: Fix computing srcversion for modules
Recent change to fixdep:
    commit b7bd182176
    Author: Michal Marek <mmarek@suse.cz>
    Date:   Thu Feb 17 15:13:54 2011 +0100
    fixdep: Do not record dependency on the source file itself
changed the format of the *.cmd files without realizing that it is also
used by modpost. Put the path to the source file to the file back, in a
special variable, so that modpost sees all source files when calculating
srcversion for modules.
Reported-and-tested-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
			
			
This commit is contained in:
		
							parent
							
								
									e8444a3e3b
								
							
						
					
					
						commit
						7840fea200
					
				
					 2 changed files with 30 additions and 8 deletions
				
			
		|  | @ -309,6 +309,11 @@ static void do_config_file(const char *filename) | |||
| 	close(fd); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Important: The below generated source_foo.o and deps_foo.o variable | ||||
|  * assignments are parsed not only by make, but also by the rather simple | ||||
|  * parser in scripts/mod/sumversion.c. | ||||
|  */ | ||||
| static void parse_dep_file(void *map, size_t len) | ||||
| { | ||||
| 	char *m = map; | ||||
|  | @ -323,7 +328,6 @@ static void parse_dep_file(void *map, size_t len) | |||
| 		exit(1); | ||||
| 	} | ||||
| 	memcpy(s, m, p-m); s[p-m] = 0; | ||||
| 	printf("deps_%s := \\\n", target); | ||||
| 	m = p+1; | ||||
| 
 | ||||
| 	clear_config(); | ||||
|  | @ -343,12 +347,15 @@ static void parse_dep_file(void *map, size_t len) | |||
| 		    strrcmp(s, "arch/um/include/uml-config.h") && | ||||
| 		    strrcmp(s, ".ver")) { | ||||
| 			/*
 | ||||
| 			 * Do not output the first dependency (the | ||||
| 			 * source file), so that kbuild is not confused | ||||
| 			 * if a .c file is rewritten into .S or vice | ||||
| 			 * versa. | ||||
| 			 * Do not list the source file as dependency, so that | ||||
| 			 * kbuild is not confused if a .c file is rewritten | ||||
| 			 * into .S or vice versa. Storing it in source_* is | ||||
| 			 * needed for modpost to compute srcversions. | ||||
| 			 */ | ||||
| 			if (!first) | ||||
| 			if (first) { | ||||
| 				printf("source_%s := %s\n\n", target, s); | ||||
| 				printf("deps_%s := \\\n", target); | ||||
| 			} else | ||||
| 				printf("  %s \\\n", s); | ||||
| 			do_config_file(s); | ||||
| 		} | ||||
|  |  | |||
|  | @ -300,8 +300,8 @@ static int is_static_library(const char *objfile) | |||
| 		return 0; | ||||
| } | ||||
| 
 | ||||
| /* We have dir/file.o.  Open dir/.file.o.cmd, look for deps_ line to
 | ||||
|  * figure out source file. */ | ||||
| /* We have dir/file.o.  Open dir/.file.o.cmd, look for source_ and deps_ line
 | ||||
|  * to figure out source files. */ | ||||
| static int parse_source_files(const char *objfile, struct md4_ctx *md) | ||||
| { | ||||
| 	char *cmd, *file, *line, *dir; | ||||
|  | @ -340,6 +340,21 @@ static int parse_source_files(const char *objfile, struct md4_ctx *md) | |||
| 	*/ | ||||
| 	while ((line = get_next_line(&pos, file, flen)) != NULL) { | ||||
| 		char* p = line; | ||||
| 
 | ||||
| 		if (strncmp(line, "source_", sizeof("source_")-1) == 0) { | ||||
| 			p = strrchr(line, ' '); | ||||
| 			if (!p) { | ||||
| 				warn("malformed line: %s\n", line); | ||||
| 				goto out_file; | ||||
| 			} | ||||
| 			p++; | ||||
| 			if (!parse_file(p, md)) { | ||||
| 				warn("could not open %s: %s\n", | ||||
| 				     p, strerror(errno)); | ||||
| 				goto out_file; | ||||
| 			} | ||||
| 			continue; | ||||
| 		} | ||||
| 		if (strncmp(line, "deps_", sizeof("deps_")-1) == 0) { | ||||
| 			check_files = 1; | ||||
| 			continue; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Michal Marek
						Michal Marek