changeset 528:71f438cde285

Make compiler wrapper parse -M options correctly, so uClibc make utils works.
author Rob Landley <rob@landley.net>
date Mon, 08 Dec 2008 20:59:20 -0600
parents 9e692a87a763
children 71690bef8287
files sources/toys/gcc-uClibc.c
diffstat 1 files changed, 11 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/sources/toys/gcc-uClibc.c	Mon Dec 08 00:14:37 2008 -0600
+++ b/sources/toys/gcc-uClibc.c	Mon Dec 08 20:59:20 2008 -0600
@@ -99,7 +99,7 @@
 	int linking = 1, use_static_linking = 0;
 	int use_stdinc = 1, use_start = 1, use_stdlib = 1, use_pic = 0;
 	int source_count = 0, verbose = 0;
-	int i, argcnt, liblen, lplen, sawM = 0, sawdotoa = 0, sawcES = 0;
+	int i, argcnt, liblen, lplen;
 	char **gcc_argv, **libraries, **libpath;
 	char *dlstr, *incstr, *devprefix, *libstr;
 	char *cc, *rpath_link, *rpath;
@@ -201,13 +201,20 @@
 	for ( i = 1 ; i < argc ; i++ ) {
 		if (argv[i][0] == '-' && argv[i][1]) { /* option */
 			switch (argv[i][1]) {
+				case 'M':	    /* generate dependencies */
+				{
+					char *p = argv[i];
+
+					// -M and -MM imply -E and thus no linking
+					// Other -MX options _don't_, including -MMD.
+					if (p[2] && (p[2]!='M' || p[3])) break;
+				}
+				// fall through
+
 				case 'c':		/* compile or assemble */
 				case 'S':		/* generate assembler code */
 				case 'E':		/* preprocess only */
-				case 'M':	    /* generate dependencies */
 					linking = 0;
-					if (argv[i][1] == 'M') sawM = 1;
-					else sawcES = 1;
 					break;
 
 				case 'L': 		/* library path */
@@ -364,16 +371,10 @@
 					break;
 			}
 		} else {				/* assume it is an existing source file */
-			char *p = argv[i] + strlen(argv[i]) - 2;
-			if (p > argv[i] && sawM && (!strcmp(p, ".o") || !strcmp(p, ".a")))
-				  sawdotoa = 1;
 			++source_count;
 		}
 	}
 
-	if (sawdotoa && sawM && !sawcES)
-		linking = 1;
-
 	argcnt = 0;
 	if (ctor_dtor) {
 		asprintf(crtbegin_path, "%s/gcc/lib/crtbegin.o", devprefix);